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?
It seems like envvars added by features and via the action's
env:option aren't passed todocker run. VSCode does pass them todocker run. This is important for shell init scripts that expect the envvars to exist when the container is started.Example of VSCode's behavior:
devcontainers/cibehavior:Digging into the difference between their
devcontainer upcommands, I see VSCode isn't using--remote-envanywhere:However the
devcontainers/ciaction defines all the the envvars with--remote-env:What do
--include-configurationand/or--include-merged-configurationdo? Would adding them fix this behavior in thedevcontainers/ciaction?