From 1b38b0a62d0fa0bc2c9f4fcccedf4b5c325ba7d2 Mon Sep 17 00:00:00 2001 From: Bo Jeanes Date: Sat, 10 Sep 2022 16:18:35 +1000 Subject: [PATCH] Release assets --- .github/workflows/ci.yml | 145 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 136 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9e5ecfb..406389e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,14 +1,22 @@ # TODO: incorporate some learnings from https://www.infinyon.com/blog/2021/04/github-actions-best-practices/, esp `sccache` stuff -# TODO: dispatch event technique from https://mateuscosta.me/rust-releases-with-github-actions looks handy for triggering another workflow, such as to share logic for building binaries name: CI on: push: - branches: - - '**' + pull_request: + +env: + NAME: modbus-mqtt + CARGO_TERM_COLOR: always + PKG_CONFIG_ALLOW_CROSS: 1 + +defaults: + run: + # necessary for windows + shell: bash jobs: - test: + tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@master @@ -25,7 +33,6 @@ jobs: export DEBIAN_FRONTEND=noninteractive sudo apt-get clean && sudo apt-get update sudo apt-get install -y pkg-config libudev-dev - - name: Cache cargo registry uses: actions/cache@v1 with: @@ -48,7 +55,6 @@ jobs: restore-keys: | ${{ runner.os }}-cargo-build-target-${{ steps.rust-toolchain.outputs.rustc_hash }}- ${{ runner.os }}-cargo-build-target- - - name: Run tests uses: actions-rs/cargo@v1 with: @@ -72,7 +78,6 @@ jobs: export DEBIAN_FRONTEND=noninteractive sudo apt-get clean && sudo apt-get update sudo apt-get install -y pkg-config libudev-dev - - name: Cache cargo registry uses: actions/cache@v1 with: @@ -97,7 +102,6 @@ jobs: restore-keys: | ${{ runner.os }}-cargo-build-target-${{ steps.rust-toolchain.outputs.rustc_hash }}- ${{ runner.os }}-cargo-build-target- - - name: Check rustfmt uses: actions-rs/cargo@v1 with: @@ -108,4 +112,127 @@ jobs: uses: actions-rs/cargo@v1 with: command: clippy - args: -- -D clippy::all \ No newline at end of file + args: -- -D clippy::all + + build: + name: Build ${{matrix.TARGET}} + needs: + - tests + strategy: + fail-fast: false + matrix: + include: + - TARGET: x86_64-unknown-linux-gnu + OS: ubuntu-latest + DEPS: libudev-dev + - TARGET: x86_64-unknown-linux-musl + OS: ubuntu-latest + - TARGET: aarch64-unknown-linux-gnu + OS: ubuntu-latest + DEPS: libudev-dev:arm64 + - TARGET: aarch64-unknown-linux-musl + OS: ubuntu-latest + - TARGET: armv7-unknown-linux-gnueabihf + OS: ubuntu-latest + DEPS: libudev-dev:armhf + - TARGET: armv7-unknown-linux-musleabihf + OS: ubuntu-latest + - TARGET: arm-unknown-linux-gnueabihf + OS: ubuntu-latest + DEPS: libudev-dev:armhf + - TARGET: arm-unknown-linux-musleabihf + OS: ubuntu-latest + - TARGET: x86_64-apple-darwin + OS: macos-latest + - TARGET: aarch64-apple-darwin + OS: macos-latest + - TARGET: x86_64-pc-windows-msvc + OS: windows-latest + runs-on: ${{ matrix.OS }} + env: + TARGET: ${{ matrix.TARGET }} + OS: ${{ matrix.OS }} + steps: + - uses: actions/checkout@v2 + - name: Cargo cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ./target + key: build-cargo-registry-${{matrix.TARGET}} + - name: Setup cross linux toolchain + if: contains(matrix.TARGET, '-linux-') && !startsWith(matrix.TARGET, 'x86_64-') && !contains(matrix.TARGET, '-musl') + run: | + case "${{ matrix.TARGET }}" in + i686-*) SYSTEM_ARCH=i386 ;; + arm*) SYSTEM_ARCH=armhf ;; + aarch64*) SYSTEM_ARCH=arm64 ;; + esac + GCC_TARGET=$(printf "${{ matrix.TARGET }}" | sed 's/-unknown-/-/' | sed 's/arm[^-]*/arm/g') + ENV_TARGET=$(printf "${{ matrix.TARGET }}" | tr '-' '_') + ENV_TARGET_UC=$(printf "${ENV_TARGET}" | tr '[[:lower:]]' '[[:upper:]]') + sudo rm -f /etc/apt/sources.list.d/*.list + case "${{ matrix.TARGET }}" in + arm* | aarch64*) + sudo tee /etc/apt/sources.list << EOF + deb [arch=i386,amd64] http://archive.ubuntu.com/ubuntu/ focal main universe + deb [arch=i386,amd64] http://archive.ubuntu.com/ubuntu/ focal-updates main universe + deb [arch=i386,amd64] http://security.ubuntu.com/ubuntu/ focal-security main universe + deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ focal main universe + deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-updates main universe + deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-security main universe + EOF + ;; + esac + sudo dpkg --add-architecture ${SYSTEM_ARCH} + dpkg --print-foreign-architectures + sudo apt-get update -qqy + sudo apt-get --fix-broken install + sudo apt-get install -qqy --fix-broken -o Debug::pkgProblemResolver=yes crossbuild-essential-${SYSTEM_ARCH} pkg-config-${GCC_TARGET} + echo "SYSTEM_ARCH=${SYSTEM_ARCH}" >> $GITHUB_ENV + echo "CARGO_TARGET_${ENV_TARGET_UC}_LINKER=${GCC_TARGET}-gcc" >> $GITHUB_ENV + echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV + echo "PKG_CONFIG_${ENV_TARGET}=${GCC_TARGET}-pkg-config" >> $GITHUB_ENV + echo "PKG_CONFIG=${GCC_TARGET}-pkg-config" >> $GITHUB_ENV + echo "BINDGEN_EXTRA_CLANG_ARGS=\"-L/usr/lib/${GCC_TARGET} -L/lib/${GCC_TARGET}\"" >> $GITHUB_ENV + - name: Install dependencies + if: matrix.DEPS + run: | + sudo apt-get update + sudo apt-get install -qqy ${{ matrix.DEPS }} + - name: Configure linker + run: | + # some additional configuration for cross-compilation on linux + cat >>~/.cargo/config <