Skip to content

Requires does not check if a variable is set #2243

@timrulebosch

Description

@timrulebosch

Description

Requires does not check if a variable is set, it only checks is a variable is "present". As a result, variables which are set to "null/nil" will pass the required check.

Version

3.43.2

Operating system

Linux (WSL)

Experiments Enabled

No response

Example Taskfile

version: '3' tasks: default: vars: A: null B: '{{.B}}' env: A: '{{.A}}' B: '{{.B}}' C: '{{.C}}' cmds: - echo "$A" - echo "$B" - echo "$C" requires: #vars: [A, B, C] vars: [A, B]

Example output:

$ task task: [default] echo "$A" task: [default] echo "$B" task: [default] echo "$C"

Obviously, none of the variables are set. Swap the comment line on the requires constraint to observe the behavior change.

The related code is here:

_, ok := t.Vars.Get(requiredVar.Name)

... where it is observed that the content of variables is not checked. I have read though the PR for this feature and did not notice any conversation about this scenario. I think the documentation explains the expectation correctly:

List of variable or environment variable names that must be set if this task is to execute and run[period missing]

I appreciate that setting a variable to nil can be considered as being set ... but with how templating works in Task, I think set means set to something other than . For example here there is no difference when A is not set, or set to nil ... the default condition will be taken:

A: '{{.A | default "A"}}'

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions