99 description : ' tag to containerize'
1010 required : true
1111
12+ permissions :
13+ contents : read
14+ packages : write
15+
1216concurrency :
1317 group : Containerization
1418 cancel-in-progress : false
2428 runs-on : ${{ matrix.config.runner }}
2529 outputs :
2630 tag : ${{ steps.clone.outputs.tag }}
31+
2732 steps :
2833 - name : Free Disk Space
2934 uses : jlumbroso/free-disk-space@main
@@ -36,12 +41,20 @@ jobs:
3641 docker-images : true
3742 swap-storage : true
3843
39- - name : Login
44+ # ----- Logins -----
45+ - name : Login to Docker Hub
4046 uses : docker/login-action@v3
4147 with :
4248 username : ${{ secrets.DOCKERHUB_USERNAME }}
4349 password : ${{ secrets.DOCKERHUB_PASSWORD }}
4450
51+ - name : Login to GHCR
52+ uses : docker/login-action@v3
53+ with :
54+ registry : ghcr.io
55+ username : ${{ github.actor }}
56+ password : ${{ secrets.GITHUB_TOKEN }}
57+
4558 - name : Setup Buildx
4659 uses : docker/setup-buildx-action@v3
4760
@@ -89,12 +102,16 @@ jobs:
89102 FC_COMPILER=${{ 'gfortran' }}
90103 COMPILER_PATH=${{ '/usr/bin' }}
91104 COMPILER_LD_LIBRARY_PATH=${{ '/usr/lib' }}
92- tags : ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}
105+ labels : |
106+ org.opencontainers.image.source=https://github.com/${{ github.repository }}
107+ tags : |
108+ ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}
109+ ghcr.io/${{ github.repository_owner }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}
93110 push : true
94111
95112 - name : Build and push image (gpu)
96113 if : ${{ matrix.config.name == 'gpu' }}
97- uses : docker/build-push-action@v5
114+ uses : docker/build-push-action@v6
98115 with :
99116 builder : default
100117 context : /mnt/share
@@ -107,26 +124,61 @@ jobs:
107124 FC_COMPILER=${{ 'nvfortran' }}
108125 COMPILER_PATH=${{ '/opt/nvidia/hpc_sdk/Linux_x86_64/compilers/bin' }}
109126 COMPILER_LD_LIBRARY_PATH=${{ '/opt/nvidia/hpc_sdk/Linux_x86_64/compilers/lib' }}
110- tags : ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner}}
127+ labels : |
128+ org.opencontainers.image.source=https://github.com/${{ github.repository }}
129+ tags : |
130+ ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner}}
131+ ghcr.io/${{ github.repository_owner }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner}}
111132 push : true
112133
113134 manifests :
114135 runs-on : ubuntu-latest
115136 needs : Container
116137 steps :
117- - name : Login
138+ - name : Login to Docker Hub
118139 uses : docker/login-action@v3
119140 with :
120141 username : ${{ secrets.DOCKERHUB_USERNAME }}
121142 password : ${{ secrets.DOCKERHUB_PASSWORD }}
122143
123- - name : Create and Push Manifest Lists
144+ - name : Login to GHCR
145+ uses : docker/login-action@v3
146+ with :
147+ registry : ghcr.io
148+ username : ${{ github.actor }}
149+ password : ${{ secrets.GITHUB_TOKEN }}
150+
151+ - name : Create and Push Manifest Lists (Docker Hub + GHCR)
124152 env :
125153 TAG : ${{ needs.Container.outputs.tag }}
126- REGISTRY : ${{ secrets.DOCKERHUB_USERNAME }}/mfc
154+ DH_REGISTRY : ${{ secrets.DOCKERHUB_USERNAME }}/mfc
155+ GH_REGISTRY : ghcr.io/${{ github.repository_owner }}/mfc
127156 run : |
128- docker buildx imagetools create -t $REGISTRY:latest-cpu $REGISTRY:$TAG-cpu
129- docker manifest create $REGISTRY:$TAG-gpu $REGISTRY:$TAG-gpu-ubuntu-22.04 $REGISTRY:$TAG-gpu-ubuntu-22.04-arm
130- docker manifest create $REGISTRY:latest-gpu $REGISTRY:$TAG-gpu-ubuntu-22.04 $REGISTRY:$TAG-gpu-ubuntu-22.04-arm
131- docker manifest push $REGISTRY:$TAG-gpu
132- docker manifest push $REGISTRY:latest-gpu
157+ # ---- CPU multi-arch "latest-cpu" from the already pushed $TAG-cpu ----
158+ docker buildx imagetools create -t $DH_REGISTRY:latest-cpu $DH_REGISTRY:$TAG-cpu
159+ docker buildx imagetools create -t $GH_REGISTRY:latest-cpu $GH_REGISTRY:$TAG-cpu
160+
161+ # ---- GPU manifests across the two runners ----
162+ # Tag these for versioned + latest GPU
163+ docker manifest create $DH_REGISTRY:$TAG-gpu \
164+ $DH_REGISTRY:$TAG-gpu-ubuntu-22.04 \
165+ $DH_REGISTRY:$TAG-gpu-ubuntu-22.04-arm
166+
167+ docker manifest create $DH_REGISTRY:latest-gpu \
168+ $DH_REGISTRY:$TAG-gpu-ubuntu-22.04 \
169+ $DH_REGISTRY:$TAG-gpu-ubuntu-22.04-arm
170+
171+ docker manifest push $DH_REGISTRY:$TAG-gpu
172+ docker manifest push $DH_REGISTRY:latest-gpu
173+
174+ # GHCR equivalent
175+ docker manifest create $GH_REGISTRY:$TAG-gpu \
176+ $GH_REGISTRY:$TAG-gpu-ubuntu-22.04 \
177+ $GH_REGISTRY:$TAG-gpu-ubuntu-22.04-arm
178+
179+ docker manifest create $GH_REGISTRY:latest-gpu \
180+ $GH_REGISTRY:$TAG-gpu-ubuntu-22.04 \
181+ $GH_REGISTRY:$TAG-gpu-ubuntu-22.04-arm
182+
183+ docker manifest push $GH_REGISTRY:$TAG-gpu
184+ docker manifest push $GH_REGISTRY:latest-gpu
0 commit comments