name: CI on: workflow_dispatch: pull_request: paths: - 'crates/**' - 'tasks/**' - 'Cargo.toml' - 'Cargo.lock' - 'rust-toolchain.toml' - '!**/*.md' push: branches: - main paths-ignore: - '**/*.md' # cancel previous job runs for the same workflow + pr concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: cache: # Warm cache factory for all other CI jobs name: Build Cache strategy: fail-fast: false matrix: include: - os: windows-latest - os: ubuntu-latest - os: macos-latest runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v3 - name: Install Rust Toolchain uses: ./.github/actions/rustup with: save-cache: ${{ github.ref_name == 'main' }} - name: Run Cargo Check run: cargo check --release --workspace --all-features --locked format: name: Format Rust Files runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Install Rust Toolchain uses: ./.github/actions/rustup with: fmt: true restore-cache: false - name: Run rustfmt run: cargo fmt --all -- --check lint: name: Lint Rust Files needs: cache runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Install Rust Toolchain uses: ./.github/actions/rustup with: clippy: true - name: Run Clippy run: cargo lint typos: name: Spell Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: crate-ci/typos@master with: files: . check-dependencies: name: Check Dependencies needs: cache runs-on: ubuntu-latest steps: - name: Checkout PR Branch uses: actions/checkout@v3 - name: Install Rust Toolchain uses: ./.github/actions/rustup - name: Install cargo-udeps uses: taiki-e/install-action@v2 with: tool: cargo-udeps - name: Run udeps run: cargo udeps test: name: Test needs: cache strategy: fail-fast: false matrix: include: - os: windows-latest - os: ubuntu-latest - os: macos-latest runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v3 - name: Install Rust Toolchain uses: ./.github/actions/rustup - name: Install cargo-nextest uses: taiki-e/install-action@cargo-nextest - name: Run tests run: cargo nextest run