feat: always run Composer through the unified Prisma CLI - #11
Merged
Conversation
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 <noreply@anthropic.com>
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.
kristof-siket
marked this pull request as ready for review
August 20, 2026 15:01
First release whose embedded Composer reads the generated files.
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.
Note
Ready to merge.
prisma@8.0.0-rc.7is published embedding Composer 0.11.0 (verified on npm), and theprisma-versiondefault here points at that release. This PR merges before pdp-control-plane#4969, which waits for this action to ship.Release steps after merge: smoke-test one fixture repository with its workflow pinned to the merge SHA (exercises the
bunx prisma@8.0.0-rc.7fallback), then move thev1tag. Movingv1migrates existing repositories off the dying@prisma/composer-clipath in place; their workflows need no edits.Why
The platform is consolidating on the unified
prismaCLI (Prisma 8), which mounts the Composer command family asprisma composer deploy|destroy …. The standalone@prisma/composer-cliwill stop shipping, and generated setup PRs will installprismaas the devDependency instead.So the action stops choosing between CLIs. #10 proposed probing for the unified CLI and keeping both paths alive; with the consolidation decided, there is only one CLI to run. Every deploy and destroy now goes through
prisma composer.What
composer-versionis removed (not deprecated): an undeclared input only warns in workflow runs, and a visible warning beats a silently ignored value. Existing workflows that set it keep running.main.mjs: the selection keys offnode_modules/.bin/prismain the working directory.bun run --bun prisma composer <deploy|destroy> …(log labelcomposer=local prisma CLI (bun run --bun)).bunx --bun -p prisma@<prisma-version> prisma composer <deploy|destroy> …(label names the version).--bunstays on both paths: the converge child Composer spawns must run under Bun (fix: run the local Composer bin with bun run --bun so the converge child runs under Bun too #8). Stage and module still travel as argv-array entries, never through a shell.cli.mjsreplacescomposer.mjs;tests/cli.test.mjsreplacestests/composer.test.mjswith the same node:test style — local bin →bun run, absent →bunxwith the input version, and verbatim arg pass-through for deploy and destroy.action.yml: newprisma-versioninput, defaulting to the released8.0.0-rc.7.composer-versionis removed from the declared inputs.README.md: phases paragraph and inputs table updated. Repositories with aprismadevDependency deploy with their own installed version; everything else uses the pinned fallback.ci.yml: the action.yml sanity check now also requiresprisma-version.Untouched:
build-command: none, OIDC/credential resolution, build reporting, and the post-step teardown wiring.Compatibility with pre-swap repositories
Repositories generated before the devDependency swap pin
@prisma/composer-cliand carry noprismabin, so they take the bunx fallback. Theirprisma-composer.config.tsfiles have noormsection, and the unified CLI reads them the same way — they keep deploying without a regenerated setup PR.composer-versionis not removed: deleting a declared input is a breaking change for existing workflows that set it (GitHub warns on unexpected inputs). It stays declared with a deprecation line in its description and is never read.Open question for the operator
Should the bunx fallback be removed once the fleet regenerates onto the
prismadevDependency, or kept permanently for hand-written workflows that never carry a local CLI? Removing it later makes the local bin a hard requirement; keeping it meansprisma-versionneeds occasional bumps.Tests
node --test tests/*.test.mjs— 45 tests, all pass (was 44: −4 composer selection, +5 CLI selection).node --check main.mjs / post.mjs / credentials.mjs— pass;action.ymlandci.ymlparse, and the updated sanity check passes.main.mjswith stubbedbun/bunxon PATH (the same drill as feat: run Composer under Bun for all repos #7/fix: run the local Composer bin with bun run --bun so the converge child runs under Bun too #8):$ bun run --bun prisma composer deploy module.ts --stage feat/smoke, exit 0.$ bunx --bun -p prisma@8.0.0-rc.7 prisma composer destroy module.ts --stage feat/smoke, exit 0.Release (after the blockers clear)
Tag a new minor and move
v1, as with previous interface changes. Generated workflows need no edit; the CLI swap arrives through the moved tag.🤖 Generated with Claude Code