ci: require human signoff before a major release - #387
Draft
Kyleasmth wants to merge 1 commit into
Draft
Conversation
🦋 Changeset detectedLatest commit: 4e13206 The changes in this PR will be included in the next version bump. This PR includes changesets to release 0 packagesWhen changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes YPE-2523 — pending a scope correction, see below.
Ports the Swift SDK's major-release signoff gate (YPE-2521) to this repo. A PR that declares a breaking change cannot merge until a write-access collaborator other than the author confirms it, by name, with the exact version and a 🚀.
The ticket's stated mechanism does not exist here
YPE-2523 says "
semantic-release(current branch) detects a breaking change". This repo has no semantic-release: releases run on Changesets, and the bump level is declared in.changeset/*.mdfrontmatter rather than inferred from commit footers.That is not a new discovery.
docs/release-hardening-decisions.md(Decision 1, jhampton 2026-07-01) already records it:So the gate is the same; only the detector changes.
scripts/preview-release.mjskeeps the Swift name and output contract, but askschangeset statusinstead of@semantic-release/commit-analyzer.One deliberate difference from Swift
Swift gates on "this release is a major". Here that would be wrong. Changesets accumulates changesets until the Version Packages PR ships them, so a major pending on
mainwould make every unrelated PR report major and get blocked until the release went out.The script therefore reports two separate things, and only the second gates:
is_majorintroduced_majormajor(gates)Verified behaviour
Run against real commits on this branch, not reasoned about:
nextis_majorintroduced_majorpatchchangesetmajorchangesetThe last row is the one a straight port would get wrong.
Also confirmed: the three packages are a
fixedgroup in.changeset/config.json, so one major changeset bumps all three to the same3.0.0. That keeps Swift's single-version signoff format valid — worth knowing, because iffixedwere ever removed the signoff comment would become ambiguous about which version is approved. The script fails loudly rather than picking one if it sees more than one version.Carried over from Swift unchanged
The parts that are release-tool-agnostic and were the hard-won bits there:
deleted, so a cachedsuccesscannot outlive its evidence.>quote markers and whitespace, so GitHub's "Quote reply" matches.Not done, needs someone with admin
The workflow only blocks if
major-release-signoffis added as a required status check onmain. I cannot read branch protection (404 without admin). This is what actually made the Swift gate bite, so it should not be skipped.Scope
Asking on the ticket for the description to be corrected before this merges, since it currently specifies a mechanism this repo does not have.