Skip to content

Commit eb5a32c

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

File tree

3 files changed

+32
-25
lines changed

3 files changed

+32
-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: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -107,43 +107,48 @@ 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:
111+
name: Docker (Linux, x86-64, aarch64)
112+
needs: [linux_x86_64, linux_aarch64]
112113
runs-on: ubuntu-24.04
113114
permissions:
114115
contents: read
115116
packages: write
116117
steps:
117118
- name: Checkout
118119
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
120+
- name: Download Artifacts
121+
uses: actions/download-artifact@v4
122+
- name: Prepare Binary Artifacts
123+
run: |
124+
mv linux-x86_64 .github/docker/linux-amd64
125+
mv linux-aarch64 .github/docker/linux-arm64
126+
chmod +x .github/docker/linux-amd64/dmarc-report-viewer
127+
chmod +x .github/docker/linux-arm64/dmarc-report-viewer
128+
- name: Build Docker Images
129+
run: |
130+
cd .github/docker/
131+
echo ${{secrets.GITHUB_TOKEN}} | docker login ghcr.io -u ${{github.actor}} --password-stdin
132+
docker builder create --name builder
133+
docker buildx build --builder builder --platform=linux/amd64,linux/arm64 --pull --push --tag ghcr.io/${{github.actor}}/dmarc-report-viewer:buildx --tag ghcr.io/${{github.actor}}/dmarc-report-viewer:test .
134+
- name: Build Develop Docker Images
124135
if: ${{github.ref == 'refs/heads/master'}}
125136
run: |
137+
cd .github/docker/
126138
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
139+
docker buildx build --builder builder --platform=linux/amd64,linux/arm64 --pull --push --tag ghcr.io/${{github.actor}}/dmarc-report-viewer:develop .
140+
docker run --rm ghcr.io/${{github.actor}}/dmarc-report-viewer:develop ./dmarc-report-viewer --version
141+
- name: Build Release Docker Images
130142
if: startsWith(github.ref, 'refs/tags/')
131143
run: |
144+
cd .github/docker/
132145
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
146+
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}} .
147+
docker run --rm ghcr.io/${{github.actor}}/dmarc-report-viewer:latest ./dmarc-report-viewer --version
143148
release:
144149
name: Release
145150
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]
151+
needs: [linux_x86_64, linux_aarch64, windows_x86_64, mac_x86_64, mac_aarch64, docker_linux]
147152
runs-on: ubuntu-24.04
148153
permissions:
149154
contents: write
@@ -159,7 +164,6 @@ jobs:
159164
zip -r linux-aarch64.zip linux-aarch64
160165
zip -r mac-x86_64.zip mac-x86_64
161166
zip -r mac-aarch64.zip mac-aarch64
162-
mv docker-linux-x86_64/dmarc-report-viewer.tar docker-linux-x86_64.tar
163167
- name: Publish Release
164168
uses: softprops/action-gh-release@v2
165169
with:
@@ -172,4 +176,3 @@ jobs:
172176
linux-aarch64.zip
173177
mac-x86_64.zip
174178
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)