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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions