diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 75d0a1e..d803b91 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -78,6 +78,14 @@ updates: labels: - dependencies - github-actions + ignore: + # `dtolnay/rust-toolchain@` is not an action version -- the ref + # selects which Rust toolchain to install. The MSRV job pins it to the + # workspace `rust-version`, so a "version bump" there silently retargets + # the check at a newer compiler and the gate stops testing the floor it + # exists to enforce. Dependabot proposed 1.88 -> 1.100 exactly once; this + # stops it recurring. Update this pin by hand, with Cargo.toml. + - dependency-name: "dtolnay/rust-toolchain" groups: actions: patterns: diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index fdce19f..8a94ab1 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: fetch-depth: 0 # Full history for baseline comparison @@ -41,7 +41,7 @@ jobs: - name: Cache hyperfine installation id: cache-hyperfine - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.cargo/bin/hyperfine key: ${{ runner.os }}-hyperfine-1.18.0 @@ -119,7 +119,7 @@ jobs: fi - name: Upload benchmark results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 if: always() continue-on-error: true with: @@ -133,7 +133,7 @@ jobs: - name: Comment on PR if: github.event_name == 'pull_request' && steps.find-baseline.outputs.baseline_found == 'true' continue-on-error: true - uses: actions/github-script@v7 + uses: actions/github-script@v9 with: script: | const fs = require('fs'); diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed48b55..84d9ea3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable @@ -99,7 +99,7 @@ jobs: name: Format Check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable @@ -115,7 +115,7 @@ jobs: name: Generated Data Freshness runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Check service-probes corpus is current run: python3 tools/gen-service-probes/generate.py --check @@ -128,7 +128,7 @@ jobs: name: Clippy Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable @@ -154,7 +154,7 @@ jobs: rust: [stable] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Install Rust ${{ matrix.rust }} uses: dtolnay/rust-toolchain@master @@ -265,7 +265,7 @@ jobs: - name: Upload test coverage to Codecov if: ${{ !cancelled() && matrix.os != 'windows-latest' }} - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v7 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./coverage/cobertura.xml @@ -277,7 +277,7 @@ jobs: name: Security Audit runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 # `check advisories` alone left three of cargo-deny's four checks # unenforced. The licence check in particular went unrun, so a @@ -317,13 +317,13 @@ jobs: name: Docker Images runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Set up Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build Debian runtime image - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . file: docker/Dockerfile @@ -334,7 +334,7 @@ jobs: cache-to: type=gha,mode=max - name: Build Alpine image - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . file: docker/Dockerfile @@ -369,9 +369,15 @@ jobs: name: MSRV Check (1.88) runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Install Rust 1.88 + # NOT an action version -- this ref selects the Rust toolchain, and it + # must stay equal to `rust-version` in Cargo.toml. Dependabot proposed + # bumping it to 1.100, which would have left the job named "Install + # Rust 1.88" while installing 1.100, so the MSRV gate would pass + # without ever testing the floor it claims to enforce. Ignored in + # .github/dependabot.yml. uses: dtolnay/rust-toolchain@1.88 - name: Install system dependencies diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index ecd199c..0e64433 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -31,7 +31,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Initialize CodeQL uses: github/codeql-action/init@v3 diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index c320fb7..7e48c91 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -49,7 +49,7 @@ jobs: echo "=== Disk space after cleanup ===" df -h / - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable @@ -120,7 +120,7 @@ jobs: echo "Extracted coverage: $COVERAGE%" - name: Upload coverage to Codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v7 with: files: coverage/lcov.info flags: rust @@ -129,7 +129,7 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} - name: Upload coverage artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: coverage-report path: coverage/lcov.info @@ -162,7 +162,7 @@ jobs: - name: Comment PR with coverage if: github.event_name == 'pull_request' - uses: actions/github-script@v6 + uses: actions/github-script@v9 with: script: | const coverage = '${{ steps.coverage.outputs.percentage }}'; diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 99b3833..71ebf17 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Dependency Review - uses: actions/dependency-review-action@v4 + uses: actions/dependency-review-action@v5 diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml index ed7861f..97776ae 100644 --- a/.github/workflows/fuzz.yml +++ b/.github/workflows/fuzz.yml @@ -38,25 +38,25 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Install Rust nightly uses: dtolnay/rust-toolchain@nightly - name: Cache cargo registry - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.cargo/registry/index key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo git - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.cargo/git key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }} - name: Cache target directory - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: target key: ${{ runner.os }}-fuzz-target-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} @@ -133,7 +133,7 @@ jobs: - name: Upload crash artifacts if: steps.fuzz_run.outputs.crash_found == 'true' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: fuzz-crashes-${{ matrix.target }}-${{ github.run_number }} path: /tmp/fuzzing-artifacts/ @@ -142,7 +142,7 @@ jobs: - name: Upload corpus updates if: success() || failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: fuzz-corpus-${{ matrix.target }}-${{ github.run_number }} path: fuzz/corpus/${{ matrix.target }}/ diff --git a/.github/workflows/gemini-dispatch.yml b/.github/workflows/gemini-dispatch.yml index d965d45..b10bf19 100644 --- a/.github/workflows/gemini-dispatch.yml +++ b/.github/workflows/gemini-dispatch.yml @@ -73,7 +73,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2 + uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v2 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' @@ -83,7 +83,7 @@ jobs: - name: 'Extract command' id: 'extract_command' - uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v7 + uses: 'actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3' # ratchet:actions/github-script@v7 env: EVENT_TYPE: '${{ github.event_name }}.${{ github.event.action }}' REQUEST: '${{ github.event.comment.body || github.event.review.body || github.event.issue.body }}' @@ -183,7 +183,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2 + uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v2 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' diff --git a/.github/workflows/gemini-invoke.yml b/.github/workflows/gemini-invoke.yml index 302616c..518c07e 100644 --- a/.github/workflows/gemini-invoke.yml +++ b/.github/workflows/gemini-invoke.yml @@ -29,7 +29,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2 + uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v2 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' diff --git a/.github/workflows/gemini-review.yml b/.github/workflows/gemini-review.yml index faf18c5..4dfaf4a 100644 --- a/.github/workflows/gemini-review.yml +++ b/.github/workflows/gemini-review.yml @@ -30,7 +30,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2 + uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v2 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' @@ -39,7 +39,7 @@ jobs: permission-pull-requests: 'write' - name: 'Checkout repository' - uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5 + uses: 'actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1' # ratchet:actions/checkout@v5 - name: 'Run Gemini pull request review' uses: 'google-github-actions/run-gemini-cli@v0' # ratchet:exclude diff --git a/.github/workflows/gemini-scheduled-triage.yml b/.github/workflows/gemini-scheduled-triage.yml index b153e29..e09f0d0 100644 --- a/.github/workflows/gemini-scheduled-triage.yml +++ b/.github/workflows/gemini-scheduled-triage.yml @@ -40,7 +40,7 @@ jobs: steps: - name: 'Get repository labels' id: 'get_labels' - uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v7.0.1 + uses: 'actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3' # ratchet:actions/github-script@v9.0.0 with: # NOTE: we intentionally do not use the minted token. The default # GITHUB_TOKEN provided by the action has enough permissions to read @@ -250,7 +250,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2 + uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v2 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' @@ -262,7 +262,7 @@ jobs: env: AVAILABLE_LABELS: '${{ needs.triage.outputs.available_labels }}' TRIAGED_ISSUES: '${{ needs.triage.outputs.triaged_issues }}' - uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v7.0.1 + uses: 'actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3' # ratchet:actions/github-script@v9.0.0 with: # Use the provided token so that the "gemini-cli" is the actor in the # log for what changed the labels. diff --git a/.github/workflows/gemini-triage.yml b/.github/workflows/gemini-triage.yml index 151bfdd..535b7cf 100644 --- a/.github/workflows/gemini-triage.yml +++ b/.github/workflows/gemini-triage.yml @@ -31,7 +31,7 @@ jobs: steps: - name: 'Get repository labels' id: 'get_labels' - uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v7.0.1 + uses: 'actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3' # ratchet:actions/github-script@v9.0.0 with: # NOTE: we intentionally do not use the given token. The default # GITHUB_TOKEN provided by the action has enough permissions to read @@ -158,7 +158,7 @@ jobs: id: 'mint_identity_token' if: |- ${{ vars.APP_ID }} - uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2 + uses: 'actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1' # ratchet:actions/create-github-app-token@v2 with: app-id: '${{ vars.APP_ID }}' private-key: '${{ secrets.APP_PRIVATE_KEY }}' @@ -171,7 +171,7 @@ jobs: ISSUE_NUMBER: '${{ github.event.issue.number }}' AVAILABLE_LABELS: '${{ needs.triage.outputs.available_labels }}' SELECTED_LABELS: '${{ needs.triage.outputs.selected_labels }}' - uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v7.0.1 + uses: 'actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3' # ratchet:actions/github-script@v9.0.0 with: # Use the provided token so that the "gemini-cli" is the actor in the # log for what changed the labels. diff --git a/.github/workflows/markdown-links.yml b/.github/workflows/markdown-links.yml index 7b81f45..31f4279 100644 --- a/.github/workflows/markdown-links.yml +++ b/.github/workflows/markdown-links.yml @@ -53,7 +53,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Install markdown-link-check run: npm install -g markdown-link-check diff --git a/.github/workflows/mdbook.yml b/.github/workflows/mdbook.yml index 4a4d39b..4cfa01a 100644 --- a/.github/workflows/mdbook.yml +++ b/.github/workflows/mdbook.yml @@ -31,7 +31,7 @@ jobs: env: MDBOOK_VERSION: 0.4.36 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Install mdBook run: | curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh -s -- -y @@ -39,14 +39,14 @@ jobs: cargo install --version ${MDBOOK_VERSION} mdbook - name: Setup Pages id: pages - uses: actions/configure-pages@v5 + uses: actions/configure-pages@v6 - name: Build with mdBook run: | source "$HOME/.cargo/env" cd docs mdbook build - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v5 with: path: ./docs/book @@ -60,4 +60,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v5 diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index 4e3a101..f29046d 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -29,7 +29,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Determine version id: version @@ -114,7 +114,7 @@ jobs: dpkg-deb --build pkg "prtip_${VERSION}_amd64.deb" - name: Upload .deb artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: prtip-deb path: prtip_*.deb @@ -134,7 +134,7 @@ jobs: needs: [] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Determine version id: version @@ -151,7 +151,7 @@ jobs: echo "version=$VERSION" >> $GITHUB_OUTPUT - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Check Docker Hub credentials id: docker-hub-check @@ -165,13 +165,13 @@ jobs: - name: Login to Docker Hub if: (github.event_name == 'release' || inputs.publish_docker) && steps.docker-hub-check.outputs.available == 'true' - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} @@ -179,7 +179,7 @@ jobs: - name: Build and push (with Docker Hub) if: steps.docker-hub-check.outputs.available == 'true' - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 env: VERSION: ${{ steps.version.outputs.version }} REPO_OWNER: ${{ github.repository_owner }} @@ -200,7 +200,7 @@ jobs: - name: Build and push (GHCR only) if: steps.docker-hub-check.outputs.available != 'true' - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 env: VERSION: ${{ steps.version.outputs.version }} REPO_OWNER: ${{ github.repository_owner }} @@ -219,7 +219,7 @@ jobs: - name: Build test image (for validation) if: github.event_name != 'release' && !inputs.publish_docker - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: . file: docker/Dockerfile @@ -237,10 +237,10 @@ jobs: if: always() && !failure() && !cancelled() steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Download .deb artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: prtip-deb path: packages diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 471c410..7251c24 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,7 +29,7 @@ jobs: version: ${{ steps.version.outputs.tag }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Determine version id: version @@ -67,7 +67,7 @@ jobs: if: needs.check-release.outputs.release_exists == 'false' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Generate dynamic release notes id: release_notes @@ -270,7 +270,7 @@ jobs: cross: true steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable @@ -385,7 +385,7 @@ jobs: Compress-Archive -Path prtip.exe -DestinationPath $env:GITHUB_WORKSPACE/prtip-${VERSION_NUM}-${{ matrix.target }}.zip - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: prtip-${{ matrix.target }} path: prtip-*-${{ matrix.target }}.* @@ -400,10 +400,10 @@ jobs: upload_complete: ${{ steps.upload.outputs.complete }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Download all artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: path: artifacts @@ -461,7 +461,7 @@ jobs: steps: - name: Trigger coverage workflow - uses: actions/github-script@v7 + uses: actions/github-script@v9 with: script: | const version = '${{ needs.check-release.outputs.version }}';