TML-3170: publish releases as 8.0.0-rc.N (latest tracks the RC line) - #29899
Conversation
|
|
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe release process now supports ChangesRC release flow
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant PublishWorkflow
participant DetermineVersion
participant CheckReleaseNotes
participant GitHubRelease
PublishWorkflow->>DetermineVersion: resolve RC or stable version
DetermineVersion-->>PublishWorkflow: return version and latest tag
PublishWorkflow->>CheckReleaseNotes: validate release notes
CheckReleaseNotes-->>PublishWorkflow: return validation result
PublishWorkflow->>GitHubRelease: create release with prerelease flag for RC
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
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 |
b6ab8a6 to
7128beb
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/publish.yml:
- Around line 169-180: Move the Check release notes step before both
package-publication steps in the workflow, preserving its existing blessed-tag
and dry-run conditions and command. In .github/workflows/publish.yml lines
169-180, reorder the steps so the gate runs before publishing; in
docs/oss/versioning.md lines 70-73, retain the existing guarantee with no direct
change required.
In `@skills-contrib/publish-npm-version/SKILL.md`:
- Around line 47-56: Update the release-note guidance to consistently use the
previous blessed tag for RC releases: revise the remaining previous-stable-tag
references in skills-contrib/publish-npm-version/SKILL.md lines 41 and 93, and
change the graceful-degradation wording in
skills-contrib/draft-release-notes/SKILL.md lines 232-233 to reference the
previous blessed tag; keep the related instructions and links current.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro Plus
Run ID: 9fa24af7-6891-493c-9cb6-e6f0914305d9
📒 Files selected for processing (14)
.github/workflows/publish.ymldocs/oss/versioning.mdpackage.jsonscripts/bump-version.tsscripts/check-release-notes.mjsscripts/check-upgrade-coverage.mjsscripts/determine-version-utils.test.tsscripts/determine-version-utils.tsscripts/determine-version.tsscripts/lint-throws.test.mjsskills-contrib/draft-release-notes/SKILL.mdskills-contrib/publish-npm-version/SKILL.mdskills-contrib/record-upgrade-instructions/SKILL.mdskills/extension-author/prisma-8-extension-upgrade/SKILL.md
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
size-limit report 📦
|
prisma-next
@prisma/orm-extension-arktype-json
@prisma/orm-extension-middleware-cache
@prisma/orm-extension-paradedb
@prisma/orm-extension-pgvector
@prisma/orm-extension-postgis
@prisma/orm-extension-supabase
@prisma/orm-family-mongo
@prisma/orm-family-sql
@prisma/orm-framework
@prisma/orm-mongo
@prisma/orm-postgres
@prisma/orm-sqlite
@prisma/orm-target-mongo
@prisma/orm-target-postgres
@prisma/orm-target-sqlite
@prisma/orm-toolchain
commit: |
7128beb to
38e1d59
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@skills-contrib/publish-npm-version/SKILL.md`:
- Around line 47-56: Update the “Fetch and determine the target version”
instructions so computeNextReleaseVersion is loaded from the fetched origin/main
revision rather than the potentially dirty current worktree. Ensure the
branch/PR NEXT value and the authoritative pnpm bump-version calculation use the
same origin/main helper and produce an identical version.
- Line 114: Correct the idempotency statement in the skill documentation:
clarify that only pnpm bump-version is idempotent, while rerunning the full
skill fails when the release branch or sibling worktree created by git worktree
add already exists. Document how to reuse or remove the existing worktree, or
update Step 2 to reuse it before describing rerun behavior.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro Plus
Run ID: d501530a-3980-44e7-8504-3aad818b074e
📒 Files selected for processing (14)
.github/workflows/publish.ymldocs/oss/versioning.mdpackage.jsonscripts/bump-version.tsscripts/check-release-notes.mjsscripts/check-upgrade-coverage.mjsscripts/determine-version-utils.test.tsscripts/determine-version-utils.tsscripts/determine-version.tsscripts/lint-throws.test.mjsskills-contrib/draft-release-notes/SKILL.mdskills-contrib/publish-npm-version/SKILL.mdskills-contrib/record-upgrade-instructions/SKILL.mdskills/prisma-8-extension-upgrade/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (9)
- scripts/lint-throws.test.mjs
- scripts/check-release-notes.mjs
- package.json
- skills-contrib/draft-release-notes/SKILL.md
- scripts/determine-version-utils.test.ts
- .github/workflows/publish.yml
- skills-contrib/record-upgrade-instructions/SKILL.md
- scripts/check-upgrade-coverage.mjs
- scripts/determine-version.ts
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/determine-version-utils.ts`:
- Around line 7-8: Restrict RC_BASE_PATTERN to match only the supported 8.0.0 RC
line with rc numbers starting at 1, and ensure assertCanonicalBase() rejects
other RC bases such as 0.17.0-rc.0, 8.0.1-rc.1, and 9.2.3-rc.1. Add negative
tests covering non-8.0.0 RC bases and rc.0 while preserving valid RC behavior.
In `@scripts/determine-version.ts`:
- Around line 131-134: Route RC release results to next and stable release
results to latest in scripts/determine-version.ts (131-134). Update
.github/workflows/publish.yml (10-16, 145-155, 169-180, 182-216) to document
both channels, exclude both release tags from lightweight tags, gate release
notes for both, and create the appropriate RC or stable GitHub Release. Update
scripts/check-release-notes.mjs (4-7, 34-35, 182) so checks apply to every
release and error text names next and latest. Update docs/oss/versioning.md
(34-45, 69-85) to document next for RCs, stable latest, and both workflow/manual
procedures.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro Plus
Run ID: bc007d36-4d43-4134-8204-085b10d12663
📒 Files selected for processing (14)
.github/workflows/publish.ymldocs/oss/versioning.mdpackage.jsonscripts/bump-version.tsscripts/check-release-notes.mjsscripts/check-upgrade-coverage.mjsscripts/determine-version-utils.test.tsscripts/determine-version-utils.tsscripts/determine-version.tsscripts/lint-throws.test.mjsskills-contrib/draft-release-notes/SKILL.mdskills-contrib/publish-npm-version/SKILL.mdskills-contrib/record-upgrade-instructions/SKILL.mdskills/prisma-8-extension-upgrade/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (9)
- package.json
- skills-contrib/record-upgrade-instructions/SKILL.md
- scripts/lint-throws.test.mjs
- scripts/check-upgrade-coverage.mjs
- skills-contrib/draft-release-notes/SKILL.md
- skills/prisma-8-extension-upgrade/SKILL.md
- scripts/determine-version-utils.test.ts
- scripts/bump-version.ts
- skills-contrib/publish-npm-version/SKILL.md
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
docs/oss/versioning.md (2)
71-71: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winQualify the
latestclaim forprisma.The
prismapackage publishes RC versions undernextuntil8.0.0final. This sentence says that the release publishes the new version underlatestwithout stating the exception. Clarify thatlatestapplies to the other packages andnextapplies toprisma.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/oss/versioning.md` at line 71, Update the versioning documentation sentence describing the publish dist-tag so it qualifies the claim: use `next` for RC versions of the `prisma` package until `8.0.0` final, while `latest` applies to the other packages. Preserve the existing release-trigger and pre-release behavior details.
7-8: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the remaining 0.x release examples.
The new note changes the release line to
8.0.0-rc.N, but this section still describes regular0.xminors, including0.8.1patch releases and “each minor.” Rewrite these examples for RC respins, or clearly label the0.xtext as historical transition guidance.As per coding guidelines, documentation must remain current.
Proposed documentation update
-## Pre-1.0: deliberately unstable +## Early access: deliberately unstable -**Breaking changes ship in regular minor bumps.** +**Breaking changes may ship in any RC respin before `8.0.0` final.** -**Releases are frequent.** The cadence is "ship a minor whenever the next batch of work is cohesive enough to warrant one" +**Releases are frequent.** The cadence is "ship the next RC whenever the next batch of work is cohesive enough to warrant one" -**There are no patch releases of older minors.** +**On the RC line, fixes ship as the next `rc.N`, not as patch releases.**🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/oss/versioning.md` around lines 7 - 8, Update the release examples in the versioning guidance to use the current 8.0.0-rc.N RC respin model instead of presenting 0.x minors and 0.8.1 patches as current behavior. If retaining the 0.x examples, explicitly label them as historical transition guidance and preserve the updated v8 RC policy.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/publish-packages-utils.mjs`:
- Around line 64-71: Update the release-tag documentation to match
planPackagePublish: in scripts/publish-packages-utils.mjs lines 64-71, state
that Prisma 7 retains latest while Prisma 8 releases use next; apply the same
policy in scripts/publish-packages.mjs lines 16-20; and revise
packages/9-public/prisma/README.md lines 3-5 to remove the 8.0.0-final
transition promise and document the supported Prisma 8 installation channel.
---
Outside diff comments:
In `@docs/oss/versioning.md`:
- Line 71: Update the versioning documentation sentence describing the publish
dist-tag so it qualifies the claim: use `next` for RC versions of the `prisma`
package until `8.0.0` final, while `latest` applies to the other packages.
Preserve the existing release-trigger and pre-release behavior details.
- Around line 7-8: Update the release examples in the versioning guidance to use
the current 8.0.0-rc.N RC respin model instead of presenting 0.x minors and
0.8.1 patches as current behavior. If retaining the 0.x examples, explicitly
label them as historical transition guidance and preserve the updated v8 RC
policy.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro Plus
Run ID: 90dedd14-7a97-4877-9f4b-9ad093200bf2
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (9)
docs/oss/versioning.mdpackages/9-public/prisma/README.mdpackages/9-public/prisma/bin/prisma-next.mjspackages/9-public/prisma/package.jsonpackages/9-public/prisma/scripts/lint-sync.mjsscripts/determine-version.tsscripts/publish-packages-utils.mjsscripts/publish-packages-utils.test.mjsscripts/publish-packages.mjs
🚧 Files skipped from review as they are similar to previous changes (1)
- scripts/determine-version.ts
9413481 to
9285e4a
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/oss/versioning.md`:
- Line 34: Update the package and dist-tag policy in the versioning
documentation to explicitly state that the bare prisma package is published
under next before v8, while published packages otherwise use latest. Remove or
revise adjacent statements claiming this repository does not publish prisma or
that v8 publishing belongs exclusively to prisma/prisma-cli, keeping the post-v8
contract accurate.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro Plus
Run ID: 081b9149-5b4d-4666-b145-84e646727f5f
📒 Files selected for processing (14)
.github/workflows/publish.ymldocs/oss/versioning.mdpackage.jsonscripts/bump-version.tsscripts/check-release-notes.mjsscripts/check-upgrade-coverage.mjsscripts/determine-version-utils.test.tsscripts/determine-version-utils.tsscripts/determine-version.tsscripts/lint-throws.test.mjsskills-contrib/draft-release-notes/SKILL.mdskills-contrib/publish-npm-version/SKILL.mdskills-contrib/record-upgrade-instructions/SKILL.mdskills/prisma-8-extension-upgrade/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (12)
- skills-contrib/record-upgrade-instructions/SKILL.md
- package.json
- scripts/lint-throws.test.mjs
- .github/workflows/publish.yml
- scripts/determine-version.ts
- scripts/check-upgrade-coverage.mjs
- skills-contrib/publish-npm-version/SKILL.md
- scripts/determine-version-utils.test.ts
- scripts/check-release-notes.mjs
- skills-contrib/draft-release-notes/SKILL.md
- scripts/bump-version.ts
- skills/prisma-8-extension-upgrade/SKILL.md
Releases now version as 8.0.0-rc.N; latest tracks the newest release, RC or stable, for every package this repo publishes (these names have no pre-v8 stable audience to protect — the frozen-latest concern belongs to the bare prisma package, published elsewhere). GitHub Releases for RC versions are marked pre-release. pnpm bump-minor becomes bump-version (rc base -> next rc; pre-8 stable -> 8.0.0-rc.1; stable >=8 -> next minor). Dev builds continue as <base>-dev.N. Upgrade-coverage and release-notes baselines treat rc tags as shipped releases. The root version stays 0.17.0 — cutting 8.0.0-rc.1 is a follow-up release PR via the publish-npm-version skill. Refs: TML-3170 Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Run the release-notes presence check before packages reach the registry, not between publish and Release creation. - Restrict the canonical RC shape to the one supported line (8.0.0-rc.N, N >= 1); a base like 9.2.3-rc.1 or 8.0.0-rc.0 now fails the publish guard. - publish-npm-version skill: correct the idempotency claim (the worktree-add step is not rerunnable) and add a verify step catching a stale local helper computing a different $NEXT than the bump. Refs: TML-3170 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io>
67b1ef7 to
76bf451
Compare
## Linked issue Refs [TML-3170](https://linear.app/prisma-company/issue/TML-3170) — this is the release that starts the v8 RC line the pipeline work in [prisma#29899](prisma#29899) prepared. ## Summary `0.17.0` → `8.0.0-rc.1`. This is the one-time transition onto the v8 release-candidate line: there are no further `0.x` minors, and subsequent releases advance the counter (`8.0.0-rc.2`, `rc.3`, …). Policy: [`docs/oss/versioning.md`](docs/oss/versioning.md). **Merging this PR ships the release.** The push to `main` carries the bumped root `version`, the [`Publish to npm`](.github/workflows/publish.yml) workflow detects the change and publishes `8.0.0-rc.1` under dist-tag `latest`, and a matching GitHub Release — marked **pre-release**, because the version is on the RC line — is created with [`docs/releases/v8.0.0-rc.1.md`](docs/releases/v8.0.0-rc.1.md) as its body verbatim. No separate dispatch step. ## Review surface [`docs/releases/v8.0.0-rc.1.md`](docs/releases/v8.0.0-rc.1.md) is the human-review surface — it becomes the public Release body. It covers the RC-line transition (including that `npm update` moves nobody onto the RC, since `^0.x` ranges can't match a pre-release), two breaking changes, one feature, and four fixes drawn from the 14 PRs merged since `v0.17.0`. ## What each commit does | Commit | What it does | | --- | --- | | `chore(release): bump to 8.0.0-rc.1` | `pnpm bump-version` across 113 manifests plus the lockfile. Version fields and internal `workspace:<version>` specifiers only. | | `docs(release): add release notes for v8.0.0-rc.1` | The notes file and the mirrored `CHANGELOG.md` entry. | | `chore(release): relabel the in-flight upgrade recipes 0.17-to-8.0` | See below. | | `docs(release): ground the aggregate example in the real ORM surface` | Corrects a before/after snippet that used a non-existent accessor. | ## Notes for the reviewer - **The in-flight upgrade recipes were relabelled `0.17-to-0.18` → `0.17-to-8.0`.** They were authored when the next release was expected to be `0.18.0`; the step users actually take is now `0.17` → `8.0`, which is also what `check:upgrade-coverage` requires once the bump crosses a major. The recipe contents are unchanged apart from the `to:` frontmatter, and the links in the notes and changelog were repointed to match. Both upgrade skills build their chain by one-minor arithmetic, which can't express this step, so each gained a line saying the directories present are the source of truth. - **Verify the two breaking-change entries against your own read of the PRs.** The driver-SPI split ([prisma#29907](prisma#29907)) is listed as breaking on the grounds that `SqlQueryable` is exported and anyone implementing or wrapping a SQL driver must change; the ticket describes it as substrate-only with no ORM-visible behavior change, and the entry says so explicitly. If the custom-driver audience isn't considered real yet, that entry can be demoted to Features. - **Six PRs were deliberately omitted** from the notes as not user-facing: roadmap/project-shaping docs ([prisma#29916](prisma#29916), [prisma#29891](prisma#29891), [prisma#29909](prisma#29909)), test-only ([prisma#29912](prisma#29912), [prisma#29908](prisma#29908)), and JSDoc-only ([prisma#29893](prisma#29893)). The last of those corrects `update()`/`delete()` docs that read as if they batch — no behavior changed, but say the word and it can be added as a documentation line under Fixes. ## Testing performed - `pnpm check:release-notes --mode pr`, `pnpm check:upgrade-coverage --mode pr`, `pnpm check:publish-deps` — all pass. - `pnpm test:scripts` — 368 tests, 0 failures. - Bump diff audited: every changed file is a `package.json` or `pnpm-lock.yaml`; the lockfile diff is `specifier: workspace:<old> → workspace:<new>` lines only, with no external-resolution churn. - The two code snippets in the notes were checked against the source: the `SqlQueryable` before/after matches `driver-types.ts` at `v0.17.0` and at HEAD, and the include-reducer result shape matches the assertions in `test/integration/test/sql-orm-client/include.test.ts`. ## Skill update n/a — internal only. No user-facing CLI/API surface changes in the bump itself; the two upgrade skills' chain-construction note is a docs correction that follows from the relabel. ## Checklist - [x] All commits are signed off (`git commit -s`) per the [DCO](CONTRIBUTING.md#developer-certificate-of-origin-dco). - [x] I read [CONTRIBUTING.md](CONTRIBUTING.md) and the change is scoped to one logical concern. - [x] Tests are updated (`n/a` — release bump plus release notes; no behavioural delta). - [x] The PR title follows the release convention from [`docs/oss/versioning.md`](docs/oss/versioning.md). - [x] The **Skill update** section above is filled in. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Introduced the Prisma 8.0.0 release candidate with updated aggregate results, including bigint and exact decimal values. * Added clearer upgrade paths for stable releases and release candidates. * Consolidated Prisma 8 skill installation and guidance. * **Bug Fixes** * Fixed generated TypeScript keys and literals, nested relation aliases, many-to-many aggregates, and prepared-statement retry errors. * **Documentation** * Added release notes and upgrade guidance for Prisma 8.0.0-rc.1, including breaking changes and contract regeneration requirements. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --- ## Update: the transition machinery is now RC-aware Review of the first pass caught that the upgrade-instructions machinery was keyed on `major.minor`, and the whole RC line lives inside one minor. Every RC transition collapsed to the same wrong label: | prev → head | before | after | | --- | --- | --- | | `0.17.0 → 8.0.0-rc.1` | `0.17-to-8.0` | `0.17-to-8.0.0-rc.1` | | `8.0.0-rc.1 → 8.0.0-rc.2` | `8.0-to-8.1` | `8.0.0-rc.1-to-8.0.0-rc.2` | | `8.0.0-rc.1 → 8.0.0-rc.7` | `8.0-to-8.1` | `8.0.0-rc.1-to-8.0.0-rc.7` | | `8.0.0-rc.7 → 8.0.0` final | `8.0-to-8.1` | `8.0.0-rc.7-to-8.0` | This was not cosmetic. A version bump rewrites every `examples/**` and `packages/3-extensions/**` manifest, so the coverage rule fires on every release — meaning **every future RC release PR would have failed** the same way this one first did, and the only way to satisfy it would have been to create a directory named for a minor bump that never happens. Users upgrading `rc.1 → rc.5` would also have found no recipes, which is exactly when they need them, since RC releases may carry breaking changes. A version's transition segment is now `major.minor` for a stable release and the full `major.minor.patch-rc.N` on the RC line. The in-flight directory while `main` sits on `rc.N` is `8.0.0-rc.N-to-8.0.0-rc.N+1`, which is precisely the coverage directory the `rc.N → rc.N+1` release PR then requires — the same self-consistent relationship minors already had. Stable-to-stable behavior is byte-identical, asserted against the historical labels. A reversed RC range now throws, matching the stable path. The in-flight recipes on this branch were relabelled to `0.17-to-8.0.0-rc.1` to match, and both upgrade skills' chain guidance now states the real rule (steps come from the directories present; on the RC line a step is one RC, not one minor). ### Verification after the change - `pnpm test:scripts` — 385 tests, 0 failures. - `pnpm check:upgrade-coverage --mode pr` — pass. - `node scripts/check-upgrade-coverage.mjs --mode publish --prev v0.17.0 --head release/8.0.0-rc.1` — pass (this is the check that runs on `main` after merge). - `pnpm check:release-notes --mode pr`, `node scripts/validate-skills.mjs` — pass. ### One more for the reviewer The recipe bodies still carried the pre-v8 numbering in their headings and prose ("0.17 → 0.18", references to 0.18 as the release introducing the aggregate change — a version that was never published). Those were rewritten to `8.0.0-rc.1`, since the recipes are consumer-facing and the directory was being renamed around them. --------- Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io>
Linked issue
Refs TML-3170.
Follow-up (not in this PR): the release PR that bumps the root version
0.17.0→8.0.0-rc.1via thepublish-npm-versionskill, which is what actually starts the RC line.At a glance
Before this PR, a release was always the next
0.xminor. After it, the same merge-the-release-PR flow ships8.0.0-rc.1,8.0.0-rc.2, … — still under dist-taglatest, with the GitHub Release marked pre-release.Decision
This PR moves the publish pipeline onto the v8 release-candidate line:
8.0.0-rc.N— the counter advances on every release publish. "The v8 RC" is the product name; the number iterates freely underneath, so respins are cheap and there is no promise the final RC is literallyrc.1.latestkeeps tracking the newest release, RC included. The package names this repo publishes (@prisma/orm-*, the platform packages, theprisma-nextshim) have no pre-v8 stable audience to protect — a bare install is an early-access install. The frozen-latestconcern belongs to the bareprismapackage, which this repo does not publish — its v8 bin shim lives in prisma/prisma-cli, which publishes undernextwhile v7 keepslatest.pnpm bump-minorbecomespnpm bump-version, encoding the release policy: RC base → next RC; pre-8 stable base →8.0.0-rc.1(the one-time line transition); stable ≥ 8 → next minor.--prereleasewhenever the version is on the RC line.The root version deliberately stays
0.17.0in this PR. Until the transition release PR lands, the pipeline behaves exactly as before (verified by running the publish paths locally — see Testing performed).Notes for the reviewer
latestsemantics are unchanged (newest release); lockfiles pin resolved versions, and existing^0.xranges can never resolve to8.0.0-rc.N(pre-releases don't satisfy stable ranges), sonpm updatenever moves anyone onto the RC line — only fresh installs get RCs once the transition PR lands.X.Y.Zonly" to "cleanX.Y.ZorX.Y.Z-rc.N" (assertCanonicalBase); anything else is still refused onmain.check-upgrade-coverage's publish baseline changed from "last stable tag" to "last release tag" (v*-rc.Nnow counts; only-dev.*/-beta.*are excluded). Without this, every RC publish would diff againstv0.17.0forever and the coverage diff would grow without bound. TheparseVersion/transitionLabelmachinery needed no changes — it already discards pre-release suffixes, so RC respins land in PR-mode steady-state semantics (in-flight directory8.0-to-8.1).composeDevVersionmoved out ofdetermine-version.tsinto the pure utils module so the dev-counter logic (including the new RC-base handling and counter reset across base changes) is unit-tested rather than only exercised in CI. Dev builds on the RC line are8.0.0-rc.X-dev.N.publish-npm-version,draft-release-notes,record-upgrade-instructions, extension-upgrade skill,docs/oss/versioning.md) renamesbump-minor→bump-versionand updates the release procedures for the RC line.draft-release-notes' range lower bound now explicitly treats-rc.Ntags as releases, so an RC respin's notes cover exactly what changed since the previous RC.How it fits together
assertCanonicalBaseadmits the two release shapes;computeNextReleaseVersionandcomposeDevVersionare pure helpers over them.<base>underlatest, routine pushes compose<base>-dev.Nvia the shared helper.pnpm bump-version): same idempotent read-from-HEAD design as before, now advancing to the next release version rather than the next minor.--prereleasewhen the published version matches*-rc.*; everything else (notes check, lightweight dev tags) keeps itslatest-scoped conditions.latesttracks RCs for these packages, where the bare-prismanext-channel policy lives, and the one-time transition; the procedures are updated to match.Behavior changes & evidence
8.0.0-rc.Npublishes underlatestwith a pre-release GitHub Release; a stable bump behaves exactly as today. Implementation: scripts/determine-version.ts, .github/workflows/publish.yml. Evidence:computeNextReleaseVersionandassertCanonicalBasesuites in scripts/determine-version-utils.test.ts.8.0.0-rc.X-dev.N, with the counter resetting whenever the base moves (new RC counter, stable→RC transition). Implementation:composeDevVersionin scripts/determine-version-utils.ts. Evidence: thecomposeDevVersionsuite in scripts/determine-version-utils.test.ts.pnpm bump-versionfrom0.17.0produces8.0.0-rc.1; from8.0.0-rc.1produces8.0.0-rc.2; from a stable ≥ 8 produces the next minor. Implementation: scripts/bump-version.ts. Evidence: thecomputeNextReleaseVersionsuite in scripts/determine-version-utils.test.ts.v*-rc.N. Implementation: scripts/check-upgrade-coverage.mjs.Summary
Enables shipping the v8 RC early and iterating on it with frequent releases, using the exact publish flow that exists today — only the version shape and the pre-release marking change.
Testing performed
pnpm test:scripts— 365 tests, 0 failures (includes the suites covering the new/changed version helpers).pnpm lint(full repo),pnpm lint:workflows,node scripts/validate-skills.mjs— all green.determine-version.tsagainst the real registry: dispatch resolves0.17.0→latest; push with unchanged version resolves0.17.0-dev.N→dev(continuing from the registry's actual counter)..github/workflows/publish.ymlparsed with the workspaceyamlpackage to confirm validity after the edits.Skill update
Updated in this PR:
skills-contrib/publish-npm-version(RC-aware bump flow),skills-contrib/draft-release-notes(release-tag range bounds),skills-contrib/record-upgrade-instructionsandskills/extension-author/prisma-8-extension-upgrade(bump-versionrename). No end-user-facing CLI/API surface changes — the pipeline changes are maintainer-facing.Alternatives considered
nextdist-tag and freezinglatestat0.17.0— rejected for these packages. Freezinglatestprotects a stable audience these package names don't have, npm publishes exactly one tag per publish so a second tag would neednpm dist-tag add(which can't authenticate under OIDC trusted publishing — no long-lived token exists in this repo by design), and semver ranges already prevent any existing install from being moved onto an RC. Thenextchannel remains the right design for the bareprismapackage, whoselatestgenuinely must stay on v7; its v8 shim ships from prisma/prisma-cli.8.0.0-rc.1.1) for respins of a named RC — rejected. Semver orders them correctly but no major ecosystem package does this (Drizzle, React, and TypeScript all use a flat counter), and the flatrc.Ncounter makes ordering and automation trivial.bump-minorand adding a separate RC bump script — rejected; there is exactly one "advance to the next release version" operation and its meaning depends only on the current base's shape, so one script encoding the policy beats two scripts and a decision the maintainer must make each time.8.0.0-rc.1in this same PR — rejected to preserve the one-PR-per-release convention: merging a release bump is the publish trigger, and that merge should be its own reviewable event with its own release notes.Checklist
git commit -s) per the DCO. The DCO status check will block merge if any commit is missing aSigned-off-by:trailer.n/aif the change is doc-only / refactor with no behavioural delta).TML-NNNN: <sentence-case title>form (Linear ticket prefix + concise title naming the concrete deliverable). See.claude/skills/create-pr/SKILL.mdfor the full convention.n/a — internal only).Summary by CodeRabbit
New Features
latestchannel and generate pre-release GitHub Releases.Documentation
pnpm bump-versioncommand.