Support custom linter sysroot #1070
This file contains hidden or 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: [main] | |
pull_request: | |
workflow_dispatch: | |
env: | |
# Only include the debug info necessary for backtraces (file names and line numbers). Any extra | |
# debug info provided by `debuginfo=1` or `debuginfo=2` require an interactive debugger like | |
# `lldb` or `gdb`. | |
RUSTFLAGS: -C debuginfo=line-tables-only | |
jobs: | |
extract-rust-version: | |
name: Extract Rust version | |
uses: ./.github/workflows/extract-rust-version.yml | |
test: | |
name: Run tests | |
needs: extract-rust-version | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ needs.extract-rust-version.outputs.channel }} | |
components: ${{ needs.extract-rust-version.outputs.components }} | |
# The CLI and linter's UI tests depend on Bevy with default features. This requires extra | |
# packages, such as `alsa` and `udev`, to be installed on Linux. | |
- name: Install Linux dependencies | |
uses: bevyengine/bevy/.github/actions/[email protected] | |
- name: Cache build artifacts | |
uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: | | |
. -> target | |
tests/bevy_cli_test -> target | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- name: Run tests | |
run: | | |
cargo test --workspace --all-features --all-targets | |
# Workaround for https://github.com/rust-lang/cargo/issues/6669. `--doc` is incompatible | |
# with `--all-targets`, so we run them separately. | |
cargo test --workspace --all-features --doc | |
clippy: | |
name: Check with Clippy | |
needs: extract-rust-version | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
features: ["--no-default-features", "", "--all-features"] | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ needs.extract-rust-version.outputs.channel }} | |
components: "${{ needs.extract-rust-version.outputs.components }}, clippy" | |
- name: Cache build artifacts | |
uses: Swatinem/rust-cache@v2 | |
with: | |
# All 3 matrix combinations share the same cache key, so we only save the cache for the | |
# combination that does the most work. In this case, that's `--all-features`. | |
save-if: ${{ github.ref == 'refs/heads/main' && matrix.features == '--all-features' }} | |
- name: Run Clippy | |
env: | |
# Although we don't use any unstable options, this enables `rustc::internal` lints. | |
RUSTFLAGS: -Zunstable-options | |
run: cargo clippy --workspace --all-targets ${{ matrix.features }} -- --deny warnings | |
rustfmt: | |
name: Check with rustfmt | |
needs: extract-rust-version | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ needs.extract-rust-version.outputs.channel }} | |
components: "${{ needs.extract-rust-version.outputs.components }}, rustfmt" | |
- name: Run rustfmt | |
run: cargo fmt --all --check | |
rustdoc: | |
name: Build with `rustdoc` | |
needs: extract-rust-version | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ needs.extract-rust-version.outputs.channel }} | |
components: ${{ needs.extract-rust-version.outputs.components }} | |
- name: Cache build artifacts | |
uses: Swatinem/rust-cache@v2 | |
with: | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- name: Build documentation | |
run: cargo doc --workspace --all-features --document-private-items --no-deps | |
typos: | |
name: Check for typos | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Check for typos | |
id: typos | |
uses: crate-ci/[email protected] | |
- name: Print help on failure | |
if: ${{ failure() && steps.typos.conclusion == 'failure' }} | |
run: | | |
echo 'To fix typos, please run `typos -w`.' | |
echo 'To check for a diff, run `typos`.' | |
echo 'You can install `typos` at <https://crates.io/crates/typos>.' |