Skip to content

Commit 3ec0ba8

Browse files
committed
GHA: Use shared workflow for multi-arch builds
Implements: AP-742
1 parent 0049125 commit 3ec0ba8

2 files changed

Lines changed: 23 additions & 211 deletions

File tree

.github/workflows/build.yml

Lines changed: 18 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -7,151 +7,36 @@ on:
77
workflow_call:
88
workflow_dispatch:
99

10-
env:
11-
BUILD_SUFFIX: -build-${{ github.run_id }}_${{ github.run_attempt }}
12-
DOCKER_METADATA_SET_OUTPUT_ENV: 'true'
13-
1410
jobs:
15-
build:
16-
runs-on: ${{ matrix.runner }}
17-
outputs:
18-
build-image-arm: ${{ steps.gen-output.outputs.image-arm64 }}
19-
build-image-x64: ${{ steps.gen-output.outputs.image-x64 }}
20-
strategy:
21-
fail-fast: false
22-
matrix:
23-
include:
24-
- platform: linux/amd64
25-
runner: ubuntu-24.04
26-
- platform: linux/arm64
27-
runner: ubuntu-24.04-arm
28-
steps:
29-
- name: Checkout code
30-
uses: actions/checkout@v4
31-
32-
- name: Set up Docker Buildx
33-
uses: docker/setup-buildx-action@v3
34-
35-
- name: Login to GitHub Container Registry
36-
uses: docker/login-action@v3
37-
with:
38-
registry: ghcr.io
39-
username: ${{ github.actor }}
40-
password: ${{ secrets.GITHUB_TOKEN }}
41-
42-
- id: build-meta
43-
name: Produce the build image tag
44-
uses: docker/metadata-action@v5
45-
with:
46-
images: ghcr.io/${{ github.repository }}
47-
tags: type=sha,suffix=${{ env.BUILD_SUFFIX }}
48-
49-
# Build cache is shared among all builds of the same architecture
50-
- id: cache-meta
51-
name: Fetch build cache metadata
52-
uses: docker/metadata-action@v5
53-
with:
54-
images: ghcr.io/${{ github.repository }}
55-
tags: type=raw,value=buildcache-${{ runner.arch }}
56-
57-
- id: get-registry
58-
name: Get the sanitized registry name
59-
run: |
60-
echo "registry=$(echo '${{ steps.build-meta.outputs.tags }}' | cut -f1 -d:)" | tee -a "$GITHUB_OUTPUT"
61-
62-
- id: set_build_url
63-
name: Set BUILD_URL
64-
run: |
65-
echo "build_url=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" | tee -a "$GITHUB_OUTPUT"
66-
67-
- id: build
68-
name: Build/push the arch-specific image
69-
uses: docker/build-push-action@v6
70-
with:
71-
platforms: ${{ matrix.platform }}
72-
build-args: |
73-
BUILD_TIMESTAMP=${{ github.event.repository.updated_at }}
74-
BUILD_URL=${{ steps.set_build_url.outputs.build_url }}
75-
GIT_REF_NAME=${{ github.ref_name }}
76-
GIT_SHA=${{ github.sha }}
77-
GIT_REPOSITORY_URL=${{ github.repositoryUrl }}
78-
cache-from: type=registry,ref=${{ steps.cache-meta.outputs.tags }}
79-
cache-to: type=registry,ref=${{ steps.cache-meta.outputs.tags }},mode=max
80-
labels: ${{ steps.build-meta.outputs.labels }}
81-
provenance: mode=max
82-
sbom: true
83-
tags: ${{ steps.get-registry.outputs.registry }}
84-
outputs: type=image,push-by-digest=true,push=true
85-
86-
- id: gen-output
87-
name: Write arch-specific image digest to outputs
88-
run: |
89-
echo "image-${RUNNER_ARCH,,}=${{ steps.get-registry.outputs.registry }}@${{ steps.build.outputs.digest }}" | tee -a "$GITHUB_OUTPUT"
90-
91-
merge:
92-
runs-on: ubuntu-latest
93-
needs:
94-
- build
95-
env:
96-
DOCKER_APP_IMAGE_ARM64: ${{ needs.build.outputs.build-image-arm }}
97-
DOCKER_APP_IMAGE_X64: ${{ needs.build.outputs.build-image-x64 }}
98-
outputs:
99-
build-image: ${{ steps.meta.outputs.tags }}
100-
build-image-arm: ${{ needs.build.outputs.build-image-arm }}
101-
build-image-x64: ${{ needs.build.outputs.build-image-x64 }}
102-
steps:
103-
- name: Checkout code
104-
uses: actions/checkout@v4
105-
106-
- name: Set up Docker Buildx
107-
uses: docker/setup-buildx-action@v3
108-
109-
- name: Login to GitHub Container Registry
110-
uses: docker/login-action@v3
111-
with:
112-
registry: ghcr.io
113-
username: ${{ github.actor }}
114-
password: ${{ secrets.GITHUB_TOKEN }}
115-
116-
- name: Docker meta
117-
id: meta
118-
uses: docker/metadata-action@v5
119-
with:
120-
images: ghcr.io/${{ github.repository }}
121-
tags: |
122-
type=sha,suffix=-build-${{ github.run_id }}_${{ github.run_attempt }}
123-
124-
- name: Push the multi-platform image
125-
run: |
126-
docker buildx imagetools create \
127-
--tag "$DOCKER_METADATA_OUTPUT_TAGS" \
128-
"$DOCKER_APP_IMAGE_ARM64" "$DOCKER_APP_IMAGE_X64"
11+
docker-build:
12+
uses: BerkeleyLibrary/.github/.github/workflows/docker-build.yml@v2.0.0
13+
with:
14+
image: ghcr.io/${{ github.repository }}
15+
secrets: inherit
12916

