mirror of
https://github.com/clap-rs/clap
synced 2024-12-14 23:02:31 +00:00
641b42b2e8
We've decided to try using some of our funding to speed up CI. kbknapp has experience with buildjet in the past which allows us to keep our Actions and switch out our runners. As we are charged for `num_cores * time`, increasing core counts could decrease time, both helping us and keeping costs down. I chose 8 cores (an upgrade over `ubuntu-latest`s 2 cores) as kbknapp knew someone who benchmarked things for Rust/Python and found that a good fit. I only switched a subset of jobs over to buildjet to focus on jobs where most of the time is spent on highly parallelizable operations. Buildjet dropped our Linux test jobs from 8-9min to 2-3min. The checks and UI-test jobs only improved by 30s-1min each, so I left them out. We can iterate as we go.
210 lines
5.5 KiB
YAML
210 lines
5.5 KiB
YAML
name: CI
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- "*master"
|
|
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
CARGO_TERM_COLOR: always
|
|
CLICOLOR: 1
|
|
|
|
jobs:
|
|
ci:
|
|
permissions:
|
|
contents: none
|
|
name: CI
|
|
needs: [test, check, docs, rustfmt, clippy, cffconvert]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Done
|
|
run: exit 0
|
|
test:
|
|
name: Test
|
|
strategy:
|
|
matrix:
|
|
build: [linux, windows, mac, minimal, default, next]
|
|
include:
|
|
- build: linux
|
|
os: buildjet-8vcpu-ubuntu-2204
|
|
rust: "stable"
|
|
features: "full"
|
|
- build: windows
|
|
os: windows-latest
|
|
rust: "stable"
|
|
features: "full"
|
|
- build: mac
|
|
os: macos-latest
|
|
rust: "stable"
|
|
features: "full"
|
|
- build: minimal
|
|
os: ubuntu-latest
|
|
rust: "stable"
|
|
features: "minimal"
|
|
- build: default
|
|
os: ubuntu-latest
|
|
rust: "stable"
|
|
features: "default"
|
|
- build: next
|
|
os: ubuntu-latest
|
|
rust: "stable"
|
|
features: "next"
|
|
continue-on-error: ${{ matrix.rust != 'stable' }}
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: ${{ matrix.rust }}
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: Build
|
|
run: make build-${{matrix.features}}
|
|
- name: Test
|
|
run: make test-${{matrix.features}}
|
|
- name: Test (benches)
|
|
run: make test-${{matrix.features}} ARGS='--workspace --benches'
|
|
- name: Test (ultra-minimal)
|
|
if: matrix.build == 'minimal'
|
|
run: make test-minimal ARGS='--manifest-path Cargo.toml'
|
|
- name: Test dynamic completions
|
|
run: cargo test -p clap_complete -F unstable-dynamic
|
|
check:
|
|
name: Check
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build: [msrv, wasm, wasm-wasi, debug, release]
|
|
include:
|
|
- build: msrv
|
|
rust: 1.70.0 # MSRV
|
|
target: x86_64-unknown-linux-gnu
|
|
features: full
|
|
- build: wasm
|
|
rust: stable
|
|
target: wasm32-unknown-unknown
|
|
features: wasm
|
|
- build: wasm-wasi
|
|
rust: stable
|
|
target: wasm32-wasi
|
|
features: wasm
|
|
- build: debug
|
|
rust: stable
|
|
target: x86_64-unknown-linux-gnu
|
|
features: debug
|
|
- build: release
|
|
rust: stable
|
|
target: x86_64-unknown-linux-gnu
|
|
features: release
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
- name: Install rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: ${{ matrix.rust }}
|
|
targets: ${{ matrix.target }}
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: Check
|
|
run: make check-${{ matrix.features }}
|
|
env:
|
|
TOOLCHAIN_TARGET: ${{ matrix.target }}
|
|
ui:
|
|
name: UI Tests
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
features: [default, next]
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: "1.70" # MSRV
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: UI Tests
|
|
run: make test-ui-${{ matrix.features }}
|
|
lockfile:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: stable
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: "Is lockfile updated?"
|
|
run: cargo fetch --locked
|
|
docs:
|
|
name: Docs
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: 1.70.0 # MSRV
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: Check documentation
|
|
env:
|
|
RUSTDOCFLAGS: -D warnings
|
|
run: make doc
|
|
rustfmt:
|
|
name: rustfmt
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
# Not MSRV because its harder to jump between versions and people are
|
|
# more likely to have stable
|
|
toolchain: stable
|
|
components: rustfmt
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: Check formatting
|
|
run: cargo fmt --all -- --check
|
|
clippy:
|
|
name: clippy
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: "1.70" # MSRV
|
|
components: clippy
|
|
- uses: Swatinem/rust-cache@v2
|
|
- name: Lint (ultra-minimal)
|
|
run: make clippy-minimal ARGS='--manifest-path Cargo.toml'
|
|
- name: Lint (minimal)
|
|
run: make clippy-minimal
|
|
- name: Lint (all)
|
|
run: make clippy-full
|
|
- name: Lint (release)
|
|
run: make clippy-release
|
|
cffconvert:
|
|
name: cffconvert
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
- name: CFF validation
|
|
uses: citation-file-format/cffconvert-github-action@2.0.0
|
|
with:
|
|
args: --validate
|