Skip to content

Commit c8f8eb7

Browse files
committed
Make dev-container build a multi-runner host build.
Signed-off-by: Gerd Zellweger <mail@gerdzellweger.com>
1 parent aa653bd commit c8f8eb7

File tree

1 file changed

+95
-9
lines changed

1 file changed

+95
-9
lines changed

.github/workflows/build-docker-dev.yml

Lines changed: 95 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,35 @@ env:
1010
jobs:
1111
build-docker-ci-dev:
1212
name: Build Docker Container used by Actions
13-
runs-on: ubuntu-latest
13+
strategy:
14+
matrix:
15+
include:
16+
- runner: [self-hosted, skylake40]
17+
rust_target: x86_64-unknown-linux-gnu
18+
docker_arch: amd64
19+
docker_platform: linux/amd64
20+
- runner: blacksmith-16vcpu-ubuntu-2204-arm
21+
rust_target: aarch64-unknown-linux-gnu
22+
docker_arch: arm64
23+
docker_platform: linux/arm64
24+
runs-on: ${{ matrix.runner }}
1425

1526
steps:
1627
- name: Checkout Repository
1728
uses: actions/checkout@v4
1829

30+
- name: Prepare Platform Environment Variable
31+
run: |
32+
platform=${{ matrix.docker_platform }}
33+
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
34+
35+
- name: Docker meta
36+
id: meta
37+
uses: docker/metadata-action@v5
38+
with:
39+
images: |
40+
${{ env.IMAGE_NAME }}
41+
1942
- name: Set up Docker Buildx
2043
uses: docker/setup-buildx-action@v3
2144
with:
@@ -28,12 +51,75 @@ jobs:
2851
username: ${{ github.actor }}
2952
password: ${{ secrets.GITHUB_TOKEN }}
3053

31-
- name: Build and push Multi-Arch Docker Image
54+
- name: Build and push by digest
55+
id: build
56+
uses: docker/build-push-action@v6
57+
with:
58+
context: .
59+
file: deploy/build.Dockerfile
60+
platforms: ${{ matrix.docker_platform }}
61+
labels: ${{ steps.meta.outputs.labels }}
62+
tags: ${{ env.IMAGE_NAME }}
63+
outputs: type=image,push-by-digest=true,name-canonical=true,push=true
64+
cache-from: type=gha
65+
cache-to: type=gha,mode=max
66+
67+
- name: Export digest
68+
run: |
69+
rm -rf ${{ runner.temp }}/digests
70+
mkdir -p ${{ runner.temp }}/digests
71+
digest="${{ steps.build.outputs.digest }}"
72+
touch "${{ runner.temp }}/digests/${digest#sha256:}"
73+
74+
- name: Upload digest
75+
uses: actions/upload-artifact@v4
76+
with:
77+
name: digests-${{ env.PLATFORM_PAIR }}
78+
path: ${{ runner.temp }}/digests/*
79+
if-no-files-found: error
80+
retention-days: 7
81+
82+
# One problem with this workflow is the unknown/unknown architecture
83+
# it adds in the github UI. It's a github bug:
84+
# https://github.com/orgs/community/discussions/45969
85+
merge-manifests:
86+
name: Merge Docker Manifests
87+
runs-on: ubuntu-latest
88+
needs: build-docker-ci-dev
89+
steps:
90+
- name: Download digests
91+
uses: actions/download-artifact@v4
92+
with:
93+
path: ${{ runner.temp }}/digests
94+
pattern: digests-*
95+
merge-multiple: true
96+
97+
- name: Login to GHCR
98+
uses: docker/login-action@v3
99+
with:
100+
registry: ${{ env.REGISTRY }}
101+
username: ${{ github.actor }}
102+
password: ${{ secrets.GITHUB_TOKEN }}
103+
104+
- name: Set up Docker Buildx
105+
uses: docker/setup-buildx-action@v3
106+
with:
107+
version: latest
108+
109+
- name: Docker meta
110+
id: meta
111+
uses: docker/metadata-action@v5
112+
with:
113+
images: ${{ env.IMAGE_NAME }}
114+
tags: |
115+
type=sha,format=long
116+
117+
- name: Create manifest list and push
118+
working-directory: ${{ runner.temp }}/digests
119+
run: |
120+
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
121+
$(printf '${{ env.IMAGE_NAME }}@sha256:%s ' *)
122+
123+
- name: Inspect image
32124
run: |
33-
docker buildx build \
34-
--platform linux/amd64,linux/arm64 \
35-
-t ${{ env.IMAGE_NAME }}:latest \
36-
-t ${{ env.IMAGE_NAME }}:${{ github.sha }} \
37-
-f build.Dockerfile . \
38-
--push
39-
working-directory: deploy
125+
docker buildx imagetools inspect ${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}

0 commit comments

Comments
 (0)