diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bc6c60a..a621466 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,11 @@ jobs: test: name: Test Suite runs-on: ubuntu-latest + # beta/nightly are informational: a toolchain regression upstream should not + # gate merges, but we still want to see it. + continue-on-error: ${{ matrix.rust != 'stable' }} strategy: + fail-fast: false matrix: rust: - stable @@ -52,6 +56,20 @@ jobs: path: target key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}-${{ matrix.rust }} + - name: Install cargo-nextest + uses: taiki-e/install-action@v2 + with: + tool: cargo-nextest + + # The integration harness shells out to git; give it a committer identity. + - name: Setup git + run: | + git config --global user.email "ci@example.com" + git config --global user.name "CI" + + - name: Run tests + run: cargo nextest run --all-features --no-fail-fast + lint: name: lint runs-on: ubuntu-latest @@ -80,12 +98,20 @@ jobs: pkl = "latest" typos = { version = "latest", depends = ["rust"] } - - name: Run hk ci workflow + # mise installs the toolchain without optional components, so cargo_fmt and + # cargo_clippy have no binary to call. + - name: Add rustfmt and clippy components + run: rustup component add rustfmt clippy + + # --all: hk defaults to staged/changed files, which on a fresh CI checkout + # leaves most steps with nothing to do. --skip-step cargo_test: the test + # job above owns running the suite. --no-fail-fast: report every lint + # problem in one run instead of aborting the rest on the first failure. + - name: Run hk check env: HK_MISE: 1 MISE_YES: 1 - run: | - hk check || cd ../ && hk check + run: hk check --all --skip-step cargo_test --no-fail-fast security_audit: name: Security Audit @@ -98,7 +124,9 @@ jobs: - uses: rustsec/audit-check@v2 with: token: ${{ secrets.GITHUB_TOKEN || github.token }} - ignore: RUSTSEC-2024-0364,RUSTSEC-2024-0436 + # Keep in sync with the `ignore` list in deny.toml, which documents why + # each of these is accepted. + ignore: RUSTSEC-2024-0364,RUSTSEC-2024-0436,RUSTSEC-2026-0044,RUSTSEC-2026-0048 coverage: name: Code Coverage diff --git a/Cargo.lock b/Cargo.lock index 5cddd12..3038f31 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -84,9 +84,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arc-swap" @@ -451,9 +451,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] @@ -1225,7 +1225,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b305d85504de270ad3525d726a6b69cc59ee7b2269b014387651107ab9f0755b" dependencies = [ "bstr", - "hashbrown 0.16.1", + "hashbrown 0.17.1", ] [[package]] diff --git a/README.md b/README.md index 52863c7..245ac91 100644 --- a/README.md +++ b/README.md @@ -319,7 +319,7 @@ submod completeme bash > ~/.bash_completion.d/submod ```zsh "zsh" # zsh has an fpath array with possible function directories. You can -# put your competions in any of these; we use the first one here: +# put your completions in any of these; we use the first one here: ZSH_DEFAULT="${XDG_DATA_HOME:-~/.local/share}/zsh/site-functions" ZFUNCDIR=""${fpath[1]:-$ZSH_DEFAULT}" mkdir -p "$ZFUNCDIR" diff --git a/_typos.toml b/_typos.toml index 1ec392d..5064868 100755 --- a/_typos.toml +++ b/_typos.toml @@ -7,7 +7,7 @@ locale = "en-us" check-file = true check-filename = true extend-ignore-re = [ - "(?s)(#|//)\\s*spellchecker:off.*?\\n\\s*(#|//)\\s*spellchecker:on" + "(?s)(#|//|