Repository navigation
fix(ci): repair build-desktop workflow parse failure + node20 action bumps - #4488
Conversation
The GH_TOKEN scoping script inserted a second env: key into build-desktop's build job — GitHub rejects duplicate mapping keys, so every push produced a failed 'invalid workflow file' run (PyYAML's lax parser hid it; validation is now strict about duplicates). Merge GH_TOKEN into the existing env block. Also bump actions/create-github-app-token v2→v3 and dorny/paths-filter v3→v4 to move off the deprecated node20 runner runtime. Claude-Session: https://claude.ai/code/session_01FsaameYvpZMKZfUeWqZi7x
📝 WalkthroughWalkthroughThis PR updates GitHub Actions workflows: repositions Telegram bot username env vars into the job env block in build-desktop.yml, and bumps action versions—dorny/paths-filter to v4 in pr-ci.yml, and actions/create-github-app-token to v3 in prepare-release-pr.yml, release-production.yml, and release-staging.yml. ChangesCI Workflow Updates
Estimated code review effort: 1 (Trivial) | ~5 minutes Suggested labels: Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/release-production.yml:
- Around line 120-125: The Generate GitHub App token step currently mints a
token with the app’s full installation permissions, which is broader than this
release job needs. Update the actions/create-github-app-token@v3 usage in the
app-token step to add the same least-privilege permission scoping pattern used
in prepare-release-pr.yml, specifically limiting the token to the contents and
pull request permissions required for pushing release/main updates and creating
tags.
In @.github/workflows/release-staging.yml:
- Around line 95-100: The GitHub App token generated in the release-staging
workflow is inheriting broad installation permissions instead of least
privilege. Update the Generate GitHub App token step in the release-staging
workflow to pass the appropriate permission-scoping inputs on
actions/create-github-app-token@v3, limiting it to only the contents: write
access needed for the version-bump commit and tag push.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 18d2588e-22c9-46fe-ae39-2616b8a516c8
📒 Files selected for processing (5)
.github/workflows/build-desktop.yml.github/workflows/pr-ci.yml.github/workflows/prepare-release-pr.yml.github/workflows/release-production.yml.github/workflows/release-staging.yml
Same least-privilege pattern as prepare-release-pr — the minted installation token only needs to push the bump commit/tag (and production's back-merge); branch-protection bypass comes from the App identity, not token scopes. Claude-Session: https://claude.ai/code/session_01FsaameYvpZMKZfUeWqZi7x
A PR touching only scripts/ci/vitest-changed-coverage.sh or rust-coverage-changed.sh set the *-full flag without setting the lane trigger (frontend / rust-core), so the changed runner never executed. Add the scripts to the lane filters; combined with the existing *-full entries this runs the full suite whenever the runners themselves change. Claude-Session: https://claude.ai/code/session_01FsaameYvpZMKZfUeWqZi7x
Summary
build-desktop.ymlthat failed every push to main since feat(ci): two-branch CI — changed-files-only PR lane, full-suite release lane, release-branch cuts, cancellation watchdog #4486: the GH_TOKEN scoping change inserted a secondenv:key into thebuildjob; GitHub rejects duplicate mapping keys and recorded a failed "workflow file issue" run on each push.actions/create-github-app-tokenv2→v3 anddorny/paths-filterv3→v4 to move off the deprecated Node 20 runner runtime (source of the deprecation warnings in run logs).permission-contents: write(CodeRabbit/zizmor), and add the changed-files runner scripts to thefrontend/rust-corefilters so a PR touching only those runners actually exercises them (Codex).Problem
.github/workflows/build-desktop.ymlwith zero jobs — the file no longer parsed. PyYAML's lax duplicate-key handling let it pass local validation in feat(ci): two-branch CI — changed-files-only PR lane, full-suite release lane, release-branch cuts, cancellation watchdog #4486.create-github-app-token@v2andpaths-filter@v3declare node20, triggering the runner's deprecation warning on every use.Solution
GH_TOKENinto thebuildjob's existingenv:block.paths-filter@v4output/list-filescontract is unchanged.Submission Checklist
N/A: workflow-only fix; validated with strict YAML parse across all workflowsN/A: no app/Rust source changedN/A: CI-only## Related—N/AN/ACloses #NNN—N/A: follow-up to #4486Impact
build-desktop.ymlis the shared build pipeline for staging/production cuts).Related
XGITHUB_APP_ID/XGITHUB_APP_PRIVATE_KEY(App: tiny-humans-bot) into theRelease-PR-Automationenvironment soprepare-release-prcan mint its token.AI Authored PR Metadata (required for Codex/Linear PRs)
Linear Issue
Commit & Branch
https://claude.ai/code/session_01FsaameYvpZMKZfUeWqZi7x