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:
parent
e23ef818ea
commit
c81dbda157
@ -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) {
|
||||
|
@ -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),
|
||||
|
4
testdata/includes_interpolation/include_with_env_variable/Taskfile.yml
vendored
Normal file
4
testdata/includes_interpolation/include_with_env_variable/Taskfile.yml
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
version: "3"
|
||||
|
||||
includes:
|
||||
include-with-env-variable: '../{{.MODULE}}/Taskfile.yml'
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user