From d6987d9ed8fb787339b6afe42846ff3347079503 Mon Sep 17 00:00:00 2001 From: cyqsimon <28627918+cyqsimon@users.noreply.github.com> Date: Mon, 15 Apr 2024 13:45:18 +0800 Subject: [PATCH] CI refactor --- .github/workflows/ci.yaml | 107 +++++++++++++++++++++++++------------- 1 file changed, 72 insertions(+), 35 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 19fbac60..8fb7c345 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -22,8 +22,32 @@ jobs: id: get_msrv run: rg '^\s*rust-version\s*=\s*"(\d+(\.\d+){0,2})"' --replace 'msrv=$1' Cargo.toml >> "$GITHUB_OUTPUT" + check-fmt: + name: Check code formatting + runs-on: ubuntu-latest + needs: get-msrv + strategy: + fail-fast: false + matrix: + rust: + - ${{ needs.get-msrv.outputs.msrv }} + - stable + - nightly + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ matrix.rust }} + components: rustfmt + + - name: Check formatting + run: cargo fmt --all -- --check + test: - name: test + name: Run target-specific tests needs: get-msrv env: # Emit backtraces on panics. @@ -32,11 +56,34 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + build: + - android-aarch64 + - linux-x64-gnu + - linux-x64-musl + - macos-x64 + - windows-x64-msvc rust: - ${{ needs.get-msrv.outputs.msrv }} - stable - nightly + include: + - cargo: cargo # default; overwrite with `cross` if necessary + - build: android-aarch64 + os: ubuntu-latest + target: aarch64-linux-android + cargo: cross + - build: linux-x64-gnu + os: ubuntu-latest + target: x86_64-unknown-linux-gnu + - build: linux-x64-musl + os: ubuntu-latest + target: x86_64-unknown-linux-musl + - build: macos-x64 + os: macos-latest + target: x86_64-apple-darwin + - build: windows-x64-msvc + os: windows-latest + target: x86_64-pc-windows-msvc steps: - name: Checkout repository uses: actions/checkout@v4 @@ -45,26 +92,29 @@ jobs: uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} - components: rustfmt, clippy + targets: ${{ matrix.target }} + components: clippy - - name: Install Cross on Ubuntu - if: matrix.os == 'ubuntu-latest' + - name: Install musl-tools + if: matrix.build == 'linux-x64-musl' + run: sudo apt-get install -y --no-install-recommends musl-tools + + - name: Install cross + if: matrix.cargo == 'cross' # The latest realese of `cross` is not able to build/link for `aarch64-linux-android` # See: https://github.com/cross-rs/cross/issues/1222 # This is fixed on `main` but not yet released. To avoid a breakage somewhen in the future # pin the cross revision used to the latest HEAD at 04/2024. - # Remove the git source and revision once cross 0.3 is released. - run: cargo install --git https://github.com/cross-rs/cross.git --rev 085092c cross - - - name: Check formatting - run: cargo fmt --all -- --check + # Go back to taiki-e/install-action once cross 0.3 is released. + uses: taiki-e/cache-cargo-install-action@v1 + with: + tool: cross + git: https://github.com/cross-rs/cross.git + rev: 085092c - name: Build - run: cargo build --verbose - - - name: Build target aarch64-linux-android - if: matrix.os == 'ubuntu-latest' - run: cross build --target aarch64-linux-android --verbose + id: build + run: ${{ matrix.cargo }} build --verbose --target ${{ matrix.target }} # This is useful for debugging problems when the expected build artifacts # (like shell completions and man pages) aren't generated. @@ -80,7 +130,7 @@ jobs: done - name: Run clippy - run: cargo clippy --all-targets --all-features -- -D warnings + run: ${{ matrix.cargo }} clippy --all-targets --all-features --target ${{ matrix.target }} -- -D warnings - name: Install cargo-insta uses: taiki-e/install-action@v2 @@ -115,25 +165,12 @@ jobs: name: ${{ matrix.os }}-${{ matrix.rust }}-failed_snapshots path: '**/*.snap.new' - - name: Upload android binary - if: ${{ matrix.os == 'ubuntu-latest' && ( success() || steps.build.outcome == 'success' ) }} - uses: actions/upload-artifact@v3 - with: - name: aarch64-linux-android-${{ matrix.rust }} - path: target/aarch64-linux-android/debug/bandwhich - - - name: Upload unix binary - if: ${{ matrix.os != 'windows-latest' && ( success() || steps.build.outcome == 'success' ) }} - uses: actions/upload-artifact@v3 - with: - name: ${{ matrix.os }}-${{ matrix.rust }} - path: target/debug/bandwhich - - - name: Upload windows binary - if: ${{ matrix.os == 'windows-latest' && ( success() || steps.build.outcome == 'success' ) }} + - name: Upload binaries + if: ${{ success() || steps.build.outcome == 'success' }} uses: actions/upload-artifact@v3 with: - name: ${{ matrix.os }}-${{ matrix.rust }} + name: ${{ matrix.target }}-${{ matrix.rust }} path: | - target/debug/bandwhich.exe - target/debug/bandwhich.pdb + target/${{ matrix.target }}/debug/bandwhich + target/${{ matrix.target }}/debug/bandwhich.exe + target/${{ matrix.target }}/debug/bandwhich.pdb