@williamthorsen/release-kit 5.2.0 → 5.3.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/CHANGELOG.md +69 -25
- package/README.md +238 -44
- package/cliff.toml.template +4 -39
- package/dist/esm/.cache +1 -1
- package/dist/esm/bin/release-kit.js +59 -0
- package/dist/esm/buildChangelogEntries.js +6 -0
- package/dist/esm/buildEmptyReleaseEntry.d.ts +2 -0
- package/dist/esm/buildEmptyReleaseEntry.js +16 -0
- package/dist/esm/changelogJsonFile.d.ts +2 -0
- package/dist/esm/changelogJsonFile.js +11 -1
- package/dist/esm/changelogJsonUtils.d.ts +2 -1
- package/dist/esm/changelogJsonUtils.js +9 -0
- package/dist/esm/changelogOverrides.d.ts +53 -0
- package/dist/esm/changelogOverrides.js +424 -0
- package/dist/esm/checkWorkTypesDrift.js +3 -2
- package/dist/esm/createGithubReleaseCommand.js +0 -9
- package/dist/esm/defaults.js +1 -1
- package/dist/esm/generateChangelogs.d.ts +0 -3
- package/dist/esm/generateChangelogs.js +1 -35
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/loadConfig.d.ts +1 -1
- package/dist/esm/releasePrepare.js +68 -11
- package/dist/esm/releasePrepareMono.js +103 -56
- package/dist/esm/releasePrepareProject.d.ts +4 -1
- package/dist/esm/releasePrepareProject.js +74 -18
- package/dist/esm/renderChangelogMarkdown.d.ts +12 -0
- package/dist/esm/renderChangelogMarkdown.js +32 -0
- package/dist/esm/renderReleaseNotes.js +6 -1
- package/dist/esm/resolveReleaseNotesConfig.js +3 -1
- package/dist/esm/runGitCliff.d.ts +1 -0
- package/dist/esm/runGitCliff.js +7 -0
- package/dist/esm/syncWorkTypes.js +3 -2
- package/dist/esm/types.d.ts +98 -31
- package/dist/esm/types.js +60 -0
- package/dist/esm/validateConfig.js +84 -345
- package/dist/esm/validateOverridesCommand.d.ts +13 -0
- package/dist/esm/validateOverridesCommand.js +119 -0
- package/dist/esm/work-types.json +23 -17
- package/dist/esm/work-types.schema.json +28 -1
- package/dist/esm/workTypesData.d.ts +8 -0
- package/dist/esm/workTypesData.js +20 -17
- package/dist/esm/workTypesUtils.d.ts +1 -0
- package/dist/esm/workTypesUtils.js +8 -0
- package/package.json +4 -3
- package/dist/esm/writeSyntheticChangelog.d.ts +0 -9
- package/dist/esm/writeSyntheticChangelog.js +0 -27
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,51 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 5.3.0 — 2026-05-10
|
|
6
|
+
|
|
7
|
+
### 🎉 Features
|
|
8
|
+
|
|
9
|
+
- Enable editorial overrides for changelog entries (#387)
|
|
10
|
+
|
|
11
|
+
Allows `release-kit` consumers to skip or correct historical changelog entries by means of an overrides file.
|
|
12
|
+
|
|
13
|
+
- Decentralize changelog overrides to per-scope .meta/ files (#391)
|
|
14
|
+
|
|
15
|
+
Adds support for workspace-scoped editorial-override files for `release-kit`-generated changelogs. A repo-root file applies overrides to every workspace's changelog; a workspace-tier file applies only to that workspace.
|
|
16
|
+
|
|
17
|
+
- Add section markers and authenticated upstream fetch (#393)
|
|
18
|
+
|
|
19
|
+
A new `markers` block in `work-types.json` describes the breaking-changes emoji and label, making them available for use by consumers.
|
|
20
|
+
|
|
21
|
+
`work-types check` and `work-types sync` now authenticate when `GITHUB_TOKEN` is set, so they can reach private upstream repositories.
|
|
22
|
+
|
|
23
|
+
- Validate changelog overrides from the command line (#395)
|
|
24
|
+
|
|
25
|
+
Adds a `release-kit overrides validate` subcommand that audits every `.meta/changelog-overrides.json` file across the project root and per-workspace scopes in one pass. The command reports schema errors, ambiguous-prefix collisions, and stale-key warnings with tiered exit codes so CI can choose its own failure threshold. The same validation is also available via a library function exported by the package.
|
|
26
|
+
|
|
27
|
+
### 🐛 Bug fixes
|
|
28
|
+
|
|
29
|
+
- Suppress git-cliff stale-version warnings on prepare (#373)
|
|
30
|
+
|
|
31
|
+
Fixes an issue where `release-kit prepare` repeatedly printed git-cliff's "A new version of git-cliff is available" notice — twice per release unit, so 2 × N times for an N-package monorepo run — while never updating the locally cached git-cliff binary. Each `prepare` run now revalidates the npm cache once before any cliff work, so the binary stays current with upstream releases and the notice no longer surfaces on every per-workspace invocation.
|
|
32
|
+
|
|
33
|
+
- Use synthetic changelogs for forced empty-range releases (#376)
|
|
34
|
+
|
|
35
|
+
Fixes an issue where `release-kit prepare` with `--force`, `--bump=X`, or `--set-version` would invoke git-cliff against units that had no commits since their last tag, surfacing confusing `WARN git_cliff > There is already a tag (...)` lines (twice per affected unit) and silently leaving `CHANGELOG.md` and `.meta/changelog.json` stale. Empty-range bumps now write a synthetic `Notes / Forced version bump.` entry to both files instead of invoking git-cliff. Applies to all three release stages: single-package, per-workspace, and project. Prior changelog history is preserved on every path.
|
|
36
|
+
|
|
37
|
+
- Accept `breakingPolicies` field in config files (#394)
|
|
38
|
+
|
|
39
|
+
Fixes an issue where setting `breakingPolicies` in `release-kit.config.ts` was rejected as an unknown field, leaving per-work-type breaking-policy configuration unreachable from the config file. Each entry accepts `'forbidden'`, `'optional'`, or `'required'`; an empty object opts out of enforcement.
|
|
40
|
+
|
|
41
|
+
## 5.2.1 — 2026-05-05
|
|
42
|
+
|
|
43
|
+
### 🐛 Bug fixes
|
|
44
|
+
|
|
45
|
+
- Soft-skip tags with no changelog entry under --tags (#366)
|
|
46
|
+
|
|
47
|
+
Fixes an issue where `release-kit create-github-release --tags <tag>` exited 1 — failing the calling CI workflow — when the requested tag had no changelog entry. Tooling-only releases (those whose changelog generator legitimately omits an entry) are now soft-skipped with an info-level summary, the same as releases skipped because their entry has no audience-relevant content. Typo protection is preserved: passing an unknown tag to `--tags` still exits 1.
|
|
48
|
+
|
|
49
|
+
## 5.2.0 — 2026-05-04
|
|
6
50
|
|
|
7
51
|
### 🎉 Features
|
|
8
52
|
|
|
@@ -42,7 +86,7 @@ All notable changes to this project will be documented in this file.
|
|
|
42
86
|
|
|
43
87
|
Fixes an issue where running `audit-deps`, `nmr`, or `release-kit` from the locally built `dist/esm/` after a `git pull` could report a stale version. Each CLI now reads its version directly from its `package.json` at startup, so version reads stay in sync with the installed source without requiring a fresh `pnpm install` or rebuild.
|
|
44
88
|
|
|
45
|
-
##
|
|
89
|
+
## 5.1.0 — 2026-04-30
|
|
46
90
|
|
|
47
91
|
### 🎉 Features
|
|
48
92
|
|
|
@@ -102,7 +146,7 @@ All notable changes to this project will be documented in this file.
|
|
|
102
146
|
|
|
103
147
|
Documents the strict-prefix tag-prefix collision rule as a general validation rule that applies to every release-kit consumer declaring more than one tag prefix: across active workspaces, declared legacy identities, retired packages, and the optional `project` block. Previously, the rule appeared only inside the `Project releases` validation list.
|
|
104
148
|
|
|
105
|
-
##
|
|
149
|
+
## 5.0.0 — 2026-04-23
|
|
106
150
|
|
|
107
151
|
### 🎉 Features
|
|
108
152
|
|
|
@@ -114,11 +158,11 @@ All notable changes to this project will be documented in this file.
|
|
|
114
158
|
|
|
115
159
|
Adds release-notes injection to the configs scaffolded by `release-kit init`, so newly-onboarded consumers get the feature without having to discover or toggle the flag. The release-kit readyup kit gains a check that warns when a consumer's README is missing the marker pair where injected notes should land — without those markers, injection silently prepends to the top of the file, pushing the README's title below the notes.
|
|
116
160
|
|
|
117
|
-
- Split GitHub Release creation into its own workflow (#272)
|
|
161
|
+
- 🚨 **Breaking:** Split GitHub Release creation into its own workflow (#272)
|
|
118
162
|
|
|
119
163
|
Splits GitHub Release creation out of release-kit publish into a dedicated release-kit create-github-release CLI command and a matching reusable GitHub Actions workflow. Consumers that do not publish to npm can now create Releases independently, and the contents: write permission required to create a Release no longer leaks into the publish path.
|
|
120
164
|
|
|
121
|
-
- Replace --only with --tags on release-kit publish and push (#273)
|
|
165
|
+
- 🚨 **Breaking:** Replace --only with --tags on release-kit publish and push (#273)
|
|
122
166
|
|
|
123
167
|
`release-kit publish` and `release-kit push` now filter by full tag name via `--tags=<tag1,tag2>` instead of workspace directory name via `--only=<dir>`, matching the shape already used by `create-github-release`. Callers pass the tag they care about (e.g., `core-v1.3.0`) directly, with no translation step back to the publishing workspace's directory name. The reusable workflow gains an optional `tags:` input, and the internal `publish.yaml` caller now passes `tags: ${{ github.ref_name }}`, making the publish scope explicit rather than relying on the single-tag fetch default of `actions/checkout@v6`.
|
|
124
168
|
|
|
@@ -134,13 +178,13 @@ All notable changes to this project will be documented in this file.
|
|
|
134
178
|
|
|
135
179
|
Adds a one-shot migration tool, `migrate-tag-prefixes.sh`, shipped inside the release-kit package. The tool creates additive annotated-tag aliases under release-kit's new unscoped-package-name prefix that point at the same commits as the previous directory-basename tags, bridging the gap so post-migration `getCommitsSinceTarget` calls can resolve prior releases.
|
|
136
180
|
|
|
137
|
-
- Add legacyTagPrefixes config field (#289)
|
|
181
|
+
- 🚨 **Breaking:** Add legacyTagPrefixes config field (#289)
|
|
138
182
|
|
|
139
183
|
Replaces the v4 → v5 tag-prefix migration mechanism (tag aliasing via `migrate-tag-prefixes.sh`) with a declarative `legacyTagPrefixes` config field. release-kit now searches for both legacy and modern prefixes when generating changelogs.
|
|
140
184
|
|
|
141
185
|
Adds a companion `release-kit show-tag-prefixes` CLI command that renders a per-workspace table of derived and declared legacy prefixes, flags cross-workspace collisions, and surfaces undeclared candidate prefixes with a copy-pasteable config snippet. `release-kit prepare` gains a one-line hint pointing operators to `show-tag-prefixes` when a workspace has no baseline tag but the repo contains candidate-shaped tags.
|
|
142
186
|
|
|
143
|
-
- Replace `legacyTagPrefixes` with `legacyIdentities` (#297)
|
|
187
|
+
- 🚨 **Breaking:** Replace `legacyTagPrefixes` with `legacyIdentities` (#297)
|
|
144
188
|
|
|
145
189
|
Replaces the per-workspace `legacyTagPrefixes: string[]` field with `legacyIdentities: LegacyIdentity[]`, a structured array of complete `(name, tagPrefix)` historical snapshots. Each legacy identity is now a self-consistent record of what a workspace used to be called and how its tags used to be prefixed, so a workspace that has been renamed (npm name change, tag-prefix change, or both) carries one entry per prior identity.
|
|
146
190
|
|
|
@@ -160,15 +204,15 @@ All notable changes to this project will be documented in this file.
|
|
|
160
204
|
|
|
161
205
|
### ♻️ Refactoring
|
|
162
206
|
|
|
163
|
-
- Rename `component` to `workspace` in config API and internals (#296)
|
|
207
|
+
- 🚨 **Breaking:** Rename `component` to `workspace` in config API and internals (#296)
|
|
164
208
|
|
|
165
209
|
Renames release-kit's per-workspace vocabulary from "component" to "workspace" throughout the public API, internal types, validation messages, CLI help, init templates, and documentation. Behavior is unchanged; only identifiers, error-message strings, scaffolded template text, and prose have been changed.
|
|
166
210
|
|
|
167
|
-
- Rename `node-monorepo-core` to `nmr-core` (#304)
|
|
211
|
+
- 🚨 **Breaking:** Rename `node-monorepo-core` to `nmr-core` (#304)
|
|
168
212
|
|
|
169
213
|
Renames the shared-utilities package from `@williamthorsen/node-monorepo-core` to `@williamthorsen/nmr-core`, aligning it with the repository's `nmr-*` naming convention. The package's functionality and version are unchanged; only the published name differs.
|
|
170
214
|
|
|
171
|
-
##
|
|
215
|
+
## 4.8.0 — 2026-04-17
|
|
172
216
|
|
|
173
217
|
### 🎉 Features
|
|
174
218
|
|
|
@@ -182,7 +226,7 @@ All notable changes to this project will be documented in this file.
|
|
|
182
226
|
|
|
183
227
|
Fixes silent swallowing of unexpected filesystem errors in `detectRepoType`. Previously, errors like `EACCES` (permission denied) or `EMFILE` (too many open files) when reading `package.json` were caught and discarded, causing the function to silently return `'single-package'` instead of surfacing the problem.
|
|
184
228
|
|
|
185
|
-
##
|
|
229
|
+
## 4.7.0 — 2026-04-16
|
|
186
230
|
|
|
187
231
|
### 🎉 Features
|
|
188
232
|
|
|
@@ -190,7 +234,7 @@ All notable changes to this project will be documented in this file.
|
|
|
190
234
|
|
|
191
235
|
Commits prefixed with `##` are now included in changelogs without requiring a ticket ID. This supports ad-hoc changes made during interactive sessions where creating a ticket and PR adds undesired overhead.
|
|
192
236
|
|
|
193
|
-
##
|
|
237
|
+
## 4.6.0 — 2026-04-15
|
|
194
238
|
|
|
195
239
|
### 🎉 Features
|
|
196
240
|
|
|
@@ -224,7 +268,7 @@ All notable changes to this project will be documented in this file.
|
|
|
224
268
|
|
|
225
269
|
Prepares the repository for reliable tag-triggered npm publishing by adding missing package metadata, standardizing licensing, and introducing a readyup kit that validates publish readiness across all packages.
|
|
226
270
|
|
|
227
|
-
##
|
|
271
|
+
## 4.5.1 — 2026-04-10
|
|
228
272
|
|
|
229
273
|
### 🐛 Bug fixes
|
|
230
274
|
|
|
@@ -232,7 +276,7 @@ All notable changes to this project will be documented in this file.
|
|
|
232
276
|
|
|
233
277
|
Fixes three issues in `release-kit sync-labels init` scaffolding output that cause immediate errors for consumers: adds missing workflow permissions, corrects config template indentation from 2 to 4 spaces, and switches YAML quoting from double to single quotes.
|
|
234
278
|
|
|
235
|
-
##
|
|
279
|
+
## 4.4.0 — 2026-04-04
|
|
236
280
|
|
|
237
281
|
### 🎉 Features
|
|
238
282
|
|
|
@@ -260,7 +304,7 @@ All notable changes to this project will be documented in this file.
|
|
|
260
304
|
|
|
261
305
|
Restructures the release-kit README to match the documentation standard established by the preflight README (#114). Reorders sections to follow the cross-package convention, converts CLI flag listings from code blocks to tables, adds representative `prepare --dry-run` output to the quick start, and condenses ~90 lines of inline workflow YAML into a summary with an inputs table and trigger examples. Fixes several accuracy gaps found by verifying documentation against source.
|
|
262
306
|
|
|
263
|
-
##
|
|
307
|
+
## 4.0.0 — 2026-04-02
|
|
264
308
|
|
|
265
309
|
### 🎉 Features
|
|
266
310
|
|
|
@@ -268,11 +312,11 @@ All notable changes to this project will be documented in this file.
|
|
|
268
312
|
|
|
269
313
|
Renames all three reusable GitHub Actions workflow files from the inconsistent `-workflow.yaml`/bare `.yaml` convention to a uniform `.reusable.yaml` suffix. Updates all references across caller workflows, release-kit templates, tests, preflight collection, and documentation. Scaffolds the sync-labels caller workflow and labels file for this repo. Deletes superseded legacy files.
|
|
270
314
|
|
|
271
|
-
##
|
|
315
|
+
## 3.0.0 — 2026-03-29
|
|
272
316
|
|
|
273
317
|
### 🎉 Features
|
|
274
318
|
|
|
275
|
-
- Support conventional-commit format in commit parsing (#85)
|
|
319
|
+
- 🚨 **Breaking:** Support conventional-commit format in commit parsing (#85)
|
|
276
320
|
|
|
277
321
|
Adds support for the conventional commits format (`type(scope): description`) alongside the existing pipe-prefixed format (`scope|type: description`) in release-kit's commit parser. Renames `workspace` to `scope` throughout release-kit types, config, validation, and consumers.
|
|
278
322
|
|
|
@@ -302,7 +346,7 @@ All notable changes to this project will be documented in this file.
|
|
|
302
346
|
|
|
303
347
|
Restructures `releasePrepareMono` from a single-pass loop into a phased pipeline that automatically patch-bumps workspace dependents when a component is released. A reverse dependency graph is built from `workspace:` references in `dependencies` and `peerDependencies`, then BFS propagation walks upward from bumped components to their dependents. Propagated-only components receive synthetic changelog entries instead of git-cliff invocations.
|
|
304
348
|
|
|
305
|
-
##
|
|
349
|
+
## 2.3.2 — 2026-03-28
|
|
306
350
|
|
|
307
351
|
### 🐛 Bug fixes
|
|
308
352
|
|
|
@@ -310,7 +354,7 @@ All notable changes to this project will be documented in this file.
|
|
|
310
354
|
|
|
311
355
|
Prevents `releasePrepareMono` and `releasePrepare` from silently skipping components whose commits have unparseable messages. Adds ticket-prefix stripping to `parseCommitMessage` (mirroring cliff.toml's `commit_preprocessors`), a patch-floor safety net when commits exist but none parse, and unparseable-commit reporting in `reportPrepare`.
|
|
312
356
|
|
|
313
|
-
##
|
|
357
|
+
## 2.3.0 — 2026-03-28
|
|
314
358
|
|
|
315
359
|
### 🎉 Features
|
|
316
360
|
|
|
@@ -338,7 +382,7 @@ All notable changes to this project will be documented in this file.
|
|
|
338
382
|
|
|
339
383
|
Adds three unit tests to `releasePrepare.unit.test.ts` covering previously untested code paths: the `bumpOverride` bypass of commit-based bump detection, custom `tagPrefix` propagation into tags, and tag computation in dry-run mode.
|
|
340
384
|
|
|
341
|
-
##
|
|
385
|
+
## 2.2.0 — 2026-03-27
|
|
342
386
|
|
|
343
387
|
### 🎉 Features
|
|
344
388
|
|
|
@@ -403,11 +447,11 @@ All notable changes to this project will be documented in this file.
|
|
|
403
447
|
|
|
404
448
|
Replaces the legacy workspace script runner and ~25 root `package.json` scripts with `nmr`, the monorepo's own context-aware script runner. Root scripts are reduced to 4 (`prepare`, `postinstall`, `ci`, `bootstrap`), packages use direct build commands for bootstrap, and release-kit declares tier-3 test overrides for its integration test configs.
|
|
405
449
|
|
|
406
|
-
##
|
|
450
|
+
## 2.1.0 — 2026-03-17
|
|
407
451
|
|
|
408
452
|
### 🎉 Features
|
|
409
453
|
|
|
410
|
-
- Slim down release workflow by removing unnecessary pnpm install (#21)
|
|
454
|
+
- 🚨 **Breaking:** Slim down release workflow by removing unnecessary pnpm install (#21)
|
|
411
455
|
|
|
412
456
|
Make release-kit self-contained by invoking git-cliff via `npx --yes` instead of requiring it on PATH, and by appending modified file paths to the format command so lightweight formatters like `npx prettier --write` work without a full `pnpm install`. Update init templates, README, and consuming repo config/workflow to reference workflow v3.
|
|
413
457
|
|
|
@@ -415,7 +459,7 @@ All notable changes to this project will be documented in this file.
|
|
|
415
459
|
|
|
416
460
|
Add a `--force` flag to `release-kit prepare` that bypasses the "no commits since last tag" check in monorepo mode, allowing version bumping and changelog generation to proceed even when no new commits are found since the last release tag. The flag requires `--bump` since there are no commits to infer bump type from. The local release workflow gains a `force` boolean input for future use.
|
|
417
461
|
|
|
418
|
-
- Move reusable release workflow into repo (#26)
|
|
462
|
+
- 🚨 **Breaking:** Move reusable release workflow into repo (#26)
|
|
419
463
|
|
|
420
464
|
Moves the reusable release workflow from `williamthorsen/.github` into this repo as `release-workflow.yaml`, stripping all pnpm-related steps since release-kit now runs git-cliff and prettier via `npx` internally. Updates this repo's caller workflow to use a relative path and update init templates to reference the new location. Establishes a naming convention (`{name}-workflow.yaml` for reusable, `{name}.yaml` for callers) and independent versioning strategy (`{name}-workflow-v{major}` tags), documented in `.github/workflows/README.md`.
|
|
421
465
|
|
|
@@ -429,7 +473,7 @@ All notable changes to this project will be documented in this file.
|
|
|
429
473
|
|
|
430
474
|
Addresses five code quality issues and a test coverage gap identified during the release-kit migration (#5). Extracts a duplicated `isRecord` type guard into a shared module, eliminates a double-read in `bumpAllVersions`, improves error handling in `usesPnpm` by replacing a silent catch with a structured error boundary, removes an unreachable `'feature'` pattern from version defaults, and adds an integration test for scaffold template path resolution.
|
|
431
475
|
|
|
432
|
-
##
|
|
476
|
+
## 1.0.1 — 2026-03-14
|
|
433
477
|
|
|
434
478
|
### 🎉 Features
|
|
435
479
|
|
|
@@ -437,4 +481,4 @@ All notable changes to this project will be documented in this file.
|
|
|
437
481
|
|
|
438
482
|
Migrates the complete `@williamthorsen/release-kit` package (v1.0.1) from `williamthorsen/toolbelt` into `packages/release-kit/`, adds shebang preservation to the shared esbuild plugin for CLI binaries, and sets up dogfooding infrastructure so this monorepo uses release-kit for its own releases.
|
|
439
483
|
|
|
440
|
-
<!--
|
|
484
|
+
<!-- Generated by release-kit. Do not edit this file. Use .meta/changelog-overrides.json to override entries. -->
|