Skip to content

Commit b639628

Browse files
authored
Update Docker workflow for permissions and manifests
Added permissions for Docker actions and updated login steps for GHCR. Enhanced manifest creation for multi-architecture images.
1 parent 8d9a83b commit b639628

File tree

1 file changed

+64
-12
lines changed

1 file changed

+64
-12
lines changed

.github/workflows/docker.yml

Lines changed: 64 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ on:
99
description: 'tag to containerize'
1010
required: true
1111

12+
permissions:
13+
contents: read
14+
packages: write
15+
1216
concurrency:
1317
group: Containerization
1418
cancel-in-progress: false
@@ -24,6 +28,7 @@ jobs:
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

Comments
 (0)