mirror of
https://github.com/go-task/task.git
synced 2025-02-13 13:59:32 +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
|
expectedOutput string
|
||||||
}{
|
}{
|
||||||
{"include", "include", false, "include\n"},
|
{"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"},
|
{"include_with_dir", "include-with-dir", false, "included\n"},
|
||||||
}
|
}
|
||||||
|
t.Setenv("MODULE", "included")
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
|
|
||||||
"github.com/go-task/task/v3/errors"
|
"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/filepathext"
|
||||||
"github.com/go-task/task/v3/internal/logger"
|
"github.com/go-task/task/v3/internal/logger"
|
||||||
"github.com/go-task/task/v3/internal/templater"
|
"github.com/go-task/task/v3/internal/templater"
|
||||||
@ -97,9 +98,11 @@ func (r *Reader) include(node Node) error {
|
|||||||
|
|
||||||
// Loop over each included taskfile
|
// Loop over each included taskfile
|
||||||
_ = vertex.Taskfile.Includes.Range(func(namespace string, include *ast.Include) error {
|
_ = 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
|
// Start a goroutine to process each included Taskfile
|
||||||
g.Go(func() error {
|
g.Go(func() error {
|
||||||
cache := &templater.Cache{Vars: vertex.Taskfile.Vars}
|
cache := &templater.Cache{Vars: vars}
|
||||||
include = &ast.Include{
|
include = &ast.Include{
|
||||||
Namespace: include.Namespace,
|
Namespace: include.Namespace,
|
||||||
Taskfile: templater.Replace(include.Taskfile, cache),
|
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
|
and you run `task my-remote-namespace:hello`, it will print the text: "Hello
|
||||||
from the remote Taskfile!" to your console.
|
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
|
## Security
|
||||||
|
|
||||||
Running commands from sources that you do not control is always a potential
|
Running commands from sources that you do not control is always a potential
|
||||||
|
Loading…
x
Reference in New Issue
Block a user