@codefresh-io/gitops-release 0.1.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 (98) hide show
  1. package/README.md +397 -0
  2. package/dist/commands/cherry-pick.d.ts +14 -0
  3. package/dist/commands/cherry-pick.d.ts.map +1 -0
  4. package/dist/commands/cherry-pick.js +337 -0
  5. package/dist/commands/cherry-pick.js.map +1 -0
  6. package/dist/commands/cherry-pick.test.d.ts +2 -0
  7. package/dist/commands/cherry-pick.test.d.ts.map +1 -0
  8. package/dist/commands/cherry-pick.test.js +377 -0
  9. package/dist/commands/cherry-pick.test.js.map +1 -0
  10. package/dist/commands/completion.d.ts +11 -0
  11. package/dist/commands/completion.d.ts.map +1 -0
  12. package/dist/commands/completion.js +195 -0
  13. package/dist/commands/completion.js.map +1 -0
  14. package/dist/commands/completion.test.d.ts +2 -0
  15. package/dist/commands/completion.test.d.ts.map +1 -0
  16. package/dist/commands/completion.test.js +142 -0
  17. package/dist/commands/completion.test.js.map +1 -0
  18. package/dist/commands/create.d.ts +15 -0
  19. package/dist/commands/create.d.ts.map +1 -0
  20. package/dist/commands/create.js +107 -0
  21. package/dist/commands/create.js.map +1 -0
  22. package/dist/commands/create.test.d.ts +2 -0
  23. package/dist/commands/create.test.d.ts.map +1 -0
  24. package/dist/commands/create.test.js +274 -0
  25. package/dist/commands/create.test.js.map +1 -0
  26. package/dist/commands/list.d.ts +14 -0
  27. package/dist/commands/list.d.ts.map +1 -0
  28. package/dist/commands/list.js +69 -0
  29. package/dist/commands/list.js.map +1 -0
  30. package/dist/commands/notes.d.ts +15 -0
  31. package/dist/commands/notes.d.ts.map +1 -0
  32. package/dist/commands/notes.js +374 -0
  33. package/dist/commands/notes.js.map +1 -0
  34. package/dist/commands/publish.d.ts +14 -0
  35. package/dist/commands/publish.d.ts.map +1 -0
  36. package/dist/commands/publish.js +220 -0
  37. package/dist/commands/publish.js.map +1 -0
  38. package/dist/commands/publish.test.d.ts +2 -0
  39. package/dist/commands/publish.test.d.ts.map +1 -0
  40. package/dist/commands/publish.test.js +371 -0
  41. package/dist/commands/publish.test.js.map +1 -0
  42. package/dist/commands/status.d.ts +8 -0
  43. package/dist/commands/status.d.ts.map +1 -0
  44. package/dist/commands/status.js +258 -0
  45. package/dist/commands/status.js.map +1 -0
  46. package/dist/context.d.ts +35 -0
  47. package/dist/context.d.ts.map +1 -0
  48. package/dist/context.js +48 -0
  49. package/dist/context.js.map +1 -0
  50. package/dist/index.d.ts +4 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +152 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/output/formatter.d.ts +161 -0
  55. package/dist/output/formatter.d.ts.map +1 -0
  56. package/dist/output/formatter.js +398 -0
  57. package/dist/output/formatter.js.map +1 -0
  58. package/dist/output/formatter.test.d.ts +2 -0
  59. package/dist/output/formatter.test.d.ts.map +1 -0
  60. package/dist/output/formatter.test.js +223 -0
  61. package/dist/output/formatter.test.js.map +1 -0
  62. package/dist/services/ai.d.ts +69 -0
  63. package/dist/services/ai.d.ts.map +1 -0
  64. package/dist/services/ai.js +235 -0
  65. package/dist/services/ai.js.map +1 -0
  66. package/dist/services/ai.test.d.ts +2 -0
  67. package/dist/services/ai.test.d.ts.map +1 -0
  68. package/dist/services/ai.test.js +101 -0
  69. package/dist/services/ai.test.js.map +1 -0
  70. package/dist/services/github.d.ts +200 -0
  71. package/dist/services/github.d.ts.map +1 -0
  72. package/dist/services/github.js +465 -0
  73. package/dist/services/github.js.map +1 -0
  74. package/dist/services/github.test.d.ts +2 -0
  75. package/dist/services/github.test.d.ts.map +1 -0
  76. package/dist/services/github.test.js +64 -0
  77. package/dist/services/github.test.js.map +1 -0
  78. package/dist/services/version.d.ts +106 -0
  79. package/dist/services/version.d.ts.map +1 -0
  80. package/dist/services/version.js +158 -0
  81. package/dist/services/version.js.map +1 -0
  82. package/dist/services/version.test.d.ts +2 -0
  83. package/dist/services/version.test.d.ts.map +1 -0
  84. package/dist/services/version.test.js +136 -0
  85. package/dist/services/version.test.js.map +1 -0
  86. package/dist/utils/errors.d.ts +66 -0
  87. package/dist/utils/errors.d.ts.map +1 -0
  88. package/dist/utils/errors.js +154 -0
  89. package/dist/utils/errors.js.map +1 -0
  90. package/dist/utils/errors.test.d.ts +2 -0
  91. package/dist/utils/errors.test.d.ts.map +1 -0
  92. package/dist/utils/errors.test.js +147 -0
  93. package/dist/utils/errors.test.js.map +1 -0
  94. package/dist/utils/prompts.d.ts +54 -0
  95. package/dist/utils/prompts.d.ts.map +1 -0
  96. package/dist/utils/prompts.js +108 -0
  97. package/dist/utils/prompts.js.map +1 -0
  98. package/package.json +70 -0
