Skip to content

Commit 0d30a63

Browse files
authored
Merge pull request #10 from VernissageApp/develop
Merge develop into main
2 parents b65c5b0 + 83b943e commit 0d30a63

1 file changed

Lines changed: 72 additions & 9 deletions

File tree

.github/workflows/docker.yml

Lines changed: 72 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Docker Push
1+
name: Docker Push (multi-platform)
22

33
on:
44
push:
@@ -9,28 +9,91 @@ on:
99
tags:
1010
- '*'
1111

12+
env:
13+
REGISTRY_IMAGE: mczachurski/vernissage-proxy
14+
1215
jobs:
13-
deploy:
14-
name: Deploy app to DockerHub
15-
runs-on: ubuntu-latest
16+
build:
17+
name: Build image for ${{ matrix.platform }}
18+
runs-on: ${{ matrix.runner }}
19+
strategy:
20+
matrix:
21+
platform: [amd64, arm64]
22+
include:
23+
- platform: amd64
24+
runner: ubuntu-24.04
25+
- platform: arm64
26+
runner: ubuntu-24.04-arm
1627
steps:
1728
- name: Checkout
1829
uses: actions/checkout@v4
30+
- name: Prepare
31+
run: |
32+
platform=linux/${{ matrix.platform }}
33+
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
1934
- name: Docker meta
2035
id: meta
2136
uses: docker/metadata-action@v5
2237
with:
23-
images: mczachurski/vernissage-proxy
38+
images: ${{ env.REGISTRY_IMAGE }}
2439
- name: Login to DockerHub
2540
if: github.event_name != 'pull_request'
2641
uses: docker/login-action@v3
2742
with:
2843
username: ${{ secrets.DOCKER_USER }}
2944
password: ${{ secrets.DOCKER_PASSWORD }}
30-
- name: Build and push
45+
- name: Set up Docker Buildx
46+
uses: docker/setup-buildx-action@v3
47+
- name: Build and push by digest
48+
id: build
3149
uses: docker/build-push-action@v6
3250
with:
3351
context: .
34-
push: ${{ github.event_name != 'pull_request' }}
35-
tags: ${{ steps.meta.outputs.tags }}
36-
labels: ${{ steps.meta.outputs.labels }}
52+
platforms: linux/${{ matrix.platform }}
53+
labels: ${{ steps.meta.outputs.labels }}
54+
tags: ${{ env.REGISTRY_IMAGE }}
55+
outputs: type=image,push-by-digest=true,name-canonical=true,push=true
56+
- name: Export digest
57+
run: |
58+
mkdir -p ${{ runner.temp }}/digests
59+
digest="${{ steps.build.outputs.digest }}"
60+
touch "${{ runner.temp }}/digests/${digest#sha256:}"
61+
- name: Upload digest
62+
uses: actions/upload-artifact@v4
63+
with:
64+
name: digests-${{ env.PLATFORM_PAIR }}
65+
path: ${{ runner.temp }}/digests/*
66+
if-no-files-found: error
67+
retention-days: 1
68+
merge:
69+
runs-on: ubuntu-24.04
70+
needs:
71+
- build
72+
steps:
73+
- name: Download digests
74+
uses: actions/download-artifact@v4
75+
with:
76+
path: ${{ runner.temp }}/digests
77+
pattern: digests-*
78+
merge-multiple: true
79+
- name: Login to DockerHub
80+
if: github.event_name != 'pull_request'
81+
uses: docker/login-action@v3
82+
with:
83+
username: ${{ secrets.DOCKER_USER }}
84+
password: ${{ secrets.DOCKER_PASSWORD }}
85+
- name: Set up Docker Buildx
86+
uses: docker/setup-buildx-action@v3
87+
- name: Docker meta
88+
id: meta
89+
uses: docker/metadata-action@v5
90+
with:
91+
images: ${{ env.REGISTRY_IMAGE }}
92+
- name: Create manifest list and push
93+
working-directory: ${{ runner.temp }}/digests
94+
run: |
95+
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
96+
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
97+
- name: Inspect image
98+
run: |
99+
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}

0 commit comments

Comments
 (0)