Skip to content

Commit cc587df

Browse files
committed
Setup Docker BuildX for cross-platform image building
1 parent 811bb08 commit cc587df

File tree

3 files changed

+68
-25
lines changed

3 files changed

+68
-25
lines changed

.github/docker/Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
FROM scratch
2+
ARG TARGETOS TARGETARCH
3+
COPY $TARGETOS-$TARGETARCH/dmarc-report-viewer /
4+
CMD ["./dmarc-report-viewer"]

.github/workflows/ci.yaml

Lines changed: 62 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -107,43 +107,84 @@ jobs:
107107
with:
108108
name: mac-aarch64
109109
path: target/aarch64-apple-darwin/release/dmarc-report-viewer
110-
docker_linux_x86_64:
111-
name: Docker (Linux, x86-64)
110+
# docker_linux_x86_64:
111+
# name: Docker (Linux, x86-64)
112+
# runs-on: ubuntu-24.04
113+
# permissions:
114+
# contents: read
115+
# packages: write
116+
# steps:
117+
# - name: Checkout
118+
# uses: actions/checkout@v4
119+
# - name: Build Docker Image
120+
# run: docker build . --build-arg GITHUB_SHA --build-arg GITHUB_REF_NAME --pull --tag dmarc-report-viewer
121+
# - name: Test Docker Image
122+
# run: docker run --rm dmarc-report-viewer ./dmarc-report-viewer --help
123+
# - name: Publish Latest Docker Image
124+
# if: ${{github.ref == 'refs/heads/master'}}
125+
# run: |
126+
# echo ${{secrets.GITHUB_TOKEN}} | docker login ghcr.io -u ${{github.actor}} --password-stdin
127+
# docker tag dmarc-report-viewer ghcr.io/${{github.actor}}/dmarc-report-viewer:develop
128+
# docker push ghcr.io/${{github.actor}}/dmarc-report-viewer:develop
129+
# - name: Publish Tagged Docker Image
130+
# if: startsWith(github.ref, 'refs/tags/')
131+
# run: |
132+
# echo ${{secrets.GITHUB_TOKEN}} | docker login ghcr.io -u ${{github.actor}} --password-stdin
133+
# docker tag dmarc-report-viewer ghcr.io/${{github.actor}}/dmarc-report-viewer:latest
134+
# docker push ghcr.io/${{github.actor}}/dmarc-report-viewer:latest
135+
# docker tag dmarc-report-viewer ghcr.io/${{github.actor}}/dmarc-report-viewer:${{github.ref_name}}
136+
# docker push ghcr.io/${{github.actor}}/dmarc-report-viewer:${{github.ref_name}}
137+
# - name: Save Docker Image
138+
# run: docker save -o dmarc-report-viewer.tar dmarc-report-viewer
139+
# - uses: actions/upload-artifact@v4
140+
# with:
141+
# name: docker-linux-x86_64
142+
# path: dmarc-report-viewer.tar
143+
docker_linux:
144+
name: Docker (Linux, x86-64, aarch64)
145+
needs: [linux_x86_64, linux_aarch64]
112146
runs-on: ubuntu-24.04
113147
permissions:
114148
contents: read
115149
packages: write
116150
steps:
117151
- name: Checkout
118152
uses: actions/checkout@v4
119-
- name: Build Docker Image
120-
run: docker build . --build-arg GITHUB_SHA --build-arg GITHUB_REF_NAME --pull --tag dmarc-report-viewer
121-
- name: Test Docker Image
122-
run: docker run --rm dmarc-report-viewer ./dmarc-report-viewer --help
123-
- name: Publish Latest Docker Image
153+
- name: Download Artifacts
154+
uses: actions/download-artifact@v4
155+
- name: Prepare Binary Artifacts
156+
run: |
157+
mv linux-x86_64 .github/docker/linux-amd64
158+
mv linux-aarch64 .github/docker/linux-arm64
159+
chmod +x .github/docker/linux-amd64/dmarc-report-viewer
160+
chmod +x .github/docker/linux-arm64/dmarc-report-viewer
161+
- name: Build Docker Images
162+
run: |
163+
cd .github/docker/
164+
echo ${{secrets.GITHUB_TOKEN}} | docker login ghcr.io -u ${{github.actor}} --password-stdin
165+
docker builder create --name builder
166+
docker buildx build --builder builder --platform=linux/amd64,linux/arm64 --pull --push --tag ghcr.io/${{github.actor}}/dmarc-report-viewer:buildx .
167+
docker run --rm ghcr.io/${{github.actor}}/dmarc-report-viewer:buildx ./dmarc-report-viewer --version
168+
- name: Build Develop Docker Images
124169
if: ${{github.ref == 'refs/heads/master'}}
125170
run: |
171+
cd .github/docker/
126172
echo ${{secrets.GITHUB_TOKEN}} | docker login ghcr.io -u ${{github.actor}} --password-stdin
127-
docker tag dmarc-report-viewer ghcr.io/${{github.actor}}/dmarc-report-viewer:develop
128-
docker push ghcr.io/${{github.actor}}/dmarc-report-viewer:develop
129-
- name: Publish Tagged Docker Image
173+
docker builder create --name builder
174+
docker buildx build --builder builder --platform=linux/amd64,linux/arm64 --pull --push --tag ghcr.io/${{github.actor}}/dmarc-report-viewer:develop .
175+
docker run --rm ghcr.io/${{github.actor}}/dmarc-report-viewer:develop ./dmarc-report-viewer --version
176+
- name: Build Release Docker Images
130177
if: startsWith(github.ref, 'refs/tags/')
131178
run: |
179+
cd .github/docker/
132180
echo ${{secrets.GITHUB_TOKEN}} | docker login ghcr.io -u ${{github.actor}} --password-stdin
133-
docker tag dmarc-report-viewer ghcr.io/${{github.actor}}/dmarc-report-viewer:latest
134-
docker push ghcr.io/${{github.actor}}/dmarc-report-viewer:latest
135-
docker tag dmarc-report-viewer ghcr.io/${{github.actor}}/dmarc-report-viewer:${{github.ref_name}}
136-
docker push ghcr.io/${{github.actor}}/dmarc-report-viewer:${{github.ref_name}}
137-
- name: Save Docker Image
138-
run: docker save -o dmarc-report-viewer.tar dmarc-report-viewer
139-
- uses: actions/upload-artifact@v4
140-
with:
141-
name: docker-linux-x86_64
142-
path: dmarc-report-viewer.tar
181+
docker builder create --name builder
182+
docker buildx build --builder builder --platform=linux/amd64,linux/arm64 --pull --push --tag ghcr.io/${{github.actor}}/dmarc-report-viewer:latest --tag ghcr.io/${{github.actor}}/dmarc-report-viewer:${{github.ref_name}} .
183+
docker run --rm ghcr.io/${{github.actor}}/dmarc-report-viewer:latest ./dmarc-report-viewer --version
143184
release:
144185
name: Release
145186
if: startsWith(github.ref, 'refs/tags/')
146-
needs: [linux_x86_64, linux_aarch64, windows_x86_64, mac_x86_64, mac_aarch64, docker_linux_x86_64]
187+
needs: [linux_x86_64, linux_aarch64, windows_x86_64, mac_x86_64, mac_aarch64, docker_linux]
147188
runs-on: ubuntu-24.04
148189
permissions:
149190
contents: write
@@ -159,7 +200,6 @@ jobs:
159200
zip -r linux-aarch64.zip linux-aarch64
160201
zip -r mac-x86_64.zip mac-x86_64
161202
zip -r mac-aarch64.zip mac-aarch64
162-
mv docker-linux-x86_64/dmarc-report-viewer.tar docker-linux-x86_64.tar
163203
- name: Publish Release
164204
uses: softprops/action-gh-release@v2
165205
with:
@@ -172,4 +212,3 @@ jobs:
172212
linux-aarch64.zip
173213
mac-x86_64.zip
174214
mac-aarch64.zip
175-
docker-linux-x86_64.tar

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Temporary build container
2-
FROM rust:1-alpine as builder
2+
FROM rust:1-alpine AS builder
33

44
# Get ENV variables for build info from build args
55
ARG GITHUB_SHA="n/a"
@@ -18,7 +18,7 @@ COPY . .
1818
ENV CARGO_TARGET_DIR=/usr/src/target
1919
RUN cargo build --release
2020

21-
# Remove debug symboles
21+
# Remove debug symbols
2222
RUN strip /usr/src/target/release/dmarc-report-viewer
2323

2424
# Build final minimal image with only the binary

0 commit comments

Comments
 (0)