@williamthorsen/release-kit 10.2.0 → 10.2.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.
Files changed (49) hide show
  1. package/.readyup/kits/default.js +1 -1
  2. package/.readyup/kits/npm-auto-publish.js +135 -23
  3. package/.readyup/manifest.json +3 -3
  4. package/CHANGELOG.md +30 -0
  5. package/README.md +12 -8
  6. package/dist/esm/assertCleanWorkingTree.js +2 -0
  7. package/dist/esm/buildChangelogEntries.js +2 -2
  8. package/dist/esm/buildReleaseSummary.d.ts +1 -1
  9. package/dist/esm/changelogJsonFile.d.ts +1 -3
  10. package/dist/esm/changelogJsonFile.js +4 -18
  11. package/dist/esm/commitCommand.js +10 -17
  12. package/dist/esm/createTags.js +6 -16
  13. package/dist/esm/detectUndeclaredTagPrefixes.js +2 -0
  14. package/dist/esm/getCommitsSinceTarget.js +3 -0
  15. package/dist/esm/init/checks.js +2 -1
  16. package/dist/esm/injectReleaseNotesIntoReadme.d.ts +2 -0
  17. package/dist/esm/injectReleaseNotesIntoReadme.js +13 -10
  18. package/dist/esm/planReleaseNotesPreviews.d.ts +13 -0
  19. package/dist/esm/planReleaseNotesPreviews.js +43 -0
  20. package/dist/esm/planVersionBump.d.ts +9 -0
  21. package/dist/esm/{bumpAllVersions.js → planVersionBump.js} +15 -26
  22. package/dist/esm/prepareCommand.d.ts +0 -4
  23. package/dist/esm/prepareCommand.js +51 -45
  24. package/dist/esm/previewTagPrefixes.js +2 -0
  25. package/dist/esm/pushRelease.js +2 -0
  26. package/dist/esm/releaseFiles.d.ts +4 -0
  27. package/dist/esm/releaseFiles.js +34 -0
  28. package/dist/esm/releasePlan.d.ts +10 -0
  29. package/dist/esm/releasePlan.js +53 -0
  30. package/dist/esm/releasePrepare.d.ts +3 -3
  31. package/dist/esm/releasePrepare.js +53 -54
  32. package/dist/esm/releasePrepareMono.d.ts +3 -2
  33. package/dist/esm/releasePrepareMono.js +48 -52
  34. package/dist/esm/releasePrepareProject.d.ts +3 -0
  35. package/dist/esm/releasePrepareProject.js +33 -37
  36. package/dist/esm/renderChangelogMarkdown.d.ts +0 -7
  37. package/dist/esm/renderChangelogMarkdown.js +0 -13
  38. package/dist/esm/reportPrepare.d.ts +5 -1
  39. package/dist/esm/reportPrepare.js +36 -17
  40. package/dist/esm/resolveReleaseTags.js +5 -1
  41. package/dist/esm/runGitCliff.d.ts +1 -2
  42. package/dist/esm/runGitCliff.js +11 -11
  43. package/dist/esm/sync-labels/syncCommand.js +2 -2
  44. package/dist/esm/types.d.ts +4 -9
  45. package/dist/esm/workTypesData.d.ts +1 -1
  46. package/package.json +2 -2
  47. package/dist/esm/bumpAllVersions.d.ts +0 -3
  48. package/dist/esm/writeReleaseNotesPreviews.d.ts +0 -18
  49. package/dist/esm/writeReleaseNotesPreviews.js +0 -63
@@ -39,11 +39,6 @@ export interface PropagationSource {
39
39
  packageName: string;
40
40
  newVersion: string;
41
41
  }
