chore(ci): move :prod promotion to Mon-Thu 12:00 PT - #875
Conversation
Promote :staging to :prod at 19:00 UTC Mon-Thu (12:00 PT / PDT) instead of the weekly Thursday 00:00 UTC cron, so each release gets a US-hours window for Brave's code audit and verifier before it goes to prod.
|
Bugbot is not enabled for this team, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Note Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported. |
There was a problem hiding this comment.
Pull request overview
Moves the scheduled GitHub Actions promotion workflow so the :staging → :prod retag happens during a predictable US-hours window, aligning with Brave’s verification/audit process.
Changes:
- Update
promote.ymlcron from weekly Thu 00:00 UTC to Mon–Thu 19:00 UTC. - Expand in-file scheduling documentation (including UTC-only cron/DST caveat).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| schedule: | ||
| # Thursday 00:00 UTC — promote frozen :staging → :prod | ||
| - cron: "0 0 * * 4" | ||
| # Mon-Thu 19:00 UTC (12:00 PT during PDT): promote verified :staging to :prod. |
Review —
|
PierreLeGuen
left a comment
There was a problem hiding this comment.
Schedule-only change to .github/workflows/promote.yml: the :prod promotion cron moves to 0 19 * * 1-4 (Mon–Thu 19:00 UTC / 12:00 PT). The cron is well-formed and the rest of the workflow is untouched.
No blocking issues. Non-blocking notes:
- Firing 4×/week instead of weekly is safe: the
prod-image-mutationconcurrency group (cancel-in-progress: false) serializes runs, and re-promoting a frozen:stagingdigest is idempotent (skopeo copyoverwrites with identical bytes, tag/release steps re-derive the same values). - The DST caveat (fixed UTC offset) is documented in-file and in the PR body — a known operational note, not a bug.
- The
build.ymlstaging-freeze interaction on Tue/Wed is explicitly deferred to a follow-up and does not corrupt state.
Checks: confirmed the diff touches only promote.yml; validated cron 0 19 * * 1-4; reasoned through promotion idempotency and concurrency under the new cadence; reviewed prior comments (Copilot informational only). git diff --check passed; actionlint not installed (skipped).
lloydmak99
left a comment
There was a problem hiding this comment.
Schedule-only change to .github/workflows/promote.yml: cron: "0 0 * * 4" → cron: "0 19 * * 1-4" plus expanded comments. The cron is well-formed and correctly fires Mon–Thu at 19:00 UTC (12:00 PDT summer / 11:00 PST winter, matching the stated 12:00 PT window). Rest of the workflow is untouched and the prod-image-mutation concurrency group (cancel-in-progress: false) still serializes the more frequent runs.
- Optional follow-up,
.github/workflows/promote.yml:12— with the new Mon–Thu cadence, promotion is still unconditional whilebuild.yml:65only freezes:stagingTue/Wed, so Mon & Thu could promote fresh, unverified builds. Pre-existing behavior, already noted in the PR body as a deferred freeze-window rework; not a blocker for this diff.
Checks: git diff --check clean (no whitespace issues); promote.yml parses via yaml.safe_load; cron syntax and DST offsets validated manually. actionlint not run (unavailable in-environment).
What
Move the automated
:staging->:prodpromotion off its weekly Thursday 00:00 UTC cron to Mon-Thu 19:00 UTC (12:00 PT during PDT).cron: "0 0 * * 4"->cron: "0 19 * * 1-4"Why
Brave verifies each NEAR release and denies traffic to us when verification fails (verifiable privacy is their core feature). A prod promotion landing overnight UTC gives them no US-hours window to run the code audit and verifier. On 2026-07-09 an unverified build promoted overnight and Brave cut the connection until we rolled back.
Per Lloyd's proposed schedule in the Brave thread: Mon-Thu, staging freeze at 10:00 PT, prod promotion at 12:00 PT, so every release gets a predictable ~2h verification slot during US business hours.
This is the first of two coordinated changes:
promote.ymlretags:staging->:prodat 12:00 PT.update_cloud_api_prod.yml- rolls the promoted image onto cpu01,cpu02 shortly after (companion PR linked below).Notes / caveats
19:00 UTC= 12:00 PT in summer (PDT) and 11:00 PT in winter (PST). Revisit the offset at the November DST change (switch to20:00 UTCto hold 12:00 PT).build.ymlstaging-freeze logic updated: today it freezes:stagingon Tue/Wed (the old once-weekly model), which would suppress new staging builds on those days. Reworking that freeze (time-of-day 10:00 PT window vs. day-of-week) needs Lloyd's sign-off on exact semantics and is a follow-up, not in this PR.workflow_dispatchpromotion is unchanged.