Repository navigation
ci: enforce workflow security checks - #456
Conversation
Resolve existing workflow security findings before making the scan fail on new findings. Pin action references, restrict token permissions and checkout credentials, and add a seven-day dependency update cooldown. Remove unused dependency automerge and code-analysis workflows while retaining the shared linter update workflow. #agentic
There was a problem hiding this comment.
Nothing blocking. The comments below are optional suggestions. There is no need to push a fix for them before merging.
Besides the inline findings, I checked two other things. Dropping release-draft.yml to contents: read doesn't break it, because every write there goes through the App token passed to create-pull-request. Moving the simulator UDID into SIMULATOR_UDID keeps the same -destination value, now safely quoted.
Extended reasoning...
Only GitHub Actions config changed. The change pins actions to SHAs, narrows token permissions, deletes the dependabot-automerge and sonarcloud workflows, and makes zizmor a blocking check. In release-draft.yml, checkout uses persist-credentials: false and the only write step authenticates with the generated App token, so the default GITHUB_TOKEN never needs write scope.
There was a problem hiding this comment.
🔵 Needs a closer look
Inaccessible shared workflow definitions leave compatibility with reduced token permissions unverified.
No open issues 🎉
What changed in this PR
Hardens CI workflows and makes workflow security findings fail checks without changing library behavior.
Changes:
- Pins workflow dependencies and narrows credential and token access.
- Adds seven-day dependency update cooldowns and scans Dependabot configuration changes.
- Removes unused workflows and enables blocking security checks.
| File | Description |
|---|---|
.github/workflows/zizmor.yml |
Makes findings blocking and scans Dependabot configuration changes. |
.github/workflows/trunk-upgrade.yml |
Pins the shared updater and scopes permissions. |
.github/workflows/sonarcloud.yml |
Removes unused code-analysis workflow. |
.github/workflows/release-draft.yml |
Pins changelog action and reduces default permissions. |
.github/workflows/pull-request.yml |
Hardens actions, credentials, permissions, and simulator input handling. |
.github/workflows/dependabot-automerge.yml |
Removes disabled automerge workflow. |
.github/dependabot.yml |
Adds seven-day update cooldowns. |
Review effort: Balanced
Why
Workflow security findings are currently reported without failing the check, so an insecure change can still receive a successful result. This change resolves the existing findings and makes the check fail when new findings appear.
Programme
Standalone change, no programme.
What changes
No documentation, changelog or runbook update is needed because library behavior is unchanged.
Linked work
None.
Rollout
Nothing changes in production; if this is wrong, revert the pull request.
Risks
Risk class: low.
Who
Written by: pull request author, following the requested workflow security cleanup.
Code reviewed before opening: no maintainer review yet.
Design reviewed before opening: the requester confirmed the scope on 21 October 2026; no public review record.
Decision this implements: the agreed workflow security cleanup, 21 October 2026; no public decision record.
Checked: workflow security scan, static checks and 39 JavaScript tests on 21 October 2026.
Not checked: native builds, left to the existing continuous integration jobs; live release and update runs were not dispatched.
Size
Hand-written: 131 changed lines across 7 files (62 added, 69 removed).
Generated: none.
Notes for reviewers
--no-ignores: zero findings.trunk check --no-fix --ci --index: passed, including Actionlint.yarn test --runInBand: 8 suites and 39 tests passed, followed by ESLint.