@williamthorsen/release-kit 14.1.0 → 14.2.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.
Files changed (92) hide show
  1. package/.meta/changelog.json +125 -0
  2. package/.readyup/kits/default.js +63 -6
  3. package/.readyup/kits/npm-auto-publish.js +47 -35
  4. package/.readyup/manifest.json +12 -7
  5. package/CHANGELOG.md +33 -0
  6. package/README.md +18 -8
  7. package/dist/esm/assertTaggedBaseline.d.ts +2 -2
  8. package/dist/esm/attachChangelogDiagnostics.d.ts +2 -2
  9. package/dist/esm/bin/release-kit.js +5 -4
  10. package/dist/esm/buildChangelogEntries.d.ts +3 -3
  11. package/dist/esm/buildChangelogEntries.js +3 -3
  12. package/dist/esm/buildDependencyGraph.d.ts +11 -11
  13. package/dist/esm/buildDependencyGraph.js +13 -13
  14. package/dist/esm/buildReleaseSummary.d.ts +3 -3
  15. package/dist/esm/buildReleaseSummary.js +4 -12
  16. package/dist/esm/changelogArchive.d.ts +14 -0
  17. package/dist/esm/changelogArchive.js +21 -0
  18. package/dist/esm/changelogJsonFile.d.ts +2 -2
  19. package/dist/esm/changelogOverrides.d.ts +9 -8
  20. package/dist/esm/changelogOverrides.js +3 -6
  21. package/dist/esm/createGithubReleaseCommand.d.ts +2 -1
  22. package/dist/esm/createGithubReleaseCommand.js +7 -4
  23. package/dist/esm/deriveDirectoryConfig.d.ts +13 -0
  24. package/dist/esm/deriveDirectoryConfig.js +59 -0
  25. package/dist/esm/deriveWorkspaceConfig.js +0 -1
  26. package/dist/esm/discoverWorkspaces.d.ts +3 -3
  27. package/dist/esm/findTransitiveDependents.js +3 -3
  28. package/dist/esm/findUnroutedEntryScopes.d.ts +2 -2
  29. package/dist/esm/formatDirectoryPublishSkip.d.ts +3 -0
  30. package/dist/esm/formatDirectoryPublishSkip.js +3 -0
  31. package/dist/esm/formatExcludedSkip.d.ts +5 -2
  32. package/dist/esm/formatExcludedSkip.js +2 -2
  33. package/dist/esm/formatProjectPublishSkip.d.ts +3 -0
  34. package/dist/esm/formatProjectPublishSkip.js +3 -0
  35. package/dist/esm/generateChangelogs.d.ts +7 -7
  36. package/dist/esm/generateChangelogs.js +2 -2
  37. package/dist/esm/help/prepareHelp.d.ts +1 -1
  38. package/dist/esm/help/prepareHelp.js +7 -5
  39. package/dist/esm/init/templates.js +1 -1
  40. package/dist/esm/loadConfig.d.ts +12 -12
  41. package/dist/esm/loadConfig.js +79 -30
  42. package/dist/esm/prepareCommand.d.ts +1 -1
  43. package/dist/esm/prepareCommand.js +47 -46
  44. package/dist/esm/prepareTarget.d.ts +103 -0
  45. package/dist/esm/prepareTarget.js +274 -0
  46. package/dist/esm/previewTagPrefixes.d.ts +5 -3
  47. package/dist/esm/previewTagPrefixes.js +58 -13
  48. package/dist/esm/propagateBumps.js +1 -1
  49. package/dist/esm/publishCommand.js +13 -1
  50. package/dist/esm/readChangelogSections.d.ts +6 -4
  51. package/dist/esm/readChangelogSections.js +18 -4
  52. package/dist/esm/releasePlan.d.ts +4 -2
  53. package/dist/esm/releasePlan.js +34 -12
  54. package/dist/esm/releasePrepareTargets.d.ts +47 -0
  55. package/dist/esm/releasePrepareTargets.js +335 -0
  56. package/dist/esm/renderChangelogMarkdown.d.ts +23 -0
  57. package/dist/esm/renderChangelogMarkdown.js +47 -11
  58. package/dist/esm/reportPrepare.d.ts +2 -3
  59. package/dist/esm/reportPrepare.js +24 -12
  60. package/dist/esm/resolveCommandTags.d.ts +3 -1
  61. package/dist/esm/resolveCommandTags.js +15 -22
  62. package/dist/esm/resolveReleaseDeclaration.d.ts +45 -0
  63. package/dist/esm/resolveReleaseDeclaration.js +153 -0
  64. package/dist/esm/resolveReleaseTags.d.ts +14 -3
  65. package/dist/esm/resolveReleaseTags.js +36 -15
  66. package/dist/esm/resolveReleaseTargets.d.ts +29 -0
  67. package/dist/esm/resolveReleaseTargets.js +131 -0
  68. package/dist/esm/sync-labels/generateCommand.js +2 -1
  69. package/dist/esm/sync-labels/resolveLabels.d.ts +4 -3
  70. package/dist/esm/sync-labels/resolveLabels.js +30 -1
  71. package/dist/esm/sync-labels/types.d.ts +2 -0
  72. package/dist/esm/types.d.ts +251 -167
  73. package/dist/esm/types.js +22 -0
  74. package/dist/esm/validateConfig.js +80 -21
  75. package/dist/esm/validateOverridesCommand.d.ts +1 -1
  76. package/dist/esm/validateOverridesCommand.js +17 -28
  77. package/docs/api.md +25 -58
  78. package/docs/changelogs.md +26 -6
  79. package/docs/configuration.md +79 -16
  80. package/docs/labels.md +25 -2
  81. package/docs/project-releases.md +42 -2
  82. package/docs/publishing.md +3 -3
  83. package/docs/releasing.md +4 -4
  84. package/docs/work-types.md +1 -1
  85. package/package.json +2 -2
  86. package/presets/labels/common.yaml +11 -0
  87. package/dist/esm/releasePrepare.d.ts +0 -36
  88. package/dist/esm/releasePrepare.js +0 -230
  89. package/dist/esm/releasePrepareMono.d.ts +0 -29
  90. package/dist/esm/releasePrepareMono.js +0 -503
  91. package/dist/esm/releasePrepareProject.d.ts +0 -47
  92. package/dist/esm/releasePrepareProject.js +0 -164
