with one click
release
// Release one or more packages from this monorepo using the scripts in agent-files/scripts/release/. Activate when the user says "release", "/release", or asks to release specific packages (e.g. "/release dmk signer-eth").
// Release one or more packages from this monorepo using the scripts in agent-files/scripts/release/. Activate when the user says "release", "/release", or asks to release specific packages (e.g. "/release dmk signer-eth").
Backmerge the release branch into develop after the release PR has been merged to main. Activate when the user says "backmerge", "/backmerge", or asks to backmerge after a release PR merges.
How to create a changeset in this monorepo. Use when adding a new changeset, when the user invokes /changeset, or when committing changes that need a version bump.
Commit message convention for this repo (gitmoji + scope + capitalized message) enforced by the danger CI bot. Use whenever creating commits, when the user invokes /commit, or when fixing commit messages that failed CI.
| name | release |
| description | Release one or more packages from this monorepo using the scripts in agent-files/scripts/release/. Activate when the user says "release", "/release", or asks to release specific packages (e.g. "/release dmk signer-eth"). |
Release one or more packages from this monorepo using the scripts in agent-files/scripts/release/.
The following commands need network access, post-install scripts, or the GitHub CLI, so they will trigger a permission prompt (Claude Code) or must be run with required_permissions: ["all"] (Cursor):
pnpm exec zx agent-files/scripts/release/preflight.cjs (Step 1 — gh auth status)pnpm exec zx agent-files/scripts/release/changelog.cjs (Step 7 — GitHub API via gh)pnpm install --no-frozen-lockfile (Step 9 — post-install scripts, native deps)pnpm exec zx agent-files/scripts/release/create-pr.cjs (Step 11 — gh pr create)All other scripts (discover, set-private, pin-deps, bump, cleanup) run fine inside the sandbox.
Use these short names in the --packages flag. The user may use either aliases or full names.
| Alias | Full package name |
|---|---|
dmk | @ledgerhq/device-management-kit |
signer-eth | @ledgerhq/device-signer-kit-ethereum |
signer-btc | @ledgerhq/device-signer-kit-bitcoin |
signer-sol | @ledgerhq/device-signer-kit-solana |
signer-aleo | @ledgerhq/device-signer-kit-aleo |
signer-cosmos | @ledgerhq/device-signer-kit-cosmos |
signer-hyperliquid | @ledgerhq/device-signer-kit-hyperliquid |
signer-concordium | @ledgerhq/device-signer-kit-concordium |
signer-zcash | @ledgerhq/device-signer-kit-zcash |
signer-utils | @ledgerhq/signer-utils |
context-module | @ledgerhq/context-module |
transport-web-hid | @ledgerhq/device-transport-kit-web-hid |
transport-web-ble | @ledgerhq/device-transport-kit-web-ble |
transport-rn-ble | @ledgerhq/device-transport-kit-react-native-ble |
transport-rn-hid | @ledgerhq/device-transport-kit-react-native-hid |
transport-node-hid | @ledgerhq/device-transport-kit-node-hid |
transport-mockserver | @ledgerhq/device-transport-kit-mockserver |
transport-speculos | @ledgerhq/device-transport-kit-speculos |
mockserver-client | @ledgerhq/device-mockserver-client |
speculos-controller | @ledgerhq/speculos-device-controller |
keyring-protocol | @ledgerhq/device-trusted-app-kit-ledger-keyring-protocol |
ledger-wallet | @ledgerhq/dmk-ledger-wallet |
devtools-core | @ledgerhq/device-management-kit-devtools-core |
devtools-rozenite | @ledgerhq/device-management-kit-devtools-rozenite |
devtools-ui | @ledgerhq/device-management-kit-devtools-ui |
devtools-ws-common | @ledgerhq/device-management-kit-devtools-websocket-common |
devtools-ws-connector | @ledgerhq/device-management-kit-devtools-websocket-connector |
devtools-ws-server | @ledgerhq/device-management-kit-devtools-websocket-server |
All scripts live in agent-files/scripts/release/ and are run with pnpm exec zx.
Replace <PKGS> with a comma-separated list of aliases (e.g., dmk,signer-eth).
Important: Commit after every step that modifies files. This keeps the release branch bisectable and easy to review.
pnpm exec zx agent-files/scripts/release/preflight.cjs
pnpm exec zx agent-files/scripts/release/discover.cjs --packages <PKGS>
--packages is required. Pass the same comma-separated aliases the user requested (e.g. signer-sol,signer-eth).{ releasable, selected }.releasable[] lists every package with pending changesets in the repo. Each entry has name, displayName, version, bump (highest of major > minor > patch), and changesets.
| Package | Current version | Bump | Changesets |
|---------|----------------|------|------------|
| @ledgerhq/device-signer-kit-ethereum | 1.13.0 | minor | long-flies-try, tidy-onions-flow |
| @ledgerhq/signer-utils | 1.1.3 | minor | calm-ducks-love |
selected[] is the intersection of releasable and the requested aliases. Each row has from, to, bump, changesets, and depsNotReleased (workspace deps of this package that are NOT in the selected set).
| Package | From | To | Bump | Changesets |
|---------|------|----|------|------------|
| @ledgerhq/device-signer-kit-solana | 1.7.1 | 1.8.0 | minor | heavy-mangos-write, itchy-teams-join, ripe-suits-lie |
For each row where depsNotReleased is non-empty, add a sub-bullet block immediately below it:
Signer SOL has workspace deps that are NOT in this release:
- @ledgerhq/context-module (dependency)
- @ledgerhq/signer-utils (dependency)
- @ledgerhq/device-management-kit (peerDependency)
These deps will be pinned by pin-deps.cjs to their currently-published versions — confirm with the user that this is intended.
After the table, diff the requested aliases against selected[].name. If any requested package did not appear in selected, tell the user it has no pending changesets and will be skipped.
Wait for the user to confirm before proceeding. Do NOT continue until the user explicitly approves.
git checkout develop && git pull
git checkout -b release
pnpm exec zx agent-files/scripts/release/set-private.cjs --packages <PKGS>
private:false on target packages, private:true on everything else.Commit:
git add .
git commit -m "📦 (release): Set release scope to <packages>"
pnpm exec zx agent-files/scripts/release/pin-deps.cjs --packages <PKGS>
workspace:^ with ^<version> for deps pointing to non-released internal packages.workspace:^.Commit:
git add .
git commit -m "🔧 (release): Pin workspace dependencies"
pnpm exec zx agent-files/scripts/release/bump.cjs
package.json.Commit:
git add .
git commit -m "🔖 (release): Bump versions"
pnpm exec zx agent-files/scripts/release/changelog.cjs
CHANGELOG.md.Commit:
git add .
git commit -m "📝 (release): Generate changelogs"
pnpm exec zx agent-files/scripts/release/cleanup.cjs
.changeset/*.md files consumed by the release.Commit:
git add .
git commit -m "🔥 (release): Clean up consumed changesets"
pnpm install --no-frozen-lockfile
--no-frozen-lockfile flag is required because Step 5 pinned workspace deps (replacing workspace:^ with concrete versions), which makes the existing lockfile out of date.Commit:
git add .
git commit -m "🔧 (release): Update lockfile"
Update the version tables in apps/docs/pages/docs/getting-started.mdx to reflect the new versions of all released packages.
Commit:
git add .
git commit -m "📝 (release): Update getting-started versions"
pnpm exec zx agent-files/scripts/release/create-pr.cjs
main with a version summary body.Perform a documentation health check. This step does not block the release but surfaces issues for the user.
apps/docs/pages/docs/getting-started.mdx: Cross-check that every released package now shows its new version in the tables. Report any mismatches.README.md: Check that every released package appears in the package inventory tables (around lines 88-153). If a package is missing, warn the user.apps/docs/pages/docs/integration/migrations/. If none is found, remind the user that a migration guide may be needed.set-private.cjs fails on an unknown alias, check the alias table above or agent-files/scripts/release/config.cjs.bump.cjs reports "No changesets found", verify that .changeset/*.md files exist for the target packages.create-pr.cjs fails, ensure gh CLI is authenticated (gh auth status) and the branch is pushed.