42
- export interface BumpResult {
43
- currentVersion: string;
44
- newVersion: string;
45
- files: string[];
46
- }
47
42
  export interface PolicyViolation {
48
43
  commitHash: string;
49
44
  commitSubject: string;
@@ -64,6 +59,7 @@ export interface ReleasedWorkspaceResult {
64
59
  tag: string;
65
60
  bumpedFiles: string[];
66
61
  changelogFiles: string[];
62
+ previewFiles?: string[];
67
63
  commits?: Commit[];
68
64
  bumpOverride?: ReleaseType;
69
65
  propagatedFrom?: PropagationSource[];
@@ -93,6 +89,7 @@ export interface ReleasedProjectResult {
93
89
  tag: string;
94
90
  bumpedFiles: string[];
95
91
  changelogFiles: string[];
92
+ previewFiles?: string[];
96
93
  commits: Commit[];
97
94
  bumpOverride?: ReleaseType;
98
95
  }
@@ -111,10 +108,8 @@ export interface PrepareResult {
111
108
  tags: string[];
112
109
  formatCommand?: {
113
110
  command: string;
114
- executed: boolean;
115
111
  files: string[];
116
112
  } | undefined;
117
- dryRun: boolean;
118
113
  warnings?: string[] | undefined;
119
114
  project?: ProjectPrepareResult | undefined;
120
115
  }
@@ -167,8 +162,8 @@ export declare const versionPatternsSchema: z.ZodObject<{
167
162
  minor: z.ZodArray<z.ZodString>;
168
163
  }, z.core.$strict>;
169
164
  export declare const breakingPolicyValueSchema: z.ZodEnum<{
170
- optional: "optional";
171
165
  forbidden: "forbidden";
166
+ optional: "optional";
172
167
  required: "required";
173
168
  }>;
174
169
  export declare const labelSpecSchema: z.ZodObject<{
@@ -186,8 +181,8 @@ export declare const repoLabelsSchema: z.ZodObject<{
186
181
  export type RepoLabelsConfig = z.infer<typeof repoLabelsSchema>;
187
182
  export declare const releaseKitConfigSchema: z.ZodObject<{
188
183
  breakingPolicies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
189
- optional: "optional";
190
184
  forbidden: "forbidden";
185
+ optional: "optional";
191
186
  required: "required";
192
187
  }>>>;
193
188
  changelogJson: z.ZodOptional<z.ZodObject<{
@@ -15,8 +15,8 @@ export interface WorkTypesData {
15
15
  tiers: string[];
16
16
  types: WorkTypeEntry[];
17
17
  markers: {
18
- breaking: MarkerEntry;
19
18
  [key: string]: MarkerEntry;
19
+ breaking: MarkerEntry;
20
20
  };
21
21
  }
22
22
  export declare const WORK_TYPES_DATA: WorkTypesData;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@williamthorsen/release-kit",
3
- "version": "10.2.0",
3
+ "version": "10.2.2",
4
4
  "description": "Version-bumping and changelog-generation toolkit for release workflows",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/williamthorsen/node-monorepo-tools/tree/main/packages/release-kit#readme",
@@ -44,7 +44,7 @@
44
44
  "semver": "7.8.5",
45
45
  "yaml": "2.9.0",
46
46
  "zod": "4.4.3",
47
- "@williamthorsen/nmr-core": "0.9.0"
47
+ "@williamthorsen/nmr-core": "0.9.2"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@types/semver": "7.7.1",
@@ -1,3 +0,0 @@
1
- import type { BumpResult, ReleaseType } from './types.js';
2
- export declare function bumpAllVersions(packageFiles: readonly string[], releaseType: ReleaseType, dryRun: boolean): BumpResult;
3
- export declare function setAllVersions(packageFiles: readonly string[], newVersion: string, dryRun: boolean): BumpResult;
@@ -1,18 +0,0 @@
1
- export interface WriteReleaseNotesPreviewsOptions {
2
- workspacePath: string;
3
- tag: string;
4
- changelogJsonPath: string;
5
- sectionOrder: string[];
6
- dryRun: boolean;
7
- }
8
- export interface PreviewFileResult {
9
- filePath: string;
10
- outcome: 'created' | 'overwritten' | 'skipped-no-readme' | 'failed' | 'dry-run';
11
- error?: string;
12
- }
13
- export interface WriteReleaseNotesPreviewsResult {
14
- injectedReadme?: PreviewFileResult;
15
- releaseNotes?: PreviewFileResult;
16
- renderSkipped: boolean;
17
- }
18
- export declare function writeReleaseNotesPreviews(options: WriteReleaseNotesPreviewsOptions): WriteReleaseNotesPreviewsResult;
@@ -1,63 +0,0 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import path from 'node:path';
3
- import { reportError, writeFileWithCheck } from '@williamthorsen/nmr-core';
4
- import { extractVersion } from "./changelogJsonUtils.js";
5
- import { dim } from "./format.js";
6
- import { renderInjectedReadme } from "./injectReleaseNotesIntoReadme.js";
7
- export function writeReleaseNotesPreviews(options) {
8
- const { workspacePath, tag, changelogJsonPath, sectionOrder, dryRun } = options;
9
- const version = extractVersion(tag);
10
- const readmePath = path.join(workspacePath, 'README.md');
11
- let readmeExists = existsSync(readmePath);
12
- let readmeUnreadable = false;
13
- let readmeContent = '';
14
- if (readmeExists) {
15
- try {
16
- readmeContent = readFileSync(readmePath, 'utf8');
17
- }
18
- catch (error) {
19
- const message = error instanceof Error ? error.message : String(error);
20
- console.warn(`Warning: failed to read ${readmePath}: ${message}; skipping injected-README preview`);
21
- readmeExists = false;
22
- readmeUnreadable = true;
23
- }
24
- }
25
- const rendered = renderInjectedReadme(readmeContent, changelogJsonPath, tag, sectionOrder);
26
- if (rendered === undefined) {
27
- return { renderSkipped: true };
28
- }
29
- const docsDir = path.join(workspacePath, 'docs');
30
- const readmePreviewPath = path.join(docsDir, `README.v${version}.md`);
31
- const releaseNotesPreviewPath = path.join(docsDir, `RELEASE_NOTES.v${version}.md`);
32
- let injectedReadme;
33
- if (readmeExists) {
34
- injectedReadme = writePreviewFile(readmePreviewPath, rendered.injectedReadme, dryRun);
35
- }
36
- else {
37
- if (!readmeUnreadable) {
38
- console.warn(`Warning: ${readmePath} not found; skipping injected-README preview but still writing standalone release notes`);
39
- }
40
- injectedReadme = { filePath: readmePreviewPath, outcome: 'skipped-no-readme' };
41
- }
42
- const releaseNotesContent = rendered.releaseNotesMarkdown.endsWith('\n')
43
- ? rendered.releaseNotesMarkdown
44
- : `${rendered.releaseNotesMarkdown}\n`;
45
- const releaseNotes = writePreviewFile(releaseNotesPreviewPath, releaseNotesContent, dryRun);
46
- return { injectedReadme, releaseNotes, renderSkipped: false };
47
- }
48
- function writePreviewFile(filePath, content, dryRun) {
49
- if (dryRun) {
50
- console.info(dim(` [dry-run] Would write ${filePath}`));
51
- return { filePath, outcome: 'dry-run' };
52
- }
53
- const result = writeFileWithCheck(filePath, content, { dryRun: false, overwrite: true });
54
- if (result.outcome === 'failed') {
55
- reportError(`Failed to write ${filePath}: ${result.error ?? 'unknown error'}`);
56
- return { filePath, outcome: 'failed', ...(result.error !== undefined && { error: result.error }) };
57
- }
58
- if (result.outcome === 'created' || result.outcome === 'overwritten') {
59
- console.info(dim(` Wrote ${filePath}`));
60
- return { filePath, outcome: result.outcome };
61
- }
62
- return { filePath, outcome: 'failed', error: `unexpected outcome: ${result.outcome}` };
63
- }