1
0
mirror of https://github.com/go-task/task.git synced 2025-06-23 00:38:19 +02:00

feat: variable inheritance tests (#2038)

This commit is contained in:
Pete Davison
2025-02-05 19:51:52 +00:00
committed by GitHub
parent 3aee0a0519
commit b5b1524d3a
49 changed files with 519 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package task_test
import ( import (
"bytes" "bytes"
"cmp"
"context" "context"
"fmt" "fmt"
"io" "io"
@ -134,8 +135,7 @@ func TestEnv(t *testing.T) {
}, },
} }
tt.Run(t) tt.Run(t)
t.Setenv("TASK_X_ENV_PRECEDENCE", "1") enableExperimentForTest(t, &experiments.EnvPrecedence, "1")
experiments.EnvPrecedence = experiments.New("ENV_PRECEDENCE")
ttt := fileContentTest{ ttt := fileContentTest{
Dir: "testdata/env", Dir: "testdata/env",
Target: "overridden", Target: "overridden",
@ -3207,6 +3207,110 @@ func TestReference(t *testing.T) {
} }
} }
func TestVarInheritance(t *testing.T) {
enableExperimentForTest(t, &experiments.EnvPrecedence, "1")
tests := []struct {
name string
want string
call string
}{
{
name: "shell",
want: "shell\nshell\n",
},
{
name: "entrypoint-global-dotenv",
want: "entrypoint-global-dotenv\nentrypoint-global-dotenv\n",
},
{
name: "entrypoint-global-vars",
want: "entrypoint-global-vars\nentrypoint-global-vars\n",
},
{
// We can't send env vars to a called task, so the env var is not overridden
name: "entrypoint-task-call-vars",
want: "entrypoint-task-call-vars\nentrypoint-global-vars\n",
},
{
// Dotenv doesn't set variables
name: "entrypoint-task-call-dotenv",
want: "entrypoint-task-call-vars\nentrypoint-task-call-dotenv\n",
},
{
name: "entrypoint-task-call-task-vars",
want: "entrypoint-task-call-task-vars\nentrypoint-task-call-task-vars\n",
},
{
// Dotenv doesn't set variables
name: "entrypoint-task-dotenv",
want: "entrypoint-global-vars\nentrypoint-task-dotenv\n",
},
{
name: "entrypoint-task-vars",
want: "entrypoint-task-vars\nentrypoint-task-vars\n",
},
// {
// // Dotenv not currently allowed in included taskfiles
// name: "included-global-dotenv",
// want: "included-global-dotenv\nincluded-global-dotenv\n",
// },
{
name: "included-global-vars",
want: "included-global-vars\nincluded-global-vars\n",
call: "included",
},
{
// We can't send env vars to a called task, so the env var is not overridden
name: "included-task-call-vars",
want: "included-task-call-vars\nincluded-global-vars\n",
call: "included",
},
{
// Dotenv doesn't set variables
// Dotenv not currently allowed in included taskfiles (but doesn't error in a task)
name: "included-task-call-dotenv",
want: "included-task-call-vars\nincluded-global-vars\n",
call: "included",
},
{
name: "included-task-call-task-vars",
want: "included-task-call-task-vars\nincluded-task-call-task-vars\n",
call: "included",
},
{
// Dotenv doesn't set variables
// Somehow dotenv is working here!
name: "included-task-dotenv",
want: "included-global-vars\nincluded-task-dotenv\n",
call: "included",
},
{
name: "included-task-vars",
want: "included-task-vars\nincluded-task-vars\n",
call: "included",
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
var buff bytes.Buffer
t.Setenv("VAR", "shell")
t.Setenv("ENV", "shell")
e := task.Executor{
Dir: fmt.Sprintf("testdata/var_inheritance/v3/%s", test.name),
Stdout: &buff,
Stderr: &buff,
Silent: true,
Force: true,
}
call := cmp.Or(test.call, "default")
require.NoError(t, e.Setup())
require.NoError(t, e.Run(context.Background(), &ast.Call{Task: call}))
assert.Equal(t, test.want, buff.String())
})
}
}
// enableExperimentForTest enables the experiment behind pointer e for the duration of test t and sub-tests, // enableExperimentForTest enables the experiment behind pointer e for the duration of test t and sub-tests,
// with the experiment being restored to its previous state when tests complete. // with the experiment being restored to its previous state when tests complete.
// //

View File

