mirror of
https://github.com/go-task/task.git
synced 2026-06-15 20:01:40 +00:00
feat(experiments): rename SCOPED_INCLUDES to SCOPED_TASKFILES and add env namespace
Rename the experiment from SCOPED_INCLUDES to SCOPED_TASKFILES to better
reflect its expanded scope. This experiment now provides:
1. Variable scoping (existing): includes see only their own vars + parent vars
2. Environment namespace (new): env vars accessible via {{.env.XXX}}
With TASK_X_SCOPED_TASKFILES=1:
- {{.VAR}} accesses vars only (scoped per include)
- {{.env.VAR}} accesses env (OS + Taskfile env:, inherited)
- {{.TASK}} and other special vars remain at root level
This is a breaking change for the experimental feature:
- {{.PATH}} no longer works, use {{.env.PATH}} instead
- Env vars are no longer at root level in templates
This commit is contained in:
20
testdata/scoped_includes/Taskfile.yml
vendored
20
testdata/scoped_includes/Taskfile.yml
vendored
@@ -1,20 +0,0 @@
|
||||
version: "3"
|
||||
|
||||
vars:
|
||||
ROOT_VAR: from_root
|
||||
|
||||
includes:
|
||||
a: ./inc_a
|
||||
b: ./inc_b
|
||||
|
||||
tasks:
|
||||
default:
|
||||
desc: Test scoped includes - vars should be isolated
|
||||
cmds:
|
||||
- task: a:print
|
||||
- task: b:print
|
||||
|
||||
print-root-var:
|
||||
desc: Print ROOT_VAR from root
|
||||
cmds:
|
||||
- echo "ROOT_VAR={{.ROOT_VAR}}"
|
||||
18
testdata/scoped_includes/inc_a/Taskfile.yml
vendored
18
testdata/scoped_includes/inc_a/Taskfile.yml
vendored
@@ -1,18 +0,0 @@
|
||||
version: "3"
|
||||
|
||||
vars:
|
||||
VAR: value_from_a
|
||||
UNIQUE_A: only_in_a
|
||||
|
||||
tasks:
|
||||
print:
|
||||
desc: Print vars from include A
|
||||
cmds:
|
||||
- echo "A:VAR={{.VAR}}"
|
||||
- echo "A:UNIQUE_A={{.UNIQUE_A}}"
|
||||
- echo "A:ROOT_VAR={{.ROOT_VAR}}"
|
||||
|
||||
try-access-b:
|
||||
desc: Try to access B's unique var (should fail in scoped mode)
|
||||
cmds:
|
||||
- echo "A:UNIQUE_B={{.UNIQUE_B}}"
|
||||
13
testdata/scoped_includes/inc_b/Taskfile.yml
vendored
13
testdata/scoped_includes/inc_b/Taskfile.yml
vendored
@@ -1,13 +0,0 @@
|
||||
version: "3"
|
||||
|
||||
vars:
|
||||
VAR: value_from_b
|
||||
UNIQUE_B: only_in_b
|
||||
|
||||
tasks:
|
||||
print:
|
||||
desc: Print vars from include B
|
||||
cmds:
|
||||
- echo "B:VAR={{.VAR}}"
|
||||
- echo "B:UNIQUE_B={{.UNIQUE_B}}"
|
||||
- echo "B:ROOT_VAR={{.ROOT_VAR}}"
|
||||
38
testdata/scoped_taskfiles/Taskfile.yml
vendored
Normal file
38
testdata/scoped_taskfiles/Taskfile.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
version: "3"
|
||||
|
||||
env:
|
||||
ROOT_ENV: env_from_root
|
||||
SHARED_ENV: shared_from_root
|
||||
|
||||
vars:
|
||||
ROOT_VAR: from_root
|
||||
|
||||
includes:
|
||||
a: ./inc_a
|
||||
b: ./inc_b
|
||||
|
||||
tasks:
|
||||
default:
|
||||
desc: Test scoped includes - vars should be isolated
|
||||
cmds:
|
||||
- task: a:print
|
||||
- task: b:print
|
||||
|
||||
print-root-var:
|
||||
desc: Print ROOT_VAR from root
|
||||
cmds:
|
||||
- echo "ROOT_VAR={{.ROOT_VAR}}"
|
||||
|
||||
print-env:
|
||||
desc: Print env vars using {{.env.XXX}} syntax
|
||||
cmds:
|
||||
- echo "ROOT_ENV={{.env.ROOT_ENV}}"
|
||||
- echo "SHARED_ENV={{.env.SHARED_ENV}}"
|
||||
- echo "PATH_EXISTS={{if .env.PATH}}yes{{else}}no{{end}}"
|
||||
|
||||
test-env-separation:
|
||||
desc: Test that env is NOT at root level in scoped mode
|
||||
cmds:
|
||||
# In scoped mode, {{.ROOT_ENV}} should be empty (env not at root)
|
||||
# In legacy mode, {{.ROOT_ENV}} would have the value
|
||||
- echo "ROOT_ENV_AT_ROOT={{.ROOT_ENV}}"
|
||||
36
testdata/scoped_taskfiles/inc_a/Taskfile.yml
vendored
Normal file
36
testdata/scoped_taskfiles/inc_a/Taskfile.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
version: "3"
|
||||
|
||||
env:
|
||||
INC_A_ENV: env_from_a
|
||||
SHARED_ENV: shared_from_a
|
||||
|
||||
vars:
|
||||
VAR: value_from_a
|
||||
UNIQUE_A: only_in_a
|
||||
|
||||
tasks:
|
||||
print:
|
||||
desc: Print vars from include A
|
||||
cmds:
|
||||
- echo "A:VAR={{.VAR}}"
|
||||
- echo "A:UNIQUE_A={{.UNIQUE_A}}"
|
||||
- echo "A:ROOT_VAR={{.ROOT_VAR}}"
|
||||
|
||||
try-access-b:
|
||||
desc: Try to access B's unique var (should fail in scoped mode)
|
||||
cmds:
|
||||
- echo "A:UNIQUE_B={{.UNIQUE_B}}"
|
||||
|
||||
print-env:
|
||||
desc: Print env vars from include A
|
||||
cmds:
|
||||
- echo "A:INC_A_ENV={{.env.INC_A_ENV}}"
|
||||
- echo "A:ROOT_ENV={{.env.ROOT_ENV}}"
|
||||
- echo "A:SHARED_ENV={{.env.SHARED_ENV}}"
|
||||
|
||||
test-env-in-var:
|
||||
desc: Test using env in a var template
|
||||
vars:
|
||||
COMPOSED: "env={{.env.ROOT_ENV}}"
|
||||
cmds:
|
||||
- echo "{{.COMPOSED}}"
|
||||
24
testdata/scoped_taskfiles/inc_b/Taskfile.yml
vendored
Normal file
24
testdata/scoped_taskfiles/inc_b/Taskfile.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
version: "3"
|
||||
|
||||
env:
|
||||
INC_B_ENV: env_from_b
|
||||
SHARED_ENV: shared_from_b
|
||||
|
||||
vars:
|
||||
VAR: value_from_b
|
||||
UNIQUE_B: only_in_b
|
||||
|
||||
tasks:
|
||||
print:
|
||||
desc: Print vars from include B
|
||||
cmds:
|
||||
- echo "B:VAR={{.VAR}}"
|
||||
- echo "B:UNIQUE_B={{.UNIQUE_B}}"
|
||||
- echo "B:ROOT_VAR={{.ROOT_VAR}}"
|
||||
|
||||
print-env:
|
||||
desc: Print env vars from include B
|
||||
cmds:
|
||||
- echo "B:INC_B_ENV={{.env.INC_B_ENV}}"
|
||||
- echo "B:ROOT_ENV={{.env.ROOT_ENV}}"
|
||||
- echo "B:SHARED_ENV={{.env.SHARED_ENV}}"
|
||||
3
testdata/scoped_taskfiles/testdata/TestScopedTaskfiles-scoped-env-namespace.golden
vendored
Normal file
3
testdata/scoped_taskfiles/testdata/TestScopedTaskfiles-scoped-env-namespace.golden
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
ROOT_ENV=env_from_root
|
||||
SHARED_ENV=shared_from_root
|
||||
PATH_EXISTS=yes
|
||||
1
testdata/scoped_taskfiles/testdata/TestScopedTaskfiles-scoped-env-separation.golden
vendored
Normal file
1
testdata/scoped_taskfiles/testdata/TestScopedTaskfiles-scoped-env-separation.golden
vendored
Normal file
@@ -0,0 +1 @@
|
||||
ROOT_ENV_AT_ROOT=
|
||||
3
testdata/scoped_taskfiles/testdata/TestScopedTaskfiles-scoped-include-env.golden
vendored
Normal file
3
testdata/scoped_taskfiles/testdata/TestScopedTaskfiles-scoped-include-env.golden
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
A:INC_A_ENV=env_from_a
|
||||
A:ROOT_ENV=env_from_root
|
||||
A:SHARED_ENV=shared_from_a
|
||||
Reference in New Issue
Block a user