Round 3 follow-ups of the production deploy (#404): verify the promotion, rollback wording, split promotions, empty pair
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- github-actions, typescript
Research direction
Read docs/deployment-vercel.md section 7 and the deploy-production.yml workflow to understand the documented recovery path and promotion order. Then inspect dispatcher/src/snapshot/vercel-api.ts and the stage, canary, and promote jobs; add tests for production verification and rejecting empty pairs on rebuilds. Done means all four follow-ups are addressed, tests cover the new checks, and the rollback and split-promotion guidance matches the workflow.
Written by the indexing model from the issue text.
Description
Follow-ups from round 3 of the review of #404 (production deploy via GitHub Actions and Infisical). The review's verdict was "safe to merge and run"; these four are P3.
Review: https://github.com/ExpidetGames/code-reviewer/pull/404#issuecomment-6233048046
1. The way out of rollback_snapshot_missing is a revert commit, not a manual run
docs/deployment-vercel.md (section 7, and the allow_stale input description in deploy-production.yml) says to "deploy the old commit as a new run (a manual run with allow_stale)". A workflow_dispatch run always has GITHUB_SHA equal to the head of main, so allow_stale only matters when main moves during the run; "Re-run all jobs" of an old push run has empty inputs and is refused by fresh. What works is a revert commit on main (a normal run), or a re-run of an old dispatch run that had allow_stale set.
Fix: change the sentence in section 7 (and the input description) to the revert commit, or drop the input.
2. Verify after vercel promote that production actually moved
In CLI 64.5.0 a vercel promote can exit 0 without production having moved: "No deployment promotion in progress", "Promote deployment was skipped", and the 202 "queued behind a rolling release". The jobs then go green, persist writes the pair and record writes "Promoted to production." while the old deployment still serves.
Fix: after vercel promote, ask the API (the code for it exists in dispatcher/src/snapshot/vercel-api.ts: livePair, productionDeployment) whether targets.production.id of the project is the staged deployment's id, and fail the promote job if it is not, before persist and record. Add a shell/unit test. It matters most on the first run, where promote has never run on the platform.
3. An App/Dispatcher split when main moves between the two promotions
If main moves between promote-app and promote-dispatcher, the freshness check in promote-dispatcher fails after the App is already out. The next run completes both, but the window can be a whole build, and a release that changes the runner API is exactly the case where the App must come first and the Dispatcher must follow.
Fix, one of: check freshness once before promote-app and let promote-dispatcher go on (the App is already out); or state this case in the "pipeline stopped between the two promotions" row of section 7.
4. The || fallback of the pair is fail-open if a rebuilding run's build outputs are ever empty
needs.snapshot-build.outputs.X || needs.snapshot-decide.outputs.X is right when the build is skipped. When rebuild == 'true' the decide outputs are empty by design, so an empty build output would stage a Dispatcher with no --env, run a canary with no expectation (empty snapshot_id and image_digest mean "do not check") against the project's old pair, and promote. No path was found that produces empty build outputs, but closing it is cheap.
Fix: a step in stage-dispatcher and in canary, or an if, that requires a non-empty pair whenever snapshot-decide.outputs.rebuild == 'true'; with a test.
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 1
- Avg merge
- 1h 19m
- Merged PRs (30d)
- 328
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from ExpidetGames/code-reviewer
-
area: app type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
ExpidetGames/code-reviewer#585 ·
Maintainers usually reply within 1 day
-
area: app type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
ExpidetGames/code-reviewer#584 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
ExpidetGames/code-reviewer#464 ·
Maintainers usually reply within 1 day
-
area: app type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
ExpidetGames/code-reviewer#308 ·
Maintainers usually reply within 1 day
-
type: docs
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
ExpidetGames/code-reviewer#94 ·
Maintainers usually reply within 1 day
All issues in ExpidetGames/code-reviewer
Similar issues
-
bug hacktoberfest help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
libredb/libredb-studio#1941 ·
Maintainers usually reply within 1 day
-
chore other
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
alastair-smith/card-games#308 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 86/100
paperclipai/paperclip#17379 ·
Maintainers usually reply within 1 day
-
[good first issue, hacktoberfest] 🏯 Hacktoberfest Task - Add new Anime Quote 626 (good-first-issue)Opencommunity first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 76/100
lingdojo/kana-dojo#33040 · 1 comment · 5 reactions ·
Maintainers usually reply within 1 day
-
bug mobile ui
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
Maintainers usually reply within 1 day