From 010b7133e41e4f2b4b7f5b827b22582b1632640e Mon Sep 17 00:00:00 2001 From: Hammy Date: Sat, 2 Apr 2022 00:53:58 +0100 Subject: [PATCH] Add github actions workflow --- .github/scripts/build.bash | 21 +++++ .github/scripts/common.bash | 6 ++ .github/scripts/set_rust_version.bash | 4 + .github/scripts/test.bash | 15 ++++ .github/workflows/build.yml | 107 ++++++++++++++++++++++++++ 5 files changed, 153 insertions(+) create mode 100755 .github/scripts/build.bash create mode 100755 .github/scripts/common.bash create mode 100755 .github/scripts/set_rust_version.bash create mode 100755 .github/scripts/test.bash create mode 100644 .github/workflows/build.yml diff --git a/.github/scripts/build.bash b/.github/scripts/build.bash new file mode 100755 index 0000000..434d1a3 --- /dev/null +++ b/.github/scripts/build.bash @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# Script for building your rust projects. +set -e + +source .github/scripts/common.bash + +# $1 {path} = Path to cross/cargo executable +CROSS=$1 +# $1 {string} = e.g. x86_64-pc-windows-msvc +TARGET_TRIPLE=$2 +# $3 {boolean} = Are we building for deployment? +RELEASE_BUILD=$3 + +required_arg $CROSS 'CROSS' +required_arg $TARGET_TRIPLE '' + +if [ -z "$RELEASE_BUILD" ]; then + $CROSS build --target $TARGET_TRIPLE +else + $CROSS build --target $TARGET_TRIPLE --release +fi \ No newline at end of file diff --git a/.github/scripts/common.bash b/.github/scripts/common.bash new file mode 100755 index 0000000..6b0a21a --- /dev/null +++ b/.github/scripts/common.bash @@ -0,0 +1,6 @@ +required_arg() { + if [ -z "$1" ]; then + echo "Required argument $2 missing" + exit 1 + fi +} diff --git a/.github/scripts/set_rust_version.bash b/.github/scripts/set_rust_version.bash new file mode 100755 index 0000000..d822cd5 --- /dev/null +++ b/.github/scripts/set_rust_version.bash @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e +rustup default $1 +rustup target add $2 diff --git a/.github/scripts/test.bash b/.github/scripts/test.bash new file mode 100755 index 0000000..2fe58f4 --- /dev/null +++ b/.github/scripts/test.bash @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# Script for building your rust projects. +set -e + +source .github/scripts/common.bash + +# $1 {path} = Path to cross/cargo executable +CROSS=$1 +# $1 {string} = +TARGET_TRIPLE=$2 + +required_arg $CROSS 'CROSS' +required_arg $TARGET_TRIPLE '' + +$CROSS test --target $TARGET_TRIPLE \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..95d1abd --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,107 @@ +name: build + +on: + push: + branches: + - '**' + pull_request: + +jobs: + install-cross: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 50 + - uses: XAMPPRocky/get-github-release@v1 + id: cross + with: + owner: rust-embedded + repo: cross + matches: ${{ matrix.platform }} + token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/upload-artifact@v1 + with: + name: cross-${{ matrix.platform }} + path: ${{ steps.cross.outputs.install_path }} + strategy: + matrix: + platform: [ linux-musl, apple-darwin ] + + windows: + runs-on: windows-latest + needs: install-cross + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 50 + - run: .github/scripts/set_rust_version.bash ${{ matrix.channel }} ${{ matrix.target }} + shell: bash + - run: .github/scripts/build.bash cargo ${{ matrix.target }} + shell: bash + - run: .github/scripts/test.bash cargo ${{ matrix.target }} + shell: bash + + strategy: + matrix: + channel: [ stable, beta ] + target: + - x86_64-pc-windows-gnu + - x86_64-pc-windows-msvc + + macos: + runs-on: macos-latest + needs: install-cross + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 50 + + - uses: actions/download-artifact@v1 + with: + name: cross-apple-darwin + path: /usr/local/bin/ + + - run: chmod +x /usr/local/bin/cross + + - run: .github/scripts/set_rust_version.bash ${{ matrix.channel }} ${{ matrix.target }} + - run: .github/scripts/build.bash cross ${{ matrix.target }} + - run: .github/scripts/test.bash cross ${{ matrix.target }} + if: matrix.target == 'x86_64-apple-darwin' + + strategy: + matrix: + channel: [ stable, beta ] + target: + - x86_64-apple-darwin + + linux: + runs-on: ubuntu-latest + needs: install-cross + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 50 + + - name: Download Cross + uses: actions/download-artifact@v1 + with: + name: cross-linux-musl + path: /tmp/ + - run: chmod +x /tmp/cross + - run: .github/scripts/set_rust_version.bash ${{ matrix.channel }} ${{ matrix.target }} + - run: .github/scripts/build.bash /tmp/cross ${{ matrix.target }} + - run: .github/scripts/test.bash /tmp/cross ${{ matrix.target }} + if: | + !contains(matrix.target, 'android') && + !contains(matrix.target, 'bsd') && + !contains(matrix.target, 'solaris') && + matrix.target != 'armv5te-unknown-linux-musleabi' && + matrix.target != 'sparc64-unknown-linux-gnu' + + strategy: + matrix: + channel: [ stable, beta ] + target: + - x86_64-unknown-linux-gnu + - x86_64-unknown-linux-musl \ No newline at end of file