Skip to content

Feature envvars and action env: options aren't passed to docker run #394

@trxcllnt

Description

@trxcllnt

It seems like envvars added by features and via the action's env: option aren't passed to docker run. VSCode does pass them to docker run. This is important for shell init scripts that expect the envvars to exist when the container is started.

Example of VSCode's behavior:

docker run --sig-proxy=false -a STDOUT -a STDERR \
  `# ...` \
  -e LANG=en_US.UTF-8 \
  -e NVIDIA_DISABLE_REQUIRE=true \
  -e CC=gcc \
  -e CXX=g++ \
  -e CUDAHOSTCXX=g++ \
  -e PYTHON_VERSION=3.13 \
  --entrypoint /bin/sh vsc-devcontainers-954e198c667c39268cc299cf82b04e5e1818c554baccfa2555269604372fc153-uid \
  -c echo Container started

devcontainers/ci behavior:

docker run --sig-proxy=false -a STDOUT -a STDERR \
  `# ...` \
  -e LANG=en_US.UTF-8 \
  -e NVIDIA_DISABLE_REQUIRE=true \
  -e PYTHON_VERSION=3.13 \
  --entrypoint /bin/sh vsc-devcontainers-4ec525fa91aa7d1bf05e336d30063cc11430f50413ea10c3c0d37f8fe16cb41b-uid \
  -c echo Container started

Digging into the difference between their devcontainer up commands, I see VSCode isn't using --remote-env anywhere:

devcontainer up \
  --user-data-folder /home/ptaylor/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/data \
  --container-session-data-folder /tmp/devcontainers-5417b12b-bcd8-4a49-ab65-556b2e796a371751917899255 \
  --workspace-folder /home/ptaylor/dev/rapids/devcontainers \
  --workspace-mount-consistency cached \
  --gpu-availability detect \
  --id-label devcontainer.local_folder=/home/ptaylor/dev/rapids/devcontainers \
  --id-label devcontainer.config_file=/home/ptaylor/dev/rapids/devcontainers/.devcontainer/cuda12.9-pip/devcontainer.json \
  --log-level debug \
  --log-format json \
  --config /home/ptaylor/dev/rapids/devcontainers/.devcontainer/cuda12.9-pip/devcontainer.json \
  --default-user-env-probe loginInteractiveShell \
  --mount type=volume,source=vscode,target=/vscode,external=true \
  --skip-post-create \
  --update-remote-user-uid-default on \
  --mount-workspace-git-root \
  --include-configuration \
  --include-merged-configuration

However the devcontainers/ci action defines all the the envvars with --remote-env:

devcontainer up \
  --workspace-folder /home/runner/_work/devcontainers/devcontainers \
  --remote-env GITHUB_OUTPUT=/mnt/github/output \
  --remote-env GITHUB_ENV=/mnt/github/env \
  --remote-env GITHUB_PATH=/mnt/github/path \
  --remote-env GITHUB_STEP_SUMMARY=/mnt/github/step-summary \
  --config /home/runner/_work/devcontainers/devcontainers/.devcontainer/cuda12.9-conda/devcontainer.json \
  --mount type=bind,source=/home/runner/_work/_temp/_runner_file_commands/set_output_fe6df713-9b89-4697-b75c-89f6f821d7dd,target=/mnt/github/output \
  --mount type=bind,source=/home/runner/_work/_temp/_runner_file_commands/set_env_fe6df713-9b89-4697-b75c-89f6f821d7dd,target=/mnt/github/env \
  --mount type=bind,source=/home/runner/_work/_temp/_runner_file_commands/add_path_fe6df713-9b89-4697-b75c-89f6f821d7dd,target=/mnt/github/path \
  --mount type=bind,source=/home/runner/_work/_temp/_runner_file_commands/step_summary_fe6df713-9b89-4697-b75c-89f6f821d7dd,target=/mnt/github/step-summary

What do --include-configuration and/or --include-merged-configuration do? Would adding them fix this behavior in the devcontainers/ci action?

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions