@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.
- package/README.md +397 -0
- package/dist/commands/cherry-pick.d.ts +14 -0
- package/dist/commands/cherry-pick.d.ts.map +1 -0
- package/dist/commands/cherry-pick.js +337 -0
- package/dist/commands/cherry-pick.js.map +1 -0
- package/dist/commands/cherry-pick.test.d.ts +2 -0
- package/dist/commands/cherry-pick.test.d.ts.map +1 -0
- package/dist/commands/cherry-pick.test.js +377 -0
- package/dist/commands/cherry-pick.test.js.map +1 -0
- package/dist/commands/completion.d.ts +11 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +195 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/completion.test.d.ts +2 -0
- package/dist/commands/completion.test.d.ts.map +1 -0
- package/dist/commands/completion.test.js +142 -0
- package/dist/commands/completion.test.js.map +1 -0
- package/dist/commands/create.d.ts +15 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +107 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/create.test.d.ts +2 -0
- package/dist/commands/create.test.d.ts.map +1 -0
- package/dist/commands/create.test.js +274 -0
- package/dist/commands/create.test.js.map +1 -0
- package/dist/commands/list.d.ts +14 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +69 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/notes.d.ts +15 -0
- package/dist/commands/notes.d.ts.map +1 -0
- package/dist/commands/notes.js +374 -0
- package/dist/commands/notes.js.map +1 -0
- package/dist/commands/publish.d.ts +14 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +220 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/publish.test.d.ts +2 -0
- package/dist/commands/publish.test.d.ts.map +1 -0
- package/dist/commands/publish.test.js +371 -0
- package/dist/commands/publish.test.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +258 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/context.d.ts +35 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +48 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +152 -0
- package/dist/index.js.map +1 -0
- package/dist/output/formatter.d.ts +161 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +398 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/formatter.test.d.ts +2 -0
- package/dist/output/formatter.test.d.ts.map +1 -0
- package/dist/output/formatter.test.js +223 -0
- package/dist/output/formatter.test.js.map +1 -0
- package/dist/services/ai.d.ts +69 -0
- package/dist/services/ai.d.ts.map +1 -0
- package/dist/services/ai.js +235 -0
- package/dist/services/ai.js.map +1 -0
- package/dist/services/ai.test.d.ts +2 -0
- package/dist/services/ai.test.d.ts.map +1 -0
- package/dist/services/ai.test.js +101 -0
- package/dist/services/ai.test.js.map +1 -0
- package/dist/services/github.d.ts +200 -0
- package/dist/services/github.d.ts.map +1 -0
- package/dist/services/github.js +465 -0
- package/dist/services/github.js.map +1 -0
- package/dist/services/github.test.d.ts +2 -0
- package/dist/services/github.test.d.ts.map +1 -0
- package/dist/services/github.test.js +64 -0
- package/dist/services/github.test.js.map +1 -0
- package/dist/services/version.d.ts +106 -0
- package/dist/services/version.d.ts.map +1 -0
- package/dist/services/version.js +158 -0
- package/dist/services/version.js.map +1 -0
- package/dist/services/version.test.d.ts +2 -0
- package/dist/services/version.test.d.ts.map +1 -0
- package/dist/services/version.test.js +136 -0
- package/dist/services/version.test.js.map +1 -0
- package/dist/utils/errors.d.ts +66 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +154 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/errors.test.d.ts +2 -0
- package/dist/utils/errors.test.d.ts.map +1 -0
- package/dist/utils/errors.test.js +147 -0
- package/dist/utils/errors.test.js.map +1 -0
- package/dist/utils/prompts.d.ts +54 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +108 -0
- package/dist/utils/prompts.js.map +1 -0
- 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"}
|