From f1f35e8c989f0dfba7bb986ebe556b2b2a35cf18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robin=20B=C3=BCrgi?= Date: Sun, 13 Apr 2025 22:07:24 +0200 Subject: [PATCH] =?UTF-8?q?Revert=20"feat:=20Implement=20cross-compilation?= =?UTF-8?q?=20and=20Docker=20layer=20caching=20for=20ARM=20bu=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/CI.yml | 78 ++-------------------------------- .github/workflows/release.yaml | 47 ++------------------ Dockerfile | 44 +++---------------- 3 files changed, 12 insertions(+), 157 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index dc7767e..8f4c1d2 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -36,82 +36,10 @@ jobs: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Set up Docker Buildx cache - uses: actions/cache@v3 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx- - - name: Build Docker image for amd64 - uses: docker/build-push-action@v5 - with: - platforms: linux/amd64 - push: false - tags: | - cybuerg/cfspeedtest:${{ github.sha }}-amd64 - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache-amd64,mode=max - outputs: type=docker,dest=/tmp/docker-image-amd64.tar - - - name: Build Docker image for arm64 + - name: Build and push Docker image uses: docker/build-push-action@v5 with: - platforms: linux/arm64 + platforms: linux/amd64,linux/arm64 push: false tags: | - cybuerg/cfspeedtest:${{ github.sha }}-arm64 - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache-arm64,mode=max - outputs: type=docker,dest=/tmp/docker-image-arm64.tar - - name: Merge and move cache - run: | - mkdir -p /tmp/.buildx-cache-new - cp -r /tmp/.buildx-cache-amd64/* /tmp/.buildx-cache-new/ || true - cp -r /tmp/.buildx-cache-arm64/* /tmp/.buildx-cache-new/ || true - rm -rf /tmp/.buildx-cache - mv /tmp/.buildx-cache-new /tmp/.buildx-cache - - name: Upload Docker images as artifacts - uses: actions/upload-artifact@v4 - with: - name: docker-images - path: | - /tmp/docker-image-amd64.tar - /tmp/docker-image-arm64.tar - retention-days: 1 - - verify-docker-image: - needs: docker-build - runs-on: ubuntu-latest - strategy: - matrix: - platform: [linux/amd64, linux/arm64] - steps: - - name: Download Docker images - uses: actions/download-artifact@v4 - with: - name: docker-images - path: /tmp - - name: Load Docker image - run: | - if [ "${{ matrix.platform }}" = "linux/amd64" ]; then - docker load < /tmp/docker-image-amd64.tar - else - docker load < /tmp/docker-image-arm64.tar - fi - - name: Verify amd64 image - if: matrix.platform == 'linux/amd64' - run: | - docker run cybuerg/cfspeedtest:${{ github.sha }}-amd64 --help - docker run --entrypoint /bin/sh cybuerg/cfspeedtest:${{ github.sha }}-amd64 -c "file /usr/local/bin/cfspeedtest" | grep "x86-64" - - name: Set up QEMU - if: matrix.platform == 'linux/arm64' - uses: docker/setup-qemu-action@v3 - with: - platforms: arm64 - - - name: Verify arm64 image - if: matrix.platform == 'linux/arm64' - run: | - docker run --platform linux/arm64 cybuerg/cfspeedtest:${{ github.sha }}-arm64 --help - docker run --platform linux/arm64 --entrypoint /bin/sh cybuerg/cfspeedtest:${{ github.sha }}-arm64 -c "file /usr/local/bin/cfspeedtest" | grep "aarch64" + cybuerg/cfspeedtest:${{ github.sha }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f5ba88b..e286618 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -52,55 +52,16 @@ jobs: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Set up Docker Buildx cache - uses: actions/cache@v3 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx- - name: Log in to DockerHub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push Docker image for amd64 - uses: docker/build-push-action@v5 - with: - platforms: linux/amd64 - push: true - tags: | - cybuerg/cfspeedtest:${{ github.ref_name }}-amd64 - cybuerg/cfspeedtest:latest-amd64 - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache-amd64,mode=max - - - name: Build and push Docker image for arm64 + - name: Build and push Docker image uses: docker/build-push-action@v5 with: - platforms: linux/arm64 + platforms: linux/amd64,linux/arm64 push: true tags: | - cybuerg/cfspeedtest:${{ github.ref_name }}-arm64 - cybuerg/cfspeedtest:latest-arm64 - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache-arm64,mode=max - - - name: Create and push multi-platform manifest - run: | - docker manifest create cybuerg/cfspeedtest:${{ github.ref_name }} \ - cybuerg/cfspeedtest:${{ github.ref_name }}-amd64 \ - cybuerg/cfspeedtest:${{ github.ref_name }}-arm64 - docker manifest create cybuerg/cfspeedtest:latest \ - cybuerg/cfspeedtest:latest-amd64 \ - cybuerg/cfspeedtest:latest-arm64 - docker manifest push cybuerg/cfspeedtest:${{ github.ref_name }} - docker manifest push cybuerg/cfspeedtest:latest - - - name: Merge and move cache - run: | - mkdir -p /tmp/.buildx-cache-new - cp -r /tmp/.buildx-cache-amd64/* /tmp/.buildx-cache-new/ || true - cp -r /tmp/.buildx-cache-arm64/* /tmp/.buildx-cache-new/ || true - rm -rf /tmp/.buildx-cache - mv /tmp/.buildx-cache-new /tmp/.buildx-cache + cybuerg/cfspeedtest:${{ github.ref_name }} + cybuerg/cfspeedtest:latest diff --git a/Dockerfile b/Dockerfile index cb6dcad..310ba1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,46 +1,12 @@ -FROM --platform=$BUILDPLATFORM rust:slim-bullseye as builder - -# Install cross-compilation tools if needed -ARG BUILDPLATFORM -ARG TARGETPLATFORM -RUN if [ "$TARGETPLATFORM" = "linux/arm64" ] && [ "$BUILDPLATFORM" = "linux/amd64" ]; then \ - dpkg --add-architecture arm64 && \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - gcc-aarch64-linux-gnu libc6-dev-arm64-cross && \ - rustup target add aarch64-unknown-linux-gnu && \ - rm -rf /var/lib/apt/lists/*; \ - fi - -# Set the correct target -ARG RUST_TARGET="x86_64-unknown-linux-gnu" -RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; then \ - echo "RUST_TARGET=aarch64-unknown-linux-gnu"; \ - export RUST_TARGET="aarch64-unknown-linux-gnu"; \ - fi - -# Create a new empty project for caching dependencies +FROM rust:slim-bullseye as builder WORKDIR /usr/src/cfspeedtest COPY Cargo.toml Cargo.lock ./ -RUN mkdir -p src && \ - echo "fn main() {}" > src/main.rs && \ - echo "pub fn dummy() {}" > src/lib.rs && \ - cargo fetch - -# Build the actual application COPY src ./src -RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; then \ - RUSTFLAGS="-C linker=aarch64-linux-gnu-gcc" \ - cargo build --release --target aarch64-unknown-linux-gnu && \ - cp target/aarch64-unknown-linux-gnu/release/cfspeedtest /usr/local/bin/; \ - else \ - cargo build --release && \ - cp target/release/cfspeedtest /usr/local/bin/; \ - fi +RUN cargo install --path . -FROM --platform=$TARGETPLATFORM debian:bullseye-slim -RUN apt-get update && apt-get install -y --no-install-recommends tini file && rm -rf /var/lib/apt/lists/* -COPY --from=builder /usr/local/bin/cfspeedtest /usr/local/bin/cfspeedtest +FROM debian:bullseye-slim +RUN apt-get update && apt-get install -y --no-install-recommends tini && rm -rf /var/lib/apt/lists/* +COPY --from=builder /usr/local/cargo/bin/cfspeedtest /usr/local/bin/cfspeedtest # tini will be PID 1 and handle signal forwarding and process reaping ENTRYPOINT ["/usr/bin/tini", "--", "cfspeedtest"]