Skip to content

ci: switch the satellite packages to the steady-state prerelease bump - #2415

Merged
oliverlaz merged 12 commits into
mainfrom
chore/v2-satellite-steady-state
Sep 4, 2026
Merged

ci: switch the satellite packages to the steady-state prerelease bump#2415
oliverlaz merged 12 commits into
mainfrom
chore/v2-satellite-steady-state

Conversation

@oliverlaz

Copy link
Copy Markdown
Member

💡 Overview

The second half of #2414, and the last step of the v1/v2 split.

Important

Do not merge until the satellite bootstrap release from #2414 has published 1.0.0-beta.0. Merging early would put the satellites on prerelease before they reach the 1.0 line, and the next release would compute 0.x.y-beta.N instead.

releaseAs: premajor has done its single job of lifting the six satellites from 0.x onto 1.0.0-beta.0. Left in place it would compute 2.0.0-beta.0 next, so this flips them to releaseAs: prerelease, which increments beta.N and keeps the 1.0.0 core sticky.

📝 Implementation notes

The steady-state assertion widens from the core five to every beta-line package, so premajor left anywhere fails CI. Negative-tested: putting premajor back on one satellite fails every beta-line package uses the steady-state releaseAs.

Stacked on chore/v2-satellite-beta-line.

🎫 Ticket: https://linear.app/stream/issue/REACT-1166/v1v2-branch-split-release-v1-maintenance-branch-v2-on-main

📑 Docs: n/a (internal release tooling)

Phase 4a of the v1/v2 branch split. Puts client, react-sdk,
react-bindings, react-native-sdk and styling on the 2.0.0-beta line and
marks their GitHub releases as prereleases, so a beta does not outrank the
real 1.x releases on the repo page.

`releaseAs: premajor` is deliberate and temporary. It is what lifts a
package from 1.x to 2.0.0-beta.0, and unlike a global --releaseAs flag it
is scoped per package, so the 0.x satellites and the dogfood app keep their
own version lines. It is strictly single-use: from 2.0.0-beta.0 premajor
yields 3.0.0-beta.0, so a follow-up flips these five to
`releaseAs: prerelease` once the bootstrap release has published.

Steady-state `prerelease` alone cannot do the bootstrap. From 1.42.0 it
computes 1.43.0-beta.0, because it only promotes to premajor when the
recommended bump is already major, and relying on a breaking commit per
package would lift only the package that commit touches.

scripts/release/beta-line-config.test.mts guards both halves of the split:
the five must share one supported releaseAs and the `beta` preid, and the
independent packages must set neither. Verified that it fails on drift, not
just vacuously.

Note that setting releaseAs disables dependency tracking, so on the beta
line each of the five releases only when it has its own qualifying commits.
Beta runs therefore need to cover the whole dependency closure; the publish
guard added in #2411 catches a mismatch before it reaches npm.
Phase 4b of the v1/v2 branch split. Merge this only after the bootstrap
release from #2412 has published 2.0.0-beta.0.

`releaseAs: premajor` did its single job of lifting the five packages from
1.x onto the 2.0.0-beta line. Leaving it in place would compute
3.0.0-beta.0 on the next release, so the five move to
`releaseAs: prerelease`, which increments beta.N and keeps the 2.0.0 core
sticky.

The config test no longer accepts `premajor`, so a forgotten flip fails CI
rather than silently shipping a new major.
Resolves the conflict left by #2412 being squash-merged: keep this
branch's steady-state `prerelease` config and its tightened config test.
The satellites shared a version line between the two release branches, and
the collision was already armed: `main` published
`video-filters-web@0.9.0` and `react-native-callingx@0.11.1`, and
`release-v1` computes exactly those versions next, so whichever published
second would have been rejected as an overwrite.

Giving `main` a disjoint major fixes it. The six publishable satellites
move to a `1.0.0-beta.N` line while `release-v1` keeps them on 0.x. They
publish under the `beta` dist-tag, so `latest` still serves 0.x to v1
users, and react-sdk's exact `workspace:*` pin resolves the beta.

`preset.preMajor` flips to false on the five that had it. It demotes a bump
one level, treating BREAKING CHANGE as minor and feat as patch, which is a
sub-1.0.0 assumption and wrong once these are on a 1.x line.

`releaseAs: premajor` is temporary here for the same reason as the core
packages: it lifts 0.x to 1.0.0-beta.0 and would walk the major forward if
left in place, so a follow-up flips these six to `prerelease`.
…nges

The satellite peers are declared as literal ranges rather than `workspace:`
specs, so yarn does not rewrite them at pack time and they ship verbatim. A
prerelease only satisfies a range that carries a prerelease at the same
version tuple, so `>=0.1.0` excludes every `1.0.0-beta.N` and would leave
consumers of the v2 beta with unmet peer dependencies once the satellites
move to their own beta line.

Widened to `>=1.0.0-beta.0`, which admits the beta line and the stable 1.x
that follows it, so this needs no revert when the satellites graduate.

Typed as a fix so the corrected ranges actually reach npm: the published
2.0.0-beta.0 still carries the old `>=0.1.0`, and a `ci` commit is in this
package's skipCommitTypes and would not trigger a release.
Merge this only after the satellite bootstrap release has published
1.0.0-beta.0.

`releaseAs: premajor` did its single job of lifting the six satellites from
0.x onto the 1.0.0-beta line. Left in place it would compute 2.0.0-beta.0
on the next release, so they move to `releaseAs: prerelease`, which
increments beta.N and keeps the 1.0.0 core sticky.

The steady-state assertion now covers every beta-line package rather than
just the core five, so `premajor` left anywhere fails CI.
@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

The peer-range change altered packages/react-native-sdk/package.json
without regenerating yarn.lock, so `yarn install --immutable` refused the
install and every CI job failed at setup.
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

Bundle size

Built package output. Sizes in KB; delta vs main@ef9c15f.

No significant package size increase vs main.

Resolves the conflict left by #2413 being squash-merged. Keeps this
branch's restructured config test, which already carries #2413's core
steady-state assertion and adds the satellite groups, the preMajor check
and the RN peer-range check.
Base automatically changed from chore/v2-satellite-beta-line to main September 4, 2026 13:22
Resolves the conflict left by #2414 being squash-merged. Keeps this
branch's flip to `prerelease` on the six satellites and the steady-state
assertion widened to every beta-line package.
@oliverlaz
oliverlaz marked this pull request as ready for review September 4, 2026 14:07
@oliverlaz
oliverlaz merged commit 8c7af9f into main Sep 4, 2026
19 checks passed
@oliverlaz
oliverlaz deleted the chore/v2-satellite-steady-state branch September 4, 2026 14:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant