@varlock/bumpy 1.8.1 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/{add-BL_7iHAo.mjs → add-t_nY85Lo.mjs} +3 -3
- package/dist/{apply-release-plan-DncfboRW.mjs → apply-release-plan-D9wl4Q0H.mjs} +2 -2
- package/dist/{bump-file-BbiqKKZg.mjs → bump-file-B_7P2UZO.mjs} +1 -1
- package/dist/{changelog-CFWf9s2q.mjs → changelog-LaYJ7aUa.mjs} +3 -3
- package/dist/{changelog-github-T5LqaTwV.mjs → changelog-github-BXEhPeiW.mjs} +2 -2
- package/dist/{check-CcRjFgSY.mjs → check-0vJJPD24.mjs} +2 -2
- package/dist/{ci-BWxlSnSN.mjs → ci-CHIpKtvI.mjs} +9 -9
- package/dist/cli.mjs +12 -12
- package/dist/{config-gMu1z0bz.mjs → config-48u1NbKv.mjs} +1 -1
- package/dist/{generate-BfLL5AfI.mjs → generate-zNgPV9rR.mjs} +2 -2
- package/dist/index.d.mts +14 -0
- package/dist/index.mjs +7 -7
- package/dist/{publish-CbvWNkjU.mjs → publish-CI7o7EEI.mjs} +7 -7
- package/dist/{publish-pipeline-D99nLAtI.mjs → publish-pipeline-DpmTVsnX.mjs} +36 -9
- package/dist/{release-plan-7ApKPR6T.mjs → release-plan-s1o52Rc-.mjs} +2 -2
- package/dist/{status-C02g_WIx.mjs → status-BvemGN6p.mjs} +4 -4
- package/dist/{types-CAwBhUsn.mjs → types-DMdVeeEm.mjs} +2 -0
- package/dist/{version-DFCrc_fz.mjs → version-C7uFKayK.mjs} +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -50,7 +50,7 @@ Fixed locale fallback logic in utils.
|
|
|
50
50
|
|
|
51
51
|
- **All package managers** - npm, pnpm, yarn, and bun workspaces
|
|
52
52
|
- **Smart dependency propagation** - configurable rules for how version bumps cascade through your dependency graph (see [version propagation docs](https://github.com/dmno-dev/bumpy/blob/main/docs/version-propagation.md))
|
|
53
|
-
- **Pack-then-publish** - by default, publishes to npm (resolving `workspace:` and `catalog:` protocols, with OIDC/provenance support). Per-package custom publish commands let you target anything - VSCode extensions, Docker images, JSR, private registries, etc.
|
|
53
|
+
- **Pack-then-publish** - by default, publishes to npm (resolving `workspace:` and `catalog:` protocols, with OIDC/provenance support). Supports [npm staged publishing](https://docs.npmjs.com/staged-publishing) for 2FA-gated releases. Per-package custom publish commands let you target anything - VSCode extensions, Docker images, JSR, private registries, etc.
|
|
54
54
|
- **Flexible package management** - include/exclude any package individually via per-package config, glob patterns, or `privatePackages` setting
|
|
55
55
|
- **Non-interactive CLI** - `bumpy add` works fully non-interactively for CI/CD and AI-assisted development
|
|
56
56
|
- **Aggregated GitHub releases** - optionally create a single consolidated release instead of one per package
|
|
@@ -121,7 +121,7 @@ jobs:
|
|
|
121
121
|
permissions:
|
|
122
122
|
contents: write
|
|
123
123
|
pull-requests: write
|
|
124
|
-
id-token: write # required for npm trusted publishing (OIDC)
|
|
124
|
+
id-token: write # required for npm trusted publishing (OIDC) and provenance
|
|
125
125
|
steps:
|
|
126
126
|
- uses: actions/checkout@v6
|
|
127
127
|
with:
|
|
@@ -129,7 +129,8 @@ jobs:
|
|
|
129
129
|
- uses: oven-sh/setup-bun@v2
|
|
130
130
|
- uses: actions/setup-node@v6
|
|
131
131
|
with:
|
|
132
|
-
node-version:
|
|
132
|
+
node-version: latest
|
|
133
|
+
- run: npm install -g npm@latest # ensure npm >= 11.15.0 for OIDC/staged publishing
|
|
133
134
|
- run: bun install
|
|
134
135
|
- run: bunx @varlock/bumpy ci release
|
|
135
136
|
env:
|
|
@@ -137,7 +138,7 @@ jobs:
|
|
|
137
138
|
BUMPY_GH_TOKEN: ${{ secrets.BUMPY_GH_TOKEN }} # PAT so that version PR triggers CI
|
|
138
139
|
```
|
|
139
140
|
|
|
140
|
-
> **Trusted publishing setup:** Configure each package on [npmjs.com](https://docs.npmjs.com/trusted-publishers/) → Package Settings → Trusted Publishers → GitHub Actions. Specify your org/user, repo, and the workflow filename (`bumpy-release.yml`). No `NPM_TOKEN` secret needed.
|
|
141
|
+
> **Trusted publishing setup:** Configure each package on [npmjs.com](https://docs.npmjs.com/trusted-publishers/) → Package Settings → Trusted Publishers → GitHub Actions. Specify your org/user, repo, and the workflow filename (`bumpy-release.yml`). No `NPM_TOKEN` secret needed. Enable `provenance` and `npmStaged` in your [publish config](https://github.com/dmno-dev/bumpy/blob/main/docs/configuration.md#staged-publishing) for maximum security.
|
|
141
142
|
|
|
142
143
|
<details>
|
|
143
144
|
<summary>Alternative: token-based auth (NPM_TOKEN secret)</summary>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { n as log, r as require_picocolors, s as __toESM } from "./logger-BgksGFuf.mjs";
|
|
2
2
|
import { n as exists, t as ensureDir } from "./fs-CBXKZhoU.mjs";
|
|
3
|
-
import { a as loadConfig, o as loadPackageConfig, r as getBumpyDir } from "./config-
|
|
4
|
-
import { a as writeBumpFile, o as discoverPackages, r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-
|
|
3
|
+
import { a as loadConfig, o as loadPackageConfig, r as getBumpyDir } from "./config-48u1NbKv.mjs";
|
|
4
|
+
import { a as writeBumpFile, o as discoverPackages, r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-B_7P2UZO.mjs";
|
|
5
5
|
import { r as getChangedFiles } from "./git-CpJqzpp-.mjs";
|
|
6
6
|
import { l as pt, o as gt, r as Ot, s as mt, t as unwrap, u as wt } from "./clack-W95rXis0.mjs";
|
|
7
7
|
import { n as slugify, t as randomName } from "./names-COooXAFg.mjs";
|
|
8
|
-
import { n as findChangedPackages, r as require_picomatch } from "./check-
|
|
8
|
+
import { n as findChangedPackages, r as require_picomatch } from "./check-0vJJPD24.mjs";
|
|
9
9
|
import { relative, resolve } from "node:path";
|
|
10
10
|
import * as readline from "node:readline";
|
|
11
11
|
//#region src/prompts/bump-select.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as readJson, c as removeFile, f as writeText, i as listFiles, l as updateJsonFields, n as exists, s as readText, u as updateJsonNestedField } from "./fs-CBXKZhoU.mjs";
|
|
2
|
-
import { r as getBumpyDir } from "./config-
|
|
3
|
-
import { a as prependToChangelog, i as loadFormatter, n as generateChangelogEntry } from "./changelog-
|
|
2
|
+
import { r as getBumpyDir } from "./config-48u1NbKv.mjs";
|
|
3
|
+
import { a as prependToChangelog, i as loadFormatter, n as generateChangelogEntry } from "./changelog-LaYJ7aUa.mjs";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
//#region src/core/apply-release-plan.ts
|
|
6
6
|
/** Apply the release plan: bump versions, update changelogs, delete bump files */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as readJson, f as writeText, i as listFiles, n as exists, s as readText } from "./fs-CBXKZhoU.mjs";
|
|
2
|
-
import { i as isPackageManaged, o as loadPackageConfig, r as getBumpyDir } from "./config-
|
|
2
|
+
import { i as isPackageManaged, o as loadPackageConfig, r as getBumpyDir } from "./config-48u1NbKv.mjs";
|
|
3
3
|
import { i as jsYaml, n as detectWorkspaces } from "./package-manager-BQPwXwu5.mjs";
|
|
4
4
|
import { s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
|
|
5
5
|
import { relative, resolve } from "node:path";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as log } from "./logger-BgksGFuf.mjs";
|
|
2
|
-
import { c as maxBump, t as BUMP_LEVELS } from "./types-
|
|
2
|
+
import { c as maxBump, t as BUMP_LEVELS } from "./types-DMdVeeEm.mjs";
|
|
3
3
|
import { relative, resolve } from "node:path";
|
|
4
4
|
import { realpathSync } from "node:fs";
|
|
5
5
|
//#region src/core/changelog.ts
|
|
@@ -45,7 +45,7 @@ const defaultFormatter = (ctx) => {
|
|
|
45
45
|
const BUILTIN_FORMATTERS = {
|
|
46
46
|
default: defaultFormatter,
|
|
47
47
|
github: async () => {
|
|
48
|
-
const { createGithubFormatter } = await import("./changelog-github-
|
|
48
|
+
const { createGithubFormatter } = await import("./changelog-github-BXEhPeiW.mjs");
|
|
49
49
|
return createGithubFormatter();
|
|
50
50
|
}
|
|
51
51
|
};
|
|
@@ -56,7 +56,7 @@ const BUILTIN_FORMATTERS = {
|
|
|
56
56
|
async function loadFormatter(changelog, rootDir) {
|
|
57
57
|
const [name, options] = Array.isArray(changelog) ? changelog : [changelog, {}];
|
|
58
58
|
if (name === "github") {
|
|
59
|
-
const { createGithubFormatter } = await import("./changelog-github-
|
|
59
|
+
const { createGithubFormatter } = await import("./changelog-github-BXEhPeiW.mjs");
|
|
60
60
|
return createGithubFormatter(options);
|
|
61
61
|
}
|
|
62
62
|
if (typeof name === "string" && BUILTIN_FORMATTERS[name]) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as maxBump } from "./types-
|
|
1
|
+
import { c as maxBump } from "./types-DMdVeeEm.mjs";
|
|
2
2
|
import { s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
|
|
3
|
-
import { o as sortBumpFilesByType, r as getBumpTypeForPackage } from "./changelog-
|
|
3
|
+
import { o as sortBumpFilesByType, r as getBumpTypeForPackage } from "./changelog-LaYJ7aUa.mjs";
|
|
4
4
|
//#region src/core/changelog-github.ts
|
|
5
5
|
/** Authors filtered from "Thanks" attribution by default (e.g. bots) */
|
|
6
6
|
/** Authors filtered from "Thanks" attribution by default (e.g. AI/automation bots) */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as __exportAll, i as __commonJSMin, n as log, s as __toESM, t as colorize } from "./logger-BgksGFuf.mjs";
|
|
2
|
-
import { a as loadConfig, o as loadPackageConfig, r as getBumpyDir } from "./config-
|
|
3
|
-
import { r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-
|
|
2
|
+
import { a as loadConfig, o as loadPackageConfig, r as getBumpyDir } from "./config-48u1NbKv.mjs";
|
|
3
|
+
import { r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-B_7P2UZO.mjs";
|
|
4
4
|
import { a as getFileStatuses, r as getChangedFiles } from "./git-CpJqzpp-.mjs";
|
|
5
5
|
import { relative } from "node:path";
|
|
6
6
|
//#region ../../node_modules/.bun/picomatch@4.0.4/node_modules/picomatch/lib/constants.js
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { n as log, t as colorize } from "./logger-BgksGFuf.mjs";
|
|
2
|
-
import { a as loadConfig } from "./config-
|
|
2
|
+
import { a as loadConfig } from "./config-48u1NbKv.mjs";
|
|
3
3
|
import { t as detectPackageManager } from "./package-manager-BQPwXwu5.mjs";
|
|
4
|
-
import { i as recoverDeletedBumpFiles, r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-
|
|
5
|
-
import { a as DependencyGraph, t as assembleReleasePlan } from "./release-plan-
|
|
4
|
+
import { i as recoverDeletedBumpFiles, r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-B_7P2UZO.mjs";
|
|
5
|
+
import { a as DependencyGraph, t as assembleReleasePlan } from "./release-plan-s1o52Rc-.mjs";
|
|
6
6
|
import { n as runArgs, r as runArgsAsync, s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
|
|
7
7
|
import { d as withGitToken, r as getChangedFiles } from "./git-CpJqzpp-.mjs";
|
|
8
8
|
import { t as randomName } from "./names-COooXAFg.mjs";
|
|
9
|
-
import { n as findChangedPackages } from "./check-
|
|
9
|
+
import { n as findChangedPackages } from "./check-0vJJPD24.mjs";
|
|
10
10
|
import { t as resolveCommitMessage } from "./commit-message-CSWVKPJ-.mjs";
|
|
11
11
|
import { appendFileSync, mkdirSync, writeFileSync } from "node:fs";
|
|
12
12
|
import { createHash } from "node:crypto";
|
|
@@ -155,7 +155,7 @@ async function ciPlanCommand(rootDir) {
|
|
|
155
155
|
packageNames: plan.releases.map((r) => r.name)
|
|
156
156
|
};
|
|
157
157
|
} else {
|
|
158
|
-
const { findUnpublishedPackages } = await import("./publish-
|
|
158
|
+
const { findUnpublishedPackages } = await import("./publish-CI7o7EEI.mjs");
|
|
159
159
|
const unpublished = await findUnpublishedPackages(packages, config);
|
|
160
160
|
if (unpublished.length > 0) output = {
|
|
161
161
|
mode: "publish",
|
|
@@ -226,7 +226,7 @@ async function ciReleaseCommand(rootDir, opts) {
|
|
|
226
226
|
if (bumpFiles.length === 0) {
|
|
227
227
|
log.info("No pending bump files — checking for unpublished packages...");
|
|
228
228
|
const recoveredBumpFiles = recoverDeletedBumpFiles(rootDir);
|
|
229
|
-
const { publishCommand } = await import("./publish-
|
|
229
|
+
const { publishCommand } = await import("./publish-CI7o7EEI.mjs");
|
|
230
230
|
await publishCommand(rootDir, {
|
|
231
231
|
tag: opts.tag,
|
|
232
232
|
recoveredBumpFiles
|
|
@@ -243,7 +243,7 @@ async function ciReleaseCommand(rootDir, opts) {
|
|
|
243
243
|
}
|
|
244
244
|
async function autoPublish(rootDir, config, plan, tag) {
|
|
245
245
|
log.step("Running bumpy version...");
|
|
246
|
-
const { versionCommand } = await import("./version-
|
|
246
|
+
const { versionCommand } = await import("./version-C7uFKayK.mjs");
|
|
247
247
|
await versionCommand(rootDir);
|
|
248
248
|
log.step("Committing version changes...");
|
|
249
249
|
runArgs([
|
|
@@ -272,7 +272,7 @@ async function autoPublish(rootDir, config, plan, tag) {
|
|
|
272
272
|
], { cwd: rootDir });
|
|
273
273
|
}
|
|
274
274
|
log.step("Running bumpy publish...");
|
|
275
|
-
const { publishCommand } = await import("./publish-
|
|
275
|
+
const { publishCommand } = await import("./publish-CI7o7EEI.mjs");
|
|
276
276
|
await publishCommand(rootDir, { tag });
|
|
277
277
|
}
|
|
278
278
|
/**
|
|
@@ -346,7 +346,7 @@ async function createVersionPr(rootDir, plan, config, packageDirs, branchName) {
|
|
|
346
346
|
branch
|
|
347
347
|
], { cwd: rootDir });
|
|
348
348
|
log.step("Running bumpy version...");
|
|
349
|
-
const { versionCommand } = await import("./version-
|
|
349
|
+
const { versionCommand } = await import("./version-C7uFKayK.mjs");
|
|
350
350
|
await versionCommand(rootDir);
|
|
351
351
|
runArgs([
|
|
352
352
|
"git",
|
package/dist/cli.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { n as log, t as colorize } from "./logger-BgksGFuf.mjs";
|
|
3
|
-
import { n as findRoot } from "./config-
|
|
3
|
+
import { n as findRoot } from "./config-48u1NbKv.mjs";
|
|
4
4
|
//#region src/cli.ts
|
|
5
5
|
const args = process.argv.slice(2);
|
|
6
6
|
const command = args[0];
|
|
@@ -31,7 +31,7 @@ async function main() {
|
|
|
31
31
|
}
|
|
32
32
|
case "add": {
|
|
33
33
|
const rootDir = await findRoot();
|
|
34
|
-
const { addCommand } = await import("./add-
|
|
34
|
+
const { addCommand } = await import("./add-t_nY85Lo.mjs");
|
|
35
35
|
await addCommand(rootDir, {
|
|
36
36
|
packages: flags.packages,
|
|
37
37
|
message: flags.message,
|
|
@@ -43,7 +43,7 @@ async function main() {
|
|
|
43
43
|
}
|
|
44
44
|
case "status": {
|
|
45
45
|
const rootDir = await findRoot();
|
|
46
|
-
const { statusCommand } = await import("./status-
|
|
46
|
+
const { statusCommand } = await import("./status-BvemGN6p.mjs");
|
|
47
47
|
await statusCommand(rootDir, {
|
|
48
48
|
json: flags.json === true,
|
|
49
49
|
packagesOnly: flags.packages === true,
|
|
@@ -55,13 +55,13 @@ async function main() {
|
|
|
55
55
|
}
|
|
56
56
|
case "version": {
|
|
57
57
|
const rootDir = await findRoot();
|
|
58
|
-
const { versionCommand } = await import("./version-
|
|
58
|
+
const { versionCommand } = await import("./version-C7uFKayK.mjs");
|
|
59
59
|
await versionCommand(rootDir, { commit: flags.commit === true });
|
|
60
60
|
break;
|
|
61
61
|
}
|
|
62
62
|
case "generate": {
|
|
63
63
|
const rootDir = await findRoot();
|
|
64
|
-
const { generateCommand } = await import("./generate-
|
|
64
|
+
const { generateCommand } = await import("./generate-zNgPV9rR.mjs");
|
|
65
65
|
await generateCommand(rootDir, {
|
|
66
66
|
from: flags.from,
|
|
67
67
|
dryRun: flags["dry-run"] === true,
|
|
@@ -71,7 +71,7 @@ async function main() {
|
|
|
71
71
|
}
|
|
72
72
|
case "check": {
|
|
73
73
|
const rootDir = await findRoot();
|
|
74
|
-
const { checkCommand } = await import("./check-
|
|
74
|
+
const { checkCommand } = await import("./check-0vJJPD24.mjs").then((n) => n.t);
|
|
75
75
|
const hookValue = flags.hook;
|
|
76
76
|
if (hookValue && hookValue !== "pre-commit" && hookValue !== "pre-push") {
|
|
77
77
|
log.error(`Invalid --hook value "${hookValue}". Expected "pre-commit" or "pre-push".`);
|
|
@@ -89,17 +89,17 @@ async function main() {
|
|
|
89
89
|
const subcommand = args[1];
|
|
90
90
|
const ciFlags = parseFlags(args.slice(2));
|
|
91
91
|
if (subcommand === "check") {
|
|
92
|
-
const { ciCheckCommand } = await import("./ci-
|
|
92
|
+
const { ciCheckCommand } = await import("./ci-CHIpKtvI.mjs");
|
|
93
93
|
await ciCheckCommand(rootDir, {
|
|
94
94
|
comment: ciFlags.comment !== void 0 ? ciFlags.comment === true : void 0,
|
|
95
95
|
strict: ciFlags.strict === true,
|
|
96
96
|
noFail: ciFlags["no-fail"] === true
|
|
97
97
|
});
|
|
98
98
|
} else if (subcommand === "plan") {
|
|
99
|
-
const { ciPlanCommand } = await import("./ci-
|
|
99
|
+
const { ciPlanCommand } = await import("./ci-CHIpKtvI.mjs");
|
|
100
100
|
await ciPlanCommand(rootDir);
|
|
101
101
|
} else if (subcommand === "release") {
|
|
102
|
-
const { ciReleaseCommand } = await import("./ci-
|
|
102
|
+
const { ciReleaseCommand } = await import("./ci-CHIpKtvI.mjs");
|
|
103
103
|
await ciReleaseCommand(rootDir, {
|
|
104
104
|
mode: ciFlags["auto-publish"] === true ? "auto-publish" : "version-pr",
|
|
105
105
|
tag: ciFlags.tag,
|
|
@@ -116,7 +116,7 @@ async function main() {
|
|
|
116
116
|
}
|
|
117
117
|
case "publish": {
|
|
118
118
|
const rootDir = await findRoot();
|
|
119
|
-
const { publishCommand } = await import("./publish-
|
|
119
|
+
const { publishCommand } = await import("./publish-CI7o7EEI.mjs");
|
|
120
120
|
await publishCommand(rootDir, {
|
|
121
121
|
dryRun: flags["dry-run"] === true,
|
|
122
122
|
tag: flags.tag,
|
|
@@ -140,7 +140,7 @@ async function main() {
|
|
|
140
140
|
}
|
|
141
141
|
case "--version":
|
|
142
142
|
case "-v":
|
|
143
|
-
console.log(`bumpy 1.
|
|
143
|
+
console.log(`bumpy 1.9.2`);
|
|
144
144
|
break;
|
|
145
145
|
case "help":
|
|
146
146
|
case "--help":
|
|
@@ -160,7 +160,7 @@ async function main() {
|
|
|
160
160
|
}
|
|
161
161
|
function printHelp() {
|
|
162
162
|
console.log(`
|
|
163
|
-
${colorize(`🐸 bumpy v1.
|
|
163
|
+
${colorize(`🐸 bumpy v1.9.2`, "bold")} - Modern monorepo versioning
|
|
164
164
|
|
|
165
165
|
Usage: bumpy <command> [options]
|
|
166
166
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as __exportAll } from "./logger-BgksGFuf.mjs";
|
|
2
2
|
import { a as readJson, n as exists, o as readJsonc } from "./fs-CBXKZhoU.mjs";
|
|
3
|
-
import { l as normalizeCascadeConfig, r as DEFAULT_CONFIG } from "./types-
|
|
3
|
+
import { l as normalizeCascadeConfig, r as DEFAULT_CONFIG } from "./types-DMdVeeEm.mjs";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
//#region src/core/config.ts
|
|
6
6
|
var config_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as log, t as colorize } from "./logger-BgksGFuf.mjs";
|
|
2
2
|
import { t as ensureDir } from "./fs-CBXKZhoU.mjs";
|
|
3
|
-
import { a as loadConfig, r as getBumpyDir } from "./config-
|
|
4
|
-
import { a as writeBumpFile, o as discoverPackages } from "./bump-file-
|
|
3
|
+
import { a as loadConfig, r as getBumpyDir } from "./config-48u1NbKv.mjs";
|
|
4
|
+
import { a as writeBumpFile, o as discoverPackages } from "./bump-file-B_7P2UZO.mjs";
|
|
5
5
|
import { s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
|
|
6
6
|
import { n as getBranchCommits, o as getFilesChangedInCommit } from "./git-CpJqzpp-.mjs";
|
|
7
7
|
import { n as slugify, t as randomName } from "./names-COooXAFg.mjs";
|
package/dist/index.d.mts
CHANGED
|
@@ -38,6 +38,20 @@ interface PublishConfig {
|
|
|
38
38
|
* Default: "pack"
|
|
39
39
|
*/
|
|
40
40
|
protocolResolution: 'pack' | 'in-place' | 'none';
|
|
41
|
+
/**
|
|
42
|
+
* Attach provenance attestation when publishing via npm.
|
|
43
|
+
* Requires a supported CI environment with OIDC (GitHub Actions, GitLab CI, etc.).
|
|
44
|
+
* Only works with publishManager "npm".
|
|
45
|
+
* Default: false
|
|
46
|
+
*/
|
|
47
|
+
provenance: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Use npm staged publishing (`npm stage publish`).
|
|
50
|
+
* Stages the publish on npmjs.com, requiring manual 2FA approval before going live.
|
|
51
|
+
* Only works with publishManager "npm" and requires npm >= 11.15.0.
|
|
52
|
+
* Default: false
|
|
53
|
+
*/
|
|
54
|
+
npmStaged: boolean;
|
|
41
55
|
}
|
|
42
56
|
interface BumpyConfig {
|
|
43
57
|
baseBranch: string;
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as DEP_TYPES, c as maxBump, i as DEFAULT_PUBLISH_CONFIG, l as normalizeCascadeConfig, n as DEFAULT_BUMP_RULES, o as bumpLevel, r as DEFAULT_CONFIG, s as hasCascade, t as BUMP_LEVELS } from "./types-
|
|
2
|
-
import { a as loadConfig, n as findRoot, r as getBumpyDir, s as matchGlob } from "./config-
|
|
3
|
-
import { a as writeBumpFile, n as parseBumpFile, o as discoverPackages, r as readBumpFiles } from "./bump-file-
|
|
4
|
-
import { a as DependencyGraph, i as stripProtocol, n as bumpVersion, r as satisfies, t as assembleReleasePlan } from "./release-plan-
|
|
5
|
-
import { a as prependToChangelog, i as loadFormatter, n as generateChangelogEntry, t as defaultFormatter } from "./changelog-
|
|
6
|
-
import { t as applyReleasePlan } from "./apply-release-plan-
|
|
7
|
-
import { t as publishPackages } from "./publish-pipeline-
|
|
1
|
+
import { a as DEP_TYPES, c as maxBump, i as DEFAULT_PUBLISH_CONFIG, l as normalizeCascadeConfig, n as DEFAULT_BUMP_RULES, o as bumpLevel, r as DEFAULT_CONFIG, s as hasCascade, t as BUMP_LEVELS } from "./types-DMdVeeEm.mjs";
|
|
2
|
+
import { a as loadConfig, n as findRoot, r as getBumpyDir, s as matchGlob } from "./config-48u1NbKv.mjs";
|
|
3
|
+
import { a as writeBumpFile, n as parseBumpFile, o as discoverPackages, r as readBumpFiles } from "./bump-file-B_7P2UZO.mjs";
|
|
4
|
+
import { a as DependencyGraph, i as stripProtocol, n as bumpVersion, r as satisfies, t as assembleReleasePlan } from "./release-plan-s1o52Rc-.mjs";
|
|
5
|
+
import { a as prependToChangelog, i as loadFormatter, n as generateChangelogEntry, t as defaultFormatter } from "./changelog-LaYJ7aUa.mjs";
|
|
6
|
+
import { t as applyReleasePlan } from "./apply-release-plan-D9wl4Q0H.mjs";
|
|
7
|
+
import { t as publishPackages } from "./publish-pipeline-DpmTVsnX.mjs";
|
|
8
8
|
export { BUMP_LEVELS, DEFAULT_BUMP_RULES, DEFAULT_CONFIG, DEFAULT_PUBLISH_CONFIG, DEP_TYPES, DependencyGraph, applyReleasePlan, assembleReleasePlan, bumpLevel, bumpVersion, defaultFormatter, discoverPackages, findRoot, generateChangelogEntry, getBumpyDir, hasCascade, loadConfig, loadFormatter, matchGlob, maxBump, normalizeCascadeConfig, parseBumpFile, prependToChangelog, publishPackages, readBumpFiles, satisfies, stripProtocol, writeBumpFile };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { n as log, o as __require, t as colorize } from "./logger-BgksGFuf.mjs";
|
|
2
|
-
import { a as loadConfig } from "./config-
|
|
2
|
+
import { a as loadConfig } from "./config-48u1NbKv.mjs";
|
|
3
3
|
import { n as detectWorkspaces } from "./package-manager-BQPwXwu5.mjs";
|
|
4
|
-
import { s as discoverWorkspace } from "./bump-file-
|
|
5
|
-
import { a as DependencyGraph } from "./release-plan-
|
|
4
|
+
import { s as discoverWorkspace } from "./bump-file-B_7P2UZO.mjs";
|
|
5
|
+
import { a as DependencyGraph } from "./release-plan-s1o52Rc-.mjs";
|
|
6
6
|
import { r as runArgsAsync, s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
|
|
7
|
-
import { i as loadFormatter, n as generateChangelogEntry } from "./changelog-
|
|
7
|
+
import { i as loadFormatter, n as generateChangelogEntry } from "./changelog-LaYJ7aUa.mjs";
|
|
8
8
|
import { c as listTags, l as pushWithTags, s as hasUncommittedChanges } from "./git-CpJqzpp-.mjs";
|
|
9
|
-
import { t as publishPackages } from "./publish-pipeline-
|
|
10
|
-
import { CI_PLAN_CACHE_PATH } from "./ci-
|
|
9
|
+
import { t as publishPackages } from "./publish-pipeline-DpmTVsnX.mjs";
|
|
10
|
+
import { CI_PLAN_CACHE_PATH } from "./ci-CHIpKtvI.mjs";
|
|
11
11
|
//#region src/core/github-release.ts
|
|
12
12
|
/** Get the current HEAD commit SHA */
|
|
13
13
|
function getHeadSha(rootDir) {
|
|
@@ -197,7 +197,7 @@ async function publishCommand(rootDir, opts) {
|
|
|
197
197
|
}
|
|
198
198
|
let toPublish = await findUnpublishedWithCache(rootDir, packages, config);
|
|
199
199
|
if (opts.filter) {
|
|
200
|
-
const { matchGlob } = await import("./config-
|
|
200
|
+
const { matchGlob } = await import("./config-48u1NbKv.mjs").then((n) => n.t);
|
|
201
201
|
const patterns = opts.filter.split(",").map((p) => p.trim());
|
|
202
202
|
toPublish = toPublish.filter((r) => patterns.some((p) => matchGlob(r.name, p)));
|
|
203
203
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as log, t as colorize } from "./logger-BgksGFuf.mjs";
|
|
2
2
|
import { a as readJson, u as updateJsonNestedField } from "./fs-CBXKZhoU.mjs";
|
|
3
3
|
import { r as resolveCatalogDep } from "./package-manager-BQPwXwu5.mjs";
|
|
4
|
-
import { i as stripProtocol } from "./release-plan-
|
|
4
|
+
import { i as stripProtocol } from "./release-plan-s1o52Rc-.mjs";
|
|
5
5
|
import { i as runAsync, o as sq, r as runArgsAsync, s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
|
|
6
6
|
import { t as createTag, u as tagExists } from "./git-CpJqzpp-.mjs";
|
|
7
7
|
import { resolve } from "node:path";
|
|
@@ -28,6 +28,26 @@ const OIDC_NPM_UPGRADE_HINTS = {
|
|
|
28
28
|
gitlab: "Use a Node.js image with npm >= 11.5.1 or run `npm install -g npm@latest`",
|
|
29
29
|
circleci: "Use a Node.js image with npm >= 11.5.1 or run `sudo npm install -g npm@latest`"
|
|
30
30
|
};
|
|
31
|
+
/** Compare semver triples: returns true if version >= minimum */
|
|
32
|
+
function npmVersionAtLeast(version, minimum) {
|
|
33
|
+
const [major, minor, patch] = version.split(".").map(Number);
|
|
34
|
+
const [minMajor, minMinor, minPatch] = minimum;
|
|
35
|
+
if (major > minMajor) return true;
|
|
36
|
+
if (major < minMajor) return false;
|
|
37
|
+
if (minor > minMinor) return true;
|
|
38
|
+
if (minor < minMinor) return false;
|
|
39
|
+
return patch >= minPatch;
|
|
40
|
+
}
|
|
41
|
+
const MIN_NPM_OIDC = [
|
|
42
|
+
11,
|
|
43
|
+
5,
|
|
44
|
+
1
|
|
45
|
+
];
|
|
46
|
+
const MIN_NPM_STAGED = [
|
|
47
|
+
11,
|
|
48
|
+
15,
|
|
49
|
+
0
|
|
50
|
+
];
|
|
31
51
|
/**
|
|
32
52
|
* Set up npm authentication for publishing.
|
|
33
53
|
*
|
|
@@ -50,13 +70,10 @@ function setupNpmAuth(rootDir, publishManager) {
|
|
|
50
70
|
const oidcProvider = detectOidcProvider();
|
|
51
71
|
if (oidcProvider) {
|
|
52
72
|
const npmVersion = tryRunArgs(["npm", "--version"]);
|
|
53
|
-
if (npmVersion) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
log.warn(` ${OIDC_NPM_UPGRADE_HINTS[oidcProvider]}`);
|
|
58
|
-
} else log.dim(` OIDC detected (${oidcProvider}) — npm ${npmVersion} will authenticate via trusted publishing`);
|
|
59
|
-
}
|
|
73
|
+
if (npmVersion) if (!npmVersionAtLeast(npmVersion, MIN_NPM_OIDC)) {
|
|
74
|
+
log.warn(` npm ${npmVersion} detected — trusted publishing (OIDC) requires npm >= ${MIN_NPM_OIDC.join(".")}`);
|
|
75
|
+
log.warn(` ${OIDC_NPM_UPGRADE_HINTS[oidcProvider]}`);
|
|
76
|
+
} else log.dim(` OIDC detected (${oidcProvider}) — npm ${npmVersion} will authenticate via trusted publishing`);
|
|
60
77
|
return;
|
|
61
78
|
}
|
|
62
79
|
const token = process.env.NODE_AUTH_TOKEN || process.env.NPM_TOKEN;
|
|
@@ -88,6 +105,14 @@ async function publishPackages(releasePlan, packages, depGraph, config, rootDir,
|
|
|
88
105
|
};
|
|
89
106
|
const publishConfig = config.publish;
|
|
90
107
|
setupNpmAuth(rootDir, publishConfig.publishManager);
|
|
108
|
+
if (publishConfig.provenance && publishConfig.publishManager !== "npm") throw new Error("provenance requires publishManager \"npm\" — provenance attestation is an npm-specific feature");
|
|
109
|
+
if (publishConfig.npmStaged) {
|
|
110
|
+
if (publishConfig.publishManager !== "npm") throw new Error("npmStaged requires publishManager \"npm\" — staged publishing is an npm-specific feature");
|
|
111
|
+
const npmVersion = tryRunArgs(["npm", "--version"]);
|
|
112
|
+
if (!npmVersion) throw new Error(`npmStaged is enabled but npm was not found — install npm >= ${MIN_NPM_STAGED.join(".")}`);
|
|
113
|
+
if (!npmVersionAtLeast(npmVersion, MIN_NPM_STAGED)) throw new Error(`npmStaged requires npm >= ${MIN_NPM_STAGED.join(".")} (found ${npmVersion})\n Upgrade npm: npm install -g npm@latest`);
|
|
114
|
+
log.dim(`Staged publishing enabled — packages will require 2FA approval on npmjs.com`);
|
|
115
|
+
}
|
|
91
116
|
const packManager = publishConfig.packManager === "auto" ? detectedPm : publishConfig.packManager;
|
|
92
117
|
const topoOrder = depGraph.topologicalSort(packages);
|
|
93
118
|
const releaseMap = new Map(releasePlan.releases.map((r) => [r.name, r]));
|
|
@@ -200,13 +225,15 @@ function getPackArgs(pm) {
|
|
|
200
225
|
function buildPublishArgs(pkg, pkgConfig, config, opts, tarball) {
|
|
201
226
|
const publishManager = config.publish.publishManager;
|
|
202
227
|
const args = [];
|
|
203
|
-
if (publishManager === "
|
|
228
|
+
if (config.publish.npmStaged && publishManager === "npm") args.push("npm", "stage", "publish");
|
|
229
|
+
else if (publishManager === "yarn") args.push("yarn", "npm", "publish");
|
|
204
230
|
else args.push(publishManager, "publish");
|
|
205
231
|
if (tarball) args.push(tarball);
|
|
206
232
|
const access = pkgConfig?.access || config.access;
|
|
207
233
|
args.push("--access", access);
|
|
208
234
|
if (pkgConfig?.registry) args.push("--registry", pkgConfig.registry);
|
|
209
235
|
if (opts.tag) args.push("--tag", opts.tag);
|
|
236
|
+
if (config.publish.provenance && publishManager === "npm") args.push("--provenance");
|
|
210
237
|
if (config.publish.publishArgs.length > 0) args.push(...config.publish.publishArgs);
|
|
211
238
|
return args;
|
|
212
239
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { i as __commonJSMin, s as __toESM } from "./logger-BgksGFuf.mjs";
|
|
2
|
-
import { c as maxBump, l as normalizeCascadeConfig, n as DEFAULT_BUMP_RULES, o as bumpLevel, s as hasCascade } from "./types-
|
|
3
|
-
import { s as matchGlob } from "./config-
|
|
2
|
+
import { c as maxBump, l as normalizeCascadeConfig, n as DEFAULT_BUMP_RULES, o as bumpLevel, s as hasCascade } from "./types-DMdVeeEm.mjs";
|
|
3
|
+
import { s as matchGlob } from "./config-48u1NbKv.mjs";
|
|
4
4
|
//#region src/core/dep-graph.ts
|
|
5
5
|
var DependencyGraph = class {
|
|
6
6
|
/** Map from package name → packages that depend on it */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as log, t as colorize } from "./logger-BgksGFuf.mjs";
|
|
2
|
-
import { a as loadConfig } from "./config-
|
|
3
|
-
import { o as discoverPackages, r as readBumpFiles, t as filterBranchBumpFiles } from "./bump-file-
|
|
4
|
-
import { a as DependencyGraph, t as assembleReleasePlan } from "./release-plan-
|
|
2
|
+
import { a as loadConfig } from "./config-48u1NbKv.mjs";
|
|
3
|
+
import { o as discoverPackages, r as readBumpFiles, t as filterBranchBumpFiles } from "./bump-file-B_7P2UZO.mjs";
|
|
4
|
+
import { a as DependencyGraph, t as assembleReleasePlan } from "./release-plan-s1o52Rc-.mjs";
|
|
5
5
|
import { i as getCurrentBranch, r as getChangedFiles } from "./git-CpJqzpp-.mjs";
|
|
6
6
|
//#region src/commands/status.ts
|
|
7
7
|
async function statusCommand(rootDir, opts) {
|
|
@@ -29,7 +29,7 @@ async function statusCommand(rootDir, opts) {
|
|
|
29
29
|
releases = releases.filter((r) => types.includes(r.type));
|
|
30
30
|
}
|
|
31
31
|
if (opts.filter) {
|
|
32
|
-
const { matchGlob } = await import("./config-
|
|
32
|
+
const { matchGlob } = await import("./config-48u1NbKv.mjs").then((n) => n.t);
|
|
33
33
|
const patterns = opts.filter.split(",").map((p) => p.trim());
|
|
34
34
|
releases = releases.filter((r) => patterns.some((p) => matchGlob(r.name, p)));
|
|
35
35
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { n as log, t as colorize } from "./logger-BgksGFuf.mjs";
|
|
2
|
-
import { a as loadConfig } from "./config-
|
|
2
|
+
import { a as loadConfig } from "./config-48u1NbKv.mjs";
|
|
3
3
|
import { n as detectWorkspaces } from "./package-manager-BQPwXwu5.mjs";
|
|
4
|
-
import { o as discoverPackages, r as readBumpFiles } from "./bump-file-
|
|
5
|
-
import { a as DependencyGraph, t as assembleReleasePlan } from "./release-plan-
|
|
4
|
+
import { o as discoverPackages, r as readBumpFiles } from "./bump-file-B_7P2UZO.mjs";
|
|
5
|
+
import { a as DependencyGraph, t as assembleReleasePlan } from "./release-plan-s1o52Rc-.mjs";
|
|
6
6
|
import { n as runArgs, s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
|
|
7
|
-
import { t as applyReleasePlan } from "./apply-release-plan-
|
|
7
|
+
import { t as applyReleasePlan } from "./apply-release-plan-D9wl4Q0H.mjs";
|
|
8
8
|
import { t as resolveCommitMessage } from "./commit-message-CSWVKPJ-.mjs";
|
|
9
9
|
//#region src/commands/version.ts
|
|
10
10
|
async function versionCommand(rootDir, opts = {}) {
|