Skip to content

fix(release): require complete updater manifests - #23700

Merged
juliusmarminge merged 3 commits into
pingdotgg:mainfrom
parmartejass:fix/require-complete-update-manifests
Nov 14, 2026
Merged

juliusmarminge merged 3 commits into
pingdotgg:mainfrom
parmartejass:fix/require-complete-update-manifests

Conversation

@parmartejass

Copy link
Copy Markdown
Contributor

Problem

The release publisher silently accepted incomplete desktop updater metadata.

macOS could publish without a usable merged manifest.
Windows could fall back to an x64-only manifest when arm64 was missing.
The reverse missing-architecture cases were also not rejected.

That lets a successful release strand one architecture's auto-updates.

Change

Use one release-manifest coordinator for the workflow and release smoke test.
It requires matching arm64 and x64 manifests for macOS and Windows before merging.
Any missing platform or architecture now fails the release before publication.

Scope and approval

This is a small, focused fix for an obvious release-integrity bug.
It only tightens validation of artifacts from already-required build jobs.
No new release behavior or setting is introduced.

Verification

  • Red test: the focused coordinator test failed before implementation.
  • vp test run scripts/merge-update-manifests.test.ts scripts/merge-release-update-manifests.test.ts
    passed 10/10 tests, including all four one-sided manifest cases.
  • vp run release:smoke passed.
  • vp run check:changed passed format, lint, knip, typecheck, and focused tests.

Model: GPT-5; harness: Codex.

@coderabbitai

coderabbitai Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The release workflow now uses one command to merge macOS and Windows updater manifests. The command requires complete architecture pairs for each channel, writes merged manifests, and removes source files that are not outputs. The release smoke test checks the merged macOS manifest and source-file removal.

Changes: Desktop updater manifests

Layer / File(s) Summary
Manifest pairing and output planning
scripts/merge-release-update-manifests.ts
The script classifies macOS and Windows manifest filenames by channel, skips builder-debug files, and requires both ARM64 and x64 manifests for each channel.
Merge execution and validation
scripts/merge-release-update-manifests.ts, scripts/merge-release-update-manifests.test.ts
The exported effect merges each planned pair and removes source files that are not output files. Tests cover successful merges and missing architecture manifests.
Release workflow and smoke test
.github/workflows/release.yml, scripts/release-smoke.ts
The non-preview workflow and smoke test invoke the shared command. The smoke test checks both macOS assets in the merged manifest and verifies removal of the x64 source manifest.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseWorkflow
  participant MergeCLI as merge-release-update-manifests
  participant ReleaseAssets
  participant ManifestMerger as shared manifest-merging function
  ReleaseWorkflow->>MergeCLI: invoke for release-assets
  MergeCLI->>ReleaseAssets: read updater manifest entries
  MergeCLI->>ManifestMerger: merge each complete platform and channel pair
  ManifestMerger-->>MergeCLI: return merged manifest
  MergeCLI->>ReleaseAssets: write output and remove non-output source files
Loading

Suggested reviewers: juliusmarminge, t3dotgg

Merge Risk: Minimal · up to e882a

Release publishing now fails early if a macOS or Windows updater manifest is missing an architecture, instead of publishing incomplete metadata. This tightens validation of artifacts from already-required build jobs, and no merge-blocking risk remains.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title "fix(release): require complete updater manifests" matches the main change. The PR makes the release flow reject missing macOS or Windows updater manifests for either architecture, and the s…
Description check Passed The description follows the repository template. It has Problem, Change, Scope, and Verification sections, plus the required model and harness line. The problem is stated clearly and the change explai…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title "fix(release): require complete updater manifests" matches the main change. The PR makes the release flow reject missing macOS or Windows updater manifests for either architecture, and the summary confirms a merge script that errors when a channel lacks an architecture. It uses a conventional commit format and names the specific behavior change.

Full details: Description check

Explanation

The description follows the repository template. It has Problem, Change, Scope, and Verification sections, plus the required model and harness line. The problem is stated clearly and the change explains the single coordinator and the validation added. The scope section explains why no issue is linked, which the template allows for a small obvious fix. Verification lists a red test, passing focused tests, and passing smoke and changed-file checks. The template asks for the reason for the change, and the description gives it. Minor gaps: it does not link an issue or describe a reproduction, and the template's Scope section asks for a linked issue or a maintainer request, which the author addressed only by justifying the absence of an issue.

Finishing Touches

Generate unit tests (beta)

  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 99071c4 and e882a3c.

Files selected for processing: 4

  • .github/workflows/release.yml
  • scripts/merge-release-update-manifests.test.ts
  • scripts/merge-release-update-manifests.ts
  • scripts/release-smoke.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-22T15:46:06.945724Z 4aa4c75 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added vouch:unvouched Author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Oct 22, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 4aa4c75

Macroscope's review found this PR approvable — The release workflow now requires matching arm64 and x64 updater manifests for macOS and Windows before publishing, preventing partial releases while preserving valid release output. The coordinator is isolated, tested, and limited to release artifact validation and merging.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge juliusmarminge added the takeover:in-progress A takeover lead is working on this PR label Nov 14, 2026
@juliusmarminge

Copy link
Copy Markdown
Member

Evidence

Executed the real release workflow merge and asset-list commands on Linux with identical synthetic fixtures: complete manifests, then each of the four architecture manifests individually omitted, for both stable and nightly.

Before After
99071c4953 e882a3c27e
Command capture: all eight incomplete cases exit 0 and reach the asset list. Missing Windows arm64 produces an x64-only feed; the other omissions produce absent or incomplete feeds. Command capture: all eight incomplete cases exit 1 before the asset list, naming the missing architecture.
Complete stable and nightly sets produce both architectures. Complete stable and nightly sets still produce both architectures.

Reproduction driver · Generated artifacts and logs

Not shown:

  • No hosted GitHub Actions release or publication was triggered; proof covers the actual workflow commands through the asset-list gate using synthetic manifests, rather than signed desktop builds or a published release.

@juliusmarminge juliusmarminge added takeover:ready Takeover done; auto-lands when gates pass and removed takeover:in-progress A takeover lead is working on this PR labels Nov 14, 2026
@juliusmarminge
juliusmarminge merged commit a8e60d4 into pingdotgg:main Nov 14, 2026
49 checks passed
@juliusmarminge juliusmarminge removed the takeover:ready Takeover done; auto-lands when gates pass label Nov 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:unvouched Author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants