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-alpine

Failing 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-alpine

Failing 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