From c0f856808a36431f62b38e70816449d17197d13e Mon Sep 17 00:00:00 2001 From: Kai Germaschewski Date: Tue, 26 May 2026 13:27:17 +0000 Subject: [PATCH 1/4] devcontainer: start with openggcm version --- .devcontainer/Dockerfile | 16 ------- .devcontainer/devcontainer.json | 85 +++++++++++++++++++++------------ 2 files changed, 55 insertions(+), 46 deletions(-) delete mode 100644 .devcontainer/Dockerfile diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 2936ab0de6..0000000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.177.0/containers/cpp/.devcontainer/base.Dockerfile - -# [Choice] Debian / Ubuntu version: debian-10, debian-9, ubuntu-20.04, ubuntu-18.04 -ARG VARIANT="buster" -FROM ghcr.io/psc-code/psc-spack-cuda-ubuntu-20.04:latest - -# [Optional] Uncomment this section to install additional packages. -# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ -# && apt-get -y install --no-install-recommends - -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends \ - clang-format-9 - -RUN echo export CMAKE_PREFIX_PATH=/root/psc-env/.spack-env/view >> ~/.bashrc - diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 69a31ecbe5..caadd267c2 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,36 +1,61 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: -// https://github.com/microsoft/vscode-dev-containers/tree/v0.177.0/containers/cpp +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu { - "name": "C++", - "build": { - "dockerfile": "Dockerfile", - // Update 'VARIANT' to pick an Debian / Ubuntu OS version: debian-10, debian-9, ubuntu-20.04, ubuntu-18.04 - "args": { - "VARIANT": "ubuntu-20.04" - } - }, - "runArgs": [ - "--cap-add=SYS_PTRACE", - "--security-opt", - "seccomp=unconfined" - ], - // Set *default* container specific settings.json values on container create. - "settings": { - "terminal.integrated.shell.linux": "/bin/bash" - }, - // Add the IDs of extensions you want installed when the container is created. - "extensions": [ - "ms-vscode.cpptools", - "ms-vscode.cmake-tools", - "xaver.clang-format", - ], - "containerEnv": { - "CMAKE_PREFIX_PATH": "/root/psc-env/.spack-env/view", + "name": "Ubuntu", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/base:jammy", + // Features to add to the dev container. More info: https://containers.dev/features. + "features": { + // "ghcr.io/devcontainers/features/anaconda:1": { + // "version": "latest" + // }, + "ghcr.io/itsmechlark/features/act:1": { + "version": "latest" + }, + "ghcr.io/rocker-org/devcontainer-features/apt-packages:1": { + "packages": [ + "csh", + "gawk", + "gfortran", + "libopenmpi-dev", + "autoconf", + "automake", + "libtool", + "cmake", + "libhdf5-dev", + "hdf5-tools", + "less", + "python3-pip", + "libpython3-dev", + "clang-format", + "ninja-build", + "findent", + "pandoc", + ] + }, + "ghcr.io/unh-hpc/features/adios2:0.0.2": {} }, // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "gcc -v", - // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. - // "remoteUser": "vscode" + "postCreateCommand": "pip install uv && sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && echo 'export OPENGGCMDIR=/workspaces/openggcm' >> /home/vscode/.bashrc && echo 'shopt -u progcomp' >> /home/vscode/.bashrc && echo 'alias ll=\"ls -lrt\"' >> /home/vscode/.bashrc", + // "echo export OPENGGCMDIR=/workspaces/openggcm >> ~/.zshrc; echo PATH=$HOME/bin:$PATH >> ~/.zshrc", + "customizations": { + "vscode": { + "extensions": [ + "ms-vscode.cmake-tools", + "ms-vscode.cpptools-extension-pack", + "fortran-lang.linter-gfortran", + "ms-toolsai.jupyter", + "ms-python.python", + "Github.vscode-pull-request-github", + "tamasfe.even-better-toml", + "charliermarsh.ruff" + ] + } + }, + // Configure tool-specific properties. + // "customizations": {}, + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" } \ No newline at end of file From f382f526f61f55ca78203e270d99a5aed2378f8b Mon Sep 17 00:00:00 2001 From: Kai Germaschewski Date: Tue, 26 May 2026 14:08:00 +0000 Subject: [PATCH 2/4] devcontainer: install cuda toolkit --- .devcontainer/devcontainer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index caadd267c2..85624b8b76 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -30,7 +30,7 @@ "clang-format", "ninja-build", "findent", - "pandoc", + "pandoc" ] }, "ghcr.io/unh-hpc/features/adios2:0.0.2": {} @@ -38,7 +38,7 @@ // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "pip install uv && sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && echo 'export OPENGGCMDIR=/workspaces/openggcm' >> /home/vscode/.bashrc && echo 'shopt -u progcomp' >> /home/vscode/.bashrc && echo 'alias ll=\"ls -lrt\"' >> /home/vscode/.bashrc", + "postCreateCommand": "pip install uv && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null && sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-cuda-toolkit && sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && echo 'export OPENGGCMDIR=/workspaces/openggcm' >> /home/vscode/.bashrc && echo 'shopt -u progcomp' >> /home/vscode/.bashrc && echo 'alias ll=\"ls -lrt\"' >> /home/vscode/.bashrc", // "echo export OPENGGCMDIR=/workspaces/openggcm >> ~/.zshrc; echo PATH=$HOME/bin:$PATH >> ~/.zshrc", "customizations": { "vscode": { @@ -53,7 +53,7 @@ "charliermarsh.ruff" ] } - }, + } // Configure tool-specific properties. // "customizations": {}, // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. From 4b4bf00fa882331ac40210f6fda4799e61ec6e48 Mon Sep 17 00:00:00 2001 From: Kai Germaschewski Date: Tue, 26 May 2026 16:25:08 +0000 Subject: [PATCH 3/4] devcontainer: based on nvidia images --- .devcontainer/Dockerfile | 38 +++++++++++++++++++ .devcontainer/devcontainer.json | 65 ++++++++++++++------------------- 2 files changed, 65 insertions(+), 38 deletions(-) create mode 100644 .devcontainer/Dockerfile diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000000..27e38f0e37 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,38 @@ +#FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04 +ARG VARIANT="noble" +FROM nvidia/cuda:13.2.1-devel-ubuntu24.04 +#FROM buildpack-deps:${VARIANT}-curl + +LABEL dev.containers.features="common" + +ARG VARIANT +RUN if [ "$VARIANT" = "noble" ] || [ "$VARIANT" = "resolute" ]; then \ + if id "ubuntu" &>/dev/null; then \ + echo "Deleting user 'ubuntu' for $VARIANT" && userdel -f -r ubuntu || echo "Failed to delete ubuntu user for $VARIANT"; \ + else \ + echo "User 'ubuntu' does not exist for $VARIANT"; \ + fi; \ + fi + +# [Optional] Uncomment this section to install additional OS packages. +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends \ + git \ + libopenmpi-dev \ + cmake \ + libhdf5-dev \ + hdf5-tools \ + less \ + python3-pip \ + libpython3-dev \ + clang-format \ + ninja-build + +# Local fix for issue with timezone data at 'buildpack-deps'. Ref# https://github.com/devcontainers/images/issues/1709 +RUN apt-get update \ + && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y reinstall --no-install-recommends tzdata \ + && echo "Etc/UTC" > /etc/timezone \ + && rm -rf /var/lib/apt/lists/* + + diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 85624b8b76..4909a7088d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,59 +1,48 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu { - "name": "Ubuntu", + "name": "psc-ubuntu", // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/base:jammy", - // Features to add to the dev container. More info: https://containers.dev/features. + "build": { + "dockerfile": "Dockerfile", + "context": "." + }, "features": { - // "ghcr.io/devcontainers/features/anaconda:1": { - // "version": "latest" + "ghcr.io/devcontainers/features/common-utils:2": { + "installZsh": "true", + "username": "vscode", + "userUid": "1000", + "userGid": "1000", + "upgradePackages": "true" + }, + // "ghcr.io/rocker-org/devcontainer-features/apt-packages:1": { + // "packages": [ + // ] // }, - "ghcr.io/itsmechlark/features/act:1": { - "version": "latest" - }, - "ghcr.io/rocker-org/devcontainer-features/apt-packages:1": { - "packages": [ - "csh", - "gawk", - "gfortran", - "libopenmpi-dev", - "autoconf", - "automake", - "libtool", - "cmake", - "libhdf5-dev", - "hdf5-tools", - "less", - "python3-pip", - "libpython3-dev", - "clang-format", - "ninja-build", - "findent", - "pandoc" - ] - }, - "ghcr.io/unh-hpc/features/adios2:0.0.2": {} - }, - // Use 'forwardPorts' to make a list of ports inside the container available locally. + + // "ghcr.io/devcontainers/features/git:1": { + // "version": "latest", + // "ppa": "false" + // } + }, + // Feat``ures to add to the dev container. More info: https://containers.dev/features. +` // Use 'forwardPorts' to make a list of ports inside the container available locally. // "forwardPorts": [], // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "pip install uv && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null && sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-cuda-toolkit && sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && echo 'export OPENGGCMDIR=/workspaces/openggcm' >> /home/vscode/.bashrc && echo 'shopt -u progcomp' >> /home/vscode/.bashrc && echo 'alias ll=\"ls -lrt\"' >> /home/vscode/.bashrc", + // "postCreateCommand": "curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null && sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-cuda-toolkit && echo 'shopt -u progcomp' >> /home/vscode/.bashrc && echo 'alias ll=\"ls -lrt\"' >> /home/vscode/.bashrc", + "postCreateCommand": "echo export CMAKE_PREFIX_PATH=/usr/local/cuda/lib64/cmake >> ~/.bashrc", // "echo export OPENGGCMDIR=/workspaces/openggcm >> ~/.zshrc; echo PATH=$HOME/bin:$PATH >> ~/.zshrc", "customizations": { "vscode": { "extensions": [ "ms-vscode.cmake-tools", "ms-vscode.cpptools-extension-pack", - "fortran-lang.linter-gfortran", "ms-toolsai.jupyter", - "ms-python.python", - "Github.vscode-pull-request-github", - "tamasfe.even-better-toml", - "charliermarsh.ruff" + "ms-python.python" ] } } + // Configure tool-specific properties. // "customizations": {}, // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. From 3fdb3b23679e79a176971879072c29ccad4d447a Mon Sep 17 00:00:00 2001 From: Kai Germaschewski Date: Tue, 26 May 2026 16:48:03 +0000 Subject: [PATCH 4/4] devcontainer: add adios2 --- .devcontainer/devcontainer.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4909a7088d..83cf7fa352 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -15,6 +15,8 @@ "userGid": "1000", "upgradePackages": "true" }, + "ghcr.io/unh-hpc/features/adios2:0.0.2": {} + // "ghcr.io/rocker-org/devcontainer-features/apt-packages:1": { // "packages": [ // ]