From 66f6e0e46f513d6ba2cce6f2e4f4100abae6fb06 Mon Sep 17 00:00:00 2001 From: Daniel Szabo Date: Mon, 7 Nov 2022 22:02:19 +0200 Subject: [PATCH] Update docker.yml Fix out of memory error on GH Actions build and automate GitHub Release with artifacts ( #47). See https://github.com/docker/build-push-action/issues/654#issuecomment-1285190151 and https://github.com/docker/build-push-action/issues/621 --- .github/workflows/docker.yml | 198 ++++++++++++++++++++++++++++++----- 1 file changed, 170 insertions(+), 28 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 5051c6b..9c50ecd 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,23 +1,165 @@ -name: Docker Image +name: Release on: push: - branches: - - "master" tags: - - "v*" - pull_request: - branches: - - "master" + - v[0-9]+.[0-9]+.[0-9]+* jobs: - docker_image: - name: Build & push docker image to DockerHub - runs-on: ubuntu-latest - steps: - - name: Checkout repo - uses: actions/checkout@v3 + release: + name: Publish to Github Relases + outputs: + rc: ${{ steps.check-tag.outputs.rc }} + strategy: + matrix: + 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: 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: + - uses: actions/checkout@v2 + + - name: Check Tag + id: check-tag + shell: bash + run: | + tag=${GITHUB_REF##*/} + echo "::set-output name=version::$tag" + if [[ "$tag" =~ [0-9]+.[0-9]+.[0-9]+$ ]]; then + echo "::set-output name=rc::false" + else + echo "::set-output name=rc::true" + fi + + + - name: Install Rust Toolchain Components + uses: actions-rs/toolchain@v1 + with: + override: true + target: ${{ matrix.target }} + toolchain: stable + profile: minimal # minimal component installation (ie, no documentation) + + - name: Show Version Information (Rust, cargo, GCC) + shell: bash + run: | + gcc --version || true + rustup -V + rustup toolchain list + rustup default + cargo -V + rustc -V + + - name: Build + uses: actions-rs/cargo@v1 + with: + use-cross: ${{ matrix.use-cross }} + command: build + args: --locked --release --target=${{ matrix.target }} ${{ matrix.cargo-flags }} + + - name: Build Archive + shell: bash + id: package + env: + target: ${{ matrix.target }} + version: ${{ steps.check-tag.outputs.version }} + run: | + set -euxo pipefail + + bin=${GITHUB_REPOSITORY##*/} + src=`pwd` + dist=$src/dist + name=$bin-$version-$target + executable=target/$target/release/$bin + + if [[ "$RUNNER_OS" == "Windows" ]]; then + executable=$executable.exe + fi + + mkdir $dist + cp $executable $dist + cd $dist + + if [[ "$RUNNER_OS" == "Windows" ]]; then + archive=$dist/$name.zip + 7z a $archive * + echo "::set-output name=archive::`pwd -W`/$name.zip" + else + archive=$dist/$name.tar.gz + tar czf $archive * + echo "::set-output name=archive::$archive" + fi + + - name: Publish Archive + uses: softprops/action-gh-release@v0.1.5 + if: ${{ startsWith(github.ref, 'refs/tags/') }} + with: + draft: false + files: ${{ steps.package.outputs.archive }} + prerelease: ${{ steps.check-tag.outputs.rc == 'true' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + docker: + name: Publish to Docker Hub + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + needs: release + steps: - name: Docker meta id: meta uses: docker/metadata-action@v4 @@ -27,24 +169,24 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - - - name: Setup QEMU - uses: docker/setup-qemu-action@v2 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login DockerHub - if: github.event_name != 'pull_request' - uses: docker/login-action@v2 + - 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 + uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build & push - uses: docker/build-push-action@v3 + - name: Build and push + uses: docker/build-push-action@v2 with: - platforms: linux/amd64, linux/arm64 + build-args: | + REPO=${{ github.repository }} + VER=${{ github.ref_name }} + platforms: | + linux/amd64 + linux/arm64 push: ${{ github.ref_type == 'tag' }} tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file