Skip to content

ci: let staging override skip all pretests#1956

Merged
senamakel merged 2 commits into
tinyhumansai:mainfrom
senamakel:codex/fix-staging-skip-all-pretests
May 16, 2026
Merged

ci: let staging override skip all pretests#1956
senamakel merged 2 commits into
tinyhumansai:mainfrom
senamakel:codex/fix-staging-skip-all-pretests

Conversation

@senamakel
Copy link
Copy Markdown
Member

@senamakel senamakel commented May 16, 2026

Summary

  • make release-staging.yml treat skip_e2e=true as a full pretest bypass, not just an E2E-only bypass
  • allow the downstream staging build jobs to run after intentionally skipped pretest jobs by adding always() to the gated if: expressions
  • rename the reusable build workflow's internal metadata flag to skip_pretests so the build logs match the policy being applied
  • update the release smoke note so operators must link the relevant prior pretest evidence when using the override

Problem

  • The first staging follow-up only skipped the E2E pretest job; Pretest — unit + rust still ran, which does not match the operator intent for the override.
  • The dispatched staging run 25969391067 also showed a second issue: even with pretests in the expected state, Build desktop matrix and Docker: build (no push) were skipped entirely.
  • Root cause for the second issue: GitHub Actions treats skipped needs: dependencies specially; without always() on the downstream if:, the job can be skipped before the rest of the condition is considered.

Solution

  • gate both pretest-tests and pretest-e2e on the existing skip_e2e dispatch input so the override suppresses the whole pretest phase
  • update the downstream build job conditions to accept either success or the intentional skipped state for those dependencies
  • prefix those downstream conditions with always() so GitHub evaluates the skip-aware logic instead of short-circuiting the job
  • keep the reusable build log and release-ops docs aligned with the new semantics

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 — N/A: behaviour-only workflow/docs 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)
  • Manual smoke checklist updated if this touches release-cut surfaces (docs/RELEASE-MANUAL-SMOKE.md)
  • Linked issue closed via Closes #NNN in the ## Related section

Impact

  • affects GitHub Actions staging release behavior only
  • fixes two operator-path bugs: the override now skips all pretests, and the desktop/docker build jobs no longer get skipped due to needs semantics when that override is used
  • no runtime desktop/core behavior changed

Related

  • Closes: N/A
  • Follow-up PR(s)/TODOs: rerun release-staging.yml with skip_e2e=true after this merges

AI Authored PR Metadata (required for Codex/Linear PRs)

Linear Issue

  • Key: N/A
  • URL: N/A

Commit & Branch

  • Branch: codex/fix-staging-skip-all-pretests
  • Commit SHA: b90f1fff

Validation Run

  • pnpm --filter openhuman-app format:check
  • pnpm typecheck
  • Focused tests: gh workflow view .github/workflows/release-staging.yml
  • Rust fmt/check (if changed): pnpm rust:check
  • Tauri fmt/check (if changed): N/A: workflow/docs-only change

Validation Blocked

  • command: actionlint .github/workflows/*.yml
  • 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 dry-run of the fixed staging workflow was available

Behavior Changes

  • Intended behavior change: skip_e2e=true now bypasses the entire staging pretest phase, and the downstream build jobs still execute under that intentional skipped state
  • User-visible effect: release operators can dispatch the staging release override and actually get desktop/docker artifacts instead of a green run with all build jobs skipped

Parity Contract

  • Legacy behavior preserved: default release-staging.yml dispatch still requires the full pretest gate before building
  • Guard/fallback/dispatch parity checks: downstream build jobs now require either successful pretests or an explicit skipped state paired with the override flag, and they use always() so GitHub evaluates that contract correctly

Duplicate / Superseded PR Handling

  • Duplicate PR(s): N/A
  • Canonical PR: this PR
  • Resolution (closed/superseded/updated): N/A

Summary by CodeRabbit

  • Chores

    • Renamed workflow inputs and refined CI/CD job dependencies for improved clarity and control when skipping pretests during staging builds.
  • Documentation

    • Updated release smoke testing procedures to specify required pretest evidence when E2E testing is skipped.

Review Change Stack

@senamakel senamakel requested a review from a team May 16, 2026 18:36
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 16, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f7725905-9cee-4fec-946e-945014e58bf2

📥 Commits

Reviewing files that changed from the base of the PR and between bcfecc3 and b90f1ff.

📒 Files selected for processing (3)
  • .github/workflows/build-desktop.yml
  • .github/workflows/release-staging.yml
  • docs/RELEASE-MANUAL-SMOKE.md

📝 Walkthrough

Walkthrough

This PR renames the skip_e2e_pretest flag to skip_pretests in the build-desktop reusable workflow, updates release-staging to pass the renamed flag and conditionally skip the pretest-tests job, modifies job conditions to handle the new skip behavior, and updates release documentation to reflect the broader pretest skipping semantics.

Changes

CI Pretest Gate Refactor

Layer / File(s) Summary
Build-desktop workflow input contract
\.github/workflows/build-desktop.yml``
skip_e2e_pretest input is renamed to skip_pretests with updated description. The input is used in the build-policy logging step.
Release-staging pretest skip logic
\.github/workflows/release-staging.yml``
Input description updated to clarify that skip_e2e skips the entire pretest phase. The pretest-tests job is made conditional and skipped when skip_e2e is true. Build-desktop and build-docker job conditions are updated with always() and logic to accept skipped pretest-tests. The renamed skip_pretests flag is passed to the build-desktop reusable workflow.
Release smoke test documentation
docs/RELEASE-MANUAL-SMOKE.md
Instructions updated to reference pretest evidence (unit/rust and E2E as applicable) rather than only E2E evidence when skipping E2E in manual releases.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • tinyhumansai/openhuman#1887: Introduces the release pretest gate and how release-staging calls build workflows, directly related to this PR's flag rename and conditional gating updates.

Poem

🐰 A flag renamed, from skip_e2e_pretest to the clearer skip_pretests it goes,
The gates now conditional, letting workflows skip when the tester says no,
Build-desktop speaks, release-staging listens with care,
Evidence gathered, documented everywhere!
The CI now flows with intention so bright. ✨


Comment @coderabbitai help to get the list of available commands and usage tips.

@senamakel senamakel merged commit 4c5831f into tinyhumansai:main May 16, 2026
16 of 20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant