feat: multi-arch docker images
new binary targets:
- armv7-unknown-linux-musleabihf
- arm-unknown-linux-musleabihf
new docker targets:
- linux/amd64
- linux/arm64
- linux/386
- linux/arm/v7
- linux/arm/v6
Diff
.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(-)
@@ -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
@@ -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: |
@@ -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: |
@@ -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
@@ -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 <joseluisq.net>"
COPY --from=latest /usr/local/bin/static-web-server /
COPY --from=build /usr/local/bin/static-web-server /
COPY ./docker/public /public
EXPOSE 80