Stash working tree before running hooks #227
Workflow file for this run
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: [master] | |
paths-ignore: | |
- "README.md" | |
pull_request: | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} | |
cancel-in-progress: true | |
jobs: | |
typos: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: crate-ci/typos@master | |
lint: | |
name: "lint" | |
timeout-minutes: 30 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: "Install Rustfmt" | |
run: rustup component add rustfmt | |
- name: "rustfmt" | |
run: cargo fmt --all --check | |
cargo-clippy: | |
name: "cargo clippy | ubuntu" | |
timeout-minutes: 10 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- name: "Install Rust toolchain" | |
run: rustup component add clippy | |
- name: "Clippy" | |
run: cargo clippy --workspace --all-targets --all-features --locked -- -D warnings | |
cargo-clippy-windows: | |
timeout-minutes: 15 | |
runs-on: windows-latest | |
name: "cargo clippy | windows" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Create Dev Drive using ReFS | |
run: ${{ github.workspace }}/.github/workflows/setup-dev-drive.ps1 | |
# actions/checkout does not let us clone into anywhere outside ${{ github.workspace }}, so we have to copy the clone... | |
- name: Copy Git Repo to Dev Drive | |
run: | | |
Copy-Item -Path "${{ github.workspace }}" -Destination "${{ env.PRE_COMMIT_WORKSPACE }}" -Recurse | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: ${{ env.PRE_COMMIT_WORKSPACE }} | |
- name: "Install Rust toolchain" | |
run: rustup component add clippy | |
- name: "Clippy" | |
run: cargo clippy --workspace --all-targets --all-features --locked -- -D warnings | |
cargo-shear: | |
name: "cargo shear" | |
timeout-minutes: 10 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: cargo-bins/cargo-binstall@main | |
- run: cargo binstall --no-confirm cargo-shear | |
- run: cargo shear | |
cargo-test-linux: | |
timeout-minutes: 10 | |
runs-on: ubuntu-latest | |
name: "cargo test | ubuntu" | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: rui314/setup-mold@v1 | |
- uses: Swatinem/rust-cache@v2 | |
- name: "Install Rust toolchain" | |
run: rustup show | |
- name: "Install cargo nextest" | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cargo-nextest | |
- name: "Install uv" | |
uses: astral-sh/setup-uv@v3 | |
- name: "Cargo test" | |
run: | | |
cargo nextest run \ | |
--workspace \ | |
--status-level skip --failure-output immediate --no-fail-fast -j 8 --final-status-level slow | |
cargo-test-macos: | |
timeout-minutes: 10 | |
runs-on: macos-latest | |
name: "cargo test | macos" | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: rui314/setup-mold@v1 | |
- uses: Swatinem/rust-cache@v2 | |
- name: "Install Rust toolchain" | |
run: rustup show | |
- name: "Install cargo nextest" | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cargo-nextest | |
- name: "Install uv" | |
uses: astral-sh/setup-uv@v3 | |
- name: "Cargo test" | |
run: | | |
cargo nextest run \ | |
--workspace \ | |
--status-level skip --failure-output immediate --no-fail-fast -j 8 --final-status-level slow | |
cargo-test-windows: | |
timeout-minutes: 15 | |
runs-on: windows-latest | |
name: "cargo test | windows" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Create Dev Drive using ReFS | |
run: ${{ github.workspace }}/.github/workflows/setup-dev-drive.ps1 | |
# actions/checkout does not let us clone into anywhere outside ${{ github.workspace }}, so we have to copy the clone... | |
- name: Copy Git Repo to Dev Drive | |
run: | | |
Copy-Item -Path "${{ github.workspace }}" -Destination "${{ env.PRE_COMMIT_WORKSPACE }}" -Recurse | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: ${{ env.PRE_COMMIT_WORKSPACE }} | |
- name: "Install Rust toolchain" | |
working-directory: ${{ env.PRE_COMMIT_WORKSPACE }} | |
run: rustup show | |
- name: "Install cargo nextest" | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cargo-nextest | |
- name: "Install uv" | |
uses: astral-sh/setup-uv@v3 | |
with: | |
cache-local-path: ${{ env.DEV_DRIVE }}/uv-cache | |
- name: "Cargo test" | |
working-directory: ${{ env.PRE_COMMIT_WORKSPACE }} | |
run: | | |
# use only 1 job for now | |
# uv concurrently writes to cache, which causes `Access is denied` errors | |
cargo nextest run --workspace --status-level skip --failure-output immediate --no-fail-fast -j 1 --final-status-level slow | |
profiler: | |
name: profiler | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: rui314/setup-mold@v1 | |
- uses: Swatinem/rust-cache@v2 | |
- name: "Install Rust toolchain" | |
run: rustup show | |
- name: "Install uv" | |
uses: astral-sh/setup-uv@v3 | |
- name: Run profiler | |
run: cargo run --profile bench --features profiler -- --all-files | |
- name: Upload report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pre-commit-rs.${{ github.run_id }}-profiler-report | |
path: pre-commit-rs.**.flamegraph.svg |