You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
remove the unnecessary pull-requests: read permission request from the reusable test/E2E workflows so release-staging.yml no longer fails validation at startup
add a skip_e2eworkflow_dispatch input to release-staging.yml and gate the downstream build jobs so an intentional E2E skip still allows the staging build to run
pass the skip state into build-desktop.yml and log it there so the build record shows when the normal E2E pretest contract was relaxed
update the release manual smoke checklist to require documenting the reason and prior green E2E signal when the override is used
Problem
Release Staging run #25957728832 failed during workflow startup, before any jobs ran.
The concrete validation error was: test-reusable.yml requested pull-requests: read, but release-staging.yml only granted pull-requests: none to called workflows.
Operators also had no supported way to cut a staging build while intentionally bypassing the slow all-OS E2E gate.
Solution
narrow the reusable workflow permission surface to contents: read, which is all these jobs actually use
add an explicit skip_e2e dispatch flag on release-staging.yml
make pretest-e2e conditional on that flag, and allow build-desktop / build-docker to proceed only when unit/rust pretests passed and E2E either passed or was intentionally skipped
keep the override visible by threading a metadata flag into build-desktop.yml and documenting the operator expectation in the release smoke checklist
Submission Checklist
Tests added or updated (happy path + at least one failure / edge case) per Testing Strategy
Diff coverage ≥ 80% — changed lines (Vitest + cargo-llvm-cov merged via diff-cover) meet the gate enforced by .github/workflows/coverage.yml. Run pnpm test:coverage and pnpm test:rust locally; PRs below 80% on changed lines will not merge.
Coverage matrix updated — added/removed/renamed feature rows in docs/TEST-COVERAGE-MATRIX.md reflect this change (or N/A: behaviour-only change)
All affected feature IDs from the matrix are listed in the PR description under ## Related
No new external network dependencies introduced (mock backend used per Testing Strategy)
error:actionlint is not installed in this environment
impact: workflow syntax was sanity-checked with gh workflow view, but no local actionlint pass or live Actions dry run was available
Behavior Changes
Intended behavior change: staging releases can now be dispatched with skip_e2e=true, and the reusable permission mismatch no longer blocks workflow startup
User-visible effect: release operators can cut a staging build without waiting on the full E2E matrix when they intentionally choose that override
Parity Contract
Legacy behavior preserved: default release-staging.yml dispatch still runs the full E2E pretest gate before building
Guard/fallback/dispatch parity checks: downstream build jobs require unit/rust pretests to pass and accept E2E only when it succeeded or was explicitly skipped
Duplicate / Superseded PR Handling
Duplicate PR(s): N/A
Canonical PR: this PR
Resolution (closed/superseded/updated): N/A
Summary by CodeRabbit
Chores
Updated CI/CD pipeline permissions configuration for improved security controls.
Added optional capability to skip E2E testing during staging releases when necessary.
Documentation
Added guidance for release operators on the process for bypassing E2E validation and documenting the rationale.
Reviewing files that changed from the base of the PR and between 8f93ca0 and c59c886.
📒 Files selected for processing (5)
.github/workflows/build-desktop.yml
.github/workflows/e2e-reusable.yml
.github/workflows/release-staging.yml
.github/workflows/test-reusable.yml
docs/RELEASE-MANUAL-SMOKE.md
📝 Walkthrough
Walkthrough
Staging release workflow now supports operator-driven E2E pretest bypass via skip_e2e input, gating downstream builds on unit/rust success and E2E success-or-skip. Build-desktop reusable workflow receives the skip flag and logs build policy. Token permissions in reusable workflows narrowed from pull-requests to contents scope. Manual smoke test docs updated.
Changes
E2E Pretest Skip Gate with Permission Narrowing
Layer / File(s)
Summary
Build-desktop reusable workflow skip input and logging build-desktop.yml
New skip_e2e_pretest boolean input added to workflow contract; early build step logs effective build policy including skip decision.
Staging release workflow E2E skip gate and build conditioning release-staging.yml
New skip_e2e dispatch input conditionally gates pretest-e2e job; build-desktop and build-docker jobs run only when unit/rust pretests succeed and pretest-e2e either succeeds or is skipped. Skip decision forwarded to build-desktop reusable workflow; dependency comment updated.
Manual smoke test operator documentation docs/RELEASE-MANUAL-SMOKE.md
New step instructs operators to document reason and link prior successful E2E run when dispatching with skip_e2e=true.
GitHub Actions token permissions narrowed from pull-requests: read to contents: read in both reusable workflows.
Estimated code review effort
🎯 2 (Simple) | ⏱️ ~12 minutes
Possibly related PRs
tinyhumansai/openhuman#1887: Both PRs modify CI pretest gating flow; this PR adds an operator override to bypass the E2E pretest gate introduced in the referenced PR.
Poem
🐰 A skip gate for releases, now you can choose,
Dispatch with the truth when you need a quick move,
Log why you're bypassing, link tests that are green,
Build swift as a rabbit—the fastest you've seen! 🚀
Comment @coderabbitai help to get the list of available commands and usage tips.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
pull-requests: readpermission request from the reusable test/E2E workflows sorelease-staging.ymlno longer fails validation at startupskip_e2eworkflow_dispatchinput torelease-staging.ymland gate the downstream build jobs so an intentional E2E skip still allows the staging build to runbuild-desktop.ymland log it there so the build record shows when the normal E2E pretest contract was relaxedProblem
Release Stagingrun #25957728832 failed during workflow startup, before any jobs ran.test-reusable.ymlrequestedpull-requests: read, butrelease-staging.ymlonly grantedpull-requests: noneto called workflows.Solution
contents: read, which is all these jobs actually useskip_e2edispatch flag onrelease-staging.ymlpretest-e2econditional on that flag, and allowbuild-desktop/build-dockerto proceed only when unit/rust pretests passed and E2E either passed or was intentionally skippedbuild-desktop.ymland documenting the operator expectation in the release smoke checklistSubmission Checklist
diff-cover) meet the gate enforced by.github/workflows/coverage.yml. Runpnpm test:coverageandpnpm test:rustlocally; PRs below 80% on changed lines will not merge.docs/TEST-COVERAGE-MATRIX.mdreflect this change (orN/A: behaviour-only change)## Relateddocs/RELEASE-MANUAL-SMOKE.md)Closes #NNNin the## RelatedsectionImpact
Related
AI Authored PR Metadata (required for Codex/Linear PRs)
Linear Issue
Commit & Branch
codex/fix-staging-skip-e2ec59c8864Validation Run
pnpm --filter openhuman-app format:checkpnpm typecheckgh workflow view .github/workflows/release-staging.ymlpnpm rust:checkValidation Blocked
command:actionlint .github/workflows/*.ymlerror:actionlintis not installed in this environmentimpact:workflow syntax was sanity-checked withgh workflow view, but no local actionlint pass or live Actions dry run was availableBehavior Changes
skip_e2e=true, and the reusable permission mismatch no longer blocks workflow startupParity Contract
release-staging.ymldispatch still runs the full E2E pretest gate before buildingDuplicate / Superseded PR Handling
Summary by CodeRabbit
Chores
Documentation