From 5ee2c5504c17e469096fc171297e9acb4000dcb9 Mon Sep 17 00:00:00 2001 From: sigoden Date: Wed, 29 Jun 2022 10:51:59 +0800 Subject: [PATCH] ci: support more platforms (#76) --- .github/workflows/release.yaml | 76 ++++++++++++++++++++++++++-------- Dockerfile | 24 +++++++---- 2 files changed, 74 insertions(+), 26 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 1d1f7bb..b8d0ebd 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -7,33 +7,71 @@ on: jobs: release: - name: Publish to Github Reelases + name: Publish to Github Relases outputs: rc: ${{ steps.check-tag.outputs.rc }} strategy: matrix: - target: - - aarch64-unknown-linux-musl - - aarch64-apple-darwin - - x86_64-apple-darwin - - x86_64-pc-windows-msvc - - x86_64-unknown-linux-musl include: - target: aarch64-unknown-linux-musl os: ubuntu-latest use-cross: true + cargo-flags: "" - target: aarch64-apple-darwin os: macos-latest use-cross: true + cargo-flags: "" + - target: aarch64-pc-windows-msvc + os: windows-latest + use-cross: true + cargo-flags: "--no-default-features" + - target: aarch64-linux-android + os: ubuntu-latest + use-cross: true + cargo-flags: "" - target: x86_64-apple-darwin os: macos-latest + cargo-flags: "" - target: x86_64-pc-windows-msvc os: windows-latest + cargo-flags: "" - target: x86_64-unknown-linux-musl os: ubuntu-latest use-cross: true - + cargo-flags: "" + - target: i686-unknown-linux-musl + os: ubuntu-latest + use-cross: true + cargo-flags: "" + - target: i686-pc-windows-msvc + os: windows-latest + use-cross: true + cargo-flags: "" + - target: armv7-unknown-linux-musleabihf + os: ubuntu-latest + use-cross: true + cargo-flags: "" + - target: arm-unknown-linux-musleabihf + os: ubuntu-latest + use-cross: true + cargo-flags: "" + - target: mips-unknown-linux-musl + os: ubuntu-latest + use-cross: true + cargo-flags: "--no-default-features" + - target: mipsel-unknown-linux-musl + os: ubuntu-latest + use-cross: true + cargo-flags: "--no-default-features" + - target: mips64-unknown-linux-gnuabi64 + os: ubuntu-latest + use-cross: true + cargo-flags: "--no-default-features" + - target: mips64el-unknown-linux-gnuabi64 + os: ubuntu-latest + use-cross: true + cargo-flags: "--no-default-features" runs-on: ${{matrix.os}} steps: @@ -59,14 +97,7 @@ jobs: target: ${{ matrix.target }} toolchain: stable profile: minimal # minimal component installation (ie, no documentation) - - - name: Install prerequisites - shell: bash - run: | - case ${{ matrix.target }} in - aarch64-unknown-linux-musl) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;; - esac - + - name: Show Version Information (Rust, cargo, GCC) shell: bash run: | @@ -82,7 +113,7 @@ jobs: with: use-cross: ${{ matrix.use-cross }} command: build - args: --locked --release --target=${{ matrix.target }} + args: --locked --release --target=${{ matrix.target }} ${{ matrix.cargo-flags }} - name: Build Archive shell: bash @@ -133,6 +164,8 @@ jobs: runs-on: ubuntu-latest needs: release steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to DockerHub @@ -141,9 +174,16 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push - id: docker_build uses: docker/build-push-action@v2 with: + build-args: | + REPO=${{ github.repository }} + VER=${{ github.ref_name }} + platforms: | + linux/amd64 + linux/arm64 + linux/386 + linux/arm/v7 push: ${{ needs.release.outputs.rc == 'false' }} tags: ${{ github.repository }}:latest, ${{ github.repository }}:${{ github.ref_name }} diff --git a/Dockerfile b/Dockerfile index 657b606..026e2e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,18 @@ -FROM rust:1.61 as builder -RUN rustup target add x86_64-unknown-linux-musl -RUN apt-get update && apt-get install --no-install-recommends -y musl-tools -WORKDIR /app -COPY . . -RUN cargo build --target x86_64-unknown-linux-musl --release +FROM alpine as builder +ARG REPO VER TARGETPLATFORM +RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \ + TARGET="x86_64-unknown-linux-musl"; \ + elif [ "$TARGETPLATFORM" = "linux/arm64" ]; then \ + TARGET="aarch64-unknown-linux-musl"; \ + elif [ "$TARGETPLATFORM" = "linux/386" ]; then \ + TARGET="i686-unknown-linux-musl"; \ + elif [ "$TARGETPLATFORM" = "linux/arm/v7" ]; then \ + TARGET="armv7-unknown-linux-musleabihf"; \ + fi && \ + wget https://github.com/${REPO}/releases/download/${VER}/dufs-${VER}-${TARGET}.tar.gz && \ + tar -xf dufs-${VER}-${TARGET}.tar.gz && \ + mv dufs /bin/ FROM scratch -COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/dufs /bin/ -ENTRYPOINT ["/bin/dufs"] \ No newline at end of file +COPY --from=builder /bin/dufs /bin/dufs +ENTRYPOINT ["/bin/dufs"]