Skip to content

Commit 40b6855

Browse files
The CLI publishes as prisma, and this release is 8.0.0-rc.3 (#191)
## Before and after ```bash # before $ npm install -g prisma@next npm error notarget No matching version found for prisma@next # `prisma` on npm carries only the v7 train; nothing from this repo publishes under it. # after (on merge) $ npm install -g prisma@next && prisma --version prisma 8.0.0-rc.3 ``` ## The decision The `prisma` name is ours now — you configured OIDC trusted publishing on the package — so this adds the package that uses it. Rollout-plan step 4, which S7 deferred until the name was available. `packages/prisma` is **the same shell under the `prisma` bin, not a second implementation.** tsdown bundles `@prisma/cli`'s source in, exactly as it already bundles the private telemetry package, so a command cannot behave differently depending on which name a user installed. Its published dependency set matches the shell's, and `@prisma/cli` gains one export — its bin entry — so the bundling has something to name. Both names publish from one run: engine first, `@prisma/cli`, then `prisma` last (dependents after dependencies). Both are in the dry-run path too. ## What the checks now cover The conformance run treats the new tarball on the same terms as the others — packed output imports only what it declares, the tarball installs into a clean sandbox, and the bin named `prisma` starts there on plain Node. Verified against the tarball that would actually ship: ```text name: prisma 8.0.0-rc.3 bin: {"prisma":"./dist/prisma.js"} engine dep: 0.1.1 no workspace: leaks: true ``` ## Scope of the release Root version is `8.0.0-rc.3`, so merging this publishes under **`next`**. `prisma@latest` stays on v7 and is untouched — moving `latest` remains a separate deliberate act (`docs/oss/versioning.md`). Three pin exceptions still ride along, unchanged: composer and the ORM toolchain pin engine `0.0.9` in their currently-published versions. Their adaptations to `0.1.1` are merged/approved but not yet released, so this release still resolves those older engines. The exceptions are keyed on the observed versions and die when the two products publish — that is the next release, not this one. ## Alternatives considered **A thin wrapper depending on `@prisma/cli`.** Its `exports` map exposes nothing importable, so a wrapper would have nothing to call; adding a runtime export surface to publish a bin is worse than bundling. **Renaming `@prisma/cli` to `prisma`.** Breaks every existing install of the scoped name, which the rollout plan keeps alive until the cutover deprecates it deliberately. **Waiting for the two product releases first.** Would delay proving the pipeline for no gain: `next` is a channel nobody lands on by accident, and the clean-pin release follows within hours. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent 5b9dbc6 commit 40b6855

17 files changed

Lines changed: 496 additions & 47 deletions

File tree

.github/workflows/publish.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ name: Publish to npm
2323
# - workflow_dispatch → publish `<base>`
2424
# under the chosen dist-tag (default `latest`); also the dry-run path.
2525
#
26-
# Scope: publishes `@prisma/cli-engine` then `@prisma/cli` (the cli
27-
# depends on the engine, so the engine goes first). The engine versions
26+
# Scope: publishes `@prisma/cli-engine`, then `@prisma/cli`, then
27+
# `prisma` — the unscoped name is the same shell under the `prisma` bin,
28+
# and it goes last because it carries the whole tree (dependents after
29+
# dependencies). The engine versions
2830
# INDEPENDENTLY of the lockstep (ADR 0004, operator 2026-08-13): it
2931
# publishes at whatever version its own manifest carries, and because
3032
# an already-published version is treated as done (see publish_one), an
@@ -186,6 +188,7 @@ jobs:
186188
run: |
187189
pnpm --filter @prisma/cli-engine publish --tag "${{ steps.version.outputs.tag }}" --access public --no-git-checks --dry-run
188190
pnpm --filter @prisma/cli publish --tag "${{ steps.version.outputs.tag }}" --access public --no-git-checks --dry-run
191+
pnpm --filter prisma publish --tag "${{ steps.version.outputs.tag }}" --access public --no-git-checks --dry-run
189192
190193
# A rerun (or a re-publish dispatch) meets versions that are
191194
# already on the registry. npm refuses to publish over them —
@@ -214,6 +217,7 @@ jobs:
214217
}
215218
publish_one @prisma/cli-engine
216219
publish_one @prisma/cli
220+
publish_one prisma
217221
218222
# Emit a GitHub Release for releases only — runs whose dist-tag is
219223
# the canonical one for their version (`next` on the RC line,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "prisma-cli",
3-
"version": "8.0.0-rc.2",
3+
"version": "8.0.0-rc.3",
44
"private": true,
55
"engines": {
66
"node": ">=24"

packages/cli-conformance/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@repo/cli-conformance",
33
"private": true,
4-
"version": "8.0.0-rc.2",
4+
"version": "8.0.0-rc.3",
55
"description": "Reusable conformance checks for the engine's consumers: import purity over built output, config-section validators that never throw, and verification of the tarballs a registry would receive. Depends on no package it checks.",
66
"type": "module",
77
"exports": {
@@ -23,7 +23,7 @@
2323
"test": "pnpm run typecheck && vitest run"
2424
},
2525
"devDependencies": {
26-
"@repo/tsconfig": "workspace:8.0.0-rc.2",
26+
"@repo/tsconfig": "workspace:8.0.0-rc.3",
2727
"@types/node": "^22.19.19",
2828
"es-module-lexer": "^2.1.0",
2929
"tsx": "^4.22.4",

packages/cli-engine/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@
5555
"string-width": "^8.2.1"
5656
},
5757
"devDependencies": {
58-
"@repo/cli-conformance": "workspace:8.0.0-rc.2",
59-
"@repo/tsconfig": "workspace:8.0.0-rc.2",
58+
"@repo/cli-conformance": "workspace:8.0.0-rc.3",
59+
"@repo/tsconfig": "workspace:8.0.0-rc.3",
6060
"@types/node": "^22.19.19",
6161
"ci-info": "^4.3.1",
6262
"tsdown": "^0.21.10",

packages/cli-telemetry/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@repo/cli-telemetry",
33
"private": true,
4-
"version": "8.0.0-rc.2",
4+
"version": "8.0.0-rc.3",
55
"description": "CLI telemetry child sender: the detached subprocess the engine hands a composed payload to, its system probes, and the POST",
66
"type": "module",
77
"sideEffects": [
@@ -35,7 +35,7 @@
3535
"@vercel/detect-agent": "^1.2.3"
3636
},
3737
"devDependencies": {
38-
"@repo/tsconfig": "workspace:8.0.0-rc.2",
38+
"@repo/tsconfig": "workspace:8.0.0-rc.3",
3939
"@types/node": "^22.19.19",
4040
"tsdown": "^0.21.10",
4141
"typescript": "^6.0.3",

packages/cli/package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
{
22
"name": "@prisma/cli",
3-
"version": "8.0.0-rc.2",
3+
"version": "8.0.0-rc.3",
44
"description": "Command-line interface for the Prisma Developer Platform.",
55
"type": "module",
66
"bin": {
77
"prisma-cli": "./dist/cli.js"
88
},
99
"exports": {
10-
"./package.json": "./package.json"
10+
"./package.json": "./package.json",
11+
"./src/bin": "./src/bin.ts"
1112
},
1213
"files": [
1314
"dist",
@@ -60,9 +61,9 @@
6061
"open": "^11.0.0"
6162
},
6263
"devDependencies": {
63-
"@repo/cli-conformance": "workspace:8.0.0-rc.2",
64-
"@repo/cli-telemetry": "workspace:8.0.0-rc.2",
65-
"@repo/tsconfig": "workspace:8.0.0-rc.2",
64+
"@repo/cli-conformance": "workspace:8.0.0-rc.3",
65+
"@repo/cli-telemetry": "workspace:8.0.0-rc.3",
66+
"@repo/tsconfig": "workspace:8.0.0-rc.3",
6667
"@types/node": "^22.19.19",
6768
"tsdown": "^0.21.10",
6869
"tsx": "^4.22.4",

packages/cli/scripts/conformance.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import {
3333

3434
const CLI_DIR = fileURLToPath(new URL("..", import.meta.url));
3535
const ENGINE_DIR = join(CLI_DIR, "..", "cli-engine");
36+
const PRISMA_DIR = join(CLI_DIR, "..", "prisma");
3637
// At the REPO ROOT, not inside this package: a sandbox node_modules of
3738
// ~440 packages inside packages/cli slows vitest's file crawl enough to
3839
// time out unrelated tests.
@@ -51,13 +52,19 @@ async function importPurity(): Promise<readonly Finding[]> {
5152
manifest: await manifest(CLI_DIR),
5253
requiredSpecifiers: ["@prisma/cli-engine", "@prisma/composer/family"],
5354
});
55+
const unscoped = checkImportPurity({
56+
label: "prisma",
57+
output: await sweepBuiltOutput(join(PRISMA_DIR, "dist")),
58+
manifest: await manifest(PRISMA_DIR),
59+
requiredSpecifiers: ["@prisma/cli-engine", "@prisma/composer/family"],
60+
});
5461
const engine = checkImportPurity({
5562
label: "@prisma/cli-engine",
5663
output: await sweepBuiltOutput(join(ENGINE_DIR, "dist")),
5764
manifest: await manifest(ENGINE_DIR),
5865
requiredSpecifiers: ["@stricli/core"],
5966
});
60-
return [...shell, ...engine];
67+
return [...shell, ...unscoped, ...engine];
6168
}
6269

6370
function validatorNoThrow(): readonly Finding[] {
@@ -78,6 +85,7 @@ async function tarball(): Promise<readonly Finding[]> {
7885
{
7986
packages: [
8087
{ name: "@prisma/cli", dir: CLI_DIR },
88+
{ name: "prisma", dir: PRISMA_DIR },
8189
{ name: "@prisma/cli-engine", dir: ENGINE_DIR },
8290
],
8391
shellPackage: "@prisma/cli",

packages/compute/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"test": "vitest run"
4343
},
4444
"devDependencies": {
45-
"@repo/tsconfig": "workspace:*",
45+
"@repo/tsconfig": "workspace:8.0.0-rc.3",
4646
"@types/node": "^22.19.19",
4747
"tsdown": "^0.21.10",
4848
"typescript": "^6.0.3",

packages/prisma/LICENSE

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
Apache License
2+
Version 2.0, January 2004
3+
http://www.apache.org/licenses/
4+
5+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6+
7+
1. Definitions.
8+
9+
"License" shall mean the terms and conditions for use, reproduction, and
10+
distribution as defined by Sections 1 through 9 of this document.
11+
12+
"Licensor" shall mean the copyright owner or entity authorized by the copyright
13+
owner that is granting the License.
14+
15+
"Legal Entity" shall mean the union of the acting entity and all other entities
16+
that control, are controlled by, or are under common control with that entity.
17+
For the purposes of this definition, "control" means (i) the power, direct or
18+
indirect, to cause the direction or management of such entity, whether by
19+
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
20+
outstanding shares, or (iii) beneficial ownership of such entity.
21+
22+
"You" (or "Your") shall mean an individual or Legal Entity exercising
23+
permissions granted by this License.
24+
25+
"Source" form shall mean the preferred form for making modifications, including
26+
but not limited to software source code, documentation source, and configuration
27+
files.
28+
29+
"Object" form shall mean any form resulting from mechanical transformation or
30+
translation of a Source form, including but not limited to compiled object code,
31+
generated documentation, and conversions to other media types.
32+
33+
"Work" shall mean the work of authorship, whether in Source or Object form, made
34+
available under the License, as indicated by a copyright notice that is included
35+
in or attached to the work.
36+
37+
"Derivative Works" shall mean any work, whether in Source or Object form, that
38+
is based on (or derived from) the Work and for which the editorial revisions,
39+
annotations, elaborations, or other modifications represent, as a whole, an
40+
original work of authorship. For the purposes of this License, Derivative Works
41+
shall not include works that remain separable from, or merely link (or bind by
42+
name) to the interfaces of, the Work and Derivative Works thereof.
43+
44+
"Contribution" shall mean any work of authorship, including the original version
45+
of the Work and any modifications or additions to that Work or Derivative Works
46+
thereof, that is intentionally submitted to Licensor for inclusion in the Work by
47+
the copyright owner or by an individual or Legal Entity authorized to submit on
48+
behalf of the copyright owner. For the purposes of this definition, "submitted"
49+
means any form of electronic, verbal, or written communication sent to the
50+
Licensor or its representatives, including but not limited to communication on
51+
electronic mailing lists, source code control systems, and issue tracking
52+
systems that are managed by, or on behalf of, the Licensor for the purpose of
53+
discussing and improving the Work, but excluding communication that is
54+
conspicuously marked or otherwise designated in writing by the copyright owner
55+
as "Not a Contribution."
56+
57+
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
58+
of whom a Contribution has been received by Licensor and subsequently
59+
incorporated within the Work.
60+
61+
2. Grant of Copyright License. Subject to the terms and conditions of this
62+
License, each Contributor hereby grants to You a perpetual, worldwide,
63+
non-exclusive, no-charge, royalty-free, irrevocable copyright license to
64+
reproduce, prepare Derivative Works of, publicly display, publicly perform,
65+
sublicense, and distribute the Work and such Derivative Works in Source or Object
66+
form.
67+
68+
3. Grant of Patent License. Subject to the terms and conditions of this License,
69+
each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
70+
no-charge, royalty-free, irrevocable (except as stated in this section) patent
71+
license to make, have made, use, offer to sell, sell, import, and otherwise
72+
transfer the Work, where such license applies only to those patent claims
73+
licensable by such Contributor that are necessarily infringed by their
74+
Contribution(s) alone or by combination of their Contribution(s) with the Work to
75+
which such Contribution(s) was submitted. If You institute patent litigation
76+
against any entity (including a cross-claim or counterclaim in a lawsuit)
77+
alleging that the Work or a Contribution incorporated within the Work
78+
constitutes direct or contributory patent infringement, then any patent licenses
79+
granted to You under this License for that Work shall terminate as of the date
80+
such litigation is filed.
81+
82+
4. Redistribution. You may reproduce and distribute copies of the Work or
83+
Derivative Works thereof in any medium, with or without modifications, and in
84+
Source or Object form, provided that You meet the following conditions:
85+
86+
(a) You must give any other recipients of the Work or Derivative Works a copy of
87+
this License; and
88+
89+
(b) You must cause any modified files to carry prominent notices stating that You
90+
changed the files; and
91+
92+
(c) You must retain, in the Source form of any Derivative Works that You
93+
distribute, all copyright, patent, trademark, and attribution notices from the
94+
Source form of the Work, excluding those notices that do not pertain to any part
95+
of the Derivative Works; and
96+
97+
(d) If the Work includes a "NOTICE" text file as part of its distribution, then
98+
any Derivative Works that You distribute must include a readable copy of the
99+
attribution notices contained within such NOTICE file, excluding those notices
100+
that do not pertain to any part of the Derivative Works, in at least one of the
101+
following places: within a NOTICE text file distributed as part of the Derivative
102+
Works; within the Source form or documentation, if provided along with the
103+
Derivative Works; or, within a display generated by the Derivative Works, if and
104+
wherever such third-party notices normally appear. The contents of the NOTICE
105+
file are for informational purposes only and do not modify the License. You may
106+
add Your own attribution notices within Derivative Works that You distribute,
107+
alongside or as an addendum to the NOTICE text from the Work, provided that such
108+
additional attribution notices cannot be construed as modifying the License.
109+
110+
You may add Your own copyright statement to Your modifications and may provide
111+
additional or different license terms and conditions for use, reproduction, or
112+
distribution of Your modifications, or for any such Derivative Works as a whole,
113+
provided Your use, reproduction, and distribution of the Work otherwise complies
114+
with the conditions stated in this License.
115+
116+
5. Submission of Contributions. Unless You explicitly state otherwise, any
117+
Contribution intentionally submitted for inclusion in the Work by You to the
118+
Licensor shall be under the terms and conditions of this License, without any
119+
additional terms or conditions. Notwithstanding the above, nothing herein shall
120+
supersede or modify the terms of any separate license agreement you may have
121+
executed with Licensor regarding such Contributions.
122+
123+
6. Trademarks. This License does not grant permission to use the trade names,
124+
trademarks, service marks, or product names of the Licensor, except as required
125+
for reasonable and customary use in describing the origin of the Work and
126+
reproducing the content of the NOTICE file.
127+
128+
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in
129+
writing, Licensor provides the Work (and each Contributor provides its
130+
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
131+
either express or implied, including, without limitation, any warranties or
132+
conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
133+
PARTICULAR PURPOSE. You are solely responsible for determining the
134+
appropriateness of using or redistributing the Work and assume any risks
135+
associated with Your exercise of permissions under this License.
136+
137+
8. Limitation of Liability. In no event and under no legal theory, whether in
138+
tort (including negligence), contract, or otherwise, unless required by
139+
applicable law (such as deliberate and grossly negligent acts) or agreed to in
140+
writing, shall any Contributor be liable to You for damages, including any
141+
direct, indirect, special, incidental, or consequential damages of any character
142+
arising as a result of this License or out of the use or inability to use the
143+
Work (including but not limited to damages for loss of goodwill, work stoppage,
144+
computer failure or malfunction, or any and all other commercial damages or
145+
losses), even if such Contributor has been advised of the possibility of such
146+
damages.
147+
148+
9. Accepting Warranty or Additional Liability. While redistributing the Work or
149+
Derivative Works thereof, You may choose to offer, and charge a fee for,
150+
acceptance of support, warranty, indemnity, or other liability obligations and/or
151+
rights consistent with this License. However, in accepting such obligations, You
152+
may act only on Your own behalf and on Your sole responsibility, not on behalf of
153+
any other Contributor, and only if You agree to indemnify, defend, and hold each
154+
Contributor harmless for any liability incurred by, or claims asserted against,
155+
such Contributor by reason of your accepting any such warranty or additional
156+
liability.
157+
158+
END OF TERMS AND CONDITIONS

0 commit comments

Comments
 (0)