From 7d32a674c0147d7728ee23451827e2b58c3e3edd Mon Sep 17 00:00:00 2001 From: Jose Quintana <1700322+joseluisq@users.noreply.github.com> Date: Tue, 8 Feb 2022 00:13:42 +0100 Subject: [PATCH] Merge pull request #82 from joseluisq/feature/multiarch_docker_images feat: multi-arch docker images binary targets armv7-unknown-linux-musleabihf (armv7) arm-unknown-linux-musleabihf (armv6) docker targets linux/amd64 (already present) linux/arm64 linux/386 linux/arm/v7 linux/arm/v6 --- .github/workflows/devel.yml | 10 ++++++++++ .github/workflows/release.docker.yml | 8 ++++++++ .github/workflows/release.yml | 26 +++++++++++++++++++++++++- docker/alpine/Dockerfile | 20 ++++++++++++++++---- docker/scratch/Dockerfile | 4 ++-- 5 files changed, 61 insertions(+), 7 deletions(-) diff --git a/.github/workflows/devel.yml b/.github/workflows/devel.yml index 969ddd2..bddb70a 100644 --- a/.github/workflows/devel.yml +++ b/.github/workflows/devel.yml @@ -36,6 +36,8 @@ jobs: - linux-gnu-arm64 - linux-gnu-i686 - linux-arm-gnueabihf + - linux-musl-armv6 + - linux-musl-armv7 - macos - macos-arm64 - windows-msvc @@ -83,6 +85,14 @@ jobs: os: ubuntu-20.04 rust: nightly target: arm-unknown-linux-gnueabihf + - build: linux-musl-armv6 + os: ubuntu-20.04 + rust: nightly + target: arm-unknown-linux-musleabihf + - build: linux-musl-armv7 + os: ubuntu-20.04 + rust: nightly + target: armv7-unknown-linux-musleabihf - build: macos os: macos-11 rust: stable diff --git a/.github/workflows/release.docker.yml b/.github/workflows/release.docker.yml index 267da8a..1eee466 100644 --- a/.github/workflows/release.docker.yml +++ b/.github/workflows/release.docker.yml @@ -12,6 +12,9 @@ jobs: name: Checkout repository uses: actions/checkout@v2 - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Docker meta alpine id: meta_alpine uses: docker/metadata-action@v3 @@ -45,6 +48,7 @@ jobs: with: push: true context: . + platforms: linux/amd64,linux/arm64,linux/386,linux/arm/v7,linux/arm/v6 file: ${{ env.SERVER_DOCKERFILE }} tags: ${{ steps.meta_alpine.outputs.tags }} build-args: | @@ -58,6 +62,9 @@ jobs: name: Checkout repository uses: actions/checkout@v2 - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Docker meta scratch id: meta_scratch uses: docker/metadata-action@v3 @@ -88,6 +95,7 @@ jobs: with: push: true context: . + platforms: linux/amd64,linux/arm64,linux/386,linux/arm/v7,linux/arm/v6 file: ${{ env.SERVER_DOCKERFILE }} tags: ${{ steps.meta_scratch.outputs.tags }} build-args: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d5ded0c..b6b8a14 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,6 +56,8 @@ jobs: - linux-gnu-arm64 - linux-gnu-i686 - linux-arm-gnueabihf + - linux-musl-armv6 + - linux-musl-armv7 - macos - macos-arm64 - windows-msvc @@ -91,6 +93,14 @@ jobs: os: ubuntu-20.04 rust: nightly target: arm-unknown-linux-gnueabihf + - build: linux-musl-armv6 + os: ubuntu-20.04 + rust: nightly + target: arm-unknown-linux-musleabihf + - build: linux-musl-armv7 + os: ubuntu-20.04 + rust: nightly + target: armv7-unknown-linux-musleabihf - build: macos os: macos-11 rust: stable @@ -148,7 +158,7 @@ jobs: run: ${{ env.CARGO }} build --verbose --release ${{ env.TARGET_FLAGS }} - name: Strip release binary (linux and macos) - if: matrix.os != 'windows-2019' && matrix.build != 'linux-arm-gnueabihf' && matrix.build != 'linux-gnu-arm64' && matrix.build != 'linux-musl-arm64' && matrix.build != 'linux-musl-i686' + if: matrix.os != 'windows-2019' && matrix.build != 'linux-arm-gnueabihf' && matrix.build != 'linux-musl-armv7' && matrix.build != 'linux-musl-armv6' && matrix.build != 'linux-gnu-arm64' && matrix.build != 'linux-musl-arm64' && matrix.build != 'linux-musl-i686' run: strip "target/${{ matrix.target }}/release/static-web-server" - name: Strip release binary (linux-arm-gnueabihf) @@ -158,6 +168,20 @@ jobs: rustembedded/cross:arm-unknown-linux-gnueabihf \ arm-linux-gnueabihf-strip /target/arm-unknown-linux-gnueabihf/release/static-web-server + - name: Strip release binary (linux-musl-armv7) + if: matrix.build == 'linux-musl-armv7' + run: | + docker run --rm -v "$PWD/target:/target:Z" \ + rustembedded/cross:armv7-unknown-linux-musleabihf \ + arm-linux-gnueabihf-strip /target/armv7-unknown-linux-musleabihf/release/static-web-server + + - name: Strip release binary (linux-musl-armv6) + if: matrix.build == 'linux-musl-armv6' + run: | + docker run --rm -v "$PWD/target:/target:Z" \ + rustembedded/cross:arm-unknown-linux-musleabihf \ + arm-linux-gnueabihf-strip /target/arm-unknown-linux-musleabihf/release/static-web-server + - name: Strip release binary (linux-gnu-arm64) if: matrix.build == 'linux-gnu-arm64' run: | diff --git a/docker/alpine/Dockerfile b/docker/alpine/Dockerfile index d5761e1..4dbfad0 100644 --- a/docker/alpine/Dockerfile +++ b/docker/alpine/Dockerfile @@ -1,5 +1,6 @@ -FROM alpine:3.14 +FROM --platform=$BUILDPLATFORM alpine:3.14 as build +ARG TARGETPLATFORM ARG SERVER_VERSION=0.0.0 ENV SERVER_VERSION=${SERVER_VERSION} @@ -9,12 +10,23 @@ LABEL version="${SERVER_VERSION}" \ RUN apk --no-cache add ca-certificates tzdata RUN set -ex; \ - wget --quiet -O /tmp/static-web-server.tar.gz "https://github.com/joseluisq/static-web-server/releases/download/v$SERVER_VERSION/static-web-server-v$SERVER_VERSION-x86_64-unknown-linux-musl.tar.gz"; \ + case "$TARGETPLATFORM" in \ + "linux/amd64") target='x86_64-unknown-linux-musl' ;; \ + "linux/arm64") target='aarch64-unknown-linux-musl' ;; \ + "linux/386") target='i686-unknown-linux-musl' ;; \ + "linux/arm/v7") target='armv7-unknown-linux-musleabihf' ;; \ + "linux/arm/v6") target='arm-unknown-linux-musleabihf' ;; \ + *) echo >&2 "error: unsupported $TARGETPLATFORM architecture"; exit 1 ;; \ + esac; \ + wget --quiet -O /tmp/static-web-server.tar.gz "https://github.com/joseluisq/static-web-server/releases/download/v${SERVER_VERSION}/static-web-server-v${SERVER_VERSION}-${target}.tar.gz"; \ tar xzvf /tmp/static-web-server.tar.gz; \ - cp static-web-server-v${SERVER_VERSION}-x86_64-unknown-linux-musl/static-web-server /usr/local/bin/; \ - rm -rf /tmp/static-web-server.tar.gz static-web-server-v${SERVER_VERSION}-x86_64-unknown-linux-musl; \ + cp static-web-server-v${SERVER_VERSION}-${target}/static-web-server /usr/local/bin/; \ + rm -rf /tmp/static-web-server.tar.gz static-web-server-v${SERVER_VERSION}-${target}; \ chmod +x /usr/local/bin/static-web-server +FROM alpine:3.14 + +COPY --from=build /usr/local/bin/static-web-server / COPY ./docker/alpine/entrypoint.sh / COPY ./docker/public /public diff --git a/docker/scratch/Dockerfile b/docker/scratch/Dockerfile index e89f8a8..568ad58 100644 --- a/docker/scratch/Dockerfile +++ b/docker/scratch/Dockerfile @@ -1,6 +1,6 @@ ARG SERVER_VERSION=0.0.0 -FROM joseluisq/static-web-server:${SERVER_VERSION}-alpine AS latest +FROM joseluisq/static-web-server:${SERVER_VERSION}-alpine AS build FROM scratch @@ -11,7 +11,7 @@ LABEL version="${SERVER_VERSION}" \ description="A blazing fast and asynchronous web server for static files-serving." \ maintainer="Jose Quintana " -COPY --from=latest /usr/local/bin/static-web-server / +COPY --from=build /usr/local/bin/static-web-server / COPY ./docker/public /public EXPOSE 80 -- libgit2 1.7.2