@@ -1,164 +0,0 @@
1
- import { join as joinPath } from 'node:path';
2
- import { assertTaggedBaseline, findUntaggedBaseline } from "./assertTaggedBaseline.js";
3
- import { attachChangelogDiagnostics } from "./attachChangelogDiagnostics.js";
4
- import { readReleaseHistory, toReleaseEntries } from "./buildChangelogEntries.js";
5
- import { mergeChangelogEntriesWithDisk, renderChangelogJson, resolveChangelogJsonPath } from "./changelogJsonFile.js";
6
- import { applyChangelogOverrides } from "./changelogOverrides.js";
7
- import { decideRelease } from "./decideRelease.js";
8
- import { DEFAULT_WORK_TYPES } from "./defaults.js";
9
- import { deriveSectionOrder } from "./deriveReleaseNotesConfig.js";
10
- import { planReleaseNotesPreviews } from "./planReleaseNotesPreviews.js";
11
- import { planVersionBump } from "./planVersionBump.js";
12
- import { planPreservedSections } from "./readChangelogSections.js";
13
- import { renderChangelogMarkdown } from "./renderChangelogMarkdown.js";
14
- const ROOT_PACKAGE_FILE = './package.json';
15
- const ROOT_CHANGELOG_PATH = '.';
16
- export function releasePrepareProject(args) {
17
- const { config, options, modifiedFiles, writes, tags } = args;
18
- const { rootOverrides, overrideWarnings, globalMatchedRootKeys, warnings } = resolveOptionalOverrideArgs(args);
19
- const { bumpOverride, withReleaseNotes, force } = options;
20
- const project = config.project;
21
- if (project === undefined) {
22
- throw new Error('releasePrepareProject called without a configured project block');
23
- }
24
- const workTypes = config.workTypes ?? { ...DEFAULT_WORK_TYPES };
25
- const history = readReleaseHistory(config, { tagPrefixes: [project.tagPrefix], paths: project.paths });
26
- assertTaggedBaseline([
27
- findUntaggedBaseline({
28
- label: 'project',
29
- packageFiles: [ROOT_PACKAGE_FILE],
30
- changelogPaths: [ROOT_CHANGELOG_PATH],
31
- tagPrefixes: [project.tagPrefix],
32
- previousTag: history.previousTag,
33
- }, config),
34
- ]);
35
- const { commits, diagnostics, parsedCommitCount, unparseableCommits } = history.unreleased;
36
- const tag = history.previousTag;
37
- const since = tag === undefined ? '(no previous release found)' : `since ${tag}`;
38
- const decision = decideRelease({
39
- naturalBump: history.unreleased.bump,
40
- commitCount: commits.length,
41
- force,
42
- bumpOverride,
43
- skipReasons: {
44
- noCommits: `No commits ${since}. Pass --force to release at patch. Skipping.`,
45
- noBumpWorthy: `No bump-worthy commits ${since}. Pass --force to release at patch (or --force --bump=X for a different level). Skipping.`,
46
- },
47
- });
48
- if (decision.outcome === 'skip') {
49
- const skipped = {
50
- status: 'skipped',
51
- commitCount: commits.length,
52
- parsedCommitCount,
53
- skipReason: decision.skipReason,
54
- };
55
- if (tag !== undefined) {
56
- skipped.previousTag = tag;
57
- }
58
- if (unparseableCommits !== undefined) {
59
- skipped.unparseableCommits = unparseableCommits;
60
- }
61
- attachChangelogDiagnostics(skipped, diagnostics);
62
- return skipped;
63
- }
64
- const { releaseType } = decision;
65
- const bump = planVersionBump([ROOT_PACKAGE_FILE], releaseType);
66
- writes.push(...bump.writes);
67
- const newTag = `${project.tagPrefix}${bump.newVersion}`;
68
- const changelogs = planProjectChangelogs({
69
- config,
70
- history,
71
- newTag,
72
- rootOverrides,
73
- overrideWarnings,
74
- globalMatchedRootKeys,
75
- });
76
- const { changelogFiles, changelogJsonFiles } = changelogs;
77
- writes.push(...changelogs.writes);
78
- const previewFiles = [];
79
- if (withReleaseNotes === true && config.changelogJson.enabled && changelogJsonFiles.length > 0) {
80
- const previews = planReleaseNotesPreviews({
81
- workspacePath: ROOT_CHANGELOG_PATH,
82
- tag: newTag,
83
- entries: changelogs.entries,
84
- sectionOrder: deriveSectionOrder(workTypes),
85
- });
86
- writes.push(...previews.writes);
87
- warnings.push(...previews.warnings);
88
- previewFiles.push(...previews.writes.map((write) => write.path));
89
- }
90
- tags.push(newTag);
91
- modifiedFiles.push(ROOT_PACKAGE_FILE, ...changelogFiles, ...changelogJsonFiles);
92
- const result = {
93
- status: 'released',
94
- commitCount: commits.length,
95
- parsedCommitCount,
96
- releaseType,
97
- currentVersion: bump.currentVersion,
98
- newVersion: bump.newVersion,
99
- tag: newTag,
100
- bumpedFiles: bump.writes.map((write) => write.path),
101
- changelogFiles,
102
- commits,
103
- };
104
- if (previewFiles.length > 0) {
105
- result.previewFiles = previewFiles;
106
- }
107
- if (changelogs.changelogPreservation.length > 0) {
108
- result.changelogPreservation = changelogs.changelogPreservation;
109
- }
110
- if (tag !== undefined) {
111
- result.previousTag = tag;
112
- }
113
- if (unparseableCommits !== undefined) {
114
- result.unparseableCommits = unparseableCommits;
115
- }
116
- if (bumpOverride !== undefined) {
117
- result.bumpOverride = bumpOverride;
118
- }
119
- attachChangelogDiagnostics(result, diagnostics);
120
- return result;
121
- }
122
- function resolveOptionalOverrideArgs(args) {
123
- return {
124
- rootOverrides: args.rootOverrides ?? new Map(),
125
- overrideWarnings: args.overrideWarnings ?? [],
126
- globalMatchedRootKeys: args.globalMatchedRootKeys ?? new Set(),
127
- warnings: args.warnings ?? [],
128
- };
129
- }
130
- function planProjectChangelogs(args) {
131
- const { config, history, newTag, rootOverrides, overrideWarnings, globalMatchedRootKeys } = args;
132
- const today = new Date().toISOString().slice(0, 10);
133
- const builtEntries = toReleaseEntries(history, newTag, today);
134
- const applied = applyChangelogOverrides(builtEntries, rootOverrides);
135
- if (applied.errors.length > 0) {
136
- throw new Error(`Changelog override application failed:\n - ${applied.errors.join('\n - ')}`);
137
- }
138
- overrideWarnings.push(...applied.warnings);
139
- for (const matched of applied.matchedKeys) {
140
- globalMatchedRootKeys.add(matched);
141
- }
142
- const changelogJsonPath = resolveChangelogJsonPath(config, ROOT_CHANGELOG_PATH);
143
- const sectionOrder = deriveSectionOrder(config.workTypes ?? { ...DEFAULT_WORK_TYPES });
144
- const renderEntries = mergeChangelogEntriesWithDisk(changelogJsonPath, applied.entries);
145
- const writes = [];
146
- const changelogJsonFiles = [];
147
- if (config.changelogJson.enabled) {
148
- writes.push({ path: changelogJsonPath, content: renderChangelogJson(renderEntries) });
149
- changelogJsonFiles.push(changelogJsonPath);
150
- }
151
- const changelogFile = joinPath(ROOT_CHANGELOG_PATH, 'CHANGELOG.md');
152
- const preserved = planPreservedSections(changelogFile, renderEntries);
153
- writes.push({
154
- path: changelogFile,
155
- content: renderChangelogMarkdown(renderEntries, { sectionOrder, preservedSections: preserved.sections }),
156
- });
157
- return {
158
- changelogFiles: [changelogFile],
159
- changelogJsonFiles,
160
- changelogPreservation: preserved.preservation === undefined ? [] : [preserved.preservation],
161
- entries: renderEntries,
162
- writes,
163
- };
164
- }