1
0
mirror of https://github.com/go-task/task.git synced 2025-02-09 13:47:06 +02:00

feat(remote): replace env variable in include remote URL (#1610)

* feat(remote): replace env variable in include remote URL

* use templating system instead of os.ExpandEnv

* lint
This commit is contained in:
Valentin Maerten 2024-04-29 23:27:30 +02:00 committed by GitHub
parent e23ef818ea
commit c81dbda157
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 21 additions and 1 deletions

View File

@ -1200,8 +1200,10 @@ func TestIncludesInterpolation(t *testing.T) {
expectedOutput string
}{
{"include", "include", false, "include\n"},
{"include_with_env_variable", "include-with-env-variable", false, "include_with_env_variable\n"},
{"include_with_dir", "include-with-dir", false, "included\n"},
}
t.Setenv("MODULE", "included")
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {

View File

@ -11,6 +11,7 @@ import (
"gopkg.in/yaml.v3"
"github.com/go-task/task/v3/errors"
"github.com/go-task/task/v3/internal/compiler"
"github.com/go-task/task/v3/internal/filepathext"
"github.com/go-task/task/v3/internal/logger"
"github.com/go-task/task/v3/internal/templater"
@ -97,9 +98,11 @@ func (r *Reader) include(node Node) error {
// Loop over each included taskfile
_ = vertex.Taskfile.Includes.Range(func(namespace string, include *ast.Include) error {
vars := compiler.GetEnviron()
vars.Merge(vertex.Taskfile.Vars, nil)
// Start a goroutine to process each included Taskfile
g.Go(func() error {
cache := &templater.Cache{Vars: vertex.Taskfile.Vars}
cache := &templater.Cache{Vars: vars}
include = &ast.Include{
Namespace: include.Namespace,
Taskfile: templater.Replace(include.Taskfile, cache),

View File

@ -0,0 +1,4 @@
version: "3"
includes:
include-with-env-variable: '../{{.MODULE}}/Taskfile.yml'

View File

@ -48,6 +48,17 @@ tasks:
and you run `task my-remote-namespace:hello`, it will print the text: "Hello
from the remote Taskfile!" to your console.
URL is processed by the templating system, so you can reference environment variable in your URL to have authentication, for example :
```yaml
version: '3'
includes:
my-remote-namespace: https://{{.TOKEN}}@raw.githubusercontent.com/my-org/my-repo/main/Taskfile.yml
```
`TOKEN=my-token task my-remote-namespace:hello` will be resolved by Task to `https://my-token@raw.githubusercontent.com/my-org/my-repo/main/Taskfile.yml`
## Security
Running commands from sources that you do not control is always a potential