From ce08e3b0b5fc612eb0e6c4a3191340f4c13d406e Mon Sep 17 00:00:00 2001 From: Andreas Stefl Date: Sun, 5 Jul 2026 16:37:25 +0200 Subject: [PATCH] Build multi-arch Docker image (add linux/arm64) Make the Dockerfile arch-aware via TARGETARCH: Firefox and geckodriver now use per-arch downloads (x86_64/linux64 for amd64, aarch64 for arm64). Google Chrome ships no ARM64 Linux build, so it is installed on amd64 only; arm64 relies on Firefox, which is the tool's default driver. The docker workflow sets up QEMU and builds/pushes both linux/amd64 and linux/arm64. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01KPXpci41uTJi9PS58Xbb2y --- .github/workflows/docker.yaml | 4 ++++ Dockerfile | 39 +++++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 2bf0c64..beb3962 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -19,6 +19,9 @@ jobs: - name: checkout uses: actions/checkout@v6 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 @@ -50,6 +53,7 @@ jobs: uses: docker/build-push-action@v7 with: context: . + platforms: linux/amd64,linux/arm64 push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile index 371dd46..78c4953 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,7 @@ -FROM --platform=linux/amd64 ubuntu:26.04 +FROM ubuntu:26.04 + +# Populated automatically by Docker Buildx (amd64 / arm64) +ARG TARGETARCH ENV FIREFOX_VERSION="138.0.4" ENV GECKODRIVER_VERSION="0.36.0" @@ -13,7 +16,12 @@ RUN $INSTALL wget ca-certificates xz-utils bzip2 unzip # firefox setup RUN $INSTALL libgtk-3-0t64 libasound2t64 libx11-xcb1 -RUN wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.xz && \ +RUN case "$TARGETARCH" in \ + amd64) FFARCH=linux-x86_64 ;; \ + arm64) FFARCH=linux-aarch64 ;; \ + *) echo "unsupported TARGETARCH: $TARGETARCH" && exit 1 ;; \ + esac && \ + wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/${FFARCH}/en-US/firefox-${FIREFOX_VERSION}.tar.xz && \ tar -xf firefox-${FIREFOX_VERSION}.tar.xz && \ mv firefox /usr/local/share && \ ln -s /usr/local/share/firefox/firefox /usr/local/bin && \ @@ -22,19 +30,28 @@ RUN wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREF RUN firefox --version # geckodriver setup -RUN wget https://github.com/mozilla/geckodriver/releases/download/v${GECKODRIVER_VERSION}/geckodriver-v${GECKODRIVER_VERSION}-linux64.tar.gz && \ - tar -xf geckodriver-v${GECKODRIVER_VERSION}-linux64.tar.gz && \ +RUN case "$TARGETARCH" in \ + amd64) GDARCH=linux64 ;; \ + arm64) GDARCH=linux-aarch64 ;; \ + *) echo "unsupported TARGETARCH: $TARGETARCH" && exit 1 ;; \ + esac && \ + wget https://github.com/mozilla/geckodriver/releases/download/v${GECKODRIVER_VERSION}/geckodriver-v${GECKODRIVER_VERSION}-${GDARCH}.tar.gz && \ + tar -xf geckodriver-v${GECKODRIVER_VERSION}-${GDARCH}.tar.gz && \ mv geckodriver /usr/local/bin && \ - rm geckodriver-v${GECKODRIVER_VERSION}-linux64.tar.gz + rm geckodriver-v${GECKODRIVER_VERSION}-${GDARCH}.tar.gz RUN geckodriver --version -# chrome setup -RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \ - $INSTALL ./google-chrome-stable_current_amd64.deb && \ - rm google-chrome-stable_current_amd64.deb - -RUN google-chrome --version +# chrome setup (Google Chrome ships no ARM64 Linux build, so amd64 only; +# use --driver firefox, the default, on arm64) +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \ + $INSTALL ./google-chrome-stable_current_amd64.deb && \ + rm google-chrome-stable_current_amd64.deb && \ + google-chrome --version ; \ + else \ + echo "Skipping Google Chrome on $TARGETARCH (no ARM64 build; use --driver firefox)" ; \ + fi # install python dependencies COPY . /compare-html