13017
test:
13118
runs-on: ubuntu-24.04
13219
needs:
133-
- merge
20+
- docker-build
13421
env:
13522
COMPOSE_FILE: docker-compose.yml:docker-compose.ci.yml
136-
DOCKER_APP_IMAGE: ${{ needs.merge.outputs.build-image }}
23+
DOCKER_APP_IMAGE: ${{ needs.docker-build.outputs.image }}
13724
steps:
13825
- name: Checkout code
139-
uses: actions/checkout@v4
26+
uses: actions/checkout@v6
14027

14128
- name: Set up Docker Compose
142-
uses: docker/setup-compose-action@v1
29+
uses: docker/setup-compose-action@v2
14330

14431
- name: Login to GitHub Container Registry
145-
uses: docker/login-action@v3
32+
uses: docker/login-action@v4
14633
with:
14734
registry: ghcr.io
14835
username: ${{ github.actor }}
14936
password: ${{ secrets.GITHUB_TOKEN }}
15037

15138
- name: Setup the stack
15239
run: |
153-
docker compose build --quiet
154-
docker compose pull --quiet
15540
docker compose up --wait
15641
docker compose exec -u root app chown -R alma:alma artifacts
15742
@@ -174,46 +59,19 @@ jobs:
17459
17560
- name: Upload the test report
17661
if: ${{ always() }}
177-
uses: actions/upload-artifact@v4
62+
uses: actions/upload-artifact@v7
17863
with:
17964
name: alma-user-load Build Report (${{ github.run_id }}_${{ github.run_attempt }})
18065
path: artifacts/*
18166
if-no-files-found: error
18267

18368
push:
184-
runs-on: ubuntu-24.04
18569
needs:
186-
- merge
70+
- docker-build
18771
- test
188-
env:
189-
DOCKER_APP_IMAGE: ${{ needs.merge.outputs.build-image }}
190-
DOCKER_APP_IMAGE_ARM64: ${{ needs.merge.outputs.build-image-arm }}
191-
DOCKER_APP_IMAGE_X64: ${{ needs.merge.outputs.build-image-x64 }}
192-
steps:
193-
- name: Checkout code
194-
uses: actions/checkout@v4
195-
196-
- name: Set up Docker Buildx
197-
uses: docker/setup-buildx-action@v3
198-
199-
- name: Login to GitHub Container Registry
200-
uses: docker/login-action@v3
201-
with:
202-
registry: ghcr.io
203-
username: ${{ github.actor }}
204-
password: ${{ secrets.GITHUB_TOKEN }}
205-
206-
- name: Produce permanent image tags
207-
id: branch-meta
208-
uses: docker/metadata-action@v5
209-
with:
210-
images: ghcr.io/${{ github.repository }}
211-
tags: |
212-
type=sha
213-
type=ref,event=branch
214-
type=raw,value=latest,enable={{is_default_branch}}
215-
216-
- name: Retag and push the image
217-
run: |
218-
docker buildx imagetools create \
219-
$(jq -cr '.tags | map("--tag " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") $DOCKER_APP_IMAGE_ARM64 $DOCKER_APP_IMAGE_X64
72+
uses: BerkeleyLibrary/.github/.github/workflows/docker-push.yml@v2.0.0
73+
with:
74+
image: ghcr.io/${{ github.repository }}
75+
build-image-arm64: ${{ needs.docker-build.outputs.image-arm64 }}
76+
build-image-x64: ${{ needs.docker-build.outputs.image-x64 }}
77+
secrets: inherit

.github/workflows/release.yml

Lines changed: 5 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,55 +7,9 @@ on:
77
workflow_call:
88
workflow_dispatch:
99

10-
env:
11-
DOCKER_METADATA_SET_OUTPUT_ENV: 'true'
12-
1310
jobs:
14-
retag:
15-
runs-on: ubuntu-latest
16-
steps:
17-
- name: Checkout code
18-
uses: actions/checkout@v4
19-
20-
- name: Set up Docker Buildx
21-
uses: docker/setup-buildx-action@v3
22-
23-
- name: Login to GitHub Container Registry
24-
uses: docker/login-action@v3
25-
with:
26-
registry: ghcr.io
27-
username: ${{ github.actor }}
28-
password: ${{ secrets.GITHUB_TOKEN }}
29-
30-
- name: Determine the sha-based image tag to retag
31-
id: get-base-image
32-
uses: docker/metadata-action@v5
33-
with:
34-
images: ghcr.io/${{ github.repository }}
35-
tags: type=sha
36-
37-
- name: Verify that the image was previously built
38-
env:
39-
BASE_IMAGE: ${{ steps.get-base-image.outputs.tags }}
40-
run: |
41-
docker manifest inspect "$BASE_IMAGE"
42-
43-
- name: Produce release tags
44-
id: tag-meta
45-
uses: docker/metadata-action@v5
46-
with:
47-
images: ghcr.io/${{ github.repository }}
48-
flavor: latest=false
49-
tags: |
50-
type=ref,event=tag
51-
type=semver,pattern={{major}}
52-
type=semver,pattern={{major}}.{{minor}}
53-
type=semver,pattern={{version}}
54-
55-
- name: Retag the pulled image
56-
env:
57-
BASE_IMAGE: ${{ steps.get-base-image.outputs.tags }}
58-
run: |
59-
docker buildx imagetools create \
60-
$(jq -cr '.tags | map("--tag " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
61-
"$(echo "$BASE_IMAGE" | cut -f1 -d:)"
11+
release:
12+
uses: BerkeleyLibrary/.github/.github/workflows/docker-release.yml@v2.0.0
13+
with:
14+
image: ghcr.io/${{ github.repository }}
15+
secrets: inherit

0 commit comments

Comments
 (0)