fix: expand task-level dotenv in brackets by aminya · Pull Request #1627 · go-task/task
I can confirm this issue: the Taskfile doesn't expand environment variables from the dotenv files that are specified at the task level. They do work when placed at the root level, but not within individual tasks. I’ve attempted multiple approaches in line with the Documentation | .env files, yet the variables still aren’t being expanded as expected.
My Taskfile version: Task version: 3.42.1 (Homebrew)
Context
.env File Structure:
# Database Configuration DB_SCHEME=postgres DB_USERNAME=postgres DB_PASSWORD=Qk3doyOiZcNpDh9 DB_HOST=localhost DB_PORT=5555 DB_DATABASE=postges DB_SSL=disable
Working Setup (Root-Level .env)
version: '3'
vars:
COMPILER: go
dotenv: ['./environment/.test.env']
tasks:
test:
cmds:
- |
docker run \
--name test_database \
--publish {{ .DB_PORT }}:5432 \
--env POSTGRES_USER={{ .DB_USERNAME }} \
--env POSTGRES_PASSWORD={{ .DB_PASSWORD }} \
--env POSTGRES_DB={{ .DB_DATABASE }} \
--detach \
postgres:16-alpine
Output:
task: [test] docker run \
--name test_database \
--publish 5555:5432 \
--env POSTGRES_USER=postgres \
--env POSTGRES_PASSWORD=Qk3doyOiZcNpDh9 \
--env POSTGRES_DB=postgres \
--detach \
postgres:16-alpineFailing Setup (Command Level .env) - Regular Expansion
Taskfile.yaml:
version: '3'
vars:
COMPILER: go
tasks:
test:
dotenv: ['./environment/.test.env']
cmds:
- |
docker run \
--name test_database \
--publish {{ .DB_PORT }}:5432 \
--env POSTGRES_USER={{ .DB_USERNAME }} \
--env POSTGRES_PASSWORD={{ .DB_PASSWORD }} \
--env POSTGRES_DB={{ .DB_DATABASE }} \
--detach \
postgres:16-alpine
Output:
task: [test] docker run \
--name test_database \
--publish :5432 \
--env POSTGRES_USER= \
--env POSTGRES_PASSWORD= \
--env POSTGRES_DB= \
--detach \
postgres:16-alpineFailing Setup (Command Level .env) - Environment Expansion(from Docs)
version: '3'
vars:
COMPILER: go
tasks:
test:
dotenv: ['./environment/.test.env']
cmds:
- |
docker run \
--name test_database \
--publish $DB_PORT:5432 \
--env POSTGRES_USER=$DB_USERNAME \
--env POSTGRES_PASSWORD=$DB_PASSWORD \
--env POSTGRES_DB=$DB_DATABASE \
--detach \
postgres:16-alpine
Output:
task: [test] docker run \
--name test_database \
--publish $DB_PORT:5432 \
--env POSTGRES_USER=$DB_USERNAME \
--env POSTGRES_PASSWORD=$DB_PASSWORD \
--env POSTGRES_DB=$DB_DATABASE \
--detach \
postgres:16-alpine