From b208d2e3bc1bdef912002af04a536e4d8d2ee006 Mon Sep 17 00:00:00 2001 From: Luca Bertagna Date: Fri, 28 Aug 2026 09:23:46 -0600 Subject: [PATCH 1/7] Add recipes for all final env images --- .github/workflows/ghci-snl.yaml | 37 ++++++--- .../gnu-cpu => final/gnu-cpu-env}/Dockerfile | 2 +- ghci-snl/final/gnu-cuda-env/Dockerfile | 80 +++++++++++++++++++ ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo | 6 ++ ghci-snl/final/intel-cpu-env/Dockerfile | 58 ++++++++++++++ 5 files changed, 171 insertions(+), 12 deletions(-) rename ghci-snl/{env/gnu-cpu => final/gnu-cpu-env}/Dockerfile (99%) create mode 100644 ghci-snl/final/gnu-cuda-env/Dockerfile create mode 100644 ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo create mode 100644 ghci-snl/final/intel-cpu-env/Dockerfile diff --git a/.github/workflows/ghci-snl.yaml b/.github/workflows/ghci-snl.yaml index 8b9f7c5..5bb456c 100644 --- a/.github/workflows/ghci-snl.yaml +++ b/.github/workflows/ghci-snl.yaml @@ -72,6 +72,7 @@ jobs: labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max + compiler: runs-on: ubuntu-latest needs: base @@ -136,13 +137,27 @@ jobs: BASE_TAG=${{ github.event_name == 'pull_request' && format('base-pr-{0}', github.event.pull_request.number) || 'base' }} cache-from: type=gha,scope=${{ matrix.compiler }} cache-to: type=gha,scope=${{ matrix.compiler }},mode=max - gnu-cpu-env: + + final-env: runs-on: ubuntu-latest needs: compiler permissions: contents: read packages: write id-token: write + strategy: + fail-fast: false + matrix: + include: + - compiler: gnu + tag: gnu-cpu-env + version: 13.3.0 + - compiler: gnu + tag: gnu-cuda-env + version: 13.3.0 + - compiler: intel + tag: intel-cpu-env + version: 2024.1.0 steps: - name: Checkout @@ -168,22 +183,22 @@ jobs: with: images: ghcr.io/${{ github.repository_owner }}/e3sm-ghci-snl tags: | - type=raw,value=gnu-cpu-env,enable=${{ github.ref == 'refs/heads/main' }} - type=ref,event=pr,prefix=gnu-cpu-env-pr- - type=ref,event=branch,prefix=gnu-cpu-env- - type=match,pattern=ghci-snl-(.*),group=1,prefix=gnu-cpu-env + type=raw,value=${{ matrix.tag }},enable=${{ github.ref == 'refs/heads/main' }} + type=ref,event=pr,prefix=${{ matrix.tag }}-pr- + type=ref,event=branch,prefix=${{ matrix.tag }}- + type=match,pattern=ghci-snl-(.*),group=1,prefix=${{ matrix.tag }} labels: | - org.opencontainers.image.description=GNU env image for E3SM ghci-snl testing on CPU on GitHub actions + org.opencontainers.image.description=${{ matrix.tag }} image for E3SM ghci-snl testing on CPU on GitHub actions - name: Push uses: docker/build-push-action@v6 with: - context: ghci-snl/env/gnu-cpu - file: ghci-snl/env/gnu-cpu/Dockerfile + context: ghci-snl/final/${{ matrix.tag }} + file: ghci-snl/final/${{ matrix.tag }}/Dockerfile push: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} build-args: | - BASE_TAG=${{ github.event_name == 'pull_request' && format('gnu-13.3.0-pr-{0}', github.event.pull_request.number) || 'gnu-13.3.0' }} - cache-from: type=gha - cache-to: type=gha,mode=max + BASE_TAG=${{ matrix.compiler }}-${{ matrix.version }}${{ github.event_name == 'pull_request' && format('-pr-{0}', github.event.pull_request.number) || '' }} + cache-from: type=gha,scope=${{ matrix.tag }} + cache-to: type=gha,scope=${{ matrix.tag }},mode=max diff --git a/ghci-snl/env/gnu-cpu/Dockerfile b/ghci-snl/final/gnu-cpu-env/Dockerfile similarity index 99% rename from ghci-snl/env/gnu-cpu/Dockerfile rename to ghci-snl/final/gnu-cpu-env/Dockerfile index fafa0a7..116a33b 100644 --- a/ghci-snl/env/gnu-cpu/Dockerfile +++ b/ghci-snl/final/gnu-cpu-env/Dockerfile @@ -1,4 +1,4 @@ -ARG BASE_TAG=base +ARG BASE_TAG=UNSET ARG BASE_IMAGE=ghcr.io/e3sm-project/e3sm-ghci-snl FROM ${BASE_IMAGE}:${BASE_TAG} diff --git a/ghci-snl/final/gnu-cuda-env/Dockerfile b/ghci-snl/final/gnu-cuda-env/Dockerfile new file mode 100644 index 0000000..87e38f2 --- /dev/null +++ b/ghci-snl/final/gnu-cuda-env/Dockerfile @@ -0,0 +1,80 @@ +ARG BASE_TAG=UNSET +ARG NVIDIA_DRIVER_VERSION=535 +ARG BASE_IMAGE=ghcr.io/e3sm-project/e3sm-ghci-snl +FROM ${BASE_IMAGE}:${BASE_TAG} + +# Add cuda drivers +# EXPLANATION: blake currently runs cuda drivers version 535. +# The default behavior of the nvidia repo is to only enable the 580 +# version, so we first need to enable the 535 version stream +COPY cuda-rhel9.repo /etc/yum.repos.d/cuda-rhel9.repo +RUN microdnf --enablerepo=cuda-rhel9-x86_64 -y install \ + nvidia-driver-NVML-535.86.10 \ + nvidia-driver-cuda-535.86.10 \ + nvidia-driver-cuda-libs-535.86.10 \ + nvidia-driver-535.86.10 \ + nvidia-driver-libs-535.86.10 + +# Install packages in chunks, so we can tweak versions of some pkg without +# rebuilding the whole image. Hence, put "stable" pkgs first to minimize rebuild time +# NOTE: the env vars COMPILER, COMPILER_VERSION, and SPACK_ARCH are defined in the base image + +# Common utilities +RUN source /spack/share/spack/setup-env.sh && \ + spack install yaml-cpp cmake %${COMPILER}@${COMPILER_VERSION} arch=${SPACK_ARCH} + +# Common scientific libs (non-MPI dependent) +RUN source /spack/share/spack/setup-env.sh && \ + spack install boost netlib-lapack %${COMPILER}@${COMPILER_VERSION} arch=${SPACK_ARCH} + +# CUDA +RUN source /spack/share/spack/setup-env.sh && \ + spack install cuda@12.4.0 %${COMPILER}@${COMPILER_VERSION} arch=${SPACK_ARCH} + +# MPI +RUN source /spack/share/spack/setup-env.sh && \ + spack install mpich@4.1.1 %${COMPILER}@${COMPILER_VERSION} arch=${SPACK_ARCH} + +# Netcdf libraries +RUN source /spack/share/spack/setup-env.sh && \ + spack install netcdf-c+mpi netcdf-fortran parallel-netcdf %${COMPILER}@${COMPILER_VERSION} arch=${SPACK_ARCH} + +# Make sure the modules for the installed packages are all available +RUN source /spack/share/spack/setup-env.sh && \ + spack module lmod refresh -y --delete-tree + +# Generate the profile.d script to load them all at bash startup +RUN echo "module load yaml-cpp cmake" >> /etc/profile.d/eamxx-env.sh +RUN echo "module load boost netlib-lapack" >> /etc/profile.d/eamxx-env.sh +RUN echo "module load cuda" >> /etc/profile.d/eamxx-env.sh +RUN echo "module load mpich" >> /etc/profile.d/eamxx-env.sh +RUN echo "module load netcdf-c netcdf-fortran parallel-netcdf" >> /etc/profile.d/eamxx-env.sh + +# Install numpy/cupy +RUN source /etc/profile.d/modules.sh && \ + source /etc/profile.d/eamxx-env.sh && \ + python3 -m pip install numpy cupy + +# Install pytorch +RUN source /etc/profile.d/modules.sh && \ + source /etc/profile.d/eamxx-env.sh && \ + python3 -m pip install \ + --extra-index-url https://download.pytorch.org/whl/cu124 \ + torch==2.6.0+cu124 + +# Whomever will run the container will be able to pip install pkgs in the venv +# After all, the container is ephemeral/disposable, so there's no persistent state +RUN chmod -R a+rwX /projects/e3sm/software/eamxx-venv + +# Clean up garbage packages that were only needed to BUILD other pkgs (not to USE them) +RUN source /spack/share/spack/setup-env.sh && spack gc -y + +# Remove spack repo (except .git, so you can restore it) and spack buildcache (to keep image size under control) +RUN rm -rf /spack-buildcache && \ + rm -rf /spack/* + +# CIME tests need a bunch of perl +RUN microdnf install -y perl + +ENTRYPOINT [] +CMD [ "/bin/bash", "--login" ] diff --git a/ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo b/ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo new file mode 100644 index 0000000..3d6b68c --- /dev/null +++ b/ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo @@ -0,0 +1,6 @@ +[cuda-rhel9-x86_64] +name=cuda-rhel9-x86_64 +baseurl=https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64 +enabled=1 +gpgcheck=1 +gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/D42D0685.pub diff --git a/ghci-snl/final/intel-cpu-env/Dockerfile b/ghci-snl/final/intel-cpu-env/Dockerfile new file mode 100644 index 0000000..06e446f --- /dev/null +++ b/ghci-snl/final/intel-cpu-env/Dockerfile @@ -0,0 +1,58 @@ +ARG BASE_TAG=UNSET +ARG BASE_IMAGE=ghcr.io/e3sm-project/e3sm-ghci-snl +FROM ${BASE_IMAGE}:${BASE_TAG} + +# Install packages in chunks, so we can tweak versions of some pkg without +# rebuilding the whole image. Hence, put "stable" pkgs first to minimize rebuild time +# NOTE: the env vars COMPILER, COMPILER_VERSION, and SPACK_ARCH are defined in the base image + +# Common utilities +RUN source /spack/share/spack/setup-env.sh && \ + spack install yaml-cpp cmake %${COMPILER}@${COMPILER_VERSION} arch=${SPACK_ARCH} + +# Common scientific libs (non-MPI dependent) +RUN source /spack/share/spack/setup-env.sh && \ + spack install boost intel-oneapi-mkl %${COMPILER}@${COMPILER_VERSION} arch=${SPACK_ARCH} + +# MPI and Netcdf libraries +RUN source /spack/share/spack/setup-env.sh && \ + spack install openmpi@4.1.4 netcdf-c+mpi netcdf-fortran parallel-netcdf %${COMPILER}@${COMPILER_VERSION} arch=${SPACK_ARCH} + +# Debugging libs +RUN source /spack/share/spack/setup-env.sh && \ + spack install valgrind@3.20~mpi %${COMPILER}@${COMPILER_VERSION} arch=${SPACK_ARCH} + +# Make sure the modules for the installed packages are all available +RUN source /spack/share/spack/setup-env.sh && \ + spack module lmod refresh -y --delete-tree + +# Generate the profile.d script to load them all at bash startup +RUN echo "module load yaml-cpp cmake" >> /etc/profile.d/eamxx-env.sh +RUN echo "module load boost intel-oneapi-mkl" >> /etc/profile.d/eamxx-env.sh +RUN echo "module load openmpi" >> /etc/profile.d/eamxx-env.sh +RUN echo "module load netcdf-c netcdf-fortran parallel-netcdf" >> /etc/profile.d/eamxx-env.sh +RUN echo "module load valgrind" >> /etc/profile.d/eamxx-env.sh + +# Install pytorch +RUN source /etc/profile.d/modules.sh && \ + source /etc/profile.d/eamxx-env.sh && \ + python3 -m pip install \ + --extra-index-url https://download.pytorch.org/whl/cpu \ + torch numpy + +# Whomever will run the container will be able to pip install pkgs in the venv +# After all, the container is ephemeral/disposable, so there's no persistent state +RUN chmod -R a+rwX /projects/e3sm/software/eamxx-venv + +# Clean up garbage packages that were only needed to BUILD other pkgs (not to USE them) +RUN source /spack/share/spack/setup-env.sh && spack gc -y + +# Remove spack repo (except .git, so you can restore it) and spack buildcache (to keep image size under control) +RUN rm -rf /spack-buildcache && \ + rm -rf /spack/* + +# CIME tests need a bunch of perl +RUN microdnf install -y perl + +ENTRYPOINT [] +CMD [ "/bin/bash", "--login" ] From 7e7dbe4c85dd7abd6ace4242598e38997d303715 Mon Sep 17 00:00:00 2001 From: Luca Bertagna Date: Fri, 28 Aug 2026 14:16:53 -0600 Subject: [PATCH 2/7] Fix SSL issues directly in base image --- ghci-snl/base/Dockerfile | 27 ++++++++++++++++----------- ghci-snl/compiler/Dockerfile | 2 +- ghci-snl/final/gnu-cpu-env/Dockerfile | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/ghci-snl/base/Dockerfile b/ghci-snl/base/Dockerfile index 3502b58..40199ff 100644 --- a/ghci-snl/base/Dockerfile +++ b/ghci-snl/base/Dockerfile @@ -1,18 +1,22 @@ FROM registry.access.redhat.com/ubi9-minimal:latest -# 1. Setup EPEL repository +# 1. Setup certificates RUN microdnf update -y && \ microdnf install -y ca-certificates && \ update-ca-trust && \ microdnf clean all && \ rm -rf /var/cache/dnf +ENV SSL_CERT_DIR=/etc/pki/tls/certs \ + SSL_CERT_FILE=/etc/pki/tls/cert.pem + +# 2. Setup EPEL repository RUN rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel*.repo && \ microdnf clean all && \ rm -rf /var/cache/dnf -# 2. Core build tools & compilers +# 3. Core build tools & compilers RUN microdnf -y install \ binutils \ bzip2-devel \ @@ -29,7 +33,7 @@ RUN microdnf -y install \ && microdnf clean all \ && rm -rf /var/cache/dnf -# 3. Scripting runtimes (python & perl) +# 4. Scripting runtimes (python & perl) RUN microdnf -y install \ perl-devel \ python3 \ @@ -37,7 +41,7 @@ RUN microdnf -y install \ && microdnf clean all \ && rm -rf /var/cache/dnf -# 4. Utilities, archiving & environment tools +# 5. Utilities, archiving & environment tools RUN microdnf -y --enablerepo=epel install \ bind-utils \ bzip2 \ @@ -57,7 +61,7 @@ RUN microdnf -y --enablerepo=epel install \ && microdnf clean all \ && rm -rf /var/cache/dnf -# 5. Locales configuration +# 6. Locales configuration RUN microdnf -y install \ glibc-langpack-en \ && microdnf clean all \ @@ -68,7 +72,7 @@ ENV LANG=en_US.UTF-8 \ LC_CTYPE=en_US.UTF-8 \ LANGUAGE=en_US.UTF-8 -# 6. Setup SPACK +# 7. Setup SPACK ARG SPACK_VER=v0.23.1 ENV SPACK_ROOT=/spack \ SPACK_ARCH=linux-rhel9-x86_64 \ @@ -82,10 +86,11 @@ ADD spack-configuration/packages.yaml /spack-configuration/packages.yaml ADD spack-configuration/config.yaml /spack-configuration/config.yaml ADD spack-configuration/mirrors.yaml /spack-configuration/mirrors.yaml -# 7. Setup project directory & user shell environment -RUN mkdir -p /projects/e3sm/software /projects/e3sm/data /opt/share && \ - echo 'bind "\"\\e[A\": history-search-backward"' > /opt/share/bash-goodies.sh && \ - echo 'bind "\"\\e[B\": history-search-forward"' >> /opt/share/bash-goodies.sh && \ - echo 'git config --global url."https://github.com/".insteadOf git@github.com:' >> /opt/share/bash-goodies.sh +# 8. Setup project directory & user shell environment +RUN mkdir -p /projects/e3sm/software /projects/e3sm/data + +RUN echo 'bind "\"\\e[A\": history-search-backward"' > /etc/profile.d/eamxx-env.sh && \ + echo 'bind "\"\\e[B\": history-search-forward"' >> /etc/profile.d/eamxx-env.sh && \ + echo 'git config --global url."https://github.com/".insteadOf git@github.com:' >> /etc/profile.d/eamxx-env.sh CMD [ "/bin/bash" ] diff --git a/ghci-snl/compiler/Dockerfile b/ghci-snl/compiler/Dockerfile index 5c38881..6f32d00 100644 --- a/ghci-snl/compiler/Dockerfile +++ b/ghci-snl/compiler/Dockerfile @@ -48,7 +48,7 @@ RUN source /spack/share/spack/setup-env.sh && source /etc/profile.d/compiler_nam # to be re-installed with diff compiler, and lmod to reload the proper version. # This is 100% fine, but would produce rather lengthy warnings. RUN source /etc/profile.d/compiler_name.sh && \ - echo "source /etc/profile.d/modules.sh" > /etc/profile.d/eamxx-env.sh && \ + echo "source /etc/profile.d/modules.sh" >> /etc/profile.d/eamxx-env.sh && \ echo "MODULEPATH=/modulefiles/${SPACK_ARCH}/Core" >> /etc/profile.d/eamxx-env.sh && \ echo "export LMOD_EXPERT=1" >> /etc/profile.d/eamxx-env.sh && \ echo "export LMOD_DISABLE_WARNINGS=yes" >> /etc/profile.d/eamxx-env.sh && \ diff --git a/ghci-snl/final/gnu-cpu-env/Dockerfile b/ghci-snl/final/gnu-cpu-env/Dockerfile index 116a33b..b61c814 100644 --- a/ghci-snl/final/gnu-cpu-env/Dockerfile +++ b/ghci-snl/final/gnu-cpu-env/Dockerfile @@ -67,7 +67,7 @@ RUN microdnf install -y autoconf automake libtool && \ RUN . /etc/profile.d/eamxx-env.sh && \ git clone https://github.com/e3sm-project/e3sm /tmp/e3sm && \ - cd /tmp/e3sm && . /opt/share/bash-goodies.sh && git submodule update --init cime + cd /tmp/e3sm && . git submodule update --init cime RUN . /etc/profile.d/eamxx-env.sh && \ curl -fsSL "https://bitbucket.org/fathomteam/moab/raw/vijaysm/automated-build-scripts/install/install-bootstrap.sh?cb=$RANDOM" > /tmp/install-bootstrap.sh && \ From 28abac1881a07b7b68e80c8c88d83409260f1792 Mon Sep 17 00:00:00 2001 From: Luca Bertagna Date: Fri, 28 Aug 2026 15:45:35 -0600 Subject: [PATCH 3/7] Install vi in base image --- ghci-snl/base/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/ghci-snl/base/Dockerfile b/ghci-snl/base/Dockerfile index 40199ff..61c3e24 100644 --- a/ghci-snl/base/Dockerfile +++ b/ghci-snl/base/Dockerfile @@ -56,6 +56,7 @@ RUN microdnf -y --enablerepo=epel install \ sudo \ tar \ unzip \ + vi \ wget \ xz \ && microdnf clean all \ From 2f4375e4378387a0b041d2fc8e28c1cace35653f Mon Sep 17 00:00:00 2001 From: Luca Bertagna Date: Fri, 28 Aug 2026 18:43:16 -0600 Subject: [PATCH 4/7] Try to do away with cuda repo --- ghci-snl/final/gnu-cuda-env/Dockerfile | 12 ------------ ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo | 6 ------ 2 files changed, 18 deletions(-) delete mode 100644 ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo diff --git a/ghci-snl/final/gnu-cuda-env/Dockerfile b/ghci-snl/final/gnu-cuda-env/Dockerfile index 87e38f2..aafc604 100644 --- a/ghci-snl/final/gnu-cuda-env/Dockerfile +++ b/ghci-snl/final/gnu-cuda-env/Dockerfile @@ -3,18 +3,6 @@ ARG NVIDIA_DRIVER_VERSION=535 ARG BASE_IMAGE=ghcr.io/e3sm-project/e3sm-ghci-snl FROM ${BASE_IMAGE}:${BASE_TAG} -# Add cuda drivers -# EXPLANATION: blake currently runs cuda drivers version 535. -# The default behavior of the nvidia repo is to only enable the 580 -# version, so we first need to enable the 535 version stream -COPY cuda-rhel9.repo /etc/yum.repos.d/cuda-rhel9.repo -RUN microdnf --enablerepo=cuda-rhel9-x86_64 -y install \ - nvidia-driver-NVML-535.86.10 \ - nvidia-driver-cuda-535.86.10 \ - nvidia-driver-cuda-libs-535.86.10 \ - nvidia-driver-535.86.10 \ - nvidia-driver-libs-535.86.10 - # Install packages in chunks, so we can tweak versions of some pkg without # rebuilding the whole image. Hence, put "stable" pkgs first to minimize rebuild time # NOTE: the env vars COMPILER, COMPILER_VERSION, and SPACK_ARCH are defined in the base image diff --git a/ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo b/ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo deleted file mode 100644 index 3d6b68c..0000000 --- a/ghci-snl/final/gnu-cuda-env/cuda-rhel9.repo +++ /dev/null @@ -1,6 +0,0 @@ -[cuda-rhel9-x86_64] -name=cuda-rhel9-x86_64 -baseurl=https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64 -enabled=1 -gpgcheck=1 -gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/D42D0685.pub From b4f2cfb79cff4c9e037388b42f98fc227323ab1f Mon Sep 17 00:00:00 2001 From: Naser Mahfouz Date: Sat, 29 Aug 2026 14:15:46 -0400 Subject: [PATCH 5/7] claudio's manual review above Co-authored-by: Naser Mahfouz --- ghci-snl/final/gnu-cpu-env/Dockerfile | 2 +- ghci-snl/final/gnu-cuda-env/Dockerfile | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ghci-snl/final/gnu-cpu-env/Dockerfile b/ghci-snl/final/gnu-cpu-env/Dockerfile index b61c814..9868e72 100644 --- a/ghci-snl/final/gnu-cpu-env/Dockerfile +++ b/ghci-snl/final/gnu-cpu-env/Dockerfile @@ -67,7 +67,7 @@ RUN microdnf install -y autoconf automake libtool && \ RUN . /etc/profile.d/eamxx-env.sh && \ git clone https://github.com/e3sm-project/e3sm /tmp/e3sm && \ - cd /tmp/e3sm && . git submodule update --init cime + cd /tmp/e3sm && git submodule update --init cime RUN . /etc/profile.d/eamxx-env.sh && \ curl -fsSL "https://bitbucket.org/fathomteam/moab/raw/vijaysm/automated-build-scripts/install/install-bootstrap.sh?cb=$RANDOM" > /tmp/install-bootstrap.sh && \ diff --git a/ghci-snl/final/gnu-cuda-env/Dockerfile b/ghci-snl/final/gnu-cuda-env/Dockerfile index aafc604..b31479a 100644 --- a/ghci-snl/final/gnu-cuda-env/Dockerfile +++ b/ghci-snl/final/gnu-cuda-env/Dockerfile @@ -41,6 +41,7 @@ RUN echo "module load netcdf-c netcdf-fortran parallel-netcdf" >> /etc/profile.d # Install numpy/cupy RUN source /etc/profile.d/modules.sh && \ source /etc/profile.d/eamxx-env.sh && \ + LIBRARY_PATH="$CUDA_ROOT/lib64/stubs:$LIBRARY_PATH" \ python3 -m pip install numpy cupy # Install pytorch From 35f2e2793f50fdb067ff79678b07ba198f32c85f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 29 Aug 2026 20:31:55 +0000 Subject: [PATCH 6/7] Fix gnu-cuda-env: use CUDA_HOME instead of undefined CUDA_ROOT Co-authored-by: mahf708 <122953255+mahf708@users.noreply.github.com> --- ghci-snl/final/gnu-cuda-env/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ghci-snl/final/gnu-cuda-env/Dockerfile b/ghci-snl/final/gnu-cuda-env/Dockerfile index b31479a..f2606df 100644 --- a/ghci-snl/final/gnu-cuda-env/Dockerfile +++ b/ghci-snl/final/gnu-cuda-env/Dockerfile @@ -41,7 +41,7 @@ RUN echo "module load netcdf-c netcdf-fortran parallel-netcdf" >> /etc/profile.d # Install numpy/cupy RUN source /etc/profile.d/modules.sh && \ source /etc/profile.d/eamxx-env.sh && \ - LIBRARY_PATH="$CUDA_ROOT/lib64/stubs:$LIBRARY_PATH" \ + LIBRARY_PATH="$CUDA_HOME/lib64/stubs:$LIBRARY_PATH" \ python3 -m pip install numpy cupy # Install pytorch From ed1b1f953f020ca5eb4601c899b349a0e1fee250 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 29 Aug 2026 23:18:36 +0000 Subject: [PATCH 7/7] Add missing trailing separator to final-env tag prefix Co-authored-by: mahf708 <122953255+mahf708@users.noreply.github.com> --- .github/workflows/ghci-snl.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ghci-snl.yaml b/.github/workflows/ghci-snl.yaml index 5bb456c..cda4651 100644 --- a/.github/workflows/ghci-snl.yaml +++ b/.github/workflows/ghci-snl.yaml @@ -186,7 +186,7 @@ jobs: type=raw,value=${{ matrix.tag }},enable=${{ github.ref == 'refs/heads/main' }} type=ref,event=pr,prefix=${{ matrix.tag }}-pr- type=ref,event=branch,prefix=${{ matrix.tag }}- - type=match,pattern=ghci-snl-(.*),group=1,prefix=${{ matrix.tag }} + type=match,pattern=ghci-snl-(.*),group=1,prefix=${{ matrix.tag }}- labels: | org.opencontainers.image.description=${{ matrix.tag }} image for E3SM ghci-snl testing on CPU on GitHub actions