| env: |
| # We aim to always test with the latest stable Rust toolchain, however we pin to a specific |
| # version like 1.70. Note that we only specify MAJOR.MINOR and not PATCH so that bugfixes still |
| # come automatically. If the version specified here is no longer the latest stable version, |
| # then please feel free to submit a PR that adjusts it along with the potential clippy fixes. |
| RUST_STABLE_VER: "1.76" # In quotes because otherwise (e.g.) 1.70 would be interpreted as 1.7 |
| |
| |
| # Rationale |
| # |
| # We don't run clippy with --all-targets because then even --lib and --bins are compiled with |
| # dev dependencies enabled, which does not match how they would be compiled by users. |
| # A dev dependency might enable a feature of a regular dependency that we need, but testing |
| # with --all-targets would not catch that. Thus we split --lib & --bins into a separate step. |
| |
| name: CI |
| |
| on: |
| pull_request: |
| merge_group: |
| |
| jobs: |
| rustfmt: |
| runs-on: ubuntu-latest |
| name: cargo fmt |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: install stable toolchain |
| uses: dtolnay/rust-toolchain@master |
| with: |
| toolchain: ${{ env.RUST_STABLE_VER }} |
| components: rustfmt |
| |
| - name: cargo fmt |
| run: cargo fmt --all --check |
| |
| test-stable: |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| os: [windows-latest, macos-latest, ubuntu-latest] |
| include: |
| - os: ubuntu-latest |
| gpu: 'yes' |
| - os: macos-latest |
| gpu: 'no' |
| - os: windows-latest |
| # TODO: The windows runners theoretically have CPU fallback for GPUs, but |
| # this failed in initial testing |
| gpu: 'no' |
| name: cargo clippy + test |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: install stable toolchain |
| uses: dtolnay/rust-toolchain@master |
| with: |
| toolchain: ${{ env.RUST_STABLE_VER }} |
| components: clippy |
| |
| - name: restore cache |
| uses: Swatinem/rust-cache@v2 |
| |
| - name: Install native dependencies |
| if: matrix.os == 'ubuntu-latest' |
| run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev |
| |
| # Adapted from https://github.com/bevyengine/bevy/blob/b446374392adc70aceb92621b080d1a6cf7a7392/.github/workflows/validation-jobs.yml#L74-L79 |
| - name: install xvfb, llvmpipe and lavapipe |
| if: matrix.os == 'ubuntu-latest' |
| # https://launchpad.net/~kisak/+archive/ubuntu/turtle |
| run: | |
| sudo apt-get update -y -qq |
| sudo add-apt-repository ppa:kisak/turtle -y |
| sudo apt-get update |
| sudo apt install -y xvfb libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers |
| |
| - name: cargo clippy (no default features) |
| run: cargo clippy --workspace --lib --bins --no-default-features -- -D warnings |
| |
| - name: cargo clippy (no default features) (auxiliary) |
| run: cargo clippy --workspace --tests --benches --examples --no-default-features -- -D warnings |
| |
| - name: cargo clippy (default features) |
| run: cargo clippy --workspace --lib --bins -- -D warnings |
| |
| - name: cargo clippy (default features) (auxiliary) |
| run: cargo clippy --workspace --tests --benches --examples -- -D warnings |
| |
| - name: cargo clippy (all features) |
| run: cargo clippy --workspace --lib --bins --all-features -- -D warnings |
| |
| - name: cargo clippy (all features) (auxiliary) |
| run: cargo clippy --workspace --tests --benches --examples --all-features -- -D warnings |
| |
| # At the time of writing, we don't have any tests. Nevertheless, it's better to still run this |
| - name: cargo test |
| run: cargo test --workspace --all-features |
| env: |
| VELLO_CI_GPU_SUPPORT: ${{ matrix.gpu }} |
| |
| clippy-stable-wasm: |
| runs-on: ubuntu-latest |
| name: cargo test (wasm32) |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: install stable toolchain |
| uses: dtolnay/rust-toolchain@master |
| with: |
| toolchain: ${{ env.RUST_STABLE_VER }} |
| targets: wasm32-unknown-unknown |
| components: clippy |
| |
| - name: cargo clippy (wasm) |
| run: cargo clippy --all-targets --target wasm32-unknown-unknown -- -D warnings |
| env: |
| RUSTFLAGS: '--cfg=web_sys_unstable_apis' |
| |
| docs: |
| name: cargo doc |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| os: [windows-latest, macos-latest, ubuntu-latest] |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: install nightly toolchain |
| uses: dtolnay/rust-toolchain@nightly |
| |
| - name: restore cache |
| uses: Swatinem/rust-cache@v2 |
| |
| # We test documentation using nightly to match docs.rs. This prevents potential breakages |
| - name: cargo doc |
| run: cargo doc --workspace --all-features --no-deps --document-private-items -Zunstable-options -Zrustdoc-scrape-examples |