Provide environment information
trigger.dev 4.5.0 (also verified 4.5.9)
Describe the bug
The --env-file option is documented — in the CLI --help for dev/deploy/preview and in the docs pages (cli-dev-commands, cli-deploy-commands, cli-preview-archive) — as:
Load environment variables from a file. This will only hydrate the process.env of the CLI process, not the tasks.
But in dev, the file is passed through to the tasks. DevSupervisor.#getEnvVars() (dev/devSupervisor.ts) builds the run environment from resolveLocalEnvVars(this.options.args.envFile, …):
async #getEnvVars() {
const environmentVariablesResponse = await this.options.client.getEnvironmentVariables(...);
return {
...resolveLocalEnvVars(this.options.args.envFile, environmentVariablesResponse.success ? ... : {}),
NODE_ENV: "development",
...
};
}
and resolveLocalEnvVars(envFile, …) → resolveDotEnvVars(undefined, envFile) reads exactly that file and includes it in what the task receives via process.env.
To reproduce
echo "PROBE=from-file" > custom.env
trigger dev --env-file custom.env
- In a task:
process.env.PROBE
- It is
from-file — the task does see the --env-file value.
Expected per the docs: the task should NOT see it (docs say the flag only affects the CLI process).
Which is correct?
The behavior (file reaches tasks) is arguably the more useful one — passing --env-file /path/to/empty is a clean way to make the CLI read no ambient .env* files and rely solely on the injected process.env. But the docs and --help text state the opposite, so please either:
- fix the docs/
--help to say --env-file values are included in the task environment, or
- if the documented behavior is the intended contract, fix
dev to not pass envFile into resolveLocalEnvVars.
Either way the code and the docs currently disagree, which makes --env-file hard to reason about.
Additional information
Related: #2999 (the .env vs .env.local precedence bug in the same resolveDotEnvVars path).
Provide environment information
trigger.dev 4.5.0 (also verified 4.5.9)
Describe the bug
The
--env-fileoption is documented — in the CLI--helpfordev/deploy/previewand in the docs pages (cli-dev-commands,cli-deploy-commands,cli-preview-archive) — as:But in
dev, the file is passed through to the tasks.DevSupervisor.#getEnvVars()(dev/devSupervisor.ts) builds the run environment fromresolveLocalEnvVars(this.options.args.envFile, …):and
resolveLocalEnvVars(envFile, …)→resolveDotEnvVars(undefined, envFile)reads exactly that file and includes it in what the task receives viaprocess.env.To reproduce
echo "PROBE=from-file" > custom.envtrigger dev --env-file custom.envprocess.env.PROBEfrom-file— the task does see the--env-filevalue.Expected per the docs: the task should NOT see it (docs say the flag only affects the CLI process).
Which is correct?
The behavior (file reaches tasks) is arguably the more useful one — passing
--env-file /path/to/emptyis a clean way to make the CLI read no ambient.env*files and rely solely on the injectedprocess.env. But the docs and--helptext state the opposite, so please either:--helpto say--env-filevalues are included in the task environment, ordevto not passenvFileintoresolveLocalEnvVars.Either way the code and the docs currently disagree, which makes
--env-filehard to reason about.Additional information
Related: #2999 (the
.envvs.env.localprecedence bug in the sameresolveDotEnvVarspath).