@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,337 @@
|
|
|
1
|
+
// ABOUTME: Cherry-pick command that backports commits to a stable branch.
|
|
2
|
+
// ABOUTME: Uses local git for cherry-pick operations and creates a PR via GitHub API.
|
|
3
|
+
import { execSync, spawnSync } from "child_process";
|
|
4
|
+
import { GitHubError, ValidationError, NotFoundError } from "../utils/errors.js";
|
|
5
|
+
import { parseMajorMinor, formatStableBranch, formatVersion } from "../services/version.js";
|
|
6
|
+
import { confirm } from "../utils/prompts.js";
|
|
7
|
+
/**
|
|
8
|
+
* Checks if the current directory is a git repository.
|
|
9
|
+
*/
|
|
10
|
+
function isGitRepo() {
|
|
11
|
+
try {
|
|
12
|
+
execSync("git rev-parse --is-inside-work-tree", { stdio: "pipe" });
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Gets the configured remote URL to check if it matches the target repo.
|
|
21
|
+
*/
|
|
22
|
+
function getRemoteUrl(remoteName = "origin") {
|
|
23
|
+
try {
|
|
24
|
+
return execSync(`git remote get-url ${remoteName}`, { stdio: "pipe" }).toString().trim();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Checks if the remote URL matches the target repository.
|
|
32
|
+
*/
|
|
33
|
+
function remoteMatchesRepo(remoteUrl, owner, repo) {
|
|
34
|
+
if (!remoteUrl)
|
|
35
|
+
return false;
|
|
36
|
+
// Match various git URL formats
|
|
37
|
+
const patterns = [
|
|
38
|
+
new RegExp(`github\\.com[:/]${owner}/${repo}(\\.git)?$`, "i"),
|
|
39
|
+
new RegExp(`github\\.com[:/]${owner}/${repo}/?$`, "i"),
|
|
40
|
+
];
|
|
41
|
+
return patterns.some((p) => p.test(remoteUrl));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Executes a git command and returns the output.
|
|
45
|
+
*/
|
|
46
|
+
function git(args) {
|
|
47
|
+
const result = spawnSync("git", args.split(" "), {
|
|
48
|
+
encoding: "utf-8",
|
|
49
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
50
|
+
});
|
|
51
|
+
if (result.status !== 0) {
|
|
52
|
+
const errorMsg = result.stderr?.trim() || result.stdout?.trim() || "Git command failed";
|
|
53
|
+
throw new GitHubError(`Git error: ${errorMsg}`);
|
|
54
|
+
}
|
|
55
|
+
return result.stdout?.trim() || "";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Silently executes a git command, ignoring errors.
|
|
59
|
+
* Useful for cleanup operations that may fail.
|
|
60
|
+
*/
|
|
61
|
+
function gitSilent(args) {
|
|
62
|
+
try {
|
|
63
|
+
git(args);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Intentionally ignore errors
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Gets the short SHA and first line of commit message for a commit.
|
|
71
|
+
*/
|
|
72
|
+
function getCommitInfo(sha) {
|
|
73
|
+
const output = git(`log -1 --format=%h|%s ${sha}`);
|
|
74
|
+
const [shortSha, ...messageParts] = output.split("|");
|
|
75
|
+
return {
|
|
76
|
+
shortSha: shortSha || sha.substring(0, 7),
|
|
77
|
+
message: messageParts.join("|") || "No message",
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Checks if a local branch exists.
|
|
82
|
+
*/
|
|
83
|
+
function localBranchExists(name) {
|
|
84
|
+
try {
|
|
85
|
+
git(`rev-parse --verify refs/heads/${name}`);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets the current branch name.
|
|
94
|
+
*/
|
|
95
|
+
function getCurrentBranch() {
|
|
96
|
+
return git("rev-parse --abbrev-ref HEAD");
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Generates a unique cherry-pick branch name.
|
|
100
|
+
*/
|
|
101
|
+
function generateCherryPickBranchName(stableBranch) {
|
|
102
|
+
const timestamp = Date.now().toString(36);
|
|
103
|
+
const stableVersion = stableBranch.replace("stable/", "");
|
|
104
|
+
return `cherry-pick/${stableVersion}-${timestamp}`;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Executes the cherry-pick command.
|
|
108
|
+
* Cherry-picks commits to a stable branch and creates a PR.
|
|
109
|
+
*/
|
|
110
|
+
export async function cherryPickCommand(ctx, versionInput, commits, options) {
|
|
111
|
+
const { github, formatter } = ctx;
|
|
112
|
+
const { owner, repo } = github.getRepo();
|
|
113
|
+
// Validate we have commits to cherry-pick
|
|
114
|
+
if (commits.length === 0) {
|
|
115
|
+
throw new ValidationError("At least one commit SHA is required.");
|
|
116
|
+
}
|
|
117
|
+
// Parse and validate version format (must be major.minor only)
|
|
118
|
+
const version = parseMajorMinor(versionInput);
|
|
119
|
+
const stableBranchName = formatStableBranch(version);
|
|
120
|
+
const versionStr = formatVersion(version);
|
|
121
|
+
// Check if we're in a git repo
|
|
122
|
+
if (!isGitRepo()) {
|
|
123
|
+
throw new ValidationError("Not in a git repository.\n" +
|
|
124
|
+
"The cherry-pick command requires a local git checkout.\n" +
|
|
125
|
+
"Please clone the repository and run this command from within it.");
|
|
126
|
+
}
|
|
127
|
+
// Check if remote matches target repo
|
|
128
|
+
const remoteUrl = getRemoteUrl();
|
|
129
|
+
if (!remoteMatchesRepo(remoteUrl, owner, repo)) {
|
|
130
|
+
throw new ValidationError(`Local repository remote does not match target repo '${owner}/${repo}'.\n` +
|
|
131
|
+
`Found remote: ${remoteUrl || "none"}\n` +
|
|
132
|
+
`Please ensure you're in the correct repository.`);
|
|
133
|
+
}
|
|
134
|
+
const spinner = formatter.spinner("Checking prerequisites...");
|
|
135
|
+
spinner.start();
|
|
136
|
+
// Verify the stable branch exists on remote
|
|
137
|
+
const stableBranch = await github.getBranch(stableBranchName);
|
|
138
|
+
if (!stableBranch) {
|
|
139
|
+
spinner.stop();
|
|
140
|
+
throw new NotFoundError(`Branch '${stableBranchName}' not found.\n` +
|
|
141
|
+
`Create it first with: gitops-release create ${versionStr}`);
|
|
142
|
+
}
|
|
143
|
+
// Validate all commit SHAs exist
|
|
144
|
+
const commitInfos = [];
|
|
145
|
+
for (const sha of commits) {
|
|
146
|
+
try {
|
|
147
|
+
await github.getRefSha(sha);
|
|
148
|
+
const info = getCommitInfo(sha);
|
|
149
|
+
commitInfos.push({ sha, ...info });
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
spinner.stop();
|
|
153
|
+
throw new ValidationError(`Commit '${sha}' not found in repository.`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
spinner.stop();
|
|
157
|
+
// Generate the cherry-pick branch name
|
|
158
|
+
const cherryPickBranch = generateCherryPickBranchName(stableBranchName);
|
|
159
|
+
// Show what we're about to do
|
|
160
|
+
if (!formatter.isJsonMode()) {
|
|
161
|
+
formatter.header(`Cherry-picking to ${stableBranchName}`);
|
|
162
|
+
formatter.newline();
|
|
163
|
+
formatter.section("Commits");
|
|
164
|
+
for (const commit of commitInfos) {
|
|
165
|
+
formatter.text(` ${commit.shortSha} - ${commit.message}`);
|
|
166
|
+
}
|
|
167
|
+
formatter.newline();
|
|
168
|
+
}
|
|
169
|
+
// Dry run mode
|
|
170
|
+
if (options.dryRun) {
|
|
171
|
+
if (formatter.isJsonMode()) {
|
|
172
|
+
const jsonOutput = {
|
|
173
|
+
version: versionStr,
|
|
174
|
+
stableBranch: stableBranchName,
|
|
175
|
+
cherryPickBranch,
|
|
176
|
+
commits: commitInfos,
|
|
177
|
+
dryRun: true,
|
|
178
|
+
created: false,
|
|
179
|
+
};
|
|
180
|
+
formatter.json(jsonOutput);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
formatter.header("Dry Run - No changes will be made");
|
|
184
|
+
formatter.newline();
|
|
185
|
+
formatter.keyValue("Target branch", stableBranchName);
|
|
186
|
+
formatter.keyValue("Cherry-pick branch", cherryPickBranch);
|
|
187
|
+
formatter.keyValue("Commits to cherry-pick", commits.length.toString());
|
|
188
|
+
formatter.newline();
|
|
189
|
+
formatter.info("Run without --dry-run to execute the cherry-pick");
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Confirm before proceeding
|
|
193
|
+
await confirm(`Cherry-pick ${commits.length} commit(s) to ${stableBranchName}?`, { force: options.force });
|
|
194
|
+
// Save current branch to restore later
|
|
195
|
+
const originalBranch = getCurrentBranch();
|
|
196
|
+
// Fetch latest from origin
|
|
197
|
+
const fetchSpinner = formatter.spinner("Fetching latest from origin...");
|
|
198
|
+
fetchSpinner.start();
|
|
199
|
+
try {
|
|
200
|
+
git("fetch origin");
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
fetchSpinner.stop();
|
|
204
|
+
throw new GitHubError("Failed to fetch from origin. Check your network connection.");
|
|
205
|
+
}
|
|
206
|
+
fetchSpinner.stop();
|
|
207
|
+
// Create cherry-pick branch from stable
|
|
208
|
+
const createSpinner = formatter.spinner(`Creating ${cherryPickBranch}...`);
|
|
209
|
+
createSpinner.start();
|
|
210
|
+
try {
|
|
211
|
+
// Make sure we don't have a local branch with that name
|
|
212
|
+
if (localBranchExists(cherryPickBranch)) {
|
|
213
|
+
git(`branch -D ${cherryPickBranch}`);
|
|
214
|
+
}
|
|
215
|
+
// Create branch from remote stable
|
|
216
|
+
git(`checkout -b ${cherryPickBranch} origin/${stableBranchName}`);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
createSpinner.stop();
|
|
220
|
+
throw new GitHubError(`Failed to create branch from ${stableBranchName}`);
|
|
221
|
+
}
|
|
222
|
+
createSpinner.stop();
|
|
223
|
+
// Cherry-pick each commit
|
|
224
|
+
const cherryPickSpinner = formatter.spinner("Cherry-picking commits...");
|
|
225
|
+
cherryPickSpinner.start();
|
|
226
|
+
const cherryPickedCommits = [];
|
|
227
|
+
let cherryPickFailed = false;
|
|
228
|
+
let failedCommit = null;
|
|
229
|
+
for (const commit of commits) {
|
|
230
|
+
try {
|
|
231
|
+
git(`cherry-pick ${commit}`);
|
|
232
|
+
cherryPickedCommits.push(commit);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
cherryPickFailed = true;
|
|
236
|
+
failedCommit = commit;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
cherryPickSpinner.stop();
|
|
241
|
+
// Handle cherry-pick failure
|
|
242
|
+
if (cherryPickFailed) {
|
|
243
|
+
// Abort and clean up (best effort)
|
|
244
|
+
gitSilent("cherry-pick --abort");
|
|
245
|
+
gitSilent(`checkout ${originalBranch}`);
|
|
246
|
+
gitSilent(`branch -D ${cherryPickBranch}`);
|
|
247
|
+
throw new GitHubError(`Cherry-pick failed for commit ${failedCommit}.\n` +
|
|
248
|
+
"This usually means there are conflicts that require manual resolution.\n\n" +
|
|
249
|
+
"To cherry-pick manually:\n" +
|
|
250
|
+
` 1. git checkout -b ${cherryPickBranch} origin/${stableBranchName}\n` +
|
|
251
|
+
` 2. git cherry-pick ${commits.join(" ")}\n` +
|
|
252
|
+
" 3. Resolve any conflicts\n" +
|
|
253
|
+
" 4. git push -u origin ${cherryPickBranch}\n" +
|
|
254
|
+
` 5. Create a PR from ${cherryPickBranch} to ${stableBranchName}`);
|
|
255
|
+
}
|
|
256
|
+
// Push the branch
|
|
257
|
+
const pushSpinner = formatter.spinner(`Pushing ${cherryPickBranch}...`);
|
|
258
|
+
pushSpinner.start();
|
|
259
|
+
try {
|
|
260
|
+
git(`push -u origin ${cherryPickBranch}`);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
pushSpinner.stop();
|
|
264
|
+
gitSilent(`checkout ${originalBranch}`);
|
|
265
|
+
throw new GitHubError(`Failed to push branch ${cherryPickBranch}.\n` +
|
|
266
|
+
"Check that you have push access to the repository.");
|
|
267
|
+
}
|
|
268
|
+
pushSpinner.stop();
|
|
269
|
+
// Return to original branch (non-fatal if it fails)
|
|
270
|
+
try {
|
|
271
|
+
git(`checkout ${originalBranch}`);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
if (!formatter.isJsonMode()) {
|
|
275
|
+
formatter.warning(`Could not return to ${originalBranch}. You are now on ${cherryPickBranch}.`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Create PR
|
|
279
|
+
const prSpinner = formatter.spinner("Creating pull request...");
|
|
280
|
+
prSpinner.start();
|
|
281
|
+
const commitList = commitInfos.map((c) => `- ${c.shortSha} ${c.message}`).join("\n");
|
|
282
|
+
const prTitle = commits.length === 1
|
|
283
|
+
? `[Backport ${versionStr}] ${commitInfos[0].message}`
|
|
284
|
+
: `[Backport ${versionStr}] Cherry-pick ${commits.length} commits`;
|
|
285
|
+
const prBody = `## Backport to ${stableBranchName}
|
|
286
|
+
|
|
287
|
+
This PR cherry-picks the following commit(s) to ${stableBranchName}:
|
|
288
|
+
|
|
289
|
+
${commitList}
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
Created by \`gitops-release cherry-pick\``;
|
|
293
|
+
let pr;
|
|
294
|
+
try {
|
|
295
|
+
pr = await github.createPullRequest({
|
|
296
|
+
title: prTitle,
|
|
297
|
+
head: cherryPickBranch,
|
|
298
|
+
base: stableBranchName,
|
|
299
|
+
body: prBody,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
prSpinner.stop();
|
|
304
|
+
throw new GitHubError(`Failed to create pull request.\n` +
|
|
305
|
+
`Branch ${cherryPickBranch} was pushed successfully.\n` +
|
|
306
|
+
`Create the PR manually: https://github.com/${owner}/${repo}/compare/${stableBranchName}...${cherryPickBranch}`);
|
|
307
|
+
}
|
|
308
|
+
prSpinner.stop();
|
|
309
|
+
// Handle JSON output
|
|
310
|
+
if (formatter.isJsonMode()) {
|
|
311
|
+
const jsonOutput = {
|
|
312
|
+
version: versionStr,
|
|
313
|
+
stableBranch: stableBranchName,
|
|
314
|
+
cherryPickBranch,
|
|
315
|
+
commits: commitInfos,
|
|
316
|
+
pr: {
|
|
317
|
+
number: pr.number,
|
|
318
|
+
url: pr.url,
|
|
319
|
+
},
|
|
320
|
+
dryRun: false,
|
|
321
|
+
created: true,
|
|
322
|
+
};
|
|
323
|
+
formatter.json(jsonOutput);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
// Human-readable success output
|
|
327
|
+
formatter.success(`Cherry-picked ${commits.length} commit(s)`);
|
|
328
|
+
formatter.newline();
|
|
329
|
+
formatter.text(`Created PR #${pr.number}: ${pr.title}`);
|
|
330
|
+
formatter.text(` URL: ${pr.url}`);
|
|
331
|
+
formatter.newline();
|
|
332
|
+
formatter.section("Next steps");
|
|
333
|
+
formatter.text(` • Review and merge PR #${pr.number}`);
|
|
334
|
+
formatter.text(" • After merge, a new prepare-release PR will be created automatically");
|
|
335
|
+
formatter.text(` • Run 'gitops-release status ${versionStr}' to check progress`);
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=cherry-pick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cherry-pick.js","sourceRoot":"","sources":["../../src/commands/cherry-pick.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cherry-pick.test.d.ts","sourceRoot":"","sources":["../../src/commands/cherry-pick.test.ts"],"names":[],"mappings":""}
|