From 0ebb885e796267550f2b36f7d371bf4d66d47867 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sun, 23 Aug 2026 23:58:59 -0400 Subject: [PATCH] chore(ci): inline dtolnay/rust-toolchain, SHA-pin every other third-party action dtolnay/rust-toolchain appeared 45 times across 23 workflow files, and every call site passed the same toolchain that rust-toolchain.toml at the repo root already pins - installing it is one rustup command, so there is no reason to depend on a third-party action for it. Replaced every occurrence with an inline rustup toolchain install step, translating each site's components/targets inputs into matching flags. Every other action reference still pinned to a mutable tag now pins the commit SHA that tag currently resolves to, with the tag kept as a trailing comment. Found and fixed a real bug along the way: taiki-e/install-action@v3 does not exist upstream (latest is v2.86.6), so coverage.yml's cargo-llvm-cov install had failed with startup_failure on every scheduled run for weeks. Also caught and corrected two annotated-tag SHAs (Swatinem/rust-cache, mozilla-actions/sccache-action) that had resolved to the tag object instead of the commit it points to - verified each pin resolves to a real commit via the GitHub API before landing. --- .github/workflows/auto-opt-app-patterns.yml | 10 +- .github/workflows/benchmark.yml | 36 +-- .github/workflows/container-tests.yml | 38 +-- .github/workflows/coverage.yml | 15 +- .github/workflows/docs.yml | 8 +- .github/workflows/eh-transport.yml | 10 +- .github/workflows/ext-link.yml | 12 +- .github/workflows/feature-matrix.yml | 12 +- .github/workflows/gate-freshness.yml | 2 +- .github/workflows/gc-moving-witnesses.yml | 12 +- .github/workflows/gc-native-roots.yml | 11 +- .github/workflows/gc-parse-churn-gate.yml | 10 +- .../workflows/gc-ptr-shape-off-witness.yml | 12 +- .github/workflows/gc-ratchet.yml | 12 +- .github/workflows/gc-root-dominance.yml | 24 +- .github/workflows/llvm-inprocess.yml | 2 +- .github/workflows/next-app-route.yml | 13 +- .github/workflows/node-compat-matrix.yml | 12 +- .github/workflows/node-core-subset.yml | 18 +- .github/workflows/node-suite-guard.yml | 12 +- .github/workflows/npm-launcher.yml | 8 +- .github/workflows/npm-package-sweep.yml | 12 +- .github/workflows/npm-publish-freshness.yml | 4 +- .github/workflows/npm-stage-publish.yml | 8 +- .github/workflows/release-hono-server.yml | 4 +- .github/workflows/release-packages.yml | 48 ++-- .github/workflows/security-audit.yml | 14 +- .github/workflows/simctl-tests.yml | 10 +- .github/workflows/test.yml | 256 ++++++++---------- .github/workflows/tls-budget.yml | 12 +- 30 files changed, 278 insertions(+), 379 deletions(-) diff --git a/.github/workflows/auto-opt-app-patterns.yml b/.github/workflows/auto-opt-app-patterns.yml index 3deeebf15a..bfc85ef82d 100644 --- a/.github/workflows/auto-opt-app-patterns.yml +++ b/.github/workflows/auto-opt-app-patterns.yml @@ -100,7 +100,7 @@ jobs: contents: read pull-requests: read steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -137,12 +137,10 @@ jobs: - name: Install Rust toolchain if: steps.relevance.outputs.run == 'true' - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 if: steps.relevance.outputs.run == 'true' with: shared-key: "${{ runner.os }}-perry" @@ -156,7 +154,7 @@ jobs: - name: Setup Node oracle if: steps.relevance.outputs.run == 'true' - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version. Every kernel's stdout is # diffed against this node, so the pin is a correctness input. diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index cdef58b02c..bd9a113654 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -41,19 +41,17 @@ jobs: outputs: status: ${{ steps.compare.outputs.status }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: # Need history to compare against previous commits on main fetch-depth: 2 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Cache cargo - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -63,7 +61,7 @@ jobs: restore-keys: ${{ runner.os }}-cargo- - name: Setup Node.js (for perf comparison) - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. Node here is # an informational peer (the hard regression gate is perry-vs-perry @@ -73,7 +71,7 @@ jobs: node-version-file: .node-version - name: Setup Bun (for perf comparison) - uses: oven-sh/setup-bun@v2 + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 with: bun-version: '1.3.14' @@ -250,7 +248,7 @@ jobs: - name: Upload benchmark results if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: benchmark-results-${{ github.sha }} path: | @@ -268,16 +266,14 @@ jobs: binary-size: runs-on: macos-14 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Cache cargo - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -356,7 +352,7 @@ jobs: - name: Upload binary size results if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: binary-sizes-${{ github.sha }} path: .bench-results/binary-sizes.json @@ -368,12 +364,10 @@ jobs: compile-time: runs-on: macos-14 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Measure clean-build time @@ -409,7 +403,7 @@ jobs: - name: Upload compile-time results if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: compile-time-${{ github.sha }} path: .bench-results/compile-time.json @@ -426,12 +420,12 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Download benchmark results - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: name: benchmark-results-${{ github.sha }} path: .bench-results diff --git a/.github/workflows/container-tests.yml b/.github/workflows/container-tests.yml index f413a731ca..c7bbd8a98f 100644 --- a/.github/workflows/container-tests.yml +++ b/.github/workflows/container-tests.yml @@ -86,7 +86,7 @@ jobs: os: [macos-14, ubuntu-24.04] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Free up disk space (macOS) if: runner.os == 'macOS' @@ -96,13 +96,11 @@ jobs: df -h / | tail -1 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Cache cargo registry - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -164,7 +162,7 @@ jobs: runs-on: macos-14 if: (github.event_name != 'pull_request' || github.base_ref == 'main') && (github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'run-extended-tests')) steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Free up disk space (macOS) run: | @@ -172,13 +170,11 @@ jobs: df -h / | tail -1 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Cache cargo registry - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -213,16 +209,14 @@ jobs: runs-on: ubuntu-24.04 if: (github.event_name != 'pull_request' || github.base_ref == 'main') && (github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'run-extended-tests')) steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Cache cargo registry - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -259,16 +253,14 @@ jobs: startsWith(github.ref, 'refs/tags/v') || github.event.inputs.run_e2e == 'true' steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Cache cargo registry - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -306,7 +298,7 @@ jobs: - name: Upload e2e binaries (debugging) if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: e2e-bins-linux path: target/e2e-bin/ @@ -326,7 +318,7 @@ jobs: matrix: target: [compose_yaml_parse, env_interpolation, compose_spec_json_round_trip] steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install nightly Rust + cargo-fuzz run: | @@ -340,7 +332,7 @@ jobs: - name: Upload crash artifacts if: failure() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: fuzz-crashes-${{ matrix.target }} path: crates/perry-container-compose/fuzz/artifacts/${{ matrix.target }}/ diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index a5946af769..83510864df 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -32,16 +32,13 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 90 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' - components: llvm-tools-preview + run: rustup toolchain install nightly-2026-08-20 --profile minimal --component llvm-tools-preview - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: # Separate key from the main test cache — llvm-cov rebuilds # the workspace with instrumentation, so its objects can't @@ -50,7 +47,7 @@ jobs: save-if: ${{ github.ref == 'refs/heads/main' }} - name: Install cargo-llvm-cov - uses: taiki-e/install-action@v3 + uses: taiki-e/install-action@6cd13508893c0e7eab5f273c2575d3859bd7229a # v2.86.6 with: tool: cargo-llvm-cov @@ -93,7 +90,7 @@ jobs: - name: Upload HTML report if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: coverage-html path: target/llvm-cov-html @@ -102,7 +99,7 @@ jobs: - name: Upload lcov.info if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: coverage-lcov path: target/lcov.info diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c5b8e25d12..05de5b3027 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -20,7 +20,7 @@ jobs: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install mdBook env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -34,9 +34,9 @@ jobs: run: | ./docs/i18n.sh build-all cp docs/CNAME docs/book/CNAME - - uses: actions/configure-pages@v6 - - uses: actions/upload-pages-artifact@v5 + - uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6 + - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5 with: path: docs/book - id: deployment - uses: actions/deploy-pages@v5 + uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5 diff --git a/.github/workflows/eh-transport.yml b/.github/workflows/eh-transport.yml index d22a4f704a..aa234df6e4 100644 --- a/.github/workflows/eh-transport.yml +++ b/.github/workflows/eh-transport.yml @@ -112,20 +112,18 @@ jobs: runs-on: macos-15 timeout-minutes: 60 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version-file: .node-version - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} diff --git a/.github/workflows/ext-link.yml b/.github/workflows/ext-link.yml index e1e4dc7f65..e577f661f4 100644 --- a/.github/workflows/ext-link.yml +++ b/.github/workflows/ext-link.yml @@ -78,7 +78,7 @@ jobs: steps: # This job compiles PR-controlled build scripts; don't leave the workflow # token in .git/config for them to read. - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -113,26 +113,24 @@ jobs: - name: Install Rust toolchain if: steps.scope.outputs.pkgs != '' - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - if: steps.scope.outputs.pkgs != '' uses: ./.github/actions/setup-llvm22 - name: Install sccache if: steps.scope.outputs.pkgs != '' - uses: mozilla-actions/sccache-action@v0.0.11 + uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 - name: Cache sccache objects if: steps.scope.outputs.pkgs != '' - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} restore-keys: | sccache-${{ runner.os }}-perry- - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 if: steps.scope.outputs.pkgs != '' with: shared-key: "${{ runner.os }}-perry" diff --git a/.github/workflows/feature-matrix.yml b/.github/workflows/feature-matrix.yml index 3d2d718a9b..5b9decc1fd 100644 --- a/.github/workflows/feature-matrix.yml +++ b/.github/workflows/feature-matrix.yml @@ -35,21 +35,19 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 60 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry-feature-matrix" save-if: ${{ github.ref == 'refs/heads/main' }} - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. node-version-file: .node-version @@ -79,7 +77,7 @@ jobs: - name: Upload feature matrix artifacts if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: feature-matrix-${{ github.sha }} path: | diff --git a/.github/workflows/gate-freshness.yml b/.github/workflows/gate-freshness.yml index 8337050489..d700691f48 100644 --- a/.github/workflows/gate-freshness.yml +++ b/.github/workflows/gate-freshness.yml @@ -68,7 +68,7 @@ jobs: actions: read issues: write steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false diff --git a/.github/workflows/gc-moving-witnesses.yml b/.github/workflows/gc-moving-witnesses.yml index c65a715886..dd7f2899b8 100644 --- a/.github/workflows/gc-moving-witnesses.yml +++ b/.github/workflows/gc-moving-witnesses.yml @@ -189,7 +189,7 @@ jobs: # avoids a `fetch-depth: 0` clone of a large history. pull-requests: read steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -224,12 +224,10 @@ jobs: - name: Install Rust toolchain if: steps.relevance.outputs.run == 'true' - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 if: steps.relevance.outputs.run == 'true' with: # Same key as `gc-stress`, which builds the identical package set, so @@ -246,7 +244,7 @@ jobs: - name: Setup Node oracle if: steps.relevance.outputs.run == 'true' - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version. Node is a correctness input, # not a peer benchmark — every witness's stdout is byte-diffed against @@ -413,7 +411,7 @@ jobs: - name: Upload the witness report if: always() && steps.relevance.outputs.run == 'true' - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gc-moving-witnesses-${{ github.sha }} path: gc-moving-witnesses.json diff --git a/.github/workflows/gc-native-roots.yml b/.github/workflows/gc-native-roots.yml index 2c6206e20f..d6f7993cd8 100644 --- a/.github/workflows/gc-native-roots.yml +++ b/.github/workflows/gc-native-roots.yml @@ -273,15 +273,14 @@ jobs: # llvm-inprocess feature, which cargo cannot share with the build above. timeout-minutes: 120 steps: - - uses: actions/checkout@v7 - - uses: actions/setup-node@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version-file: .node-version - - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + - name: Install Rust toolchain + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: gc-native-roots - name: Build compiler and static runtime (perry-dev profile) diff --git a/.github/workflows/gc-parse-churn-gate.yml b/.github/workflows/gc-parse-churn-gate.yml index b51afea87f..1706fbd070 100644 --- a/.github/workflows/gc-parse-churn-gate.yml +++ b/.github/workflows/gc-parse-churn-gate.yml @@ -130,7 +130,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - name: Self-test the verdict logic @@ -148,7 +148,7 @@ jobs: contents: read pull-requests: read steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -181,13 +181,11 @@ jobs: - name: Install Rust toolchain if: steps.relevance.outputs.run == 'true' - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 if: steps.relevance.outputs.run == 'true' - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 if: steps.relevance.outputs.run == 'true' with: # Shared with gc-stress/gc-moving-witnesses (same package set), so diff --git a/.github/workflows/gc-ptr-shape-off-witness.yml b/.github/workflows/gc-ptr-shape-off-witness.yml index 36430bd26c..5993892fa1 100644 --- a/.github/workflows/gc-ptr-shape-off-witness.yml +++ b/.github/workflows/gc-ptr-shape-off-witness.yml @@ -134,7 +134,7 @@ jobs: contents: read pull-requests: read steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -168,13 +168,11 @@ jobs: - name: Install Rust toolchain if: steps.relevance.outputs.run == 'true' - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 if: steps.relevance.outputs.run == 'true' - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 if: steps.relevance.outputs.run == 'true' with: # Same key as gc-stress, which builds the identical package set, so @@ -190,7 +188,7 @@ jobs: - name: Setup Node oracle if: steps.relevance.outputs.run == 'true' - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version. The matrix refuses to run # when the running node disagrees with the pin, so a version drift @@ -237,7 +235,7 @@ jobs: - name: Upload the witness report if: always() && steps.relevance.outputs.run == 'true' - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gc-ptr-shape-off-witness-${{ github.sha }} path: gc-ptr-shape-off-witness.json diff --git a/.github/workflows/gc-ratchet.yml b/.github/workflows/gc-ratchet.yml index 51d3610f59..1c7ee38640 100644 --- a/.github/workflows/gc-ratchet.yml +++ b/.github/workflows/gc-ratchet.yml @@ -119,7 +119,7 @@ jobs: # it avoids a fetch-depth: 0 clone of a large history. pull-requests: read steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -178,14 +178,12 @@ jobs: - name: Install Rust toolchain if: steps.relevance.outputs.run == 'true' - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Cache cargo if: steps.relevance.outputs.run == 'true' - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -196,7 +194,7 @@ jobs: - name: Setup Node oracle if: steps.relevance.outputs.run == 'true' - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. Node is a # correctness input here, not a peer benchmark: every probe's stdout @@ -265,7 +263,7 @@ jobs: - name: Upload measurement if: always() && steps.relevance.outputs.run == 'true' - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gc-ratchet-${{ github.sha }} path: | diff --git a/.github/workflows/gc-root-dominance.yml b/.github/workflows/gc-root-dominance.yml index 0255c8a2df..9f99738a70 100644 --- a/.github/workflows/gc-root-dominance.yml +++ b/.github/workflows/gc-root-dominance.yml @@ -120,7 +120,7 @@ jobs: runs-on: macos-14 timeout-minutes: 90 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -216,9 +216,7 @@ jobs: run: python3 scripts/gc_root_dominance_check.py --audit-immovable-sources - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 # ★ The dependency-scale corpus needs the dependency. @@ -228,14 +226,14 @@ jobs: # else in that file -- not a fixture invented for this job. # `--ignore-scripts` because nothing here needs a lifecycle script to # run, and a corpus generator is a bad place to execute one. - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version-file: .node-version - name: Install the npm dependencies the dep corpus compiles run: npm ci --ignore-scripts --no-audit --no-fund - name: Cache cargo - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -408,7 +406,7 @@ jobs: - name: Upload the IR corpus on failure if: failure() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gc-root-dominance-ir path: | @@ -450,7 +448,7 @@ jobs: runs-on: macos-14 timeout-minutes: 90 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -493,16 +491,14 @@ jobs: # (statepoints are the default on aarch64 and x86-64) reported nothing # at all, while its shadow-frame sibling stayed green and made the gate # look healthy. - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version-file: .node-version - name: Install the npm dependencies the dep corpus compiles run: npm ci --ignore-scripts --no-audit --no-fund - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal # This also puts a matched LLVM 22 `opt` on disk and exports # LLVM_SYS_221_PREFIX, which is how the corpus script finds it. The # native corpus is `--trace llvm` output PLUS the production statepoint @@ -511,7 +507,7 @@ jobs: - uses: ./.github/actions/setup-llvm22 - name: Cache cargo - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -768,7 +764,7 @@ jobs: - name: Upload the IR corpus on failure if: failure() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gc-root-dominance-statepoint-ir path: ir-corpus-native diff --git a/.github/workflows/llvm-inprocess.yml b/.github/workflows/llvm-inprocess.yml index 2c11677fef..e1ebd77026 100644 --- a/.github/workflows/llvm-inprocess.yml +++ b/.github/workflows/llvm-inprocess.yml @@ -107,7 +107,7 @@ jobs: # files were. A diagnostic that cannot report the problem it exists to # report is worse than no diagnostic; it was reassuring three readers # while the corpora sat 151 commits behind. - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: fetch-depth: 0 diff --git a/.github/workflows/next-app-route.yml b/.github/workflows/next-app-route.yml index d9d9a57044..00650ad210 100644 --- a/.github/workflows/next-app-route.yml +++ b/.github/workflows/next-app-route.yml @@ -35,22 +35,21 @@ jobs: SCCACHE_GHA_ENABLED: "true" SCCACHE_CACHE_SIZE: "4G" steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + - name: Install Rust toolchain + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: mozilla-actions/sccache-action@v0.0.11 - - uses: Swatinem/rust-cache@v2 + - uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version-file: .node-version cache: npm diff --git a/.github/workflows/node-compat-matrix.yml b/.github/workflows/node-compat-matrix.yml index 8f04a9e0b8..2eabf302ee 100644 --- a/.github/workflows/node-compat-matrix.yml +++ b/.github/workflows/node-compat-matrix.yml @@ -54,28 +54,26 @@ jobs: runs-on: macos-14 timeout-minutes: 120 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: # Read-only job (build + verify); don't leave the GITHUB_TOKEN in # the local git config (least privilege — OWASP / CodeRabbit). persist-credentials: false - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Start sccache - uses: mozilla-actions/sccache-action@v0.0.11 + uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} - name: Setup Node.js (executes the runner; oracle is the pinned dist) - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. This node # only RUNS node_compat_matrix.mjs; the compat oracle is the pinned diff --git a/.github/workflows/node-core-subset.yml b/.github/workflows/node-core-subset.yml index df37ec2b77..ee15cf36e4 100644 --- a/.github/workflows/node-core-subset.yml +++ b/.github/workflows/node-core-subset.yml @@ -70,15 +70,13 @@ jobs: # from the job log for six weeks. PYTHONUNBUFFERED: "1" steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -104,7 +102,7 @@ jobs: echo "version=$node_version" >> "$GITHUB_OUTPUT" - name: Setup Node.js (matches the pinned test corpus, NOT .node-version) - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version: ${{ steps.node_core_version.outputs.version }} @@ -146,7 +144,7 @@ jobs: - name: Upload shard report if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: node-core-subset-report-shard-${{ matrix.shard }} path: test-compat/node-core/report-shard-${{ matrix.shard }}.json @@ -161,10 +159,10 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Download shard reports - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: pattern: node-core-subset-report-shard-* merge-multiple: true @@ -228,7 +226,7 @@ jobs: - name: Upload radar report if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: node-core-subset-report path: test-compat/node-core/report.json diff --git a/.github/workflows/node-suite-guard.yml b/.github/workflows/node-suite-guard.yml index 26728a8ef1..32e2024d5c 100644 --- a/.github/workflows/node-suite-guard.yml +++ b/.github/workflows/node-suite-guard.yml @@ -42,22 +42,20 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 120 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: # Read-only job (build + test); don't leave the GITHUB_TOKEN in the # local git config (least privilege — OWASP / CodeRabbit). persist-credentials: false - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Start sccache - uses: mozilla-actions/sccache-action@v0.0.11 + uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -66,7 +64,7 @@ jobs: # Node 26 is the oracle the node_suite_baseline.json floors were # captured on; running any other major would compare against the # wrong reference and produce spurious regressions. - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. node-version-file: .node-version diff --git a/.github/workflows/npm-launcher.yml b/.github/workflows/npm-launcher.yml index 757cf1aeaf..1ebbc2e761 100644 --- a/.github/workflows/npm-launcher.yml +++ b/.github/workflows/npm-launcher.yml @@ -28,7 +28,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 5 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false # Single source of truth: .node-version at the repo root. detect.cjs is @@ -37,7 +37,7 @@ jobs: # file was created by #6350 on the same day #6367 converted every other # workflow to the shared pin, so it kept that day's ambient "22.23.1" # literal by omission rather than by decision. - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version-file: .node-version - run: node npm/perry/test/detect.test.cjs @@ -55,14 +55,14 @@ jobs: runs-on: ubuntu-22.04 timeout-minutes: 20 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false # Single source of truth: .node-version. Safe on this image — Node 26 # requires glibc >= 2.28 (nodejs/node v26.x BUILDING.md, Tier 1 linux # x64/arm64) and jammy ships 2.35. The glibc under test here is the one # Perry's own prebuilt binary needs, not Node's. - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version-file: .node-version diff --git a/.github/workflows/npm-package-sweep.yml b/.github/workflows/npm-package-sweep.yml index 07b2b75183..a74662c767 100644 --- a/.github/workflows/npm-package-sweep.yml +++ b/.github/workflows/npm-package-sweep.yml @@ -41,21 +41,19 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 90 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry-npm-sweep" save-if: ${{ github.ref == 'refs/heads/main' }} - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. node-version-file: .node-version @@ -95,7 +93,7 @@ jobs: - name: Upload sweep artifacts if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: npm-package-sweep-${{ github.sha }} path: .npm-sweep-results/ diff --git a/.github/workflows/npm-publish-freshness.yml b/.github/workflows/npm-publish-freshness.yml index 005a4fb5e9..12e30fdf8a 100644 --- a/.github/workflows/npm-publish-freshness.yml +++ b/.github/workflows/npm-publish-freshness.yml @@ -33,7 +33,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - name: Self-test — prove the checker can fail @@ -63,7 +63,7 @@ jobs: contents: read issues: write steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: main persist-credentials: false diff --git a/.github/workflows/npm-stage-publish.yml b/.github/workflows/npm-stage-publish.yml index 167eb13b33..d8fcf804cb 100644 --- a/.github/workflows/npm-stage-publish.yml +++ b/.github/workflows/npm-stage-publish.yml @@ -69,7 +69,7 @@ jobs: outputs: build-run-id: ${{ steps.resolve.outputs.build-run-id }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Resolve or dispatch the stage-mode build id: resolve env: @@ -174,12 +174,12 @@ jobs: PUBLISH: ${{ inputs.publish }} SOCKET_API_TOKEN: ${{ secrets.SOCKET_API_TOKEN }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 # DELIBERATE EXEMPTION from the repo-wide .node-version pin: this Node is # a publishing toolchain (npm registry auth), not a test oracle. # Registered in scripts/check_node_version_consistency.py. - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version: "26" registry-url: "https://registry.npmjs.org" @@ -201,7 +201,7 @@ jobs: echo "npm $cur satisfies the publish-flow floor (>= $floor)." - name: Download build artifacts from the stage-mode build run - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: path: release-artifacts/ github-token: ${{ github.token }} diff --git a/.github/workflows/release-hono-server.yml b/.github/workflows/release-hono-server.yml index e8276d89d4..739524043e 100644 --- a/.github/workflows/release-hono-server.yml +++ b/.github/workflows/release-hono-server.yml @@ -24,7 +24,7 @@ jobs: run: working-directory: packages/hono-perry-server steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 # DELIBERATE EXEMPTION from the repo-wide .node-version pin: this Node is a # *publishing* toolchain, not a test oracle — it never runs a parity diff. @@ -40,7 +40,7 @@ jobs: # that publishes releases. Registered in # scripts/check_node_version_consistency.py, which keeps this major in # step with .node-version's major. Was "24" until the Node-26 sweep. - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version: "26" diff --git a/.github/workflows/release-packages.yml b/.github/workflows/release-packages.yml index 382e3297eb..33baa6cd0c 100644 --- a/.github/workflows/release-packages.yml +++ b/.github/workflows/release-packages.yml @@ -72,7 +72,7 @@ jobs: # label (#confirmed republish version-drift finding). checkout-ref: ${{ steps.resolve.outputs.checkout-ref }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: fetch-depth: 0 # republish mode needs `git show :Cargo.toml` below @@ -389,15 +389,12 @@ jobs: # version (15.x) than being linked (14.x)` across every stdlib .o. MACOSX_DEPLOYMENT_TARGET: "13.0" steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ needs.preflight.outputs.checkout-ref }} - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' - targets: ${{ matrix.target }} + run: rustup toolchain install nightly-2026-08-20 --profile minimal --target ${{ matrix.target }} # The old-sysroot image carries LLVM 22 under /usr/lib/llvm-22. # Its host-side GTK4 build does not depend on perry-codegen, so avoid # installing a second LLVM copy on the noble runner for these two legs. @@ -409,7 +406,7 @@ jobs: # release-tag on the same Cargo.lock reuses the compiled crates — # webkit6/gstreamer/swc/etc. dominate cold cargo and recompile takes # 10-15 min per matrix entry. Cache hit drops that to ~30s. - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "release-${{ matrix.target }}" workspaces: | @@ -968,7 +965,7 @@ jobs: # artifact instead. - name: Upload packaged archive (Unix, for publish-assets job) if: runner.os != 'Windows' - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: release-archive-${{ matrix.artifact }} # update.json only exists when a tag was resolved (not on stage-only @@ -980,7 +977,7 @@ jobs: - name: Upload packaged archive (Windows, for publish-assets job) if: runner.os == 'Windows' - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: release-archive-${{ matrix.artifact }} path: | @@ -990,14 +987,14 @@ jobs: - name: Upload build artifact (Unix, for deb + npm-publish jobs) if: runner.os != 'Windows' - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: ${{ matrix.artifact }} path: staging/ - name: Upload build artifact (Windows, for npm-publish job) if: runner.os == 'Windows' - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: ${{ matrix.artifact }} path: staging/ @@ -1089,22 +1086,19 @@ jobs: # users on macOS 13. MACOSX_DEPLOYMENT_TARGET: "13.0" steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ needs.preflight.outputs.checkout-ref }} - name: Install Rust toolchain + cross target - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' - targets: ${{ matrix.target }} + run: rustup toolchain install nightly-2026-08-20 --profile minimal --target ${{ matrix.target }} - uses: ./.github/actions/setup-llvm22 # Same cache shape as `build:` so the cross legs share crate compiles # across release cycles. Keyed on (target, Cargo.lock) — first run on a # new target is cold, but every subsequent release-tag reuses the # SWC/llvm-sys/webkit etc. precompile from the prior cycle. - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "release-cross-${{ matrix.target }}" @@ -1343,7 +1337,7 @@ jobs: # dispatches onto the PREVIOUS release. The artifact also lets a # maintainer pull the bundle off a stage-only run directly. - name: Upload cross build artifact (for publish-assets job + inspection) - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: perry-cross-${{ matrix.target }} path: | @@ -1370,7 +1364,7 @@ jobs: needs.build-cross.result == 'success' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Create tag + GitHub Release (notes from changelog.d) env: @@ -1434,7 +1428,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download packaged host archives - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: pattern: release-archive-* merge-multiple: true @@ -1444,7 +1438,7 @@ jobs: # continue-on-error: a fully-red build-cross (legacy modes) must not # stop the host archives from shipping. continue-on-error: true - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: pattern: perry-cross-* merge-multiple: true @@ -1613,7 +1607,7 @@ jobs: echo "tag=${TAG}" >> "$GITHUB_OUTPUT" - name: Download build artifact - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: name: ${{ matrix.artifact }} path: staging/ @@ -1786,7 +1780,7 @@ jobs: done - name: Upload .deb artifacts (for apt-repo job) - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: deb-${{ matrix.arch }} path: "*.deb" @@ -1808,7 +1802,7 @@ jobs: echo "tag=${TAG}" >> "$GITHUB_OUTPUT" - name: Download .deb packages - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: pattern: deb-* merge-multiple: true @@ -2005,7 +1999,7 @@ jobs: contents: read id-token: write # REQUIRED for OIDC + npm --provenance steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: # republish mode pins this to the tag's exact commit (see # preflight's checkout-ref) — without it, npm publishes whatever @@ -2025,7 +2019,7 @@ jobs: # Was "20" until the Node-26 sweep. Node 20 reached end-of-life on # 2026-04-30, and this is the repo's most privileged job (`id-token: write`, # OIDC-publishes every platform package) — an EOL runtime is a defect there. - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version: "26" registry-url: "https://registry.npmjs.org" @@ -2039,7 +2033,7 @@ jobs: run: npm install -g npm@latest - name: Download all build artifacts - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: path: release-artifacts/ diff --git a/.github/workflows/security-audit.yml b/.github/workflows/security-audit.yml index 8c97262a3e..d05f4cf39f 100644 --- a/.github/workflows/security-audit.yml +++ b/.github/workflows/security-audit.yml @@ -48,11 +48,10 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + - name: Install Rust toolchain + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: security-audit - name: Install cargo-audit @@ -200,11 +199,10 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + - name: Install Rust toolchain + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: security-audit - name: Install cargo-deny diff --git a/.github/workflows/simctl-tests.yml b/.github/workflows/simctl-tests.yml index 6e586e64ee..9c3d021cea 100644 --- a/.github/workflows/simctl-tests.yml +++ b/.github/workflows/simctl-tests.yml @@ -29,19 +29,17 @@ jobs: runs-on: macos-14 timeout-minutes: 60 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Install iOS simulator Rust target run: rustup target add aarch64-apple-ios-sim aarch64-apple-ios - name: Cache cargo - uses: actions/cache@v6 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: | ~/.cargo/registry @@ -78,7 +76,7 @@ jobs: - name: Upload simctl logs if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: simctl-logs path: target/perry-simctl-tests/*.log diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6ecbefed46..49b4e05889 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -105,7 +105,7 @@ jobs: plan: ${{ steps.plan.outputs.plan }} tier: ${{ steps.plan.outputs.tier }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -170,7 +170,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 20 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 # Changeset gate (was its own job): PRs touching crates/ must ship # changelog.d/-.md (see changelog.d/README.md; fragments fold @@ -205,7 +205,7 @@ jobs: exit 1 - name: Setup Node.js for benchmark harness tests - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Kept in lockstep with benchmark.yml's peer-comparison Node via the # shared .node-version pin — these harness tests exercise the same @@ -225,13 +225,10 @@ jobs: run: ./tests/test_stage_npm_windows_llvm.sh - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' - components: rustfmt, clippy + run: rustup toolchain install nightly-2026-08-20 --profile minimal --component rustfmt --component clippy - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" # PRs read from cache; only main writes new entries. @@ -738,16 +735,13 @@ jobs: # a perf budget — margin costs nothing on healthy runs. timeout-minutes: 90 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' - components: clippy + run: rustup toolchain install nightly-2026-08-20 --profile minimal --component clippy - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -827,26 +821,24 @@ jobs: SCCACHE_CACHE_SIZE: "12G" CARGO_INCREMENTAL: "0" steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Install sccache - uses: mozilla-actions/sccache-action@v0.0.11 + uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 - name: Restore sccache objects - uses: actions/cache/restore@v6 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} restore-keys: | sccache-${{ runner.os }}-perry- - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -875,7 +867,7 @@ jobs: # branched from. - name: Save sccache objects (main-line runs only) if: always() && github.event_name != 'pull_request' - uses: actions/cache/save@v6 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} @@ -941,16 +933,14 @@ jobs: SCCACHE_CACHE_SIZE: "12G" CARGO_INCREMENTAL: "0" steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Install sccache - uses: mozilla-actions/sccache-action@v0.0.11 + uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 # Persist the sccache disk cache across runs. The github.job + # github.run_id key makes every run (including PRs) save its own fresh @@ -959,14 +949,14 @@ jobs: # cache from ANY of them. The object cache therefore warms continuously # and cross-pollinates instead of starting cold each run. - name: Restore sccache objects - uses: actions/cache/restore@v6 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} restore-keys: | sccache-${{ runner.os }}-perry- - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -1168,7 +1158,7 @@ jobs: # branched from. - name: Save sccache objects (main-line runs only) if: always() && github.event_name != 'pull_request' - uses: actions/cache/save@v6 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} @@ -1222,7 +1212,7 @@ jobs: steps: # Nothing here pushes back to the repo, and the job compiles third-party # crates (build scripts run), so don't leave a git credential on disk. - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -1267,26 +1257,24 @@ jobs: - name: Install Rust toolchain if: steps.scope.outputs.rust_work == 'true' - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 if: steps.scope.outputs.rust_work == 'true' - name: Install sccache if: steps.scope.outputs.rust_work == 'true' - uses: mozilla-actions/sccache-action@v0.0.11 + uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 - name: Restore sccache objects if: steps.scope.outputs.rust_work == 'true' - uses: actions/cache/restore@v6 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} restore-keys: | sccache-${{ runner.os }}-perry- - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 if: steps.scope.outputs.rust_work == 'true' with: shared-key: "${{ runner.os }}-perry" @@ -1391,7 +1379,7 @@ jobs: # branched from. - name: Save sccache objects (main-line runs only) if: always() && github.event_name != 'pull_request' - uses: actions/cache/save@v6 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} @@ -1425,7 +1413,7 @@ jobs: # timeout on a required-path job is a deterministic PR blocker). timeout-minutes: 75 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: # This job compiles PR-controlled build scripts / proc macros; # don't leave the workflow token in .git/config for them to read @@ -1455,17 +1443,15 @@ jobs: python benchmarks/gc_ratchet/gc_ratchet.py validate --scope structural - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version-file: .node-version - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -1555,14 +1541,12 @@ jobs: runs-on: windows-11-arm timeout-minutes: 75 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Set up ARM64 MSVC environment @@ -1570,11 +1554,11 @@ jobs: # PowerShell environment does not include the SDK's ARM64 library # directories. Populate LIB / INCLUDE / PATH so the final PE link can # resolve system import libraries such as user32.lib. - uses: ilammy/msvc-dev-cmd@v1 + uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1 with: arch: amd64_arm64 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-${{ runner.arch }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -1669,15 +1653,13 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 90 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -1688,7 +1670,7 @@ jobs: sudo apt-get install -y clang - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. Node is the # matrix oracle (we byte-diff against it), so the version is a @@ -1750,7 +1732,7 @@ jobs: - name: Upload matrix report if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gc-repsel-matrix path: gc-repsel-matrix.json @@ -1790,16 +1772,14 @@ jobs: SCCACHE_CACHE_SIZE: "12G" CARGO_INCREMENTAL: "0" steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Install sccache - uses: mozilla-actions/sccache-action@v0.0.11 + uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 # Persist the sccache disk cache across runs. The github.job + # github.run_id key makes every run (including PRs) save its own fresh @@ -1808,14 +1788,14 @@ jobs: # cache from ANY of them. The object cache therefore warms continuously # and cross-pollinates instead of starting cold each run. - name: Restore sccache objects - uses: actions/cache/restore@v6 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} restore-keys: | sccache-${{ runner.os }}-perry- - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -1911,7 +1891,7 @@ jobs: - name: Upload compiler-output artifacts if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: compiler-output-regression path: target/compiler-output-regression/ @@ -1925,7 +1905,7 @@ jobs: # branched from. - name: Save sccache objects (main-line runs only) if: always() && github.event_name != 'pull_request' - uses: actions/cache/save@v6 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} @@ -1988,26 +1968,24 @@ jobs: # because it rebuilds runtime libs the census never links. PERRY_NO_AUTO_OPTIMIZE: "1" steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Install sccache - uses: mozilla-actions/sccache-action@v0.0.11 + uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 - name: Restore sccache objects - uses: actions/cache/restore@v6 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} restore-keys: | sccache-${{ runner.os }}-perry- - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -2119,7 +2097,7 @@ jobs: - name: Upload census reports if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: repsel-census path: target/repsel-census/ @@ -2133,7 +2111,7 @@ jobs: # branched from. - name: Save sccache objects (main-line runs only) if: always() && github.event_name != 'pull_request' - uses: actions/cache/save@v6 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-${{ github.job }}-${{ github.run_id }} @@ -2162,26 +2140,24 @@ jobs: SCCACHE_CACHE_SIZE: "12G" CARGO_INCREMENTAL: "0" steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Install sccache - uses: mozilla-actions/sccache-action@v0.0.11 + uses: mozilla-actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba # v0.0.11 - name: Restore sccache objects - uses: actions/cache/restore@v6 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-native-abi-evidence-${{ github.run_id }} restore-keys: | sccache-${{ runner.os }}-perry- - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -2201,7 +2177,7 @@ jobs: - name: Upload native ABI evidence packet if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: native-abi-evidence-packet path: target/native-abi-evidence-packet/ @@ -2215,7 +2191,7 @@ jobs: # branched from. - name: Save sccache objects (main-line runs only) if: always() && github.event_name != 'pull_request' - uses: actions/cache/save@v6 + uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ github.workspace }}/.sccache key: sccache-${{ runner.os }}-perry-native-abi-evidence-${{ github.run_id }} @@ -2280,21 +2256,19 @@ jobs: # the #6456 reshard lands. timeout-minutes: 110 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. Node is the # gap/parity oracle (we byte-diff against it), so the version is a @@ -2352,14 +2326,14 @@ jobs: # gap_snapshot.json -- see docs/src/testing/ci-tiers.md "Re-baselining". - name: Upload re-baselined gap snapshot if: fromJSON(needs.plan.outputs.plan).gap.update_snapshot - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gap-snapshot-update path: test-parity/gap_snapshot.json - name: Upload gap report if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gap-suite-report-${{ fromJSON(needs.plan.outputs.plan).gap.mode }}-shard-${{ matrix.shard }} path: test-parity/reports/ @@ -2398,18 +2372,16 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 150 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. Node is the # gap/parity oracle (we byte-diff against it), so the version is a @@ -2434,7 +2406,7 @@ jobs: --known test-parity/known_failures.json - name: Upload shard report if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: parity-shard-${{ matrix.shard }} path: | @@ -2449,7 +2421,7 @@ jobs: # error message rather than inferring from the test family. - name: Upload compile-error logs if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: parity-compile-errors-${{ runner.os }}-shard-${{ matrix.shard }} path: test-parity/output/*.compile_error.log @@ -2474,9 +2446,9 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Download shard reports - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: pattern: parity-shard-* path: parity-shards @@ -2519,7 +2491,7 @@ jobs: cat test-parity/reports/parity_matrix_latest.md >> "$GITHUB_STEP_SUMMARY" - name: Upload merged parity report if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: parity-report path: | @@ -2560,15 +2532,13 @@ jobs: # `run_extended_tests=true` runs this job on demand. runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -2840,7 +2810,7 @@ jobs: - name: Upload compile-smoke error logs if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: compile-smoke-error-logs path: /tmp/perry_smoke_logs/*.compile_error.log @@ -2903,7 +2873,7 @@ jobs: - name: Upload GC evidence artifacts if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gc-evidence-${{ runner.os }} path: ${{ runner.temp }}/gc-evidence @@ -2952,15 +2922,13 @@ jobs: # (cargo-test/lint/api-docs-drift/compiler-output-regression) still gate. runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -3016,21 +2984,19 @@ jobs: --health-timeout=3s --health-retries=20 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. Node is the # gap/parity oracle (we byte-diff against it), so the version is a @@ -3085,21 +3051,19 @@ jobs: # Aspirational smoke (informational) — see harmonyos-smoke. Does not block publish. runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. Node is the # gap/parity oracle (we byte-diff against it), so the version is a @@ -3117,7 +3081,7 @@ jobs: - name: Upload Ink fixture logs if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: ink-link-smoke-logs path: | @@ -3141,21 +3105,19 @@ jobs: if: fromJSON(needs.plan.outputs.plan).jobs.effect_basic_smoke runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} - name: Setup Node.js - uses: actions/setup-node@v7 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: # Single source of truth: .node-version at the repo root. Node is the # gap/parity oracle (we byte-diff against it), so the version is a @@ -3173,7 +3135,7 @@ jobs: - name: Upload Effect fixture logs if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: effect-basic-smoke-logs path: | @@ -3295,7 +3257,7 @@ jobs: run: shell: ${{ matrix.shell }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 # macos-14 ships with ~14 GB free disk after the preinstalled Xcode + # iOS/tvOS/watchOS simulator runtime images. Several `cargo build @@ -3315,9 +3277,7 @@ jobs: echo "Disk free: ${BEFORE} -> ${AFTER}" - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - name: Set up MSVC environment (Windows) @@ -3326,7 +3286,7 @@ jobs: # shell session has no clue where, and perry's LNK1181 fatal # errors looking for Windows SDK libs. if: matrix.os == 'windows-2022' - uses: ilammy/msvc-dev-cmd@v1 + uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1 - name: Install GTK4 + GStreamer + Xvfb + PulseAudio headers (Linux) if: matrix.os == 'ubuntu-24.04' @@ -3402,7 +3362,7 @@ jobs: if: matrix.os == 'macos-14' || matrix.os == 'ubuntu-24.04' run: rustup target add aarch64-linux-android - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -3444,14 +3404,14 @@ jobs: - name: Upload doc-tests report if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: doc-tests-report-${{ matrix.os }} path: docs/examples/_reports/latest.json - name: Upload gallery screenshot + diff artifacts if: always() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: gallery-screenshots-${{ matrix.os }} path: | @@ -3469,15 +3429,13 @@ jobs: if: fromJSON(needs.plan.outputs.plan).jobs.binary_size runs-on: macos-14 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 with: shared-key: "${{ runner.os }}-perry" save-if: ${{ github.ref == 'refs/heads/main' }} @@ -3494,7 +3452,7 @@ jobs: cat /tmp/sizes.md - name: Upload size report - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: binary-sizes path: /tmp/sizes.md diff --git a/.github/workflows/tls-budget.yml b/.github/workflows/tls-budget.yml index f52a9bc2c7..ca3ed060bc 100644 --- a/.github/workflows/tls-budget.yml +++ b/.github/workflows/tls-budget.yml @@ -105,7 +105,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - name: Self-test the budget verdict logic @@ -130,7 +130,7 @@ jobs: contents: read pull-requests: read steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false @@ -163,13 +163,11 @@ jobs: - name: Install Rust toolchain if: steps.relevance.outputs.run == 'true' - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 'nightly-2026-08-20' + run: rustup toolchain install nightly-2026-08-20 --profile minimal - uses: ./.github/actions/setup-llvm22 if: steps.relevance.outputs.run == 'true' - - uses: Swatinem/rust-cache@v2 + - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2 if: steps.relevance.outputs.run == 'true' with: shared-key: "${{ runner.os }}-perry" @@ -198,7 +196,7 @@ jobs: - name: Attach the profiles if: always() && steps.relevance.outputs.run == 'true' - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: tls-budget-profiles path: ${{ runner.temp }}/tls-budget/*.sample