@ -0,0 +1,11 @@
version: '3'
silent: true
dotenv:
- 'global.env'
tasks:
default:
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,15 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
tasks:
default:
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,25 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
tasks:
default:
dotenv:
- 'task.env'
cmds:
- task: called-task
vars:
VAR: entrypoint-task-call-vars
called-task:
dotenv:
- 'called-task.env'
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=entrypoint-task-call-dotenv
ENV=entrypoint-task-call-dotenv

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,2 @@
VAR=entrypoint-task-dotenv
ENV=entrypoint-task-dotenv

View File

@ -0,0 +1,27 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
tasks:
default:
dotenv:
- 'task.env'
cmds:
- task: called-task
vars:
VAR: entrypoint-task-call-vars
called-task:
vars:
VAR: entrypoint-task-call-task-vars
env:
ENV: entrypoint-task-call-task-vars
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,2 @@
VAR=entrypoint-task-dotenv
ENV=entrypoint-task-dotenv

View File

@ -0,0 +1,23 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
tasks:
default:
dotenv:
- 'task.env'
cmds:
- task: called-task
vars:
VAR: entrypoint-task-call-vars
called-task:
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,2 @@
VAR=entrypoint-task-dotenv
ENV=entrypoint-task-dotenv

View File

@ -0,0 +1,17 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
tasks:
default:
dotenv:
- 'task.env'
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,2 @@
VAR=entrypoint-task-dotenv
ENV=entrypoint-task-dotenv

View File

@ -0,0 +1,21 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
tasks:
default:
dotenv:
- 'task.env'
vars:
VAR: entrypoint-task-vars
env:
ENV: entrypoint-task-vars
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,2 @@
VAR=entrypoint-task-dotenv
ENV=entrypoint-task-dotenv

View File

@ -0,0 +1,12 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
includes:
included: included.yml

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,13 @@
version: '3'
silent: true
vars:
VAR: included-global-vars
env:
ENV: included-global-vars
tasks:
default:
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,12 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
includes:
included: included.yml

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,21 @@
version: '3'
silent: true
vars:
VAR: included-global-vars
env:
ENV: included-global-vars
tasks:
default:
dotenv:
- 'task.env'
cmds:
- task: called-task
vars:
VAR: included-task-call-vars
called-task:
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=included-task-dotenv
ENV=included-task-dotenv

View File

@ -0,0 +1,12 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
includes:
included: included.yml

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,25 @@
version: '3'
silent: true
vars:
VAR: included-global-vars
env:
ENV: included-global-vars
tasks:
default:
dotenv:
- 'task.env'
cmds:
- task: called-task
vars:
VAR: included-task-call-vars
called-task:
vars:
VAR: included-task-call-task-vars
env:
ENV: included-task-call-task-vars
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=included-task-dotenv
ENV=included-task-dotenv

View File

@ -0,0 +1,12 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
includes:
included: included.yml

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,21 @@
version: '3'
silent: true
vars:
VAR: included-global-vars
env:
ENV: included-global-vars
tasks:
default:
dotenv:
- 'task.env'
cmds:
- task: called-task
vars:
VAR: included-task-call-vars
called-task:
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=included-task-dotenv
ENV=included-task-dotenv

View File

@ -0,0 +1,12 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
includes:
included: included.yml

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,15 @@
version: '3'
silent: true
vars:
VAR: included-global-vars
env:
ENV: included-global-vars
tasks:
default:
dotenv:
- 'task.env'
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=included-task-dotenv
ENV=included-task-dotenv

View File

@ -0,0 +1,12 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
includes:
included: included.yml

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,19 @@
version: '3'
silent: true
vars:
VAR: included-global-vars
env:
ENV: included-global-vars
tasks:
default:
dotenv:
- 'task.env'
vars:
VAR: included-task-vars
env:
ENV: included-task-vars
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=included-task-dotenv
ENV=included-task-dotenv

View File

@ -0,0 +1,12 @@
version: '3'
silent: true
dotenv:
- 'global.env'
vars:
VAR: entrypoint-global-vars
env:
ENV: entrypoint-global-vars
includes:
included: included.yml

View File

@ -0,0 +1,2 @@
VAR=entrypoint-global-dotenv
ENV=entrypoint-global-dotenv

View File

@ -0,0 +1,15 @@
version: '3'
silent: true
vars:
VAR: included-global-vars
env:
ENV: included-global-vars
tasks:
default:
dotenv:
- 'task.env'
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'

View File

@ -0,0 +1,2 @@
VAR=included-task-dotenv
ENV=included-task-dotenv

View File

@ -0,0 +1,9 @@
version: '3'
silent: true
tasks:
default:
cmds:
- 'echo "{{.VAR}}"'
- 'echo "$ENV"'