fix(ci): close factory determinism gaps in pipeline workflows#500
Conversation
- promotion-candidate-e2e: add notify-on-failure job that auto-files a kind/bug issue so hive-status surfaces failures before the Tuesday promotion window; without this the gate produces signal only if someone is actively watching the Actions tab - validate: add submodule drift check after checkout; AGENTS.md already claimed this check existed but the step was missing — closes the gap where a PR moving the bluefin-branding pointer could pass all gates - release: add allowUpdates=true to ncipollo/release-action so mid-month workflow_dispatch runs no longer cause the monthly cron to fail with a duplicate-tag error on the 1st Assisted-by: Claude Sonnet 4.6 via GitHub Copilot Co-authored-by: Copilot <[email protected]>
📝 WalkthroughWalkthroughThis PR enhances GitHub Actions workflows across three independent pipelines: adding failure notifications to E2E tests, validating submodule state in the validate job, and updating release action configuration for idempotency handling. ChangesCI Workflow Improvements
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
.github/workflows/promotion-candidate-e2e.yml (1)
31-34: ⚡ Quick winConsider using explicit failure condition for robustness.
The current
if: failure()will work correctly, but the recommended pattern for failure-notification jobs isif: always() && needs.e2e.result == 'failure'. This is more explicit about the intent and handles edge cases like workflow cancellation more predictably.♻️ Recommended refactor for clarity and robustness
notify-on-failure: name: "File issue on E2E failure" needs: [e2e] - if: failure() + if: always() && needs.e2e.result == 'failure' runs-on: ubuntu-latest🤖 Prompt for 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. In @.github/workflows/promotion-candidate-e2e.yml around lines 31 - 34, Update the notify-on-failure job's condition to be explicit about failure: replace the generic if: failure() with an explicit check using needs.e2e.result (e.g., if: always() && needs.e2e.result == 'failure') so the notify-on-failure job only runs when the e2e job actually failed and behaves predictably for cancellations; modify the job definition named notify-on-failure and its needs entry for e2e accordingly.
🤖 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.
Nitpick comments:
In @.github/workflows/promotion-candidate-e2e.yml:
- Around line 31-34: Update the notify-on-failure job's condition to be explicit
about failure: replace the generic if: failure() with an explicit check using
needs.e2e.result (e.g., if: always() && needs.e2e.result == 'failure') so the
notify-on-failure job only runs when the e2e job actually failed and behaves
predictably for cancellations; modify the job definition named notify-on-failure
and its needs entry for e2e accordingly.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 03fcbec0-4633-4271-a1bb-c1954883c917
📒 Files selected for processing (3)
.github/workflows/promotion-candidate-e2e.yml.github/workflows/release.yml.github/workflows/validate.yml
Summary
Addresses four architectural gaps found during a factory determinism review.
Changes
1.
promotion-candidate-e2e.yml— wire the gate to hive-statusThe Tuesday promotion-candidate suite was described as a promotion gate but had no signal path: failures were visible only to someone actively watching the Actions tab. Adds a
notify-on-failurejob that auto-files akind/bugissue when the suite fails, sohive-statussurfaces the blocker before the promotion window.2.
validate.yml— add the missing submodule drift checkAGENTS.mdclaimedvalidate.ymlchecked submodule drift, but the step didn't exist. A PR could silently move thebluefin-brandingsubmodule pointer to an unreviewed commit and pass all CI gates. Adds agit submodule statuscheck that fails if any submodule is dirty (+) or uninitialized (-).3.
release.yml— idempotent tag creationTag is
v$(date +'%Y.%m'). A mid-monthworkflow_dispatchfollowed by the 1st-of-month cron generates the same tag twice, causing the cron run to fail. AddsallowUpdates: trueso duplicate-tag runs succeed silently.Companion PR for the org-level policy gap: projectbluefin/.github#6
Assisted-by: Claude Sonnet 4.6 via GitHub Copilot
Co-authored-by: Copilot [email protected]
Summary by CodeRabbit