summaryrefslogtreecommitdiffstats
path: root/.github
diff options
context:
space:
mode:
authorkennycallado <kennycallado@gmail.com>2022-03-29 17:31:04 +0200
committerGitHub <noreply@github.com>2022-03-29 11:31:04 -0400
commit14eefd238fe297dc1113a924afc0f6563f416b77 (patch)
treec5d7adbe709792bf847bfccf937e681b3df287ad /.github
parent2c58daa521b3e2f75f8bf4844306552a6fda448e (diff)
Attach binaries to new releases (#160)
* Attach binaries to a new release * Attach binaries to a new release * Update file name Co-authored-by: kennycallado <kennycallado@hotmail.com>
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/automated-build.yml155
1 files changed, 155 insertions, 0 deletions
diff --git a/.github/workflows/automated-build.yml b/.github/workflows/automated-build.yml
new file mode 100644
index 0000000..6e52b81
--- /dev/null
+++ b/.github/workflows/automated-build.yml
@@ -0,0 +1,155 @@
+name: Automated build
+
+env:
+ CI_INTERMEDIATES_DIR: "_ci-intermediates"
+
+on:
+ release:
+ types: [created]
+ push:
+ tags:
+ - 'v*'
+
+jobs:
+ build:
+ name: ${{ matrix.job.os }} (${{ matrix.job.target }})
+ runs-on: ${{ matrix.job.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ job:
+ - { os: ubuntu-20.04, target: arm-unknown-linux-gnueabihf , use-cross: true }
+ - { os: ubuntu-20.04, target: arm-unknown-linux-musleabihf, use-cross: true }
+ - { os: ubuntu-20.04, target: aarch64-unknown-linux-gnu , use-cross: true }
+ - { os: ubuntu-20.04, target: x86_64-unknown-linux-gnu }
+ - { os: ubuntu-20.04, target: x86_64-unknown-linux-musl , use-cross: true }
+ - { os: macos-10.15 , target: x86_64-apple-darwin }
+
+ steps:
+ - name: Checkout source code
+ uses: actions/checkout@v2
+
+ - name: Install prerequisites
+ shell: bash
+ run: |
+ case ${{ matrix.job.target }} in
+ arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
+ aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
+ esac
+
+ - name: Extract crate information
+ shell: bash
+ run: |
+ echo "PROJECT_NAME=joshuto" >> $GITHUB_ENV
+ echo "PROJECT_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV
+ echo "PROJECT_MAINTAINER=$(sed -n 's/^authors = \["\(.*\)"\]/\1/p' Cargo.toml)" >> $GITHUB_ENV
+ echo "PROJECT_HOMEPAGE=$(sed -n 's/^homepage = "\(.*\)"/\1/p' Cargo.toml)" >> $GITHUB_ENV
+
+ - name: Install Rust toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ target: ${{ matrix.job.target }}
+ override: true
+ 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.job.use-cross }}
+ command: build
+ args: --locked --release --target=${{ matrix.job.target }}
+
+ - name: Strip debug information from executable
+ id: strip
+ shell: bash
+ run: |
+ # Figure out suffix of binary
+ EXE_suffix=""
+ case ${{ matrix.job.target }} in
+ *-pc-windows-*) EXE_suffix=".exe" ;;
+ esac;
+
+ # Figure out what strip tool to use if any
+ STRIP="strip"
+ case ${{ matrix.job.target }} in
+ arm-unknown-linux-*) STRIP="arm-linux-gnueabihf-strip" ;;
+ aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;;
+ *-pc-windows-msvc) STRIP="" ;;
+ esac;
+
+ # Setup paths
+ BIN_DIR="${{ env.CI_INTERMEDIATES_DIR }}/stripped-release-bin/"
+ mkdir -p "${BIN_DIR}"
+ BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}"
+ BIN_PATH="${BIN_DIR}/${BIN_NAME}"
+
+ # Copy the release build binary to the result location
+ cp "target/${{ matrix.job.target }}/release/${BIN_NAME}" "${BIN_DIR}"
+
+ # Also strip if possible
+ if [ -n "${STRIP}" ]; then
+ "${STRIP}" "${BIN_PATH}"
+ fi
+
+ # Let subsequent steps know where to find the (stripped) bin
+ echo ::set-output name=BIN_PATH::${BIN_PATH}
+ echo ::set-output name=BIN_NAME::${BIN_NAME}
+
+ - name: Create tarball
+ id: package
+ shell: bash
+ run: |
+ PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
+ PKG_BASENAME=${PROJECT_NAME}-v${PROJECT_VERSION}-${{ matrix.job.target }}
+ PKG_NAME=${PKG_BASENAME}${PKG_suffix}
+ echo ::set-output name=PKG_NAME::${PKG_NAME}
+ PKG_STAGING="${{ env.CI_INTERMEDIATES_DIR }}/package"
+ ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/"
+ mkdir -p "${ARCHIVE_DIR}"
+
+ # Binary
+ cp "${{ steps.strip.outputs.BIN_PATH }}" "$ARCHIVE_DIR"
+
+ # base compressed package
+ pushd "${PKG_STAGING}/" >/dev/null
+ case ${{ matrix.job.target }} in
+ *-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;;
+ *) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;;
+ esac;
+ popd >/dev/null
+
+ # Let subsequent steps know where to find the compressed package
+ echo ::set-output name=PKG_PATH::"${PKG_STAGING}/${PKG_NAME}"
+
+ - name: "Artifact upload: tarball"
+ uses: actions/upload-artifact@master
+ with:
+ name: ${{ steps.package.outputs.PKG_NAME }}
+ path: ${{ steps.package.outputs.PKG_PATH }}
+
+ - name: Check for release
+ id: is-release
+ shell: bash
+ run: |
+ unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi
+ echo ::set-output name=IS_RELEASE::${IS_RELEASE}
+
+ - name: Publish archives and packages
+ uses: softprops/action-gh-release@v1
+ if: steps.is-release.outputs.IS_RELEASE
+ with:
+ files: |
+ ${{ steps.package.outputs.PKG_PATH }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}