ci: do not let shell pipeline mask the linter exit status code #187
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches-ignore: | |
- renovate/* | |
pull_request: | |
types: | |
- opened | |
- synchronize | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
conf: | |
- stable | |
- msrv | |
include: | |
- conf: stable | |
toolchain: stable | |
- conf: nightly | |
toolchain: nightly | |
- conf: msrv | |
toolchain: '1.73.0' | |
env: | |
RUST_BACKTRACE: 1 | |
# For other ways of skipping CI runs, see: https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs | |
if: >- | |
(github.event_name == 'push' && !endsWith(github.event.head_commit.message, 'CI: skip')) || | |
(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.names, 'skip-ci')) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout source | |
uses: actions/checkout@v4 | |
- name: Install ${{ matrix.toolchain }} | |
uses: dtolnay/rust-toolchain@v1 | |
with: | |
toolchain: ${{ matrix.toolchain }} | |
components: rustfmt, clippy | |
- name: Rust Cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Install cargo-nono | |
if: matrix.conf == 'nightly' | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cargo-nono | |
- name: Install cargo-hack | |
if: matrix.conf == 'nightly' | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cargo-hack | |
- name: Install clippy-sarif | |
if: matrix.conf == 'nightly' | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: clippy-sarif | |
- name: Install sarif-fmt | |
if: matrix.conf == 'nightly' | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: sarif-fmt | |
- name: Run rustfmt | |
if: matrix.conf == 'nightly' | |
run: cargo fmt --check --verbose -- --color=always | |
- name: Run linter for all feature combinations | |
if: matrix.conf == 'nightly' | |
run: > | |
set -o pipefail; | |
cargo hack clippy --no-deps --all-targets --feature-powerset --message-format=json -- -D warnings | |
| clippy-sarif | |
| tee clippy-results.sarif | |
| sarif-fmt | |
- name: Run tests | |
run: make zopfli && make test | |
- name: Run tests (no-std) | |
run: cargo test --release --no-default-features | |
# The documentation generation command should match what's defined on | |
# Cargo.toml's `package.metadata.docs.rs` section for docs.rs | |
- name: Generate documentation | |
if: matrix.conf == 'nightly' | |
run: cargo doc --all-features | |
- name: Check effective no_std compatibility | |
if: matrix.conf == 'nightly' | |
run: | | |
# Temporarily drop the binary crate so that cargo nono does not | |
# get confused about what crate to analyze: we are only interested | |
# in the library one | |
sed -i 's;^bin = ;#&;' Cargo.toml | |
rm src/main.rs | |
cargo nono check --no-default-features --features gzip,zlib | |
- name: Upload analysis results to GitHub | |
uses: github/codeql-action/upload-sarif@v3 | |
if: always() && matrix.conf == 'nightly' | |
continue-on-error: true | |
with: | |
sarif_file: clippy-results.sarif | |
category: clippy |