Skip to content

ci: switch the v2 packages to the steady-state prerelease bump - #2413

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

ci: switch the v2 packages to the steady-state prerelease bump#2413
oliverlaz merged 4 commits into
mainfrom
chore/v2-beta-line-steady-state

Conversation

@oliverlaz

Copy link
Copy Markdown
Member

💡 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 on prerelease before they reach the 2.0 line, and the next release would compute 1.x.y-beta.N instead.

releaseAs: premajor has done its single job of lifting client, react-sdk, react-bindings, react-native-sdk and styling from 1.x onto 2.0.0-beta.0. Leaving it in place would compute 3.0.0-beta.0 on the next release, so this flips the five to releaseAs: prerelease, which increments beta.N and keeps the 2.0.0 core 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: putting premajor back on one package fails every 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)

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.
@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 14 minutes.

Check out review usage here.

View limit details

Limit 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.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: 4c313900-cf41-47d6-94da-b91484dc269c

📥 Commits

Reviewing files that changed from the base of the PR and between 3536a97 and 5f306f4.

📒 Files selected for processing (6)
  • packages/client/project.json
  • packages/react-bindings/project.json
  • packages/react-native-sdk/project.json
  • packages/react-sdk/project.json
  • packages/styling/project.json
  • scripts/release/beta-line-config.test.mts

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.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

Bundle size

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

Package Unminified Minified Δ min vs main
@stream-io/video-client 788.9 KB 278.6 KB +18 B (+0.0%)
@stream-io/video-react-sdk 365.4 KB 221.9 KB +12 B (+0.0%)
↳ install total (+ client + react-bindings) 1187.1 KB 512.5 KB +30 B (+0.0%)
@stream-io/video-react-native-sdk 414.5 KB 196.9 KB +6 B (+0.0%)
↳ install total (+ client + react-bindings) 1236.2 KB 487.5 KB +24 B (+0.0%)

Base automatically changed from chore/v2-beta-line to main September 4, 2026 11:36
Resolves the conflict left by #2412 being squash-merged: keep this
branch's steady-state `prerelease` config and its tightened config test.
@oliverlaz
oliverlaz marked this pull request as ready for review September 4, 2026 11:49
@oliverlaz
oliverlaz requested review from jdimovska and removed request for jdimovska September 4, 2026 11:50
@oliverlaz
oliverlaz merged commit 5cf9a6b into main Sep 4, 2026
21 checks passed
@oliverlaz
oliverlaz deleted the chore/v2-beta-line-steady-state branch September 4, 2026 13:09
oliverlaz added a commit that referenced this pull request Sep 4, 2026
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.
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 -->
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.

2 participants