Description
We would like to propose adding an option to remove environment variables from the variable resolution precedence in Taskfiles.
Today, environment variables can unintentionally override Taskfile defaults, even when no value was explicitly passed.
This breaks predictability: a developer's local environment can silently affect task behavior, leading to hard-to-debug issues - especially in large teams.
Example context:
We use Taskfile in our monorepository to simplify development with easy-to-remember tasks.
Many tasks define user-optional variables with default values, for example:
tasks:
db:dump:search:
vars:
...
USER: '{{.USER | default "local"}}'
...
cmds: ...
Developers typically run tasks like:
$ task db:dump:search USER=user123
or simply:
In the second case, we expect the default value local to be used.
However, if the developer has a USER environment variable set on their machine, it overrides our intended default, even though the user did not pass anything.
This leads to confusing and unexpected task behavior.
Another real-world scenario:
Suppose a developer is troubleshooting something and temporarily sets a production AWS profile locally:
They run a few manual AWS CLI commands - but then forget about the export.
Later, they run a Task that's meant to safely connect to staging by default:
tasks:
aws:exec:
vars:
AWS_PROFILE: '{{.AWS_PROFILE | default "staging"}}'
cmds: ...
Running:
unexpectedly connects to production, because the AWS_PROFILE environment variable silently overrides the Taskfile's intended safe default (staging).
This could lead to serious operational mistakes - like modifying production infrastructure when the developer thought they were working against staging.
Currently, Task resolves variables in this order (highest priority first):
- Variables declared directly in the task definition
- Variables passed when calling a task from another task
- Variables from the included Taskfile (for included tasks)
- Variables from the inclusion of the Taskfile
- Global variables (defined in
vars: section)
- Environment variables
There is no way to opt-out of the environment fallback.
Proposal:
Introduce a setting (global or per-variable) to disable environment variable fallback during variable resolution.
This would ensure that developer-provided arguments and Taskfile defaults are always respected first - making task behavior fully predictable, safer, and environment-independent.
Description
We would like to propose adding an option to remove environment variables from the variable resolution precedence in Taskfiles.
Today, environment variables can unintentionally override Taskfile defaults, even when no value was explicitly passed.
This breaks predictability: a developer's local environment can silently affect task behavior, leading to hard-to-debug issues - especially in large teams.
Example context:
We use Taskfile in our monorepository to simplify development with easy-to-remember tasks.
Many tasks define user-optional variables with default values, for example:
Developers typically run tasks like:
or simply:
In the second case, we expect the default value
localto be used.However, if the developer has a
USERenvironment variable set on their machine, it overrides our intended default, even though the user did not pass anything.This leads to confusing and unexpected task behavior.
Another real-world scenario:
Suppose a developer is troubleshooting something and temporarily sets a production AWS profile locally:
They run a few manual AWS CLI commands - but then forget about the export.
Later, they run a Task that's meant to safely connect to staging by default:
Running:
unexpectedly connects to production, because the
AWS_PROFILEenvironment variable silently overrides the Taskfile's intended safe default (staging).This could lead to serious operational mistakes - like modifying production infrastructure when the developer thought they were working against staging.
Currently, Task resolves variables in this order (highest priority first):
vars:section)There is no way to opt-out of the environment fallback.
Proposal:
Introduce a setting (global or per-variable) to disable environment variable fallback during variable resolution.
This would ensure that developer-provided arguments and Taskfile defaults are always respected first - making task behavior fully predictable, safer, and environment-independent.