@varlock/bumpy 1.9.0 → 1.10.0

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 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). Supports [npm staged publishing](https://docs.npmjs.com/about-staged-publishes) for 2FA-gated releases. 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: lts/*
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. Requires npm >= 11.5.1 - bumpy will warn if your version is too old.
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>
@@ -155,28 +155,6 @@
155
155
  },
156
156
  "additionalProperties": false
157
157
  },
158
- "aggregateRelease": {
159
- "description": "GitHub release creation (requires gh CLI). false = individual release per package, true = single aggregated release, or an object with enabled and optional title (supports {{date}}).",
160
- "default": false,
161
- "oneOf": [
162
- { "type": "boolean" },
163
- {
164
- "type": "object",
165
- "properties": {
166
- "enabled": {
167
- "type": "boolean",
168
- "description": "Whether to create an aggregated release"
169
- },
170
- "title": {
171
- "type": "string",
172
- "description": "Custom title for the aggregated release (supports {{date}})"
173
- }
174
- },
175
- "required": ["enabled"],
176
- "additionalProperties": false
177
- }
178
- ]
179
- },
180
158
  "gitUser": {
181
159
  "type": "object",
182
160
  "description": "Git identity used for CI commits",
@@ -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-CDC1Y_ye.mjs";
4
- import { a as writeBumpFile, o as discoverPackages, r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-BOqrdkYP.mjs";
5
- import { r as getChangedFiles } from "./git-CpJqzpp-.mjs";
3
+ import { a as loadConfig, o as loadPackageConfig, r as getBumpyDir } from "./config-D_4GYDJi.mjs";
4
+ import { a as writeBumpFile, o as discoverPackages, r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-B9DpXK5X.mjs";
5
+ import { r as getChangedFiles } from "./git-JGLQtk-M.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-Dc0ts_q3.mjs";
8
+ import { n as findChangedPackages, r as require_picomatch } from "./check-pbyTB4KC.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-CDC1Y_ye.mjs";
3
- import { a as prependToChangelog, i as loadFormatter, n as generateChangelogEntry } from "./changelog-DrAf-rL6.mjs";
2
+ import { r as getBumpyDir } from "./config-D_4GYDJi.mjs";
3
+ import { a as prependToChangelog, i as loadFormatter, n as generateChangelogEntry } from "./changelog-A-EwWggW.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-CDC1Y_ye.mjs";
2
+ import { i as isPackageManaged, o as loadPackageConfig, r as getBumpyDir } from "./config-D_4GYDJi.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-CL2pqN9N.mjs";
2
+ import { c as maxBump, t as BUMP_LEVELS } from "./types-Bkh-igOJ.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-BYqd2jw1.mjs");
48
+ const { createGithubFormatter } = await import("./changelog-github-CPVrJHyB.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-BYqd2jw1.mjs");
59
+ const { createGithubFormatter } = await import("./changelog-github-CPVrJHyB.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-CL2pqN9N.mjs";
1
+ import { c as maxBump } from "./types-Bkh-igOJ.mjs";
2
2
  import { s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
3
- import { o as sortBumpFilesByType, r as getBumpTypeForPackage } from "./changelog-DrAf-rL6.mjs";
3
+ import { o as sortBumpFilesByType, r as getBumpTypeForPackage } from "./changelog-A-EwWggW.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,7 +1,7 @@
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-CDC1Y_ye.mjs";
3
- import { r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-BOqrdkYP.mjs";
4
- import { a as getFileStatuses, r as getChangedFiles } from "./git-CpJqzpp-.mjs";
2
+ import { a as loadConfig, o as loadPackageConfig, r as getBumpyDir } from "./config-D_4GYDJi.mjs";
3
+ import { r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-B9DpXK5X.mjs";
4
+ import { a as getFileStatuses, r as getChangedFiles } from "./git-JGLQtk-M.mjs";
5
5
  import { relative } from "node:path";
6
6
  //#region ../../node_modules/.bun/picomatch@4.0.4/node_modules/picomatch/lib/constants.js
7
7
  var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
@@ -1,12 +1,12 @@
1
1
  import { n as log, t as colorize } from "./logger-BgksGFuf.mjs";
2
- import { a as loadConfig } from "./config-CDC1Y_ye.mjs";
2
+ import { a as loadConfig } from "./config-D_4GYDJi.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-BOqrdkYP.mjs";
5
- import { a as DependencyGraph, t as assembleReleasePlan } from "./release-plan-Ck_DlgcK.mjs";
4
+ import { i as recoverDeletedBumpFiles, r as readBumpFiles, s as discoverWorkspace, t as filterBranchBumpFiles } from "./bump-file-B9DpXK5X.mjs";
5
+ import { a as DependencyGraph, t as assembleReleasePlan } from "./release-plan-mK7iGeGq.mjs";
6
6
  import { n as runArgs, r as runArgsAsync, s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
7
- import { d as withGitToken, r as getChangedFiles } from "./git-CpJqzpp-.mjs";
7
+ import { r as getChangedFiles, u as withGitToken } from "./git-JGLQtk-M.mjs";
8
8
  import { t as randomName } from "./names-COooXAFg.mjs";
9
- import { n as findChangedPackages } from "./check-Dc0ts_q3.mjs";
9
+ import { n as findChangedPackages } from "./check-pbyTB4KC.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";
@@ -26,6 +26,9 @@ async function withPatToken(fn) {
26
26
  process.env.GH_TOKEN = token;
27
27
  try {
28
28
  return await fn();
29
+ } catch (err) {
30
+ const msg = err instanceof Error ? err.message : String(err);
31
+ throw new Error(msg.replaceAll(token, "***"));
29
32
  } finally {
30
33
  if (originalGhToken !== void 0) process.env.GH_TOKEN = originalGhToken;
31
34
  else delete process.env.GH_TOKEN;
@@ -139,23 +142,22 @@ async function ciPlanCommand(rootDir) {
139
142
  throw new Error("Bump file parse errors must be fixed before planning.");
140
143
  }
141
144
  let output;
142
- if (bumpFiles.length > 0) {
143
- const plan = assembleReleasePlan(bumpFiles, packages, depGraph, config);
144
- output = {
145
- mode: "version-pr",
146
- bumpFiles: plan.bumpFiles.map((bf) => ({
147
- id: bf.id,
148
- summary: bf.summary,
149
- releases: bf.releases.map((r) => ({
150
- name: r.name,
151
- type: r.type
152
- }))
153
- })),
154
- releases: plan.releases.map((r) => formatPlanRelease(r, packages, config)),
155
- packageNames: plan.releases.map((r) => r.name)
156
- };
157
- } else {
158
- const { findUnpublishedPackages } = await import("./publish-BplMRp4-.mjs");
145
+ const plan = bumpFiles.length > 0 ? assembleReleasePlan(bumpFiles, packages, depGraph, config) : null;
146
+ if (plan && plan.releases.length > 0) output = {
147
+ mode: "version-pr",
148
+ bumpFiles: plan.bumpFiles.map((bf) => ({
149
+ id: bf.id,
150
+ summary: bf.summary,
151
+ releases: bf.releases.map((r) => ({
152
+ name: r.name,
153
+ type: r.type
154
+ }))
155
+ })),
156
+ releases: plan.releases.map((r) => formatPlanRelease(r, packages, config)),
157
+ packageNames: plan.releases.map((r) => r.name)
158
+ };
159
+ else {
160
+ const { findUnpublishedPackages } = await import("./publish-B3D-70sJ.mjs");
159
161
  const unpublished = await findUnpublishedPackages(packages, config);
160
162
  if (unpublished.length > 0) output = {
161
163
  mode: "publish",
@@ -226,7 +228,7 @@ async function ciReleaseCommand(rootDir, opts) {
226
228
  if (bumpFiles.length === 0) {
227
229
  log.info("No pending bump files — checking for unpublished packages...");
228
230
  const recoveredBumpFiles = recoverDeletedBumpFiles(rootDir);
229
- const { publishCommand } = await import("./publish-BplMRp4-.mjs");
231
+ const { publishCommand } = await import("./publish-B3D-70sJ.mjs");
230
232
  await publishCommand(rootDir, {
231
233
  tag: opts.tag,
232
234
  recoveredBumpFiles
@@ -235,7 +237,13 @@ async function ciReleaseCommand(rootDir, opts) {
235
237
  }
236
238
  const plan = assembleReleasePlan(bumpFiles, packages, depGraph, config);
237
239
  if (plan.releases.length === 0) {
238
- log.info("Bump files found but no packages would be released.");
240
+ log.info("Bump files found but no packages would be released — checking for unpublished packages...");
241
+ const recoveredBumpFiles = recoverDeletedBumpFiles(rootDir);
242
+ const { publishCommand } = await import("./publish-B3D-70sJ.mjs");
243
+ await publishCommand(rootDir, {
244
+ tag: opts.tag,
245
+ recoveredBumpFiles
246
+ });
239
247
  return;
240
248
  }
241
249
  if (opts.mode === "auto-publish") await autoPublish(rootDir, config, plan, opts.tag);
@@ -243,7 +251,7 @@ async function ciReleaseCommand(rootDir, opts) {
243
251
  }
244
252
  async function autoPublish(rootDir, config, plan, tag) {
245
253
  log.step("Running bumpy version...");
246
- const { versionCommand } = await import("./version-fTSOVlym.mjs");
254
+ const { versionCommand } = await import("./version-88KuPbWa.mjs");
247
255
  await versionCommand(rootDir);
248
256
  log.step("Committing version changes...");
249
257
  runArgs([
@@ -272,7 +280,7 @@ async function autoPublish(rootDir, config, plan, tag) {
272
280
  ], { cwd: rootDir });
273
281
  }
274
282
  log.step("Running bumpy publish...");
275
- const { publishCommand } = await import("./publish-BplMRp4-.mjs");
283
+ const { publishCommand } = await import("./publish-B3D-70sJ.mjs");
276
284
  await publishCommand(rootDir, { tag });
277
285
  }
278
286
  /**
@@ -346,7 +354,7 @@ async function createVersionPr(rootDir, plan, config, packageDirs, branchName) {
346
354
  branch
347
355
  ], { cwd: rootDir });
348
356
  log.step("Running bumpy version...");
349
- const { versionCommand } = await import("./version-fTSOVlym.mjs");
357
+ const { versionCommand } = await import("./version-88KuPbWa.mjs");
350
358
  await versionCommand(rootDir);
351
359
  runArgs([
352
360
  "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-CDC1Y_ye.mjs";
3
+ import { n as findRoot } from "./config-D_4GYDJi.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-D3HlRjOy.mjs");
34
+ const { addCommand } = await import("./add-B_1I_sen.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-CV8wBBiI.mjs");
46
+ const { statusCommand } = await import("./status-DeMcLxiM.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-fTSOVlym.mjs");
58
+ const { versionCommand } = await import("./version-88KuPbWa.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-BgKOXV47.mjs");
64
+ const { generateCommand } = await import("./generate-BlZIe3aC.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-Dc0ts_q3.mjs").then((n) => n.t);
74
+ const { checkCommand } = await import("./check-pbyTB4KC.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-9tmC3oNF.mjs");
92
+ const { ciCheckCommand } = await import("./ci-DeZ4zHmn.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-9tmC3oNF.mjs");
99
+ const { ciPlanCommand } = await import("./ci-DeZ4zHmn.mjs");
100
100
  await ciPlanCommand(rootDir);
101
101
  } else if (subcommand === "release") {
102
- const { ciReleaseCommand } = await import("./ci-9tmC3oNF.mjs");
102
+ const { ciReleaseCommand } = await import("./ci-DeZ4zHmn.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-BplMRp4-.mjs");
119
+ const { publishCommand } = await import("./publish-B3D-70sJ.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.9.0`);
143
+ console.log(`bumpy 1.10.0`);
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.9.0`, "bold")} - Modern monorepo versioning
163
+ ${colorize(`🐸 bumpy v1.10.0`, "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-CL2pqN9N.mjs";
3
+ import { l as normalizeCascadeConfig, r as DEFAULT_CONFIG } from "./types-Bkh-igOJ.mjs";
4
4
  import { resolve } from "node:path";
5
5
  //#region src/core/config.ts
6
6
  var config_exports = /* @__PURE__ */ __exportAll({
@@ -1,9 +1,9 @@
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-CDC1Y_ye.mjs";
4
- import { a as writeBumpFile, o as discoverPackages } from "./bump-file-BOqrdkYP.mjs";
3
+ import { a as loadConfig, r as getBumpyDir } from "./config-D_4GYDJi.mjs";
4
+ import { a as writeBumpFile, o as discoverPackages } from "./bump-file-B9DpXK5X.mjs";
5
5
  import { s as tryRunArgs } from "./shell-C8KgKnMQ.mjs";
6
- import { n as getBranchCommits, o as getFilesChangedInCommit } from "./git-CpJqzpp-.mjs";
6
+ import { n as getBranchCommits, o as getFilesChangedInCommit } from "./git-JGLQtk-M.mjs";
7
7
  import { n as slugify, t as randomName } from "./names-COooXAFg.mjs";
8
8
  import { relative } from "node:path";
9
9
  //#region src/commands/generate.ts
@@ -241,16 +241,5 @@ function getFileStatuses(dir, opts) {
241
241
  }
242
242
  return statuses;
243
243
  }
244
- /** Get all tags matching a pattern */
245
- function listTags(pattern, opts) {
246
- const result = tryRunArgs([
247
- "git",
248
- "tag",
249
- "-l",
250
- pattern
251
- ], opts);
252
- if (!result) return [];
253
- return result.split("\n").filter(Boolean);
254
- }
255
244
  //#endregion
256
- export { getFileStatuses as a, listTags as c, withGitToken as d, getCurrentBranch as i, pushWithTags as l, getBranchCommits as n, getFilesChangedInCommit as o, getChangedFiles as r, hasUncommittedChanges as s, createTag as t, tagExists as u };
245
+ export { getFileStatuses as a, pushWithTags as c, getCurrentBranch as i, tagExists as l, getBranchCommits as n, getFilesChangedInCommit as o, getChangedFiles as r, hasUncommittedChanges as s, createTag as t, withGitToken as u };
package/dist/index.d.mts CHANGED
@@ -38,10 +38,17 @@ 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;
41
48
  /**
42
49
  * Use npm staged publishing (`npm stage publish`).
43
50
  * Stages the publish on npmjs.com, requiring manual 2FA approval before going live.
44
- * Only works with publishManager "npm" and requires npm >= 11.5.1.
51
+ * Only works with publishManager "npm" and requires npm >= 11.15.0.
45
52
  * Default: false
46
53
  */
47
54
  npmStaged: boolean;
@@ -84,16 +91,6 @@ interface BumpyConfig {
84
91
  allowCustomCommands: boolean | string[];
85
92
  packages: Record<string, PackageConfig>;
86
93
  publish: PublishConfig;
87
- /**
88
- * GitHub release creation (requires `gh` CLI).
89
- * false = individual release per package (default)
90
- * true = single aggregated release for all packages
91
- * { enabled: true, title: "..." } = aggregate with custom title (supports {{date}})
92
- */
93
- aggregateRelease: boolean | {
94
- enabled: boolean;
95
- title?: string;
96
- };
97
94
  /** Git identity used for CI commits. Defaults to bumpy-bot. */
98
95
  gitUser: {
99
96
  name: 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-CL2pqN9N.mjs";
2
- import { a as loadConfig, n as findRoot, r as getBumpyDir, s as matchGlob } from "./config-CDC1Y_ye.mjs";
3
- import { a as writeBumpFile, n as parseBumpFile, o as discoverPackages, r as readBumpFiles } from "./bump-file-BOqrdkYP.mjs";
4
- import { a as DependencyGraph, i as stripProtocol, n as bumpVersion, r as satisfies, t as assembleReleasePlan } from "./release-plan-Ck_DlgcK.mjs";
5
- import { a as prependToChangelog, i as loadFormatter, n as generateChangelogEntry, t as defaultFormatter } from "./changelog-DrAf-rL6.mjs";
6
- import { t as applyReleasePlan } from "./apply-release-plan-CCoCcpdv.mjs";
7
- import { t as publishPackages } from "./publish-pipeline-BGyQsVyw.mjs";
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-Bkh-igOJ.mjs";
2
+ import { a as loadConfig, n as findRoot, r as getBumpyDir, s as matchGlob } from "./config-D_4GYDJi.mjs";
3
+ import { a as writeBumpFile, n as parseBumpFile, o as discoverPackages, r as readBumpFiles } from "./bump-file-B9DpXK5X.mjs";
4
+ import { a as DependencyGraph, i as stripProtocol, n as bumpVersion, r as satisfies, t as assembleReleasePlan } from "./release-plan-mK7iGeGq.mjs";
5
+ import { a as prependToChangelog, i as loadFormatter, n as generateChangelogEntry, t as defaultFormatter } from "./changelog-A-EwWggW.mjs";
6
+ import { t as applyReleasePlan } from "./apply-release-plan-CmjqYo0t.mjs";
7
+ import { t as publishPackages } from "./publish-pipeline-BRnqVylg.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 };