@@ -0,0 +1,69 @@
1
+ // ABOUTME: List command that displays GitHub releases for the repository.
2
+ // ABOUTME: Supports filtering by draft status, limiting results, and JSON output.
3
+ /**
4
+ * Extracts the stable branch name from a release tag.
5
+ * E.g., "0.26.5" -> "stable/0.26"
6
+ */
7
+ function extractStableBranch(tag) {
8
+ const match = tag.match(/^(\d+)\.(\d+)/);
9
+ if (match) {
10
+ return `stable/${match[1]}.${match[2]}`;
11
+ }
12
+ return "-";
13
+ }
14
+ /**
15
+ * Executes the list command.
16
+ * Fetches and displays releases from the GitHub repository.
17
+ */
18
+ export async function listCommand(ctx, options) {
19
+ const { github, formatter } = ctx;
20
+ const spinner = formatter.spinner("Fetching releases...");
21
+ spinner.start();
22
+ const releases = await github.listReleases(options.includeDrafts);
23
+ spinner.stop();
24
+ // Apply limit
25
+ const limitedReleases = releases.slice(0, options.limit);
26
+ // Handle JSON output
27
+ if (formatter.isJsonMode()) {
28
+ const jsonOutput = {
29
+ releases: limitedReleases.map((r) => ({
30
+ version: r.tag,
31
+ tag: r.tag,
32
+ branch: extractStableBranch(r.tag),
33
+ status: r.draft ? "draft" : "published",
34
+ publishedAt: r.publishedAt,
35
+ url: r.url,
36
+ })),
37
+ };
38
+ formatter.json(jsonOutput);
39
+ return;
40
+ }
41
+ // Human-readable output
42
+ const repo = github.getRepo();
43
+ formatter.header(`Releases for ${repo.owner}/${repo.repo}`);
44
+ formatter.newline();
45
+ if (limitedReleases.length === 0) {
46
+ formatter.info("No releases found");
47
+ return;
48
+ }
49
+ // Format release data for table
50
+ const tableData = limitedReleases.map((r) => ({
51
+ version: r.tag,
52
+ status: formatStatus(r, formatter),
53
+ published: r.draft ? "-" : formatter.shortDate(r.publishedAt),
54
+ branch: extractStableBranch(r.tag),
55
+ }));
56
+ formatter.table(tableData, [
57
+ { header: "Version", key: "version", width: 12 },
58
+ { header: "Status", key: "status", width: 12 },
59
+ { header: "Published", key: "published", width: 14 },
60
+ { header: "Branch", key: "branch", width: 14 },
61
+ ]);
62
+ }
63
+ /**
64
+ * Formats the status of a release for display.
65
+ */
66
+ function formatStatus(release, formatter) {
67
+ return release.draft ? formatter.status("draft") : formatter.status("published");
68
+ }
69
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { CommandContext } from "../context.js";
2
+ /**
3
+ * Options for the notes command.
4
+ */
5
+ export interface NotesOptions {
6
+ edit: boolean;
7
+ apply: boolean;
8
+ dryRun: boolean;
9
+ }
10
+ /**
11
+ * Executes the notes command.
12
+ * Generates AI-powered release notes from commit history.
13
+ */
14
+ export declare function notesCommand(ctx: CommandContext, version: string, options: NotesOptions): Promise<void>;
15
+ //# sourceMappingURL=notes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../src/commands/notes.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAwB/C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAcD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CA+If"}
@@ -0,0 +1,374 @@
1
+ // ABOUTME: Notes command that generates AI-powered release notes for ArtifactHub and GitHub.
2
+ // ABOUTME: Supports editing, applying to draft releases, and updating Chart.yaml annotations.
3
+ import { spawn } from "child_process";
4
+ import { writeFileSync, readFileSync, unlinkSync } from "fs";
5
+ import { tmpdir } from "os";
6
+ import { join } from "path";
7
+ import * as YAML from "yaml";
8
+ import { AIService, requireAnthropicApiKey, formatArtifactHubYaml, } from "../services/ai.js";
9
+ import { parseFullVersion, formatStableBranch, formatPrepBranch, formatReleaseTag, extractMajorMinor, extractPatchFromTag, } from "../services/version.js";
10
+ import { NotFoundError, ValidationError } from "../utils/errors.js";
11
+ import { confirm } from "../utils/prompts.js";
12
+ /**
13
+ * Path to Chart.yaml in the helm chart repository.
14
+ */
15
+ const CHART_YAML_PATH = "charts/gitops-runtime/Chart.yaml";
16
+ /**
17
+ * Executes the notes command.
18
+ * Generates AI-powered release notes from commit history.
19
+ */
20
+ export async function notesCommand(ctx, version, options) {
21
+ const { github, formatter } = ctx;
22
+ // Validate version format (must be full X.Y.Z)
23
+ const parsedVersion = parseFullVersion(version);
24
+ const releaseTag = formatReleaseTag(parsedVersion);
25
+ const prepBranch = formatPrepBranch(parsedVersion);
26
+ const majorMinor = extractMajorMinor(parsedVersion);
27
+ const stableBranch = formatStableBranch(majorMinor);
28
+ // Require Anthropic API key
29
+ const apiKey = requireAnthropicApiKey();
30
+ const spinner = formatter.spinner(`Generating release notes for ${releaseTag}...`);
31
+ spinner.start();
32
+ // Find the previous release to determine what changed
33
+ const releases = await github.listReleases(true);
34
+ const versionPrefix = `${parsedVersion.major}.${parsedVersion.minor}.`;
35
+ // Get all releases for this major.minor, sorted by patch number descending
36
+ const relatedReleases = releases
37
+ .filter((r) => r.tag.startsWith(versionPrefix))
38
+ .sort((a, b) => extractPatchFromTag(b.tag) - extractPatchFromTag(a.tag));
39
+ // Find previous version (either previous patch or previous minor)
40
+ let previousVersion = null;
41
+ const currentPatch = parsedVersion.patch ?? 0;
42
+ if (currentPatch > 0) {
43
+ // Look for previous patch in same minor
44
+ const prevPatch = relatedReleases.find((r) => extractPatchFromTag(r.tag) < currentPatch && !r.draft);
45
+ if (prevPatch) {
46
+ previousVersion = prevPatch.tag;
47
+ }
48
+ }
49
+ // If no previous patch found, look for the latest from previous minor
50
+ if (!previousVersion) {
51
+ const prevMinorPrefix = `${parsedVersion.major}.${(parsedVersion.minor ?? 0) - 1}.`;
52
+ const prevMinorRelease = releases.find((r) => r.tag.startsWith(prevMinorPrefix) && !r.draft);
53
+ if (prevMinorRelease) {
54
+ previousVersion = prevMinorRelease.tag;
55
+ }
56
+ }
57
+ // Get commits since previous version (or all commits on stable branch if first release)
58
+ let commits = [];
59
+ if (previousVersion) {
60
+ spinner.text = `Analyzing commits since ${previousVersion}...`;
61
+ try {
62
+ commits = await github.getCommitsSince(previousVersion, prepBranch);
63
+ }
64
+ catch {
65
+ // If prep branch doesn't exist yet, try stable branch
66
+ commits = await github.getCommitsSince(previousVersion, stableBranch);
67
+ }
68
+ }
69
+ else {
70
+ // First release - get recent commits on the branch
71
+ spinner.text = "Analyzing recent commits...";
72
+ try {
73
+ // Try to get commits from prep branch first
74
+ const prepBranchInfo = await github.getBranch(prepBranch);
75
+ if (prepBranchInfo) {
76
+ // Get commits comparing main to prep branch
77
+ commits = await github.getCommitsSince("main", prepBranch);
78
+ }
79
+ else {
80
+ // Fallback to stable branch
81
+ commits = await github.getCommitsSince("main", stableBranch);
82
+ }
83
+ }
84
+ catch {
85
+ commits = [];
86
+ }
87
+ }
88
+ if (commits.length === 0) {
89
+ spinner.warn("No commits found to analyze");
90
+ formatter.warning("No commits found between the previous release and current branch. " +
91
+ "This could mean the release is identical to the previous one.");
92
+ return;
93
+ }
94
+ spinner.text = `Generating notes from ${commits.length} commits...`;
95
+ // Call AI service
96
+ const aiService = new AIService(apiKey);
97
+ let notes;
98
+ try {
99
+ notes = await aiService.generateReleaseNotes({
100
+ version: releaseTag,
101
+ previousVersion,
102
+ commits,
103
+ prDescriptions: [], // TODO: Could gather PR descriptions if needed
104
+ });
105
+ }
106
+ finally {
107
+ spinner.stop();
108
+ }
109
+ // Handle --edit flag - open in editor for review
110
+ if (options.edit) {
111
+ notes = await editNotes(notes, formatter);
112
+ }
113
+ // Handle JSON output
114
+ if (formatter.isJsonMode()) {
115
+ const jsonOutput = {
116
+ version: releaseTag,
117
+ commitsAnalyzed: notes.commitsAnalyzed,
118
+ previousVersion: notes.previousVersion,
119
+ artifactHubChangelog: notes.artifactHubChangelog,
120
+ githubReleaseNotes: notes.githubReleaseNotes,
121
+ applied: false,
122
+ };
123
+ if (options.apply && !options.dryRun) {
124
+ await applyNotes(ctx, releaseTag, prepBranch, notes, options.dryRun);
125
+ jsonOutput.applied = true;
126
+ }
127
+ formatter.json(jsonOutput);
128
+ return;
129
+ }
130
+ // Human-readable output
131
+ displayNotes(formatter, releaseTag, notes);
132
+ // Handle --apply flag
133
+ if (options.apply) {
134
+ formatter.newline();
135
+ if (options.dryRun) {
136
+ formatter.info("Dry run - would apply the following changes:");
137
+ await previewApply(ctx, releaseTag, prepBranch, notes);
138
+ }
139
+ else {
140
+ const confirmed = await confirm("Apply these notes to the release?");
141
+ if (confirmed) {
142
+ await applyNotes(ctx, releaseTag, prepBranch, notes, false);
143
+ }
144
+ }
145
+ }
146
+ }
147
+ /**
148
+ * Displays the generated notes in human-readable format.
149
+ */
150
+ function displayNotes(formatter, version, notes) {
151
+ const c = formatter.chalk();
152
+ formatter.header(`Release Notes for ${version}`);
153
+ formatter.newline();
154
+ if (notes.previousVersion) {
155
+ formatter.keyValue("Analyzing changes since", notes.previousVersion);
156
+ }
157
+ formatter.keyValue("Commits analyzed", String(notes.commitsAnalyzed));
158
+ formatter.newline();
159
+ // ArtifactHub section
160
+ const divider = c.dim("═".repeat(60));
161
+ formatter.text(divider);
162
+ formatter.text(c.bold("ArtifactHub Changelog (Chart.yaml annotation):"));
163
+ formatter.text(divider);
164
+ formatter.newline();
165
+ formatter.text(formatArtifactHubYaml(notes.artifactHubChangelog));
166
+ formatter.newline();
167
+ // GitHub section
168
+ formatter.text(divider);
169
+ formatter.text(c.bold("GitHub Release Notes:"));
170
+ formatter.text(divider);
171
+ formatter.newline();
172
+ formatter.text(notes.githubReleaseNotes);
173
+ formatter.newline();
174
+ formatter.text(divider);
175
+ }
176
+ /**
177
+ * Opens notes in $EDITOR for review and editing.
178
+ */
179
+ async function editNotes(notes, formatter) {
180
+ const editor = process.env.EDITOR || "vi";
181
+ // Create temp file with notes content
182
+ const tempFile = join(tmpdir(), `gitops-release-notes-${Date.now()}.md`);
183
+ const content = `# Release Notes Editor
184
+ # Edit the sections below. Lines starting with # are comments and will be ignored.
185
+ # Save and close to continue.
186
+
187
+ ## ARTIFACTHUB CHANGELOG (YAML format)
188
+ # Each entry needs: kind (added/changed/fixed/deprecated/removed/security) and description
189
+
190
+ ${formatArtifactHubYaml(notes.artifactHubChangelog)}
191
+
192
+ ## GITHUB RELEASE NOTES (Markdown format)
193
+
194
+ ${notes.githubReleaseNotes}
195
+ `;
196
+ writeFileSync(tempFile, content);
197
+ // Open editor
198
+ formatter.info(`Opening ${editor}...`);
199
+ await new Promise((resolve, reject) => {
200
+ const child = spawn(editor, [tempFile], {
201
+ stdio: "inherit",
202
+ });
203
+ child.on("close", (code) => {
204
+ if (code === 0) {
205
+ resolve();
206
+ }
207
+ else {
208
+ reject(new Error(`Editor exited with code ${code}`));
209
+ }
210
+ });
211
+ child.on("error", reject);
212
+ });
213
+ // Read edited content
214
+ const editedContent = readFileSync(tempFile, "utf-8");
215
+ unlinkSync(tempFile);
216
+ // Parse edited content
217
+ return parseEditedNotes(editedContent, notes);
218
+ }
219
+ /**
220
+ * Parses edited notes content back into structured format.
221
+ */
222
+ function parseEditedNotes(content, originalNotes) {
223
+ // Split by sections
224
+ const artifactHubMatch = content.match(/## ARTIFACTHUB CHANGELOG[^\n]*\n([\s\S]*?)(?=## GITHUB|$)/i);
225
+ const githubMatch = content.match(/## GITHUB RELEASE NOTES[^\n]*\n([\s\S]*?)$/i);
226
+ let artifactHubChangelog = originalNotes.artifactHubChangelog;
227
+ let githubReleaseNotes = originalNotes.githubReleaseNotes;
228
+ if (artifactHubMatch) {
229
+ // Filter out comments and parse YAML
230
+ const yamlContent = artifactHubMatch[1]
231
+ .split("\n")
232
+ .filter((line) => !line.trim().startsWith("#"))
233
+ .join("\n")
234
+ .trim();
235
+ if (yamlContent) {
236
+ try {
237
+ const parsed = YAML.parse(yamlContent);
238
+ if (Array.isArray(parsed)) {
239
+ artifactHubChangelog = parsed;
240
+ }
241
+ }
242
+ catch {
243
+ // Keep original if parsing fails
244
+ }
245
+ }
246
+ }
247
+ if (githubMatch) {
248
+ githubReleaseNotes = githubMatch[1]
249
+ .split("\n")
250
+ .filter((line) => !line.trim().startsWith("#"))
251
+ .join("\n")
252
+ .trim();
253
+ }
254
+ return {
255
+ ...originalNotes,
256
+ artifactHubChangelog,
257
+ githubReleaseNotes,
258
+ };
259
+ }
260
+ /**
261
+ * Previews what would be applied without making changes.
262
+ */
263
+ async function previewApply(ctx, version, prepBranch, notes) {
264
+ const { github, formatter } = ctx;
265
+ formatter.section("Chart.yaml Updates");
266
+ // Check if prep branch exists
267
+ const branch = await github.getBranch(prepBranch);
268
+ if (!branch) {
269
+ formatter.warning(`Prep branch ${prepBranch} not found`);
270
+ formatter.text(" Would need to apply changes manually");
271
+ return;
272
+ }
273
+ formatter.text(` Branch: ${prepBranch}`);
274
+ formatter.text(" Would update artifacthub.io/changes annotation");
275
+ formatter.text(` Changes to apply: ${notes.artifactHubChangelog.length} changelog entries`);
276
+ formatter.text(" Would validate/bump appVersion if needed");
277
+ formatter.section("Draft Release Update");
278
+ const draftRelease = await github.getDraftRelease(version);
279
+ if (draftRelease) {
280
+ formatter.text(` Would update draft release: ${draftRelease.name}`);
281
+ formatter.text(` URL: ${draftRelease.url}`);
282
+ }
283
+ else {
284
+ formatter.warning(` No draft release found for ${version}`);
285
+ }
286
+ }
287
+ /**
288
+ * Applies notes to Chart.yaml and draft release.
289
+ */
290
+ async function applyNotes(ctx, version, prepBranch, notes, dryRun) {
291
+ const { github, formatter } = ctx;
292
+ if (dryRun) {
293
+ await previewApply(ctx, version, prepBranch, notes);
294
+ return;
295
+ }
296
+ const spinner = formatter.spinner("Applying changes...");
297
+ spinner.start();
298
+ try {
299
+ // 1. Update Chart.yaml on prep branch
300
+ const branch = await github.getBranch(prepBranch);
301
+ if (!branch) {
302
+ throw new NotFoundError(`Prep branch '${prepBranch}'`, `Prep branch ${prepBranch} not found. Run the prepare-release pipeline first.`);
303
+ }
304
+ spinner.text = "Fetching Chart.yaml...";
305
+ const chartContent = await github.getFileContent(CHART_YAML_PATH, prepBranch);
306
+ if (!chartContent) {
307
+ throw new NotFoundError(`Chart.yaml`, `Could not find ${CHART_YAML_PATH} on branch ${prepBranch}`);
308
+ }
309
+ // Parse and update Chart.yaml preserving structure
310
+ spinner.text = "Updating Chart.yaml...";
311
+ const updatedChart = updateChartYaml(chartContent, notes, formatter);
312
+ // Commit the changes
313
+ spinner.text = "Committing changes...";
314
+ await github.updateFile(CHART_YAML_PATH, updatedChart, `docs: update release notes for ${version}`, prepBranch);
315
+ spinner.succeed("Updated Chart.yaml");
316
+ // 2. Update draft release body
317
+ spinner.start("Updating draft release...");
318
+ const draftRelease = await github.getDraftRelease(version);
319
+ if (draftRelease) {
320
+ await github.updateRelease(draftRelease.id, notes.githubReleaseNotes);
321
+ spinner.succeed("Updated draft release");
322
+ }
323
+ else {
324
+ spinner.warn(`No draft release found for ${version}`);
325
+ }
326
+ // Show summary
327
+ formatter.newline();
328
+ formatter.success("Release notes applied successfully");
329
+ formatter.newline();
330
+ formatter.keyValue("Chart.yaml updated on", prepBranch);
331
+ if (draftRelease) {
332
+ formatter.keyValue("Draft release updated", draftRelease.url);
333
+ }
334
+ }
335
+ catch (error) {
336
+ spinner.fail("Failed to apply changes");
337
+ throw error;
338
+ }
339
+ }
340
+ /**
341
+ * Updates Chart.yaml with new changelog annotation.
342
+ * Preserves existing structure and comments.
343
+ */
344
+ function updateChartYaml(content, notes, formatter) {
345
+ // Parse YAML preserving structure
346
+ const doc = YAML.parseDocument(content);
347
+ // Get annotations map
348
+ const annotations = doc.get("annotations");
349
+ if (!annotations) {
350
+ throw new ValidationError("Chart.yaml is missing annotations section");
351
+ }
352
+ // Format the changelog as a multi-line YAML string
353
+ const changelogYaml = formatArtifactHubYaml(notes.artifactHubChangelog);
354
+ // Update the artifacthub.io/changes annotation
355
+ const changesKey = "artifacthub.io/changes";
356
+ const existingChanges = annotations.get(changesKey);
357
+ if (existingChanges !== undefined) {
358
+ // Update existing annotation
359
+ annotations.set(changesKey, changelogYaml);
360
+ formatter.verbose("Updated existing artifacthub.io/changes annotation");
361
+ }
362
+ else {
363
+ // Add new annotation
364
+ annotations.set(changesKey, changelogYaml);
365
+ formatter.verbose("Added artifacthub.io/changes annotation");
366
+ }
367
+ // Validate appVersion (optional - log warning if not bumped)
368
+ const appVersion = doc.get("appVersion");
369
+ if (appVersion) {
370
+ formatter.verbose(`Current appVersion: ${appVersion}`);
371
+ }
372
+ return doc.toString();
373
+ }
374
+ //# sourceMappingURL=notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/commands/notes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { CommandContext } from "../context.js";
2
+ /**
3
+ * Options for the publish command.
4
+ */
5
+ export interface PublishOptions {
6
+ force: boolean;
7
+ dryRun: boolean;
8
+ }
9
+ /**
10
+ * Executes the publish command.
11
+ * Merges a prepare-release PR to trigger the promote pipeline.
12
+ */
13
+ export declare function publishCommand(ctx: CommandContext, versionInput: string, options: PublishOptions): Promise<void>;
14
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAgB/C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AA8BD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAyIf"}