ci: switch the v2 packages to the steady-state prerelease bump - #2413
Merged
Conversation
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.
Contributor
|
Warning Review limit reachedNext included review available in 14 minutes. View limit detailsLimit details: You’ve used all 2 included reviews currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (6)
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. Comment |
Bundle sizeBuilt package output. Sizes in KB; delta vs
|
Resolves the conflict left by #2412 being squash-merged: keep this branch's steady-state `prerelease` config and its tightened config test.
jdimovska
approved these changes
Sep 4, 2026
oliverlaz
marked this pull request as ready for review
September 4, 2026 11:49
oliverlaz
added a commit
that referenced
this pull request
Sep 4, 2026
### 💡 Overview The satellite packages 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. This gives `main` a disjoint major. 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. > [!NOTE] > Stacked on #2413. Merge that first, then this. ### 📝 Implementation notes **The peer ranges are the non-obvious part.** `react-native-sdk` declares its satellite peers as literal ranges, not `workspace:` specs, so yarn never rewrites them at pack time and they ship verbatim. A prerelease only satisfies a range carrying a prerelease at the same version tuple: | version | `>=0.1.0` | `>=1.0.0-beta.0` | |---|---|---| | `1.0.0-beta.0` | **no** | yes | | `1.0.0` | yes | yes | | `0.11.0` | yes | no | So `>=0.1.0` silently excludes every `1.0.0-beta.N` and would have left every v2-beta RN consumer with unmet peers. Widened to `>=1.0.0-beta.0`, which admits the beta line *and* the stable `1.x` that follows, so it needs no revert when the satellites graduate. Dropping `0.11.0` is intended: a v2 RN SDK should not pair with v1-line satellites. **That fix is typed `fix(react-native-sdk)`, deliberately, in its own commit.** The published `2.0.0-beta.0` still carries the old `>=0.1.0`, and `ci` is in this package's `skipCommitTypes`, so a `ci`-typed change would have corrected the repo without ever reaching npm. As a `fix` it releases `2.0.0-beta.1`, whose exact pins on `client` and `react-bindings` stay at the published `2.0.0-beta.0`, so nothing dangles. **`preset.preMajor` flips to false** on the five satellites 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**, same as it was for the core five: it lifts `0.x` to `1.0.0-beta.0` and would walk the major forward if left in place. A follow-up flips these six to `prerelease`. `typescript-config` is deliberately excluded: it never publishes, so it cannot collide. The config test is restructured into per-group assertions, since the core line is already at steady state while the satellites are bootstrapping. It now also guards `preMajor` and the RN peer ranges. Both new assertions were negative-tested rather than assumed green: reverting one peer range fails `the RN SDK peer ranges admit the satellite beta line`, and restoring `preMajor: true` fails `no beta-line package still assumes a pre-1.0 version`. Dry run on this branch: ``` audio-filters-web 1.0.0-beta.0 video-filters-web 1.0.0-beta.0 video-filters-react-native 1.0.0-beta.0 noise-cancellation-react-native 1.0.0-beta.0 react-native-callingx 1.0.0-beta.0 video-codemod 1.0.0-beta.0 video-react-native-sdk 2.0.0-beta.1 (carries the peer fix) client / bindings / react-sdk / styling nothing changed ``` `yarn test:scripts` is 69 passing, up from 66. 🎫 Ticket: https://linear.app/stream/issue/REACT-1166/v1v2-branch-split-release-v1-maintenance-branch-v2-on-main 📑 Docs: n/a (internal release tooling) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Release Management** * Beta releases are now configured for audio filters, video filters, calling, codemod, and noise-cancellation packages. * GitHub releases for these packages are marked as prereleases. * Beta release lines are now validated separately for core and satellite packages. * **Compatibility** * React Native SDK peer dependency requirements now support beta and stable 1.0.0 releases of related packages. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
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.
💡 Overview
Phase 4b of the v1/v2 branch split, and the second half of #2412.
Important
Do not merge until the bootstrap release from #2412 has published
2.0.0-beta.0. Merging early would put the five packages onprereleasebefore they reach the 2.0 line, and the next release would compute1.x.y-beta.Ninstead.releaseAs: premajorhas done its single job of liftingclient,react-sdk,react-bindings,react-native-sdkandstylingfrom 1.x onto2.0.0-beta.0. Leaving it in place would compute3.0.0-beta.0on the next release, so this flips the five toreleaseAs: prerelease, which incrementsbeta.Nand keeps the2.0.0core sticky.📝 Implementation notes
The config test is tightened from "premajor or prerelease" to exactly
prerelease, so a forgotten flip fails CI instead of silently shipping a new major. Negative-tested: puttingpremajorback on one package failsevery v2 package uses the steady-state releaseAs.Stacked on
chore/v2-beta-line, so the diff here is only the flip plus the test change once #2412 lands.🎫 Ticket: https://linear.app/stream/issue/REACT-1166/v1v2-branch-split-release-v1-maintenance-branch-v2-on-main
📑 Docs: n/a (internal release tooling)