1515
1616jobs :
1717 build-images :
18- name : Build ${{ matrix.arch }} image
18+ name : Build ${{ matrix.arch }} ${{ matrix.target }} image
1919 runs-on : ${{ matrix.runner }}
2020 strategy :
2121 fail-fast : false
2222 matrix :
23+ arch :
24+ - name : x86-64
25+ runner : ubuntu-latest
26+ - name : arm64
27+ runner : ubuntu-24.04-arm
28+ target :
29+ - name : runtime
30+ suffix : " "
31+ - name : debug
32+ suffix : " -debug"
2333 include :
24- - arch : x86-64
34+ - arch :
35+ name : x86-64
36+ runner : ubuntu-latest
2537 runner : ubuntu-latest
26- - arch : arm64
38+ - arch :
39+ name : arm64
40+ runner : ubuntu-24.04-arm
2741 runner : ubuntu-24.04-arm
2842 steps :
2943 - name : Checkout repository
@@ -47,11 +61,14 @@ jobs:
4761
4862 - name : Build and push architecture-specific image
4963 run : |
50- docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-${{ matrix.arch }} .
51- docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-${{ matrix.arch }}
64+ docker build \
65+ --target ${{ matrix.target.name }} \
66+ -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}${{ matrix.target.suffix }}-${{ matrix.arch.name }} \
67+ .
68+ docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}${{ matrix.target.suffix }}-${{ matrix.arch.name }}
5269
5370 create-manifest :
54- name : Create multi-arch manifest
71+ name : Create multi-arch manifests
5572 needs : build-images
5673 runs-on : ubuntu-latest
5774 steps :
@@ -71,14 +88,36 @@ jobs:
7188 echo "version=dev-$(date +%s)" >> $GITHUB_OUTPUT
7289 fi
7390
74- - name : Create and push multi-arch manifest
91+ - name : Create and push versioned manifest
7592 run : |
7693 docker manifest create ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }} \
7794 ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-x86-64 \
7895 ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-arm64
79-
8096 docker manifest push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}
8197
98+ - name : Create and push debug versioned manifest
99+ run : |
100+ docker manifest create ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-debug \
101+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-debug-x86-64 \
102+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-debug-arm64
103+ docker manifest push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-debug
104+
105+ - name : Tag debug as latest
106+ if : github.event_name != 'workflow_dispatch'
107+ run : |
108+ docker manifest create ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:debug \
109+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-debug-x86-64 \
110+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-debug-arm64
111+ docker manifest push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:debug
112+
113+ - name : Tag as latest (pushed last to appear at top)
114+ if : github.event_name != 'workflow_dispatch'
115+ run : |
116+ docker manifest create ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest \
117+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-x86-64 \
118+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-arm64
119+ docker manifest push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
120+
82121 create-release :
83122 name : Create GitHub release
84123 needs : [build-images, create-manifest]
0 commit comments