diff --git a/.github/Dockerfile b/.github/Dockerfile index 5b86e0f711..64cb15e9f3 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -8,6 +8,9 @@ ARG FC_COMPILER ARG COMPILER_PATH ARG COMPILER_LD_LIBRARY_PATH +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=UTC + RUN apt-get update -y && \ apt-get install -y software-properties-common ca-certificates gnupg && \ add-apt-repository ppa:deadsnakes/ppa && \ @@ -50,14 +53,14 @@ RUN python3.12 -m venv /opt/MFC/build/venv && \ RUN echo "TARGET=$TARGET CC=$CC_COMPILER FC=$FC_COMPILER" && \ cd /opt/MFC && \ if [ "$TARGET" = "gpu" ]; then \ - ./mfc.sh build --gpu -j $(nproc); \ + ./mfc.sh build --gpu acc -j $(nproc); \ else \ ./mfc.sh build -j $(nproc); \ fi RUN cd /opt/MFC && \ if [ "$TARGET" = "gpu" ]; then \ - ./mfc.sh test -a --dry-run --gpu -j $(nproc); \ + ./mfc.sh test -a --dry-run --gpu acc -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 e905aae794..fab7b0a15f 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -3,11 +3,13 @@ name: Containerization on: release: types: [published] + schedule: + - cron: '0 0 * * 0' workflow_dispatch: inputs: tag: description: 'tag to containerize' - required: true + required: false concurrency: group: Containerization @@ -18,9 +20,10 @@ jobs: strategy: matrix: config: - - { name: 'cpu', runner: 'ubuntu-22.04', base_image: 'ubuntu:22.04' } - - { name: 'gpu', runner: 'ubuntu-22.04', base_image: 'nvcr.io/nvidia/nvhpc:23.11-devel-cuda_multi-ubuntu22.04' } - - { name: 'gpu', runner: 'ubuntu-22.04-arm', base_image: 'nvcr.io/nvidia/nvhpc:23.11-devel-cuda_multi-ubuntu22.04' } + - { 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' } runs-on: ${{ matrix.config.runner }} outputs: tag: ${{ steps.clone.outputs.tag }} @@ -45,16 +48,19 @@ jobs: - name: Setup Buildx uses: docker/setup-buildx-action@v3 - - name: Setup QEMU - uses: docker/setup-qemu-action@v3 - - name: Clone id: clone run: | - TAG="${{ github.event.inputs.tag || github.ref_name }}" + if [ "${{ github.event_name }}" = "schedule" ]; then + BRANCH="master" + TAG="nightly" + else + BRANCH="${{ github.event.inputs.tag || github.ref_name }}" + TAG=$(echo "$BRANCH" | tr '/' '-') + fi echo "tag=$TAG" >> $GITHUB_OUTPUT echo "TAG=$TAG" >> $GITHUB_ENV - git clone --branch "$TAG" --depth 1 ${{ github.server_url }}/${{ github.repository }}.git mfc + git clone --branch "$BRANCH" --depth 1 ${{ github.server_url }}/${{ github.repository }}.git mfc - name: Stage run: | @@ -71,16 +77,13 @@ jobs: cp -r mfc/.git /mnt/share/.git cp mfc/.github/Dockerfile /mnt/share/ cp mfc/.github/.dockerignore /mnt/share/ - docker buildx create --name mfcbuilder --driver docker-container --use - name: Build and push image (cpu) if: ${{ matrix.config.name == 'cpu' }} uses: docker/build-push-action@v6 with: - builder: mfcbuilder context: /mnt/share file: /mnt/share/Dockerfile - platforms: linux/amd64,linux/arm64 build-args: | BASE_IMAGE=${{ matrix.config.base_image }} TARGET=${{ matrix.config.name }} @@ -89,7 +92,7 @@ jobs: FC_COMPILER=${{ 'gfortran' }} COMPILER_PATH=${{ '/usr/bin' }} COMPILER_LD_LIBRARY_PATH=${{ '/usr/lib' }} - tags: ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }} + tags: ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner }} push: true - name: Build and push image (gpu) @@ -105,8 +108,8 @@ jobs: CC_COMPILER=${{ 'nvc' }} CXX_COMPILER=${{ 'nvc++' }} FC_COMPILER=${{ 'nvfortran' }} - COMPILER_PATH=${{ '/opt/nvidia/hpc_sdk/Linux_x86_64/compilers/bin' }} - COMPILER_LD_LIBRARY_PATH=${{ '/opt/nvidia/hpc_sdk/Linux_x86_64/compilers/lib' }} + COMPILER_PATH=/opt/nvidia/hpc_sdk/${{ matrix.config.compiler_arch }}/compilers/bin + COMPILER_LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/${{ matrix.config.compiler_arch }}/compilers/lib tags: ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner}} push: true @@ -120,13 +123,22 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} + - name: Setup Buildx + uses: docker/setup-buildx-action@v3 + - name: Create and Push Manifest Lists env: TAG: ${{ needs.Container.outputs.tag }} REGISTRY: ${{ secrets.DOCKERHUB_USERNAME }}/mfc run: | - docker buildx imagetools create -t $REGISTRY:latest-cpu $REGISTRY:$TAG-cpu - docker manifest create $REGISTRY:$TAG-gpu $REGISTRY:$TAG-gpu-ubuntu-22.04 $REGISTRY:$TAG-gpu-ubuntu-22.04-arm - docker manifest create $REGISTRY:latest-gpu $REGISTRY:$TAG-gpu-ubuntu-22.04 $REGISTRY:$TAG-gpu-ubuntu-22.04-arm - docker manifest push $REGISTRY:$TAG-gpu - docker manifest push $REGISTRY:latest-gpu \ No newline at end of file + docker buildx imagetools create -t $REGISTRY:$TAG-cpu $REGISTRY:$TAG-cpu-ubuntu-22.04 $REGISTRY:$TAG-cpu-ubuntu-22.04-arm + docker buildx imagetools create -t $REGISTRY:$TAG-gpu $REGISTRY:$TAG-gpu-ubuntu-22.04 $REGISTRY:$TAG-gpu-ubuntu-22.04-arm + + - name: Update latest tags + if: github.event_name == 'release' + env: + TAG: ${{ needs.Container.outputs.tag }} + REGISTRY: ${{ secrets.DOCKERHUB_USERNAME }}/mfc + run: | + docker buildx imagetools create -t $REGISTRY:latest-cpu $REGISTRY:$TAG-cpu-ubuntu-22.04 $REGISTRY:$TAG-cpu-ubuntu-22.04-arm + docker buildx imagetools create -t $REGISTRY:latest-gpu $REGISTRY:$TAG-gpu-ubuntu-22.04 $REGISTRY:$TAG-gpu-ubuntu-22.04-arm