Skip to content

Variables scope propagation #1260

@Aisoipheo

Description

@Aisoipheo

I am confused why local variables are not propagated to default task calls.

Consider following Taskfile:

version: '3'

vars:
  MY_VAR: "global"

tasks:
  my-var-test:
    vars:
      MY_VAR: "local"
    deps:
      - echo-my-var
      - task: echo-my-var
        vars:
          MY_VAR: "call-specific"
    cmds:
      - echo {{.MY_VAR}}
      - task: echo-my-var
      - task: echo-my-var
        vars:
          MY_VAR: "call-specific"

  echo-my-var:
    cmds:
      - echo {{.MY_VAR}}

It would be very helpful to define some local vars and use them as fallback defaults, greatly reducing copy-paste code.

task my-var-test
Actual:

task: [echo-my-var] echo call-specific
task: [echo-my-var] echo global
global
call-specific
task: [my-var-test] echo local
local
task: [echo-my-var] echo global
global
task: [echo-my-var] echo call-specific
call-specific

Expected:

task: [echo-my-var] echo call-specific
task: [echo-my-var] echo local
local
call-specific
task: [my-var-test] echo local
local
task: [echo-my-var] echo local
local
task: [echo-my-var] echo call-specific
call-specific

Real world example: building docker images. Currently i have to duplicate variables every time. They do not fit into global vars as they would need to be unique.

  build-docker-image:
    internal: true
    status:
      # check if image does not exist
      - test -n $(docker images -q {{.DOCKER_IMAGE_NAME}}:{{.DOCKER_IMAGE_TAG}})
    cmds:
      - >
        docker build -t {{.DOCKER_IMAGE_NAME}}:{{.DOCKER_IMAGE_TAG}}
        -f docker/{{.DOCKER_IMAGE_FILE}} {{.ROOT_DIR}}
  • Task version: 3.26.0
  • Operating system: macOS Ventura 13.2.1
  • Experiments enabled: No

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions