Skip to content

Commit 11752eb

Browse files
committed
CI: Modify Docker workflow to build multi-platform images
1 parent 9e71ddf commit 11752eb

File tree

2 files changed

+134
-46
lines changed

2 files changed

+134
-46
lines changed

.github/workflows/docker-image.yml

Lines changed: 132 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,52 +4,140 @@ on:
44
release:
55
types: [published]
66

7-
jobs:
7+
env:
8+
REGISTRY_USERNAME: asanrom
9+
REGISTRY_IMAGE: asanrom/rtmp-server
10+
GHCR_IMAGE: ghcr.io/agustinsrg/rtmp-server
811

12+
jobs:
913
build:
10-
1114
runs-on: ubuntu-latest
15+
strategy:
16+
fail-fast: false
17+
matrix:
18+
platform:
19+
- linux/amd64
20+
- linux/arm/v6
21+
- linux/arm/v7
22+
- linux/arm64
23+
steps:
24+
- name: Prepare
25+
run: |
26+
platform=${{ matrix.platform }}
27+
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
28+
29+
- name: Docker meta
30+
id: meta
31+
uses: docker/metadata-action@v5
32+
with:
33+
images: ${{ env.REGISTRY_IMAGE }}
34+
35+
- name: Set up QEMU
36+
uses: docker/setup-qemu-action@v3
37+
38+
- name: Set up Docker Buildx
39+
uses: docker/setup-buildx-action@v3
40+
41+
- name: Login to Docker Hub
42+
uses: docker/login-action@v3
43+
with:
44+
username: ${{ env.REGISTRY_USERNAME }}
45+
password: ${{ secrets.DOCKER_TOKEN }}
46+
47+
- name: Build and push by digest
48+
id: build
49+
uses: docker/build-push-action@v6
50+
with:
51+
platforms: ${{ matrix.platform }}
52+
labels: ${{ steps.meta.outputs.labels }}
53+
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
54+
55+
- name: Export digest
56+
run: |
57+
mkdir -p /tmp/digests
58+
digest="${{ steps.build.outputs.digest }}"
59+
touch "/tmp/digests/${digest#sha256:}"
60+
61+
- name: Upload digest
62+
uses: actions/upload-artifact@v4
63+
with:
64+
name: digests-${{ env.PLATFORM_PAIR }}
65+
path: /tmp/digests/*
66+
if-no-files-found: error
67+
retention-days: 1
1268

69+
merge:
70+
runs-on: ubuntu-latest
71+
needs:
72+
- build
73+
steps:
74+
- name: Download digests
75+
uses: actions/download-artifact@v4
76+
with:
77+
path: /tmp/digests
78+
pattern: digests-*
79+
merge-multiple: true
80+
81+
- name: Set up Docker Buildx
82+
uses: docker/setup-buildx-action@v3
83+
84+
- name: Docker meta
85+
id: meta
86+
uses: docker/metadata-action@v5
87+
with:
88+
images: ${{ env.REGISTRY_IMAGE }}
89+
90+
- name: Login to Docker Hub
91+
uses: docker/login-action@v3
92+
with:
93+
username: ${{ env.REGISTRY_USERNAME }}
94+
password: ${{ secrets.DOCKER_TOKEN }}
95+
96+
- name: Create manifest list and push
97+
working-directory: /tmp/digests
98+
run: |
99+
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
100+
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
101+
102+
- name: Inspect image
103+
run: |
104+
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
105+
106+
mirror:
107+
runs-on: ubuntu-latest
108+
needs:
109+
- merge
13110
steps:
14-
- uses: actions/checkout@v3
15-
16-
- name: Set env RELEASE_VERSION
17-
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
18-
19-
- name: Build the Docker image
20-
run: docker build . --file Dockerfile --tag asanrom/rtmp-server:latest
21-
22-
- name: Docker Login
23-
uses: docker/login-action@v2.1.0
24-
with:
25-
username: asanrom
26-
password: ${{ secrets.DOCKER_TOKEN }}
27-
28-
- name: Add version tag to Docker image
29-
run: docker tag asanrom/rtmp-server:latest asanrom/rtmp-server:${{ env.RELEASE_VERSION }}
30-
31-
- name: Push the Docker image (Current Version)
32-
run: docker push asanrom/rtmp-server:${{ env.RELEASE_VERSION }}
33-
34-
- name: Push the Docker image (Latest)
35-
run: docker push asanrom/rtmp-server:latest
36-
37-
- name: Docker Login (GitHub Packages)
38-
uses: docker/login-action@v2.1.0
39-
with:
40-
registry: ghcr.io
41-
username: ${{ github.actor }}
42-
password: ${{ secrets.GITHUB_TOKEN }}
43-
44-
- name: Tag version (GitHub Packages)
45-
run: docker tag asanrom/rtmp-server:latest ghcr.io/agustinsrg/rtmp-server:${{ env.RELEASE_VERSION }}
46-
47-
- name: Tag latest (GitHub Packages)
48-
run: docker tag asanrom/rtmp-server:latest ghcr.io/agustinsrg/rtmp-server:latest
49-
50-
- name: Push the Docker image (GitHub Packages) (Current Version)
51-
run: docker push ghcr.io/agustinsrg/rtmp-server:${{ env.RELEASE_VERSION }}
52-
53-
- name: Push the Docker image (GitHub Packages) (Latest)
54-
run: docker push ghcr.io/agustinsrg/rtmp-server:latest
55-
111+
- name: Docker meta
112+
id: meta
113+
uses: docker/metadata-action@v5
114+
with:
115+
images: ${{ env.REGISTRY_IMAGE }}
116+
117+
- name: Login to Docker Hub
118+
uses: docker/login-action@v3
119+
with:
120+
username: ${{ env.REGISTRY_USERNAME }}
121+
password: ${{ secrets.DOCKER_TOKEN }}
122+
123+
- name: Pull image
124+
run: docker pull ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
125+
126+
- name: Login to GitHub Packages
127+
uses: docker/login-action@v3
128+
with:
129+
registry: ghcr.io
130+
username: ${{ github.actor }}
131+
password: ${{ secrets.GITHUB_TOKEN }}
132+
133+
- name: Tag image with GHCR registry
134+
run: docker tag ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} ${{ env.GHCR_IMAGE }}:${{ steps.meta.outputs.version }}
135+
136+
- name: Tag image with GHCR registry (latest)
137+
run: docker tag ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} ${{ env.GHCR_IMAGE }}:latest
138+
139+
- name: Push image
140+
run: docker push ${{ env.GHCR_IMAGE }}:${{ steps.meta.outputs.version }}
141+
142+
- name: Push image (latest)
143+
run: docker push ${{ env.GHCR_IMAGE }}:latest

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#################################
44

55
# Builder
6-
FROM golang:latest as builder
6+
FROM golang:alpine AS builder
77

88
## Copy files
99
ADD . /root
@@ -14,7 +14,7 @@ FROM golang:latest as builder
1414

1515

1616
# Runner
17-
FROM alpine as runner
17+
FROM alpine AS runner
1818

1919
## Install common libraries
2020
RUN apk add gcompat

0 commit comments

Comments
 (0)