Repository navigation
ci: pin GitHub action versions - #713
Conversation
🤖 Kimi Code ReviewI'll review this PR which implements GitHub Actions version pinning via a lockfile mechanism. This is a security-focused infrastructure change. Critical Issues1. Broken local action references —
|
| Priority | Issue | Location | Fix |
|---|---|---|---|
| Critical | $/.github/actions/free-disk typo |
Multiple workflow files | Replace $/ with ./ |
| Critical | actions/checkout@v7.0.1 doesn't exist |
verify-lockfile.yml:21, actions.lock:19 |
Use v6.1.0 consistently |
| High | rust-toolchain@master unpinned |
All workflow files | Pin to commit SHA or version tag |
| Medium | Two checkout versions in lockfile |
actions.lock |
Consolidate to single version |
| Low | sha1- prefix format verification |
actions.lock |
Confirm tool compatibility |
| Low | Missing trailing newline | verify-lockfile.yml:26 |
Add newline |
The $/ typo is the most immediate blocker — it will cause widespread CI failures.
Automated review by Kimi (Moonshot AI) · kimi-k2.6 · custom prompt
🤖 Claude Code ReviewReview of PR 713: pin GitHub Actions versionsVerdict: do not merge as is. One blocking bug breaks most CI. Blocking
Should fix
Minor
Looks fine
Automated review by Claude (Anthropic) · sonnet · custom prompt |
🤖 Codex Code ReviewA quick review: this PR is workflow-only; it does not touch consensus, fork choice, attestation, STF, XMSS, or SSZ code paths. The main risk surface here is CI/release-chain security and workflow correctness.
Overall, I don’t see a correctness bug in the YAML changes themselves, and the SHA-verified fixture download path remains intact in Automated review by OpenAI Codex · gpt-5.4 · custom prompt |
actionlint does not parse the `uses: $/...` form the lockfile migration writes (rhysd/actionlint#711), so the GitHub Actions lint job failed on every workflow PR. Ignore that one message, and pin the install script and actionlint version so lint results only change with this file. Verify with the gh-actions-lock version that generated the lockfile: v0.2.0 passes when it cannot check a pin (rate limit, API outage). Run it in the merge queue too, and use the checkout version every other workflow uses. The lockfile does not cover cross-repo reusable workflows, so pin the AI review calls, which receive API keys, to the commit `v1` names today.
The job was written before #713 locked every workflow's actions to exact versions, so it still named `checkout@v6` and `rust-cache@v2`, neither of which `actions.lock` lists. It now uses the pinned versions and the free-disk path the other jobs use.
…ctions (lambdaclass#763) ## 🗒️ Description / Motivation `lambdaclass/actions` `v1` has moved on since our pin (`2127455`, Sep 1). It now ships three more reviewers (DeepSeek, Gemini, Grok), a `/review` command that triggers every reviewer a repo calls, and a Claude reviewer that is a single Messages API call instead of a Claude Code agent run. This PR brings us up to date and adds the new reviewers. ## What Changed `.github/workflows/ai-review.yml` only: | Change | Detail | |---|---| | Pin bump | Kimi, Codex, Claude: `2127455` → `ad22254` (what `v1` points at today), still SHA-pinned as in lambdaclass#713 | | New reviewers | `ai-review-deepseek.yml`, `ai-review-gemini.yml`, `ai-review-grok.yml` | | Comment gate | Each job starts on a comment only when it begins with its own command (`/kimi`, `/codex`, `/claude`, `/deepseek`, `/gemini`, `/grok`) or `/review`. Before, every PR comment spawned one run per reviewer that then skipped inside the called workflow | | `permissions:` | `contents: read` + `pull-requests: write`, which is all the called workflows declare; the repo default grants write to everything | ## Correctness / Behavior Guarantees How a review triggers: ``` pull_request: opened / ready_for_review └─ not a draft (this workflow) └─ head repo == this repo (called workflow) └─ all 6 reviewers run issue_comment: created └─ starts with /review or /<name> (this workflow) └─ on a PR, author is OWNER / MEMBER / COLLABORATOR (called workflow) └─ /review → all 6, /<name> → that one ``` Behavior changes reviewers should know about: - **Missing secrets.** DeepSeek, Gemini and Grok need `DEEPSEEK_API_KEY`, `GEMINI_API_KEY` and `XAI_API_KEY`, which this repo does not have yet. Until they are added, each of those reviewers posts a "secret is not set" comment and fails its check on every PR. - **A review that does not happen now fails its check** (upstream change): an empty response or provider outage is red rather than green with a comment. - **Claude reviewer** is now one API call over the diff (no checkout, no tools), defaulting to `claude-opus-5-5` at `effort: high`. We passed none of the removed inputs (`max_turns`, `allowed_tools`), so no `with:` changes are needed. - Default models moved upstream: Kimi `kimi-k3.1-pro`, Codex `gpt-6.1-sol`. ## Tests Added / Run - `actionlint -ignore SC2086 -ignore 'specifying action "\$/' .github/workflows/ai-review.yml` (same flags as `pr_lint_gha.yaml`): clean - `gh actions-lock --verify` (same as `verify-lockfile.yml`): all 13 workflows valid; reusable workflows are not tracked in `actions.lock`, so it needs no update ## Related Issues / PRs - Related to lambdaclass#713 (action pinning), lambdaclass#305 (skip drafts), lambdaclass#69 (adopt `lambdaclass/actions`) ## ✅ Verification Checklist - [x] Ran `make fmt`: n/a, no Rust changes - [x] Ran `make lint`: n/a, no Rust changes - [x] Ran `make test`: n/a, no Rust changes
🗒️ Description / Motivation
This PR locks the versions of our GitHub Actions external actions, to avoid some supply-chain attacks.
See https://github.blog/changelog/2026-10-14-github-actions-workflow-lockfiles-in-public-preview/
What Changed
Correctness / Behavior Guarantees
Tests Added / Run
Related Issues / PRs
✅ Verification Checklist
make fmt— cleanmake lint(clippy with-D warnings) — cleanmake test(test-consensusplustest-node, atrelease-fast) — all passing