From 81b8dc7b48f152931685c33898fda954ac376196 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Sun, 10 May 2026 22:07:36 -0500 Subject: [PATCH 1/7] feat: add AMD GPU (amdflang/OpenMP offload) container support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile: add TARGET=amd branch — downloads AFAR drop from repo.radeon.com, installs cmake 3.28 (3.22 doesn't recognise LLVMFlang), builds MPICH 3.4.3 with amdflang so mpi.mod is compiler-compatible; runtime libs libnuma1/libdrm2 added so only --rocm is needed at apptainer runtime - docker.yml: add amd matrix entry + build/push/manifest steps; fix cpu to run natively on amd64/arm64 instead of QEMU cross-build; add weekly nightly cron - CMakeLists.txt: make Cray-specific MPI/hipfft paths conditional on CRAY_MPICH_INC/CRAY_HIPFORT_LIB being set; fall back to standard find_package(MPI) and find_library(hipfft/amdhip64) so the self-contained container image works without any OLCF env vars loaded - toolchain: add amd90a cluster profile (HPCFund gfx90a / MI250); fix module variable export loop so vars that reference previously exported vars expand correctly --- .github/Dockerfile | 53 ++++++++++++++++++++++++++++++---- .github/workflows/docker.yml | 25 ++++++++++++++++ CMakeLists.txt | 27 ++++++++++++----- toolchain/bootstrap/modules.sh | 16 ++++++---- toolchain/modules | 15 +++++++++- 5 files changed, 118 insertions(+), 18 deletions(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index 64cb15e9f3..ceadee6361 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -7,30 +7,68 @@ ARG CXX_COMPILER ARG FC_COMPILER ARG COMPILER_PATH ARG COMPILER_LD_LIBRARY_PATH +ARG AFAR_VERSION ENV DEBIAN_FRONTEND=noninteractive ENV TZ=UTC RUN apt-get update -y && \ - apt-get install -y software-properties-common ca-certificates gnupg && \ + apt-get install -y software-properties-common ca-certificates gnupg wget && \ add-apt-repository ppa:deadsnakes/ppa && \ apt-get update -y && \ - if [ "$TARGET" != "gpu" ]; then \ + if [ "$TARGET" = "cpu" ]; then \ apt-get install -y \ build-essential git make cmake gcc g++ gfortran bc \ python3.12 python3.12-venv python3-pip \ openmpi-bin libopenmpi-dev libfftw3-dev \ mpich libmpich-dev; \ - else \ + elif [ "$TARGET" = "gpu" ]; then \ apt-get install -y \ build-essential git make cmake bc \ python3.12 python3.12-venv python3-pip \ libfftw3-dev \ openmpi-bin libopenmpi-dev; \ + elif [ "$TARGET" = "amd" ]; then \ + apt-get install -y \ + build-essential git make gcc g++ gfortran bc \ + python3.12 python3.12-venv python3-pip \ + libfftw3-dev libnuma1 libdrm2 libdrm-amdgpu1; \ fi && \ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 2 && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* +# AMD: download AFAR, install cmake 3.28 (Ubuntu 22.04 ships 3.22 which doesn't +# recognize amdflang as LLVMFlang), then build MPICH with amdflang so the +# generated mpi.mod is compiler-compatible. +RUN if [ "$TARGET" = "amd" ] && [ -n "$AFAR_VERSION" ]; then \ + OLCF_AFAR_ROOT="/opt/${AFAR_VERSION}" && \ + wget -q "https://repo.radeon.com/rocm/misc/flang/${AFAR_VERSION}-ubuntu.tar.bz2" -O /tmp/afar.tar.bz2 && \ + tar -xjf /tmp/afar.tar.bz2 -C /opt/ && \ + rm /tmp/afar.tar.bz2 && \ + CMAKE_VER=3.28.6 && \ + wget -q "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-linux-x86_64.sh" \ + -O /tmp/cmake-install.sh && \ + chmod +x /tmp/cmake-install.sh && \ + /tmp/cmake-install.sh --prefix=/usr/local --skip-license --exclude-subdir && \ + rm /tmp/cmake-install.sh && \ + printf '#!/bin/bash\nargs=()\nwhile [ "$#" -gt 0 ]; do\n if [ "$1" = "-soname" ]; then\n args+=("-Wl,-soname,$2"); shift 2\n else\n args+=("$1"); shift\n fi\ndone\nexec '"${OLCF_AFAR_ROOT}"'/bin/amdflang "${args[@]}"\n' \ + > /usr/local/bin/amdflang-ld-wrap && \ + chmod +x /usr/local/bin/amdflang-ld-wrap && \ + MPICH_VER=3.4.3 && \ + wget -q "https://www.mpich.org/static/downloads/${MPICH_VER}/mpich-${MPICH_VER}.tar.gz" \ + -O /tmp/mpich.tar.gz && \ + mkdir -p /tmp/mpich-src && \ + tar -xzf /tmp/mpich.tar.gz -C /tmp/mpich-src --strip-components=1 && \ + cd /tmp/mpich-src && \ + FC=/usr/local/bin/amdflang-ld-wrap CC=gcc CXX=g++ \ + ./configure --prefix=/opt/mpich --enable-shared --disable-static \ + --with-device=ch3 2>&1 && \ + make -j$(nproc) 2>&1 && \ + make install 2>&1 && \ + cd / && \ + rm -rf /tmp/mpich-src /tmp/mpich.tar.gz; \ + fi + ENV OMPI_ALLOW_RUN_AS_ROOT=1 ENV OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ENV PATH="/opt/MFC:$PATH" @@ -40,8 +78,9 @@ COPY ../ /opt/MFC ENV CC=${CC_COMPILER} ENV CXX=${CXX_COMPILER} ENV FC=${FC_COMPILER} -ENV PATH="${COMPILER_PATH}:$PATH" -ENV LD_LIBRARY_PATH="${COMPILER_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH:-}" +ENV OLCF_AFAR_ROOT=/opt/${AFAR_VERSION} +ENV PATH="${COMPILER_PATH}:/opt/mpich/bin:$PATH" +ENV LD_LIBRARY_PATH="${COMPILER_LD_LIBRARY_PATH}:/opt/mpich/lib:${LD_LIBRARY_PATH:-}" # Pre-install numpy into the venv before mfc.sh runs, as it's required at # build time by several dependencies (pandas, cantera, matplotlib, etc.) that @@ -54,6 +93,8 @@ RUN echo "TARGET=$TARGET CC=$CC_COMPILER FC=$FC_COMPILER" && \ cd /opt/MFC && \ if [ "$TARGET" = "gpu" ]; then \ ./mfc.sh build --gpu acc -j $(nproc); \ + elif [ "$TARGET" = "amd" ]; then \ + ./mfc.sh build --gpu mp -j $(nproc); \ else \ ./mfc.sh build -j $(nproc); \ fi @@ -61,6 +102,8 @@ RUN echo "TARGET=$TARGET CC=$CC_COMPILER FC=$FC_COMPILER" && \ RUN cd /opt/MFC && \ if [ "$TARGET" = "gpu" ]; then \ ./mfc.sh test -a --dry-run --gpu acc -j $(nproc); \ + elif [ "$TARGET" = "amd" ]; then \ + ./mfc.sh test -a --dry-run --gpu mp -j $(nproc); \ else \ ./mfc.sh test -a --dry-run -j $(nproc); \ fi diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 6a048c36f1..5a0158238e 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -28,6 +28,7 @@ jobs: - { name: 'cpu', runner: 'ubuntu-22.04-arm', base_image: 'ubuntu:22.04' } - { name: 'gpu', runner: 'ubuntu-22.04', base_image: 'nvcr.io/nvidia/nvhpc:24.5-devel-cuda_multi-ubuntu22.04', compiler_arch: 'Linux_x86_64' } - { name: 'gpu', runner: 'ubuntu-22.04-arm', base_image: 'nvcr.io/nvidia/nvhpc:24.5-devel-cuda_multi-ubuntu22.04', compiler_arch: 'Linux_aarch64' } + - { name: 'amd', runner: 'ubuntu-22.04', base_image: 'ubuntu:22.04' } runs-on: ${{ matrix.config.runner }} outputs: tag: ${{ steps.clone.outputs.tag }} @@ -134,6 +135,28 @@ jobs: ${{ env.GH_REGISTRY }}:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner }} push: true + - name: Build and push image (amd) + if: ${{ matrix.config.name == 'amd' }} + uses: docker/build-push-action@v6 + with: + context: /mnt/share + file: /mnt/share/Dockerfile + build-args: | + BASE_IMAGE=${{ matrix.config.base_image }} + TARGET=amd + AFAR_VERSION=rocm-afar-8873-drop-22.2.0 + CC_COMPILER=gcc + CXX_COMPILER=g++ + FC_COMPILER=/opt/rocm-afar-8873-drop-22.2.0/bin/amdflang + COMPILER_PATH=/opt/rocm-afar-8873-drop-22.2.0/lib/llvm/bin:/opt/rocm-afar-8873-drop-22.2.0/bin + COMPILER_LD_LIBRARY_PATH=/opt/rocm-afar-8873-drop-22.2.0/lib:/opt/rocm-afar-8873-drop-22.2.0/lib/llvm/lib + labels: | + org.opencontainers.image.source=https://github.com/${{ github.repository }} + tags: | + ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-amd-ubuntu-22.04 + ghcr.io/${{ github.repository_owner }}/mfc:${{ env.TAG }}-amd-ubuntu-22.04 + push: true + manifests: runs-on: ubuntu-latest needs: Container @@ -171,6 +194,7 @@ jobs: for R in "$DH" "$GH"; do docker buildx imagetools create -t $R:$TAG-cpu $R:$TAG-cpu-ubuntu-22.04 $R:$TAG-cpu-ubuntu-22.04-arm docker buildx imagetools create -t $R:$TAG-gpu $R:$TAG-gpu-ubuntu-22.04 $R:$TAG-gpu-ubuntu-22.04-arm + docker buildx imagetools create -t $R:$TAG-amd $R:$TAG-amd-ubuntu-22.04 done - name: Update latest tags @@ -183,4 +207,5 @@ jobs: for R in "$DH" "$GH"; do docker buildx imagetools create -t $R:latest-cpu $R:$TAG-cpu-ubuntu-22.04 $R:$TAG-cpu-ubuntu-22.04-arm docker buildx imagetools create -t $R:latest-gpu $R:$TAG-gpu-ubuntu-22.04 $R:$TAG-gpu-ubuntu-22.04-arm + docker buildx imagetools create -t $R:latest-amd $R:$TAG-amd-ubuntu-22.04 done diff --git a/CMakeLists.txt b/CMakeLists.txt index 5622d94105..e696d20b61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -563,10 +563,11 @@ exit 0 find_package(MPI COMPONENTS Fortran REQUIRED) target_compile_definitions(${a_target} PRIVATE MFC_MPI) - if(CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang") + if(CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang" AND + DEFINED ENV{CRAY_MPICH_INC} AND NOT "$ENV{CRAY_MPICH_INC}" STREQUAL "") target_compile_options(${a_target} PRIVATE "$ENV{CRAY_MPICH_INC}") target_link_libraries(${a_target} PRIVATE $ENV{CRAY_MPICH_LIB}) - else() + else() target_link_libraries(${a_target} PRIVATE MPI::MPI_Fortran) endif() endif() @@ -587,10 +588,16 @@ exit 0 find_package(CUDAToolkit REQUIRED) target_link_libraries(${a_target} PRIVATE CUDA::cudart CUDA::cufft) elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang") - target_link_libraries(${a_target} PRIVATE $ENV{CRAY_HIPFORT_LIB}) - else() + if(DEFINED ENV{CRAY_HIPFORT_LIB} AND NOT "$ENV{CRAY_HIPFORT_LIB}" STREQUAL "") + target_link_libraries(${a_target} PRIVATE $ENV{CRAY_HIPFORT_LIB}) + else() + find_library(HIPFFT_LIB hipfft + HINTS "$ENV{OLCF_AFAR_ROOT}/lib" REQUIRED) + target_link_libraries(${a_target} PRIVATE ${HIPFFT_LIB}) + endif() + else() find_package(hipfort COMPONENTS hipfft CONFIG REQUIRED) - target_link_libraries(${a_target} PRIVATE hipfort::hipfft) + target_link_libraries(${a_target} PRIVATE hipfort::hipfft) endif() else() find_package(FFTW REQUIRED) @@ -703,8 +710,14 @@ exit 0 PRIVATE -DFRONTIER_UNIFIED) endif() - find_package(hipfort COMPONENTS hip CONFIG REQUIRED) - target_link_libraries(${a_target} PRIVATE hipfort::hip hipfort::hipfort-amdgcn flang_rt.hostdevice) + find_library(HIP_LIB amdhip64 + HINTS "$ENV{OLCF_AFAR_ROOT}/lib" REQUIRED) + find_library(HIPFORT_AMDGCN_LIB hipfort-amdgcn + HINTS "$ENV{OLCF_AFAR_ROOT}/lib" REQUIRED) + target_include_directories(${a_target} PRIVATE + "$ENV{OLCF_AFAR_ROOT}/include/hipfort/amdgcn") + target_link_libraries(${a_target} PRIVATE + ${HIP_LIB} ${HIPFORT_AMDGCN_LIB} flang_rt.hostdevice) endif() elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray") target_compile_options(${a_target} PRIVATE "SHELL:-h noacc" "SHELL:-x acc") diff --git a/toolchain/bootstrap/modules.sh b/toolchain/bootstrap/modules.sh index 1a2aa677a5..a4de3ee6c4 100644 --- a/toolchain/bootstrap/modules.sh +++ b/toolchain/bootstrap/modules.sh @@ -105,7 +105,6 @@ fi ELEMENTS="$(__extract "$u_c-all") $(__extract "$u_c-$cg")" MODULES=`echo "$ELEMENTS" | tr ' ' '\n' | grep -v = | xargs` -VARIABLES=`echo "$ELEMENTS" | tr ' ' '\n' | grep = | xargs` log " $ module load $MODULES" if ! module load $MODULES; then @@ -114,10 +113,17 @@ if ! module load $MODULES; then return fi -if [ $(echo "$VARIABLES" | grep = | wc -c) -gt 0 ]; then - log " $ export $(eval "echo $VARIABLES")" - export $(eval "echo $VARIABLES") > /dev/null -fi +# Export variables one line at a time so each can reference previously exported vars +# (e.g. PATH="${OLCF_AFAR_ROOT}/..." requires OLCF_AFAR_ROOT to already be set) +for _suffix in "all" "$cg"; do + while IFS= read -r _entry; do + if echo "$_entry" | grep -q '='; then + log " $ export $(eval "echo \"$_entry\"")" + eval "export $_entry" + fi + done < <(grep -E "^$u_c-$_suffix\s+" toolchain/modules | sed "s/^$u_c-$_suffix\s\+//") +done +unset _suffix _entry UNLOAD_MODULES="$(__extract "$u_c-all-unload") $(__extract "$u_c-$cg-unload")" UNLOAD_MODULES=$(echo "$UNLOAD_MODULES" | xargs) diff --git a/toolchain/modules b/toolchain/modules index f76c1be1b9..127866ff4d 100644 --- a/toolchain/modules +++ b/toolchain/modules @@ -46,11 +46,24 @@ f-all cpe/25.03 rocm/6.3.1 f-all cray-fftw cray-hdf5 python cmake f-gpu python craype-accel-amd-gfx90a rocprofiler-compute/3.0.0 -famd OLCF Frontier AMD +famd OLCF Frontier AMD famd-all python cmake famd-all cpe/25.09 famd-all PrgEnv-amd +amd90a HPCFund gfx90a compiler (MI250) +amd90a-gpu rocm/7.2.0 +amd90a-gpu OLCF_AFAR_ROOT="/work1/spencerbryngelson/sbryngelson/software/therock-afar-23.2.1-gfx90a-7.13.0-7357b5084b" +amd90a-gpu PATH="${OLCF_AFAR_ROOT}/lib/llvm/bin:${PATH}" +amd90a-gpu LD_LIBRARY_PATH="${OLCF_AFAR_ROOT}/lib:${OLCF_AFAR_ROOT}/lib/llvm/lib:${LD_LIBRARY_PATH}" +amd90a-gpu CRAY_HIPFORT_INC="-I${OLCF_AFAR_ROOT}/include/hipfort/amdgcn" +amd90a-gpu CRAY_HIPFORT_LIB="-L${OLCF_AFAR_ROOT}/lib -lhipfft" +amd90a-gpu CRAY_HIP_INC="-I${OLCF_AFAR_ROOT}/include/hip" +amd90a-gpu CMAKE_PREFIX_PATH="${OLCF_AFAR_ROOT}:${CMAKE_PREFIX_PATH}" +amd90a-gpu CC="${OLCF_AFAR_ROOT}/lib/llvm/bin/clang" +amd90a-gpu CXX="${OLCF_AFAR_ROOT}/lib/llvm/bin/clang++" +amd90a-gpu FC="${OLCF_AFAR_ROOT}/bin/amdflang" + tuo OLCF Tuolumne tuo-all cpe/25.03 rocm/6.3.1 tuo-all cray-fftw/3.3.10.9 cray-hdf5 python/3.12.2 cmake From 0e44c8d5bc62aae3edd181bde1b8d292aa772fa7 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Sun, 10 May 2026 22:39:00 -0500 Subject: [PATCH 2/7] fix: decouple OLCF_AFAR_ROOT from AFAR_VERSION ARG in Dockerfile ENV OLCF_AFAR_ROOT=/opt/${AFAR_VERSION} expanded to /opt/ in cpu/gpu images because those builds supply no AFAR_VERSION. Introduce a dedicated OLCF_AFAR_ROOT build-arg (default "") so cpu/gpu images get an empty var and only the AMD build passes the real path. --- .github/Dockerfile | 3 ++- .github/workflows/docker.yml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index ceadee6361..a33431c2ad 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -8,6 +8,7 @@ ARG FC_COMPILER ARG COMPILER_PATH ARG COMPILER_LD_LIBRARY_PATH ARG AFAR_VERSION +ARG OLCF_AFAR_ROOT="" ENV DEBIAN_FRONTEND=noninteractive ENV TZ=UTC @@ -78,7 +79,7 @@ COPY ../ /opt/MFC ENV CC=${CC_COMPILER} ENV CXX=${CXX_COMPILER} ENV FC=${FC_COMPILER} -ENV OLCF_AFAR_ROOT=/opt/${AFAR_VERSION} +ENV OLCF_AFAR_ROOT=${OLCF_AFAR_ROOT} ENV PATH="${COMPILER_PATH}:/opt/mpich/bin:$PATH" ENV LD_LIBRARY_PATH="${COMPILER_LD_LIBRARY_PATH}:/opt/mpich/lib:${LD_LIBRARY_PATH:-}" diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 5a0158238e..8141790f8b 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -145,6 +145,7 @@ jobs: BASE_IMAGE=${{ matrix.config.base_image }} TARGET=amd AFAR_VERSION=rocm-afar-8873-drop-22.2.0 + OLCF_AFAR_ROOT=/opt/rocm-afar-8873-drop-22.2.0 CC_COMPILER=gcc CXX_COMPILER=g++ FC_COMPILER=/opt/rocm-afar-8873-drop-22.2.0/bin/amdflang From d279200673ab795d2fc5bc81aed4cc05c106e594 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Sun, 10 May 2026 22:43:56 -0500 Subject: [PATCH 3/7] chore: remove local amd90a cluster profile from shared modules --- toolchain/modules | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/toolchain/modules b/toolchain/modules index 127866ff4d..d0496ed0ba 100644 --- a/toolchain/modules +++ b/toolchain/modules @@ -51,19 +51,6 @@ famd-all python cmake famd-all cpe/25.09 famd-all PrgEnv-amd -amd90a HPCFund gfx90a compiler (MI250) -amd90a-gpu rocm/7.2.0 -amd90a-gpu OLCF_AFAR_ROOT="/work1/spencerbryngelson/sbryngelson/software/therock-afar-23.2.1-gfx90a-7.13.0-7357b5084b" -amd90a-gpu PATH="${OLCF_AFAR_ROOT}/lib/llvm/bin:${PATH}" -amd90a-gpu LD_LIBRARY_PATH="${OLCF_AFAR_ROOT}/lib:${OLCF_AFAR_ROOT}/lib/llvm/lib:${LD_LIBRARY_PATH}" -amd90a-gpu CRAY_HIPFORT_INC="-I${OLCF_AFAR_ROOT}/include/hipfort/amdgcn" -amd90a-gpu CRAY_HIPFORT_LIB="-L${OLCF_AFAR_ROOT}/lib -lhipfft" -amd90a-gpu CRAY_HIP_INC="-I${OLCF_AFAR_ROOT}/include/hip" -amd90a-gpu CMAKE_PREFIX_PATH="${OLCF_AFAR_ROOT}:${CMAKE_PREFIX_PATH}" -amd90a-gpu CC="${OLCF_AFAR_ROOT}/lib/llvm/bin/clang" -amd90a-gpu CXX="${OLCF_AFAR_ROOT}/lib/llvm/bin/clang++" -amd90a-gpu FC="${OLCF_AFAR_ROOT}/bin/amdflang" - tuo OLCF Tuolumne tuo-all cpe/25.03 rocm/6.3.1 tuo-all cray-fftw/3.3.10.9 cray-hdf5 python/3.12.2 cmake From 9c34310a36173fc538c53a741c5ffa0f832e9715 Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Mon, 11 May 2026 08:29:32 -0500 Subject: [PATCH 4/7] feat: bake HYDRA_LAUNCHER=fork into AMD container environment --- .github/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/Dockerfile b/.github/Dockerfile index a33431c2ad..8193ea46e2 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -72,6 +72,7 @@ RUN if [ "$TARGET" = "amd" ] && [ -n "$AFAR_VERSION" ]; then \ ENV OMPI_ALLOW_RUN_AS_ROOT=1 ENV OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 +ENV HYDRA_LAUNCHER=fork ENV PATH="/opt/MFC:$PATH" COPY ../ /opt/MFC From 325cb73b0ff4c3c9c5031e925b7b50d6e2de606c Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Mon, 11 May 2026 14:01:15 -0500 Subject: [PATCH 5/7] feat: rename container tags to gpu-nvidia / gpu-amd for clarity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hard-cut from old names: -gpu → -gpu-nvidia, -amd → -gpu-amd. Also fixes AMD build step to use lowercase GH_REGISTRY and corrects the DockerHub environment URL to mflowcode/mfc. --- .github/workflows/docker.yml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 8141790f8b..28964bf8cf 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -24,11 +24,11 @@ jobs: strategy: matrix: config: - - { name: 'cpu', runner: 'ubuntu-22.04', base_image: 'ubuntu:22.04' } - - { name: 'cpu', runner: 'ubuntu-22.04-arm', base_image: 'ubuntu:22.04' } - - { name: 'gpu', runner: 'ubuntu-22.04', base_image: 'nvcr.io/nvidia/nvhpc:24.5-devel-cuda_multi-ubuntu22.04', compiler_arch: 'Linux_x86_64' } - - { name: 'gpu', runner: 'ubuntu-22.04-arm', base_image: 'nvcr.io/nvidia/nvhpc:24.5-devel-cuda_multi-ubuntu22.04', compiler_arch: 'Linux_aarch64' } - - { name: 'amd', runner: 'ubuntu-22.04', base_image: 'ubuntu:22.04' } + - { name: 'cpu', tag: 'cpu', runner: 'ubuntu-22.04', base_image: 'ubuntu:22.04' } + - { name: 'cpu', tag: 'cpu', runner: 'ubuntu-22.04-arm', base_image: 'ubuntu:22.04' } + - { name: 'gpu', tag: 'gpu-nvidia', runner: 'ubuntu-22.04', base_image: 'nvcr.io/nvidia/nvhpc:24.5-devel-cuda_multi-ubuntu22.04', compiler_arch: 'Linux_x86_64' } + - { name: 'gpu', tag: 'gpu-nvidia', runner: 'ubuntu-22.04-arm', base_image: 'nvcr.io/nvidia/nvhpc:24.5-devel-cuda_multi-ubuntu22.04', compiler_arch: 'Linux_aarch64' } + - { name: 'amd', tag: 'gpu-amd', runner: 'ubuntu-22.04', base_image: 'ubuntu:22.04' } runs-on: ${{ matrix.config.runner }} outputs: tag: ${{ steps.clone.outputs.tag }} @@ -109,8 +109,8 @@ jobs: labels: | org.opencontainers.image.source=https://github.com/${{ github.repository }} tags: | - ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner }} - ${{ env.GH_REGISTRY }}:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner }} + ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.tag }}-${{ matrix.config.runner }} + ${{ env.GH_REGISTRY }}:${{ env.TAG }}-${{ matrix.config.tag }}-${{ matrix.config.runner }} push: true - name: Build and push image (gpu) @@ -131,8 +131,8 @@ jobs: labels: | org.opencontainers.image.source=https://github.com/${{ github.repository }} tags: | - ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner }} - ${{ env.GH_REGISTRY }}:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner }} + ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.tag }}-${{ matrix.config.runner }} + ${{ env.GH_REGISTRY }}:${{ env.TAG }}-${{ matrix.config.tag }}-${{ matrix.config.runner }} push: true - name: Build and push image (amd) @@ -154,8 +154,8 @@ jobs: labels: | org.opencontainers.image.source=https://github.com/${{ github.repository }} tags: | - ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-amd-ubuntu-22.04 - ghcr.io/${{ github.repository_owner }}/mfc:${{ env.TAG }}-amd-ubuntu-22.04 + ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-gpu-amd-ubuntu-22.04 + ${{ env.GH_REGISTRY }}:${{ env.TAG }}-gpu-amd-ubuntu-22.04 push: true manifests: @@ -163,7 +163,7 @@ jobs: needs: Container environment: name: containers - url: https://hub.docker.com/r/sbryngelson/mfc + url: https://hub.docker.com/r/mflowcode/mfc steps: - name: Login to Docker Hub uses: docker/login-action@v3 @@ -193,9 +193,9 @@ jobs: run: | GH="${{ env.GH_REGISTRY }}" for R in "$DH" "$GH"; do - docker buildx imagetools create -t $R:$TAG-cpu $R:$TAG-cpu-ubuntu-22.04 $R:$TAG-cpu-ubuntu-22.04-arm - docker buildx imagetools create -t $R:$TAG-gpu $R:$TAG-gpu-ubuntu-22.04 $R:$TAG-gpu-ubuntu-22.04-arm - docker buildx imagetools create -t $R:$TAG-amd $R:$TAG-amd-ubuntu-22.04 + docker buildx imagetools create -t $R:$TAG-cpu $R:$TAG-cpu-ubuntu-22.04 $R:$TAG-cpu-ubuntu-22.04-arm + docker buildx imagetools create -t $R:$TAG-gpu-nvidia $R:$TAG-gpu-nvidia-ubuntu-22.04 $R:$TAG-gpu-nvidia-ubuntu-22.04-arm + docker buildx imagetools create -t $R:$TAG-gpu-amd $R:$TAG-gpu-amd-ubuntu-22.04 done - name: Update latest tags @@ -206,7 +206,7 @@ jobs: run: | GH="${{ env.GH_REGISTRY }}" for R in "$DH" "$GH"; do - docker buildx imagetools create -t $R:latest-cpu $R:$TAG-cpu-ubuntu-22.04 $R:$TAG-cpu-ubuntu-22.04-arm - docker buildx imagetools create -t $R:latest-gpu $R:$TAG-gpu-ubuntu-22.04 $R:$TAG-gpu-ubuntu-22.04-arm - docker buildx imagetools create -t $R:latest-amd $R:$TAG-amd-ubuntu-22.04 + docker buildx imagetools create -t $R:latest-cpu $R:$TAG-cpu-ubuntu-22.04 $R:$TAG-cpu-ubuntu-22.04-arm + docker buildx imagetools create -t $R:latest-gpu-nvidia $R:$TAG-gpu-nvidia-ubuntu-22.04 $R:$TAG-gpu-nvidia-ubuntu-22.04-arm + docker buildx imagetools create -t $R:latest-gpu-amd $R:$TAG-gpu-amd-ubuntu-22.04 done From 99b9ef92e6196f399bf5de1c6aee9550b68dc36c Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Mon, 11 May 2026 14:06:31 -0500 Subject: [PATCH 6/7] fix: restore correct DockerHub URL (sbryngelson/mfc) --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 28964bf8cf..ecfed093c9 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -163,7 +163,7 @@ jobs: needs: Container environment: name: containers - url: https://hub.docker.com/r/mflowcode/mfc + url: https://hub.docker.com/r/sbryngelson/mfc steps: - name: Login to Docker Hub uses: docker/login-action@v3 From 074c996ba452e06ae04b4bb0f769f3daec86630b Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Mon, 11 May 2026 16:08:47 -0500 Subject: [PATCH 7/7] refactor: derive AMD container paths from a single AFAR_VERSION variable --- .github/workflows/docker.yml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index ecfed093c9..c27107daed 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -135,6 +135,14 @@ jobs: ${{ env.GH_REGISTRY }}:${{ env.TAG }}-${{ matrix.config.tag }}-${{ matrix.config.runner }} push: true + - name: Set AMD AFAR vars + if: ${{ matrix.config.name == 'amd' }} + run: | + AFAR=rocm-afar-8873-drop-22.2.0 + ROOT="/opt/${AFAR}" + echo "AFAR_VERSION=${AFAR}" >> $GITHUB_ENV + echo "AFAR_ROOT=${ROOT}" >> $GITHUB_ENV + - name: Build and push image (amd) if: ${{ matrix.config.name == 'amd' }} uses: docker/build-push-action@v6 @@ -144,13 +152,13 @@ jobs: build-args: | BASE_IMAGE=${{ matrix.config.base_image }} TARGET=amd - AFAR_VERSION=rocm-afar-8873-drop-22.2.0 - OLCF_AFAR_ROOT=/opt/rocm-afar-8873-drop-22.2.0 + AFAR_VERSION=${{ env.AFAR_VERSION }} + OLCF_AFAR_ROOT=${{ env.AFAR_ROOT }} CC_COMPILER=gcc CXX_COMPILER=g++ - FC_COMPILER=/opt/rocm-afar-8873-drop-22.2.0/bin/amdflang - COMPILER_PATH=/opt/rocm-afar-8873-drop-22.2.0/lib/llvm/bin:/opt/rocm-afar-8873-drop-22.2.0/bin - COMPILER_LD_LIBRARY_PATH=/opt/rocm-afar-8873-drop-22.2.0/lib:/opt/rocm-afar-8873-drop-22.2.0/lib/llvm/lib + FC_COMPILER=${{ env.AFAR_ROOT }}/bin/amdflang + COMPILER_PATH=${{ env.AFAR_ROOT }}/lib/llvm/bin:${{ env.AFAR_ROOT }}/bin + COMPILER_LD_LIBRARY_PATH=${{ env.AFAR_ROOT }}/lib:${{ env.AFAR_ROOT }}/lib/llvm/lib labels: | org.opencontainers.image.source=https://github.com/${{ github.repository }} tags: |