Skip to content

Commit ad83421

Browse files
authored
Build the arm64 image using native arm64 runners (#13)
1 parent d00f438 commit ad83421

File tree

1 file changed

+87
-17
lines changed

1 file changed

+87
-17
lines changed

.github/workflows/labs344-build.yml

Lines changed: 87 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,41 +8,111 @@ on:
88
- .github/workflows/labs344-build.yml # Self-trigger
99

1010
env:
11-
REGISTRY: ghcr.io/bouncmpe
12-
IMAGE_NAME: labs344
13-
IMAGE_TAG: 2024-2025-1
11+
REGISTRY: ghcr.io
12+
IMAGE_NAME: bouncmpe/labs344
13+
IMAGE_TAG: 2025-2026-1
1414

1515
jobs:
1616
build:
17-
runs-on: ubuntu-latest
17+
strategy:
18+
fail-fast: false
19+
matrix:
20+
platform: [ubuntu-24.04, ubuntu-24.04-arm]
21+
runs-on: ${{ matrix.platform }}
1822
permissions:
1923
id-token: write
2024
contents: read
2125
attestations: write
2226
packages: write
2327

2428
steps:
29+
- name: Get platform pair
30+
run: |
31+
platform_info=$(docker info --format '{{.OSType}}/{{.Architecture}}')
32+
platform_pair=$(echo "$platform_info" | sed 's/\//-/g')
33+
echo "PLATFORM_PAIR=${platform_pair}" >> $GITHUB_ENV
34+
2535
- name: Checkout repository
2636
uses: actions/checkout@v4
27-
28-
- name: Setup QEMU setup
29-
uses: docker/setup-qemu-action@v3
30-
37+
38+
- name: Docker meta
39+
id: meta
40+
uses: docker/metadata-action@v5
41+
with:
42+
images: |
43+
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
44+
45+
- name: Login to the registry
46+
uses: docker/login-action@v3
47+
with:
48+
registry: ${{ env.REGISTRY }}
49+
username: ${{ github.repository_owner }}
50+
password: ${{ secrets.GITHUB_TOKEN }}
51+
3152
- name: Set up Docker Buildx
3253
uses: docker/setup-buildx-action@v3
54+
55+
- name: Build and push Docker image
56+
id: build
57+
uses: docker/build-push-action@v6
58+
with:
59+
context: containers/labs344
60+
outputs: type=image,"name=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}",push-by-digest=true,name-canonical=true,push=true
61+
provenance: false
62+
sbom: false
63+
64+
- name: Export digest
65+
run: |
66+
mkdir -p ${{ runner.temp }}/digests
67+
digest="${{ steps.build.outputs.digest }}"
68+
touch "${{ runner.temp }}/digests/${digest#sha256:}"
3369
34-
- name: Log in to the registry
70+
- name: Upload digest
71+
uses: actions/upload-artifact@v4
72+
with:
73+
name: digests-${{ env.PLATFORM_PAIR }}
74+
path: ${{ runner.temp }}/digests/*
75+
if-no-files-found: error
76+
retention-days: 1
77+
78+
merge:
79+
runs-on: ubuntu-latest
80+
needs:
81+
- build
82+
steps:
83+
- name: Download digests
84+
uses: actions/download-artifact@v4
85+
with:
86+
path: ${{ runner.temp }}/digests
87+
pattern: digests-*
88+
merge-multiple: true
89+
90+
- name: Login to the registry
3591
uses: docker/login-action@v3
3692
with:
3793
registry: ${{ env.REGISTRY }}
38-
username: ${{ github.actor }}
94+
username: ${{ github.repository_owner }}
3995
password: ${{ secrets.GITHUB_TOKEN }}
4096

41-
- name: Build and push Docker image
42-
uses: docker/build-push-action@v6
97+
- name: Set up Docker Buildx
98+
uses: docker/setup-buildx-action@v3
99+
100+
- name: Docker meta
101+
id: meta
102+
uses: docker/metadata-action@v5
43103
with:
44-
context: containers/labs344
45-
provenance: mode=max
46-
platforms: linux/amd64,linux/arm64
47-
push: ${{ github.event_name != 'pull_request' }}
48-
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
104+
images: |
105+
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
106+
tags: |
107+
type=raw,value=${{ env.IMAGE_TAG }}
108+
type=raw,value=latest,enable={{ is_default_branch }}
109+
110+
- name: Create manifest list and push
111+
working-directory: ${{ runner.temp }}/digests
112+
run: |
113+
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
114+
$(printf '${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
115+
116+
- name: Inspect image
117+
run: |
118+
docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}

0 commit comments

Comments
 (0)