From a64fce7e0297bfe1bce1b8c2bd96f7b5981eab5f Mon Sep 17 00:00:00 2001 From: Kristof Siket Date: Thu, 20 Aug 2026 14:52:46 +0200 Subject: [PATCH 1/5] feat: always run Composer through the unified Prisma CLI The platform is consolidating on the unified prisma CLI, which mounts the Composer command family as prisma composer. The standalone @prisma/composer-cli stops shipping, so the action stops choosing between CLIs: a repo with a local prisma bin runs it via bun run --bun; every other repo gets the pinned prisma package via bunx. The new prisma-version input pins that fallback; composer-version stays declared but is ignored, because removing an input breaks workflows that set it. Co-Authored-By: Claude Fable 5 --- .github/workflows/ci.yml | 2 +- README.md | 5 +-- action.yml | 5 ++- cli.mjs | 29 ++++++++++++++++ composer.mjs | 23 ------------- main.mjs | 35 +++++++++---------- tests/cli.test.mjs | 74 ++++++++++++++++++++++++++++++++++++++++ tests/composer.test.mjs | 32 ----------------- 8 files changed, 128 insertions(+), 77 deletions(-) create mode 100644 cli.mjs delete mode 100644 composer.mjs create mode 100644 tests/cli.test.mjs delete mode 100644 tests/composer.test.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a72f26..a036ec3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: ["runs.main: main.mjs", /^ main: main\.mjs$/m], ["runs.post: post.mjs", /^ post: post\.mjs$/m], ]; - for (const name of ["build-command", "install-command", "module", "mode", "stage", "composer-version", "working-directory", "api-url"]) { + for (const name of ["build-command", "install-command", "module", "mode", "stage", "prisma-version", "composer-version", "working-directory", "api-url"]) { checks.push([`input ${name}`, new RegExp(`^ ${name}:$`, "m")]); } for (const name of ["outcome", "build-id"]) { diff --git a/README.md b/README.md index f645d42..9c39ecc 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ An explicit token always wins over the OIDC exchange. ## How it works -Each run has three phases: install, build, and deploy. Your workflow owns checkout and the toolchain. The action runs your install and build commands exactly as configured, and it never inspects your repository to decide how to build. A repository with no build script — one that runs its source directly — sets `build-command: none` to skip the build phase. The deploy phase hands your built app to the [Prisma Composer](https://github.com/prisma/composer) CLI, running it under Bun. Bun must be on the runner PATH — add `oven-sh/setup-bun@v2` before this action. The generated Prisma deploy workflow includes that step automatically. +Each run has three phases: install, build, and deploy. Your workflow owns checkout and the toolchain. The action runs your install and build commands exactly as configured, and it never inspects your repository to decide how to build. A repository with no build script — one that runs its source directly — sets `build-command: none` to skip the build phase. The deploy phase hands your built app to the Composer commands of the unified [`prisma` CLI](https://www.npmjs.com/package/prisma), running it under Bun. Repositories with a `prisma` devDependency deploy with their own installed version; everything else uses the pinned `prisma-version` fallback fetched via bunx. Bun must be on the runner PATH — add `oven-sh/setup-bun@v2` before this action. The generated Prisma deploy workflow includes that step automatically. Deploy targets follow your branches: @@ -93,7 +93,8 @@ The credential resolves in order: an explicit `PRISMA_SERVICE_TOKEN` from the en | `module` | `module.ts` | Path to your app's Composer module. | | `mode` | `deploy` | `deploy` or `destroy`. | | `stage` | derived | Empty derives the stage from the branch: the default branch deploys to production, any other branch name becomes the stage. `destroy` requires a resolved stage. | -| `composer-version` | `0.7.0` | The Composer CLI version the action fetches via bunx when the repo has no local bin. From 0.7.0 the bin ships in `@prisma/composer-cli`; set to a `0.6.x` value only if you need the old package. | +| `prisma-version` | `8.0.0-rc.6` | The `prisma` package version the action fetches via bunx — the fallback for repositories that do not carry the `prisma` devDependency. Repositories that do carry it deploy with their own installed version. | +| `composer-version` | `0.7.0` | Deprecated and ignored: the action always runs the unified `prisma` CLI. Pin the bunx fallback with `prisma-version` instead. | | `working-directory` | `.` | Where install, build, and deploy run. | | `api-url` | `https://api.prisma.io` | Prisma API base URL for the OIDC credential exchange. | diff --git a/action.yml b/action.yml index 9202f6f..d606f5a 100644 --- a/action.yml +++ b/action.yml @@ -16,8 +16,11 @@ inputs: stage: description: Empty derives the stage from the branch (default branch deploys to production, any other branch name becomes the stage) default: "" + prisma-version: + description: The prisma package version the action fetches via bunx, as a fallback for repositories that do not carry the prisma devDependency; the default is a placeholder that must be bumped to the first prisma release embedding Composer 0.11 before this ships + default: "8.0.0-rc.6" composer-version: - description: The @prisma/composer-cli version the action fetches via bunx when the repo has no local bin (0.7.0+); use @prisma/composer for 0.6.x + description: "Deprecated and ignored: the action always runs the unified prisma CLI; pin the bunx fallback with prisma-version instead" default: "0.7.0" working-directory: description: Where install, build, and deploy run diff --git a/cli.mjs b/cli.mjs new file mode 100644 index 0000000..b70607e --- /dev/null +++ b/cli.mjs @@ -0,0 +1,29 @@ +/** + * Returns [cmd, args, logLabel] for running the Composer command family of + * the unified `prisma` CLI under Bun. + * + * The local bin runs as `bun run --bun prisma`, not `bun `: `--bun` + * puts a `node` → bun shim first on PATH, so the CLI and the converge child + * it spawns (a `#!/usr/bin/env node` launcher) both run under Bun. `bun + * ` runs only the CLI under Bun and leaves the child to Node, + * which cannot resolve the `./service.js` import to `service.ts`. + * + * @param {string} prismaVersion - `prisma` package version to fetch via bunx when the local bin is absent. + * @param {boolean} binExists - Whether node_modules/.bin/prisma exists in the working directory. + * @param {string[]} composerArgs - Arguments after `prisma composer`, e.g. ["deploy", "module.ts", "--stage", "x"]. + * @returns {[string, string[], string]} + */ +export function selectPrismaCliCommand(prismaVersion, binExists, composerArgs) { + if (binExists) { + return [ + "bun", + ["run", "--bun", "prisma", "composer", ...composerArgs], + "composer=local prisma CLI (bun run --bun)", + ]; + } + return [ + "bunx", + ["--bun", "-p", `prisma@${prismaVersion}`, "prisma", "composer", ...composerArgs], + `composer=prisma@${prismaVersion} (bunx fallback)`, + ]; +} diff --git a/composer.mjs b/composer.mjs deleted file mode 100644 index 06b42e5..0000000 --- a/composer.mjs +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Returns [cmd, leadArgs, logLabel] for running the Composer CLI under Bun. - * - * The local bin runs as `bun run --bun prisma-composer`, not `bun `: - * `--bun` puts a `node` → bun shim first on PATH, so the Composer CLI and the - * converge child it spawns (a `#!/usr/bin/env node` launcher) both run under - * Bun. `bun ` runs only the CLI under Bun and leaves the child - * to Node, which cannot resolve the `./service.js` import to `service.ts`. - * - * @param {string} composerVersion - @prisma/composer-cli version to fetch via bunx when the local bin is absent. - * @param {boolean} binExists - Whether node_modules/.bin/prisma-composer exists in the working directory. - * @returns {[string, string[], string]} - */ -export function selectComposerCommand(composerVersion, binExists) { - if (binExists) { - return ["bun", ["run", "--bun", "prisma-composer"], "composer=local bin (bun run --bun)"]; - } - return [ - "bunx", - ["--bun", "-p", `@prisma/composer-cli@${composerVersion}`, "prisma-composer"], - `composer=${composerVersion} (bunx fallback)`, - ]; -} diff --git a/main.mjs b/main.mjs index ad1765a..326064b 100644 --- a/main.mjs +++ b/main.mjs @@ -5,7 +5,7 @@ import { spawnSync } from "node:child_process"; import { appendFileSync, existsSync, readFileSync, writeSync } from "node:fs"; import { join, resolve } from "node:path"; import { selectBuildCommand } from "./build.mjs"; -import { selectComposerCommand } from "./composer.mjs"; +import { selectPrismaCliCommand } from "./cli.mjs"; import { resolveCredential } from "./credentials.mjs"; import { deployedUrlFromOutput } from "./deployment.mjs"; import { guardReport, makeReporter, mapPhase } from "./report.mjs"; @@ -103,7 +103,7 @@ async function runPhase(phase, command, args, capture = false) { const mode = input("mode") || "deploy"; const modulePath = input("module") || "module.ts"; -const composerVersion = input("composer-version") || "0.7.0"; +const prismaVersion = input("prisma-version") || "8.0.0-rc.6"; const workdir = resolve(process.env.GITHUB_WORKSPACE ?? ".", input("working-directory") || "."); const repository = process.env.GITHUB_REPOSITORY ?? ""; const branch = process.env.GITHUB_HEAD_REF || process.env.GITHUB_REF_NAME || ""; @@ -245,25 +245,24 @@ if (buildCommand === null) { // The stage reaches the argv array straight from the environment; it is // never interpolated into a shell string. // -// The CLI bin is named prisma-composer. From 0.7.0 it ships inside -// @prisma/composer-cli (previously @prisma/composer); there is no npm package -// named prisma-composer, so `npx prisma-composer@v` 404s. The repo's own -// install already provides the bin, so prefer the local bin under Bun; fall -// back to bunx fetching the pinned package when the repo does not carry it. -const localBin = join(workdir, "node_modules", ".bin", "prisma-composer"); -const [composerCmd, composerLead, composerLabel] = selectComposerCommand( - composerVersion, +// Composer ships inside the unified `prisma` CLI as the `composer` command +// family. Prefer the repo's own installed CLI; the bunx fallback keeps +// repositories generated before `prisma` became the devDependency deploying — +// they pin @prisma/composer-cli, carry no `prisma` bin, and their config has +// no `orm` section, which the unified CLI reads the same way. +const localBin = join(workdir, "node_modules", ".bin", "prisma"); +const composerArgs = + mode === "deploy" + ? ["deploy", modulePath, ...(stage ? ["--stage", stage] : [])] + : ["destroy", modulePath, "--stage", stage]; +const [cliCmd, cliArgs, cliLabel] = selectPrismaCliCommand( + prismaVersion, existsSync(localBin), + composerArgs, ); -log(composerLabel); -const composerArgs = [ - ...composerLead, - ...(mode === "deploy" - ? ["deploy", modulePath, ...(stage ? ["--stage", stage] : [])] - : ["destroy", modulePath, "--stage", stage]), -]; +log(cliLabel); -const deployOutput = await runPhase(mode, composerCmd, composerArgs, mode === "deploy"); +const deployOutput = await runPhase(mode, cliCmd, cliArgs, mode === "deploy"); if (reporter && buildId) { const deployedUrl = mode === "deploy" ? deployedUrlFromOutput(deployOutput) : null; diff --git a/tests/cli.test.mjs b/tests/cli.test.mjs new file mode 100644 index 0000000..21ded55 --- /dev/null +++ b/tests/cli.test.mjs @@ -0,0 +1,74 @@ +import assert from "node:assert/strict"; +import { test } from "node:test"; +import { selectPrismaCliCommand } from "../cli.mjs"; + +test("runs the local prisma CLI with bun run --bun when the bin exists", () => { + const [cmd, args, label] = selectPrismaCliCommand("8.0.0-rc.6", true, ["deploy", "module.ts"]); + assert.equal(cmd, "bun"); + assert.deepEqual(args, ["run", "--bun", "prisma", "composer", "deploy", "module.ts"]); + assert.equal(label, "composer=local prisma CLI (bun run --bun)"); +}); + +test("falls back to bunx with the input version when the bin is absent", () => { + const [cmd, args, label] = selectPrismaCliCommand("8.0.0-rc.6", false, ["deploy", "module.ts"]); + assert.equal(cmd, "bunx"); + assert.deepEqual(args, [ + "--bun", + "-p", + "prisma@8.0.0-rc.6", + "prisma", + "composer", + "deploy", + "module.ts", + ]); + assert.equal(label, "composer=prisma@8.0.0-rc.6 (bunx fallback)"); +}); + +test("deploy args pass through verbatim on the local CLI, stage included", () => { + const [, args] = selectPrismaCliCommand("8.1.0", true, [ + "deploy", + "app/module.ts", + "--stage", + "feat/x", + ]); + assert.deepEqual(args, [ + "run", + "--bun", + "prisma", + "composer", + "deploy", + "app/module.ts", + "--stage", + "feat/x", + ]); +}); + +test("destroy args pass through verbatim on the bunx fallback", () => { + const [, args] = selectPrismaCliCommand("8.1.0", false, [ + "destroy", + "module.ts", + "--stage", + "feat/x", + ]); + assert.deepEqual(args, [ + "--bun", + "-p", + "prisma@8.1.0", + "prisma", + "composer", + "destroy", + "module.ts", + "--stage", + "feat/x", + ]); +}); + +test("bunx fallback log label includes the exact version", () => { + const [, , label] = selectPrismaCliCommand("8.2.0", false, ["deploy", "module.ts"]); + assert.equal(label, "composer=prisma@8.2.0 (bunx fallback)"); +}); + +test("local CLI label is always the same string regardless of version", () => { + const [, , label] = selectPrismaCliCommand("8.2.0", true, ["deploy", "module.ts"]); + assert.equal(label, "composer=local prisma CLI (bun run --bun)"); +}); diff --git a/tests/composer.test.mjs b/tests/composer.test.mjs deleted file mode 100644 index 0194d71..0000000 --- a/tests/composer.test.mjs +++ /dev/null @@ -1,32 +0,0 @@ -import assert from "node:assert/strict"; -import { test } from "node:test"; -import { selectComposerCommand } from "../composer.mjs"; - -test("runs the local bin with bun run --bun when it exists", () => { - const [cmd, lead, label] = selectComposerCommand("0.9.0", true); - assert.equal(cmd, "bun"); - assert.deepEqual(lead, ["run", "--bun", "prisma-composer"]); - assert.equal(label, "composer=local bin (bun run --bun)"); -}); - -test("falls back to bunx with --bun when the local bin is absent", () => { - const [cmd, lead, label] = selectComposerCommand("0.9.0", false); - assert.equal(cmd, "bunx"); - assert.deepEqual(lead, [ - "--bun", - "-p", - "@prisma/composer-cli@0.9.0", - "prisma-composer", - ]); - assert.equal(label, "composer=0.9.0 (bunx fallback)"); -}); - -test("bunx fallback log label includes the exact version", () => { - const [, , label] = selectComposerCommand("0.7.5", false); - assert.equal(label, "composer=0.7.5 (bunx fallback)"); -}); - -test("local bin label is always the same string regardless of version", () => { - const [, , label] = selectComposerCommand("0.7.5", true); - assert.equal(label, "composer=local bin (bun run --bun)"); -}); From dca58c04c304f6ae2a464dc4ea8ded081bc504ce Mon Sep 17 00:00:00 2001 From: Kristof Siket Date: Thu, 20 Aug 2026 14:59:21 +0200 Subject: [PATCH 2/5] feat!: drop the composer-version input An undeclared input only produces a workflow warning, and a visible warning beats a silently ignored value. The unified CLI version comes from the repository's prisma devDependency, with prisma-version as the bunx fallback. --- .github/workflows/ci.yml | 2 +- README.md | 1 - action.yml | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a036ec3..3203eb3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: ["runs.main: main.mjs", /^ main: main\.mjs$/m], ["runs.post: post.mjs", /^ post: post\.mjs$/m], ]; - for (const name of ["build-command", "install-command", "module", "mode", "stage", "prisma-version", "composer-version", "working-directory", "api-url"]) { + for (const name of ["build-command", "install-command", "module", "mode", "stage", "prisma-version", "working-directory", "api-url"]) { checks.push([`input ${name}`, new RegExp(`^ ${name}:$`, "m")]); } for (const name of ["outcome", "build-id"]) { diff --git a/README.md b/README.md index 9c39ecc..96c79dd 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,6 @@ The credential resolves in order: an explicit `PRISMA_SERVICE_TOKEN` from the en | `mode` | `deploy` | `deploy` or `destroy`. | | `stage` | derived | Empty derives the stage from the branch: the default branch deploys to production, any other branch name becomes the stage. `destroy` requires a resolved stage. | | `prisma-version` | `8.0.0-rc.6` | The `prisma` package version the action fetches via bunx — the fallback for repositories that do not carry the `prisma` devDependency. Repositories that do carry it deploy with their own installed version. | -| `composer-version` | `0.7.0` | Deprecated and ignored: the action always runs the unified `prisma` CLI. Pin the bunx fallback with `prisma-version` instead. | | `working-directory` | `.` | Where install, build, and deploy run. | | `api-url` | `https://api.prisma.io` | Prisma API base URL for the OIDC credential exchange. | diff --git a/action.yml b/action.yml index d606f5a..5ce5715 100644 --- a/action.yml +++ b/action.yml @@ -19,9 +19,6 @@ inputs: prisma-version: description: The prisma package version the action fetches via bunx, as a fallback for repositories that do not carry the prisma devDependency; the default is a placeholder that must be bumped to the first prisma release embedding Composer 0.11 before this ships default: "8.0.0-rc.6" - composer-version: - description: "Deprecated and ignored: the action always runs the unified prisma CLI; pin the bunx fallback with prisma-version instead" - default: "0.7.0" working-directory: description: Where install, build, and deploy run default: "." From bb8ee98734a5c31da1e71b3d390bc48f27459a1b Mon Sep 17 00:00:00 2001 From: Kristof Siket Date: Thu, 20 Aug 2026 15:03:01 +0200 Subject: [PATCH 3/5] refactor: state the fallback's invariant in one line --- main.mjs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/main.mjs b/main.mjs index 326064b..6dc3f50 100644 --- a/main.mjs +++ b/main.mjs @@ -245,11 +245,7 @@ if (buildCommand === null) { // The stage reaches the argv array straight from the environment; it is // never interpolated into a shell string. // -// Composer ships inside the unified `prisma` CLI as the `composer` command -// family. Prefer the repo's own installed CLI; the bunx fallback keeps -// repositories generated before `prisma` became the devDependency deploying — -// they pin @prisma/composer-cli, carry no `prisma` bin, and their config has -// no `orm` section, which the unified CLI reads the same way. +// The bunx fallback covers repositories without a prisma devDependency. const localBin = join(workdir, "node_modules", ".bin", "prisma"); const composerArgs = mode === "deploy" From 94330c10217f07b770d0140282cf80d25d883258 Mon Sep 17 00:00:00 2001 From: Kristof Siket Date: Thu, 20 Aug 2026 15:04:46 +0200 Subject: [PATCH 4/5] refactor: document the fallback where it lives --- cli.mjs | 3 ++- main.mjs | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cli.mjs b/cli.mjs index b70607e..c292107 100644 --- a/cli.mjs +++ b/cli.mjs @@ -1,6 +1,7 @@ /** * Returns [cmd, args, logLabel] for running the Composer command family of - * the unified `prisma` CLI under Bun. + * the unified `prisma` CLI under Bun. The bunx fallback covers repositories + * without a `prisma` devDependency. * * The local bin runs as `bun run --bun prisma`, not `bun `: `--bun` * puts a `node` → bun shim first on PATH, so the CLI and the converge child diff --git a/main.mjs b/main.mjs index 6dc3f50..2abe70f 100644 --- a/main.mjs +++ b/main.mjs @@ -245,7 +245,6 @@ if (buildCommand === null) { // The stage reaches the argv array straight from the environment; it is // never interpolated into a shell string. // -// The bunx fallback covers repositories without a prisma devDependency. const localBin = join(workdir, "node_modules", ".bin", "prisma"); const composerArgs = mode === "deploy" From bc9bbdab08ce12a2f33266664d9b7914ed259ca2 Mon Sep 17 00:00:00 2001 From: Kristof Siket Date: Fri, 21 Aug 2026 10:49:39 +0200 Subject: [PATCH 5/5] feat: default the prisma fallback to 8.0.0-rc.7 First release whose embedded Composer reads the generated files. --- README.md | 2 +- action.yml | 4 ++-- main.mjs | 2 +- tests/cli.test.mjs | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 96c79dd..aa665f3 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ The credential resolves in order: an explicit `PRISMA_SERVICE_TOKEN` from the en | `module` | `module.ts` | Path to your app's Composer module. | | `mode` | `deploy` | `deploy` or `destroy`. | | `stage` | derived | Empty derives the stage from the branch: the default branch deploys to production, any other branch name becomes the stage. `destroy` requires a resolved stage. | -| `prisma-version` | `8.0.0-rc.6` | The `prisma` package version the action fetches via bunx — the fallback for repositories that do not carry the `prisma` devDependency. Repositories that do carry it deploy with their own installed version. | +| `prisma-version` | `8.0.0-rc.7` | The `prisma` package version the action fetches via bunx — the fallback for repositories that do not carry the `prisma` devDependency. Repositories that do carry it deploy with their own installed version. | | `working-directory` | `.` | Where install, build, and deploy run. | | `api-url` | `https://api.prisma.io` | Prisma API base URL for the OIDC credential exchange. | diff --git a/action.yml b/action.yml index 5ce5715..24f5e32 100644 --- a/action.yml +++ b/action.yml @@ -17,8 +17,8 @@ inputs: description: Empty derives the stage from the branch (default branch deploys to production, any other branch name becomes the stage) default: "" prisma-version: - description: The prisma package version the action fetches via bunx, as a fallback for repositories that do not carry the prisma devDependency; the default is a placeholder that must be bumped to the first prisma release embedding Composer 0.11 before this ships - default: "8.0.0-rc.6" + description: The prisma package version the action fetches via bunx, as a fallback for repositories that do not carry the prisma devDependency + default: "8.0.0-rc.7" working-directory: description: Where install, build, and deploy run default: "." diff --git a/main.mjs b/main.mjs index 2abe70f..c734ff1 100644 --- a/main.mjs +++ b/main.mjs @@ -103,7 +103,7 @@ async function runPhase(phase, command, args, capture = false) { const mode = input("mode") || "deploy"; const modulePath = input("module") || "module.ts"; -const prismaVersion = input("prisma-version") || "8.0.0-rc.6"; +const prismaVersion = input("prisma-version") || "8.0.0-rc.7"; const workdir = resolve(process.env.GITHUB_WORKSPACE ?? ".", input("working-directory") || "."); const repository = process.env.GITHUB_REPOSITORY ?? ""; const branch = process.env.GITHUB_HEAD_REF || process.env.GITHUB_REF_NAME || ""; diff --git a/tests/cli.test.mjs b/tests/cli.test.mjs index 21ded55..00f2480 100644 --- a/tests/cli.test.mjs +++ b/tests/cli.test.mjs @@ -3,25 +3,25 @@ import { test } from "node:test"; import { selectPrismaCliCommand } from "../cli.mjs"; test("runs the local prisma CLI with bun run --bun when the bin exists", () => { - const [cmd, args, label] = selectPrismaCliCommand("8.0.0-rc.6", true, ["deploy", "module.ts"]); + const [cmd, args, label] = selectPrismaCliCommand("8.0.0-rc.7", true, ["deploy", "module.ts"]); assert.equal(cmd, "bun"); assert.deepEqual(args, ["run", "--bun", "prisma", "composer", "deploy", "module.ts"]); assert.equal(label, "composer=local prisma CLI (bun run --bun)"); }); test("falls back to bunx with the input version when the bin is absent", () => { - const [cmd, args, label] = selectPrismaCliCommand("8.0.0-rc.6", false, ["deploy", "module.ts"]); + const [cmd, args, label] = selectPrismaCliCommand("8.0.0-rc.7", false, ["deploy", "module.ts"]); assert.equal(cmd, "bunx"); assert.deepEqual(args, [ "--bun", "-p", - "prisma@8.0.0-rc.6", + "prisma@8.0.0-rc.7", "prisma", "composer", "deploy", "module.ts", ]); - assert.equal(label, "composer=prisma@8.0.0-rc.6 (bunx fallback)"); + assert.equal(label, "composer=prisma@8.0.0-rc.7 (bunx fallback)"); }); test("deploy args pass through verbatim on the local CLI, stage included", () => {