@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,377 @@
|
|
|
1
|
+
// ABOUTME: Unit tests for the cherry-pick command.
|
|
2
|
+
// ABOUTME: Tests validation, dry-run mode, git operations, and error handling.
|
|
3
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
4
|
+
import { cherryPickCommand } from "./cherry-pick.js";
|
|
5
|
+
import { ValidationError, NotFoundError } from "../utils/errors.js";
|
|
6
|
+
// Mock child_process
|
|
7
|
+
vi.mock("child_process", () => ({
|
|
8
|
+
execSync: vi.fn(),
|
|
9
|
+
spawnSync: vi.fn(),
|
|
10
|
+
}));
|
|
11
|
+
// Mock the prompts module
|
|
12
|
+
vi.mock("../utils/prompts.js", () => ({
|
|
13
|
+
confirm: vi.fn().mockResolvedValue(true),
|
|
14
|
+
}));
|
|
15
|
+
import { execSync, spawnSync } from "child_process";
|
|
16
|
+
/**
|
|
17
|
+
* Creates a mock GitHubService with default implementations.
|
|
18
|
+
*/
|
|
19
|
+
function createMockGitHub() {
|
|
20
|
+
const getBranch = vi.fn();
|
|
21
|
+
const getRefSha = vi.fn();
|
|
22
|
+
const createPullRequest = vi.fn();
|
|
23
|
+
const getRepo = vi.fn().mockReturnValue({ owner: "codefresh-io", repo: "gitops-runtime-helm" });
|
|
24
|
+
const github = {
|
|
25
|
+
getBranch,
|
|
26
|
+
getRefSha,
|
|
27
|
+
createPullRequest,
|
|
28
|
+
getRepo,
|
|
29
|
+
};
|
|
30
|
+
return { github, mocks: { getBranch, getRefSha, createPullRequest, getRepo } };
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates a mock Formatter that captures output.
|
|
34
|
+
*/
|
|
35
|
+
function createMockFormatter() {
|
|
36
|
+
const output = {
|
|
37
|
+
json: null,
|
|
38
|
+
texts: [],
|
|
39
|
+
successes: [],
|
|
40
|
+
warnings: [],
|
|
41
|
+
};
|
|
42
|
+
const formatter = {
|
|
43
|
+
spinner: vi.fn().mockReturnValue({
|
|
44
|
+
start: vi.fn(),
|
|
45
|
+
stop: vi.fn(),
|
|
46
|
+
}),
|
|
47
|
+
isJsonMode: vi.fn().mockReturnValue(false),
|
|
48
|
+
json: vi.fn((data) => {
|
|
49
|
+
output.json = data;
|
|
50
|
+
}),
|
|
51
|
+
header: vi.fn(),
|
|
52
|
+
newline: vi.fn(),
|
|
53
|
+
keyValue: vi.fn(),
|
|
54
|
+
info: vi.fn(),
|
|
55
|
+
text: vi.fn((msg) => {
|
|
56
|
+
output.texts.push(msg);
|
|
57
|
+
}),
|
|
58
|
+
section: vi.fn(),
|
|
59
|
+
success: vi.fn((msg) => {
|
|
60
|
+
output.successes.push(msg);
|
|
61
|
+
}),
|
|
62
|
+
warning: vi.fn((msg) => {
|
|
63
|
+
output.warnings.push(msg);
|
|
64
|
+
}),
|
|
65
|
+
};
|
|
66
|
+
return { formatter, output };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Creates a CommandContext with mocked services.
|
|
70
|
+
*/
|
|
71
|
+
function createMockContext() {
|
|
72
|
+
const { github, mocks } = createMockGitHub();
|
|
73
|
+
const { formatter, output } = createMockFormatter();
|
|
74
|
+
const ctx = {
|
|
75
|
+
github,
|
|
76
|
+
formatter,
|
|
77
|
+
options: {
|
|
78
|
+
repo: "codefresh-io/gitops-runtime-helm",
|
|
79
|
+
json: false,
|
|
80
|
+
quiet: false,
|
|
81
|
+
verbose: false,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
return { ctx, mocks, output };
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Sets up git mocks for a successful scenario.
|
|
88
|
+
*/
|
|
89
|
+
function setupSuccessfulGitMocks() {
|
|
90
|
+
// Mock execSync for isGitRepo check
|
|
91
|
+
execSync.mockImplementation((cmd) => {
|
|
92
|
+
if (cmd.includes("rev-parse --is-inside-work-tree")) {
|
|
93
|
+
return Buffer.from("true");
|
|
94
|
+
}
|
|
95
|
+
if (cmd.includes("remote get-url")) {
|
|
96
|
+
return Buffer.from("git@github.com:codefresh-io/gitops-runtime-helm.git");
|
|
97
|
+
}
|
|
98
|
+
return Buffer.from("");
|
|
99
|
+
});
|
|
100
|
+
// Mock spawnSync for git commands
|
|
101
|
+
spawnSync.mockImplementation((cmd, args) => {
|
|
102
|
+
const fullCmd = `${cmd} ${args.join(" ")}`;
|
|
103
|
+
if (fullCmd.includes("log -1 --format")) {
|
|
104
|
+
return { status: 0, stdout: "abc1234|Fix bug in feature" };
|
|
105
|
+
}
|
|
106
|
+
if (fullCmd.includes("rev-parse --abbrev-ref HEAD")) {
|
|
107
|
+
return { status: 0, stdout: "main" };
|
|
108
|
+
}
|
|
109
|
+
if (fullCmd.includes("rev-parse --verify")) {
|
|
110
|
+
return { status: 1, stderr: "not found" }; // branch doesn't exist locally
|
|
111
|
+
}
|
|
112
|
+
if (fullCmd.includes("fetch origin")) {
|
|
113
|
+
return { status: 0, stdout: "" };
|
|
114
|
+
}
|
|
115
|
+
if (fullCmd.includes("checkout -b")) {
|
|
116
|
+
return { status: 0, stdout: "" };
|
|
117
|
+
}
|
|
118
|
+
if (fullCmd.includes("cherry-pick")) {
|
|
119
|
+
return { status: 0, stdout: "" };
|
|
120
|
+
}
|
|
121
|
+
if (fullCmd.includes("push -u origin")) {
|
|
122
|
+
return { status: 0, stdout: "" };
|
|
123
|
+
}
|
|
124
|
+
if (fullCmd.includes("checkout main")) {
|
|
125
|
+
return { status: 0, stdout: "" };
|
|
126
|
+
}
|
|
127
|
+
if (fullCmd.includes("branch -D")) {
|
|
128
|
+
return { status: 0, stdout: "" };
|
|
129
|
+
}
|
|
130
|
+
return { status: 0, stdout: "" };
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
describe("cherryPickCommand", () => {
|
|
134
|
+
beforeEach(() => {
|
|
135
|
+
vi.clearAllMocks();
|
|
136
|
+
});
|
|
137
|
+
describe("validation", () => {
|
|
138
|
+
it("rejects when no commits are provided", async () => {
|
|
139
|
+
const { ctx } = createMockContext();
|
|
140
|
+
const options = { dryRun: false };
|
|
141
|
+
await expect(cherryPickCommand(ctx, "0.26", [], options)).rejects.toThrow(ValidationError);
|
|
142
|
+
await expect(cherryPickCommand(ctx, "0.26", [], options)).rejects.toThrow("At least one commit SHA is required");
|
|
143
|
+
});
|
|
144
|
+
it("rejects full semver format (X.Y.Z)", async () => {
|
|
145
|
+
const { ctx } = createMockContext();
|
|
146
|
+
const options = { dryRun: false };
|
|
147
|
+
setupSuccessfulGitMocks();
|
|
148
|
+
await expect(cherryPickCommand(ctx, "0.26.0", ["abc123"], options)).rejects.toThrow(ValidationError);
|
|
149
|
+
});
|
|
150
|
+
it("rejects invalid version formats", async () => {
|
|
151
|
+
const { ctx } = createMockContext();
|
|
152
|
+
const options = { dryRun: false };
|
|
153
|
+
setupSuccessfulGitMocks();
|
|
154
|
+
await expect(cherryPickCommand(ctx, "26", ["abc123"], options)).rejects.toThrow(ValidationError);
|
|
155
|
+
await expect(cherryPickCommand(ctx, "v0.26", ["abc123"], options)).rejects.toThrow(ValidationError);
|
|
156
|
+
});
|
|
157
|
+
it("accepts valid major.minor format", async () => {
|
|
158
|
+
const { ctx, mocks } = createMockContext();
|
|
159
|
+
const options = { dryRun: true };
|
|
160
|
+
setupSuccessfulGitMocks();
|
|
161
|
+
mocks.getBranch.mockResolvedValue({
|
|
162
|
+
name: "stable/0.26",
|
|
163
|
+
sha: "abc1234567890",
|
|
164
|
+
protected: false,
|
|
165
|
+
});
|
|
166
|
+
mocks.getRefSha.mockResolvedValue("abc1234567890");
|
|
167
|
+
await expect(cherryPickCommand(ctx, "0.26", ["abc123"], options)).resolves.not.toThrow();
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe("git repository check", () => {
|
|
171
|
+
it("throws error when not in a git repository", async () => {
|
|
172
|
+
const { ctx, mocks } = createMockContext();
|
|
173
|
+
const options = { dryRun: false };
|
|
174
|
+
// Mock execSync to throw (not in git repo)
|
|
175
|
+
execSync.mockImplementation(() => {
|
|
176
|
+
throw new Error("not a git repository");
|
|
177
|
+
});
|
|
178
|
+
mocks.getBranch.mockResolvedValue({
|
|
179
|
+
name: "stable/0.26",
|
|
180
|
+
sha: "abc1234567890",
|
|
181
|
+
protected: false,
|
|
182
|
+
});
|
|
183
|
+
await expect(cherryPickCommand(ctx, "0.26", ["abc123"], options)).rejects.toThrow(ValidationError);
|
|
184
|
+
await expect(cherryPickCommand(ctx, "0.26", ["abc123"], options)).rejects.toThrow("Not in a git repository");
|
|
185
|
+
});
|
|
186
|
+
it("throws error when remote does not match target repo", async () => {
|
|
187
|
+
const { ctx, mocks } = createMockContext();
|
|
188
|
+
const options = { dryRun: false };
|
|
189
|
+
execSync.mockImplementation((cmd) => {
|
|
190
|
+
if (cmd.includes("rev-parse --is-inside-work-tree")) {
|
|
191
|
+
return Buffer.from("true");
|
|
192
|
+
}
|
|
193
|
+
if (cmd.includes("remote get-url")) {
|
|
194
|
+
return Buffer.from("git@github.com:other-org/other-repo.git");
|
|
195
|
+
}
|
|
196
|
+
return Buffer.from("");
|
|
197
|
+
});
|
|
198
|
+
mocks.getBranch.mockResolvedValue({
|
|
199
|
+
name: "stable/0.26",
|
|
200
|
+
sha: "abc1234567890",
|
|
201
|
+
protected: false,
|
|
202
|
+
});
|
|
203
|
+
await expect(cherryPickCommand(ctx, "0.26", ["abc123"], options)).rejects.toThrow(ValidationError);
|
|
204
|
+
await expect(cherryPickCommand(ctx, "0.26", ["abc123"], options)).rejects.toThrow("does not match target repo");
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
describe("stable branch check", () => {
|
|
208
|
+
it("throws error when stable branch does not exist", async () => {
|
|
209
|
+
const { ctx, mocks } = createMockContext();
|
|
210
|
+
const options = { dryRun: false };
|
|
211
|
+
setupSuccessfulGitMocks();
|
|
212
|
+
mocks.getBranch.mockResolvedValue(null); // stable branch doesn't exist
|
|
213
|
+
await expect(cherryPickCommand(ctx, "0.26", ["abc123"], options)).rejects.toThrow(NotFoundError);
|
|
214
|
+
await expect(cherryPickCommand(ctx, "0.26", ["abc123"], options)).rejects.toThrow("stable/0.26");
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
describe("commit validation", () => {
|
|
218
|
+
it("throws error when commit does not exist", async () => {
|
|
219
|
+
const { ctx, mocks } = createMockContext();
|
|
220
|
+
const options = { dryRun: false };
|
|
221
|
+
setupSuccessfulGitMocks();
|
|
222
|
+
mocks.getBranch.mockResolvedValue({
|
|
223
|
+
name: "stable/0.26",
|
|
224
|
+
sha: "abc1234567890",
|
|
225
|
+
protected: false,
|
|
226
|
+
});
|
|
227
|
+
mocks.getRefSha.mockRejectedValue(new Error("Not found"));
|
|
228
|
+
await expect(cherryPickCommand(ctx, "0.26", ["nonexistent"], options)).rejects.toThrow(ValidationError);
|
|
229
|
+
await expect(cherryPickCommand(ctx, "0.26", ["nonexistent"], options)).rejects.toThrow("not found in repository");
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
describe("dry run mode", () => {
|
|
233
|
+
it("does not perform git operations in dry run mode", async () => {
|
|
234
|
+
const { ctx, mocks } = createMockContext();
|
|
235
|
+
const options = { dryRun: true };
|
|
236
|
+
setupSuccessfulGitMocks();
|
|
237
|
+
mocks.getBranch.mockResolvedValue({
|
|
238
|
+
name: "stable/0.26",
|
|
239
|
+
sha: "abc1234567890",
|
|
240
|
+
protected: false,
|
|
241
|
+
});
|
|
242
|
+
mocks.getRefSha.mockResolvedValue("abc1234567890");
|
|
243
|
+
await cherryPickCommand(ctx, "0.26", ["abc123"], options);
|
|
244
|
+
// Should not have called createPullRequest
|
|
245
|
+
expect(mocks.createPullRequest).not.toHaveBeenCalled();
|
|
246
|
+
});
|
|
247
|
+
it("outputs dry run header in human mode", async () => {
|
|
248
|
+
const { ctx, mocks } = createMockContext();
|
|
249
|
+
const options = { dryRun: true };
|
|
250
|
+
setupSuccessfulGitMocks();
|
|
251
|
+
mocks.getBranch.mockResolvedValue({
|
|
252
|
+
name: "stable/0.26",
|
|
253
|
+
sha: "abc1234567890",
|
|
254
|
+
protected: false,
|
|
255
|
+
});
|
|
256
|
+
mocks.getRefSha.mockResolvedValue("abc1234567890");
|
|
257
|
+
await cherryPickCommand(ctx, "0.26", ["abc123"], options);
|
|
258
|
+
expect(ctx.formatter.header).toHaveBeenCalledWith(expect.stringContaining("Dry Run"));
|
|
259
|
+
});
|
|
260
|
+
it("outputs JSON with dryRun=true in JSON mode", async () => {
|
|
261
|
+
const { ctx, mocks, output } = createMockContext();
|
|
262
|
+
const options = { dryRun: true };
|
|
263
|
+
setupSuccessfulGitMocks();
|
|
264
|
+
ctx.formatter.isJsonMode.mockReturnValue(true);
|
|
265
|
+
mocks.getBranch.mockResolvedValue({
|
|
266
|
+
name: "stable/0.26",
|
|
267
|
+
sha: "abc1234567890",
|
|
268
|
+
protected: false,
|
|
269
|
+
});
|
|
270
|
+
mocks.getRefSha.mockResolvedValue("abc1234567890");
|
|
271
|
+
await cherryPickCommand(ctx, "0.26", ["abc123"], options);
|
|
272
|
+
expect(output.json).toMatchObject({
|
|
273
|
+
version: "0.26",
|
|
274
|
+
stableBranch: "stable/0.26",
|
|
275
|
+
dryRun: true,
|
|
276
|
+
created: false,
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
describe("successful cherry-pick", () => {
|
|
281
|
+
it("creates PR after successful cherry-pick", async () => {
|
|
282
|
+
const { ctx, mocks, output } = createMockContext();
|
|
283
|
+
const options = { dryRun: false, force: true };
|
|
284
|
+
setupSuccessfulGitMocks();
|
|
285
|
+
mocks.getBranch.mockResolvedValue({
|
|
286
|
+
name: "stable/0.26",
|
|
287
|
+
sha: "abc1234567890",
|
|
288
|
+
protected: false,
|
|
289
|
+
});
|
|
290
|
+
mocks.getRefSha.mockResolvedValue("abc1234567890");
|
|
291
|
+
mocks.createPullRequest.mockResolvedValue({
|
|
292
|
+
number: 123,
|
|
293
|
+
title: "[Backport 0.26] Fix bug in feature",
|
|
294
|
+
url: "https://github.com/codefresh-io/gitops-runtime-helm/pull/123",
|
|
295
|
+
state: "open",
|
|
296
|
+
draft: false,
|
|
297
|
+
headBranch: "cherry-pick/0.26-xyz",
|
|
298
|
+
baseBranch: "stable/0.26",
|
|
299
|
+
labels: [],
|
|
300
|
+
mergeable: true,
|
|
301
|
+
createdAt: "2025-01-06T00:00:00Z",
|
|
302
|
+
updatedAt: "2025-01-06T00:00:00Z",
|
|
303
|
+
});
|
|
304
|
+
await cherryPickCommand(ctx, "0.26", ["abc123"], options);
|
|
305
|
+
expect(mocks.createPullRequest).toHaveBeenCalledWith(expect.objectContaining({
|
|
306
|
+
base: "stable/0.26",
|
|
307
|
+
title: expect.stringContaining("Backport 0.26"),
|
|
308
|
+
}));
|
|
309
|
+
expect(output.successes.some((s) => s.includes("Cherry-picked"))).toBe(true);
|
|
310
|
+
});
|
|
311
|
+
it("outputs JSON with PR info in JSON mode", async () => {
|
|
312
|
+
const { ctx, mocks, output } = createMockContext();
|
|
313
|
+
const options = { dryRun: false, force: true };
|
|
314
|
+
setupSuccessfulGitMocks();
|
|
315
|
+
ctx.formatter.isJsonMode.mockReturnValue(true);
|
|
316
|
+
mocks.getBranch.mockResolvedValue({
|
|
317
|
+
name: "stable/0.26",
|
|
318
|
+
sha: "abc1234567890",
|
|
319
|
+
protected: false,
|
|
320
|
+
});
|
|
321
|
+
mocks.getRefSha.mockResolvedValue("abc1234567890");
|
|
322
|
+
mocks.createPullRequest.mockResolvedValue({
|
|
323
|
+
number: 123,
|
|
324
|
+
title: "[Backport 0.26] Fix bug in feature",
|
|
325
|
+
url: "https://github.com/codefresh-io/gitops-runtime-helm/pull/123",
|
|
326
|
+
state: "open",
|
|
327
|
+
draft: false,
|
|
328
|
+
headBranch: "cherry-pick/0.26-xyz",
|
|
329
|
+
baseBranch: "stable/0.26",
|
|
330
|
+
labels: [],
|
|
331
|
+
mergeable: true,
|
|
332
|
+
createdAt: "2025-01-06T00:00:00Z",
|
|
333
|
+
updatedAt: "2025-01-06T00:00:00Z",
|
|
334
|
+
});
|
|
335
|
+
await cherryPickCommand(ctx, "0.26", ["abc123"], options);
|
|
336
|
+
expect(output.json).toMatchObject({
|
|
337
|
+
version: "0.26",
|
|
338
|
+
stableBranch: "stable/0.26",
|
|
339
|
+
dryRun: false,
|
|
340
|
+
created: true,
|
|
341
|
+
pr: {
|
|
342
|
+
number: 123,
|
|
343
|
+
url: "https://github.com/codefresh-io/gitops-runtime-helm/pull/123",
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
it("handles multiple commits", async () => {
|
|
348
|
+
const { ctx, mocks } = createMockContext();
|
|
349
|
+
const options = { dryRun: false, force: true };
|
|
350
|
+
setupSuccessfulGitMocks();
|
|
351
|
+
mocks.getBranch.mockResolvedValue({
|
|
352
|
+
name: "stable/0.26",
|
|
353
|
+
sha: "abc1234567890",
|
|
354
|
+
protected: false,
|
|
355
|
+
});
|
|
356
|
+
mocks.getRefSha.mockResolvedValue("abc1234567890");
|
|
357
|
+
mocks.createPullRequest.mockResolvedValue({
|
|
358
|
+
number: 123,
|
|
359
|
+
title: "[Backport 0.26] Cherry-pick 2 commits",
|
|
360
|
+
url: "https://github.com/codefresh-io/gitops-runtime-helm/pull/123",
|
|
361
|
+
state: "open",
|
|
362
|
+
draft: false,
|
|
363
|
+
headBranch: "cherry-pick/0.26-xyz",
|
|
364
|
+
baseBranch: "stable/0.26",
|
|
365
|
+
labels: [],
|
|
366
|
+
mergeable: true,
|
|
367
|
+
createdAt: "2025-01-06T00:00:00Z",
|
|
368
|
+
updatedAt: "2025-01-06T00:00:00Z",
|
|
369
|
+
});
|
|
370
|
+
await cherryPickCommand(ctx, "0.26", ["abc123", "def456"], options);
|
|
371
|
+
expect(mocks.createPullRequest).toHaveBeenCalledWith(expect.objectContaining({
|
|
372
|
+
title: expect.stringContaining("Cherry-pick 2 commits"),
|
|
373
|
+
}));
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
});
|
|
377
|
+
//# sourceMappingURL=cherry-pick.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cherry-pick.test.js","sourceRoot":"","sources":["../../src/commands/cherry-pick.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Formatter } from "../output/formatter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Supported shell types for completion.
|
|
4
|
+
*/
|
|
5
|
+
export type ShellType = "bash" | "zsh";
|
|
6
|
+
/**
|
|
7
|
+
* Executes the completion command.
|
|
8
|
+
* Generates shell completion scripts for bash or zsh.
|
|
9
|
+
*/
|
|
10
|
+
export declare function completionCommand(_formatter: Formatter, shell: string): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;AAyKvC;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B3F"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// ABOUTME: Shell completion script generator for bash and zsh.
|
|
2
|
+
// ABOUTME: Outputs completion scripts that users can source in their shell config.
|
|
3
|
+
import { ValidationError } from "../utils/errors.js";
|
|
4
|
+
/**
|
|
5
|
+
* Generates a bash completion script for gitops-release.
|
|
6
|
+
*/
|
|
7
|
+
function generateBashCompletion() {
|
|
8
|
+
return `# Bash completion for gitops-release
|
|
9
|
+
# Add to ~/.bashrc or ~/.bash_profile:
|
|
10
|
+
# source <(gitops-release completion bash)
|
|
11
|
+
# Or save to a file:
|
|
12
|
+
# gitops-release completion bash > /etc/bash_completion.d/gitops-release
|
|
13
|
+
|
|
14
|
+
_gitops_release_completions() {
|
|
15
|
+
local cur prev words cword
|
|
16
|
+
_init_completion || return
|
|
17
|
+
|
|
18
|
+
local commands="create status publish list notes cherry-pick completion"
|
|
19
|
+
local global_opts="--repo --json --quiet --verbose --no-color --help --version"
|
|
20
|
+
|
|
21
|
+
case "\${COMP_CWORD}" in
|
|
22
|
+
1)
|
|
23
|
+
COMPREPLY=( $(compgen -W "\${commands} \${global_opts}" -- "\${cur}") )
|
|
24
|
+
return 0
|
|
25
|
+
;;
|
|
26
|
+
*)
|
|
27
|
+
local command="\${COMP_WORDS[1]}"
|
|
28
|
+
case "\${command}" in
|
|
29
|
+
create)
|
|
30
|
+
local create_opts="--from --dry-run --force"
|
|
31
|
+
COMPREPLY=( $(compgen -W "\${create_opts} \${global_opts}" -- "\${cur}") )
|
|
32
|
+
return 0
|
|
33
|
+
;;
|
|
34
|
+
status)
|
|
35
|
+
COMPREPLY=( $(compgen -W "\${global_opts}" -- "\${cur}") )
|
|
36
|
+
return 0
|
|
37
|
+
;;
|
|
38
|
+
publish)
|
|
39
|
+
local publish_opts="--force --dry-run"
|
|
40
|
+
COMPREPLY=( $(compgen -W "\${publish_opts} \${global_opts}" -- "\${cur}") )
|
|
41
|
+
return 0
|
|
42
|
+
;;
|
|
43
|
+
list)
|
|
44
|
+
local list_opts="--limit --include-drafts"
|
|
45
|
+
COMPREPLY=( $(compgen -W "\${list_opts} \${global_opts}" -- "\${cur}") )
|
|
46
|
+
return 0
|
|
47
|
+
;;
|
|
48
|
+
notes)
|
|
49
|
+
local notes_opts="--edit --apply --dry-run"
|
|
50
|
+
COMPREPLY=( $(compgen -W "\${notes_opts} \${global_opts}" -- "\${cur}") )
|
|
51
|
+
return 0
|
|
52
|
+
;;
|
|
53
|
+
cherry-pick)
|
|
54
|
+
local cp_opts="--dry-run --force"
|
|
55
|
+
COMPREPLY=( $(compgen -W "\${cp_opts} \${global_opts}" -- "\${cur}") )
|
|
56
|
+
return 0
|
|
57
|
+
;;
|
|
58
|
+
completion)
|
|
59
|
+
COMPREPLY=( $(compgen -W "bash zsh" -- "\${cur}") )
|
|
60
|
+
return 0
|
|
61
|
+
;;
|
|
62
|
+
esac
|
|
63
|
+
;;
|
|
64
|
+
esac
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
complete -F _gitops_release_completions gitops-release
|
|
68
|
+
`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Generates a zsh completion script for gitops-release.
|
|
72
|
+
*/
|
|
73
|
+
function generateZshCompletion() {
|
|
74
|
+
return `#compdef gitops-release
|
|
75
|
+
|
|
76
|
+
# Zsh completion for gitops-release
|
|
77
|
+
# Add to your fpath or save to ~/.zsh/completions/_gitops-release:
|
|
78
|
+
# gitops-release completion zsh > ~/.zsh/completions/_gitops-release
|
|
79
|
+
# Then add to ~/.zshrc:
|
|
80
|
+
# fpath=(~/.zsh/completions $fpath)
|
|
81
|
+
# autoload -Uz compinit && compinit
|
|
82
|
+
|
|
83
|
+
_gitops_release() {
|
|
84
|
+
local -a commands
|
|
85
|
+
local -a global_opts
|
|
86
|
+
|
|
87
|
+
commands=(
|
|
88
|
+
'create:Create a new stable release branch (triggers prepare-release pipeline)'
|
|
89
|
+
'status:Show status of releases, PRs, drafts, and pipelines'
|
|
90
|
+
'publish:Publish a release by merging prepare-release PR'
|
|
91
|
+
'list:List releases and their states'
|
|
92
|
+
'notes:Generate AI-powered release notes for review'
|
|
93
|
+
'cherry-pick:Cherry-pick commits to a stable branch and create a PR'
|
|
94
|
+
'completion:Generate shell completion script'
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
global_opts=(
|
|
98
|
+
'--repo[Target repository]:repo:_files'
|
|
99
|
+
'--json[Output as JSON]'
|
|
100
|
+
'(-q --quiet)'{-q,--quiet}'[Minimal output]'
|
|
101
|
+
'(-v --verbose)'{-v,--verbose}'[Verbose output]'
|
|
102
|
+
'--no-color[Disable colored output]'
|
|
103
|
+
'(-h --help)'{-h,--help}'[Show help]'
|
|
104
|
+
'(-V --version)'{-V,--version}'[Show version]'
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
local curcontext="$curcontext" state line
|
|
108
|
+
typeset -A opt_args
|
|
109
|
+
|
|
110
|
+
_arguments -C \\
|
|
111
|
+
$global_opts \\
|
|
112
|
+
'1: :->command' \\
|
|
113
|
+
'*:: :->args'
|
|
114
|
+
|
|
115
|
+
case $state in
|
|
116
|
+
command)
|
|
117
|
+
_describe -t commands 'gitops-release commands' commands
|
|
118
|
+
;;
|
|
119
|
+
args)
|
|
120
|
+
case $line[1] in
|
|
121
|
+
create)
|
|
122
|
+
_arguments \\
|
|
123
|
+
'--from[Commit SHA to branch from]:sha:' \\
|
|
124
|
+
'--dry-run[Preview without making changes]' \\
|
|
125
|
+
'(-f --force)'{-f,--force}'[Skip confirmation prompt]' \\
|
|
126
|
+
'1:version (major.minor):'
|
|
127
|
+
;;
|
|
128
|
+
status)
|
|
129
|
+
_arguments \\
|
|
130
|
+
'1:version (optional):'
|
|
131
|
+
;;
|
|
132
|
+
publish)
|
|
133
|
+
_arguments \\
|
|
134
|
+
'(-f --force)'{-f,--force}'[Skip confirmation prompt]' \\
|
|
135
|
+
'--dry-run[Preview without merging]' \\
|
|
136
|
+
'1:version (major.minor.patch):'
|
|
137
|
+
;;
|
|
138
|
+
list)
|
|
139
|
+
_arguments \\
|
|
140
|
+
'(-n --limit)'{-n,--limit}'[Number of releases to show]:number:' \\
|
|
141
|
+
'--include-drafts[Include draft releases]'
|
|
142
|
+
;;
|
|
143
|
+
notes)
|
|
144
|
+
_arguments \\
|
|
145
|
+
'(-e --edit)'{-e,--edit}'[Open generated notes in \\$EDITOR]' \\
|
|
146
|
+
'(-a --apply)'{-a,--apply}'[Apply notes to draft release and Chart.yaml]' \\
|
|
147
|
+
'--dry-run[Preview without making changes]' \\
|
|
148
|
+
'1:version (major.minor.patch):'
|
|
149
|
+
;;
|
|
150
|
+
cherry-pick)
|
|
151
|
+
_arguments \\
|
|
152
|
+
'--dry-run[Preview without making changes]' \\
|
|
153
|
+
'(-f --force)'{-f,--force}'[Skip confirmation prompt]' \\
|
|
154
|
+
'1:version (major.minor):' \\
|
|
155
|
+
'*:commit SHA:'
|
|
156
|
+
;;
|
|
157
|
+
completion)
|
|
158
|
+
_arguments \\
|
|
159
|
+
'1:shell:(bash zsh)'
|
|
160
|
+
;;
|
|
161
|
+
esac
|
|
162
|
+
;;
|
|
163
|
+
esac
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
_gitops_release "$@"
|
|
167
|
+
`;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Executes the completion command.
|
|
171
|
+
* Generates shell completion scripts for bash or zsh.
|
|
172
|
+
*/
|
|
173
|
+
export async function completionCommand(_formatter, shell) {
|
|
174
|
+
const normalizedShell = shell.toLowerCase();
|
|
175
|
+
if (normalizedShell !== "bash" && normalizedShell !== "zsh") {
|
|
176
|
+
throw new ValidationError(`Unsupported shell '${shell}'.\n` +
|
|
177
|
+
"Supported shells: bash, zsh\n\n" +
|
|
178
|
+
"Usage:\n" +
|
|
179
|
+
" gitops-release completion bash\n" +
|
|
180
|
+
" gitops-release completion zsh");
|
|
181
|
+
}
|
|
182
|
+
let script;
|
|
183
|
+
switch (normalizedShell) {
|
|
184
|
+
case "bash":
|
|
185
|
+
script = generateBashCompletion();
|
|
186
|
+
break;
|
|
187
|
+
case "zsh":
|
|
188
|
+
script = generateZshCompletion();
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
// Output the raw script to stdout (not through formatter)
|
|
192
|
+
// This allows users to pipe it directly: gitops-release completion bash > file
|
|
193
|
+
console.log(script);
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,mFAAmF;AAGnF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAOrD;;GAEG;AACH,SAAS,sBAAsB;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6FR,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAqB,EAAE,KAAa;IAC1E,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAe,CAAC;IAEzD,IAAI,eAAe,KAAK,MAAM,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;QAC5D,MAAM,IAAI,eAAe,CACvB,sBAAsB,KAAK,MAAM;YAC/B,iCAAiC;YACjC,UAAU;YACV,oCAAoC;YACpC,iCAAiC,CACpC,CAAC;IACJ,CAAC;IAED,IAAI,MAAc,CAAC;IAEnB,QAAQ,eAAe,EAAE,CAAC;QACxB,KAAK,MAAM;YACT,MAAM,GAAG,sBAAsB,EAAE,CAAC;YAClC,MAAM;QACR,KAAK,KAAK;YACR,MAAM,GAAG,qBAAqB,EAAE,CAAC;YACjC,MAAM;IACV,CAAC;IAED,0DAA0D;IAC1D,+EAA+E;IAC/E,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.test.d.ts","sourceRoot":"","sources":["../../src/commands/completion.test.ts"],"names":[],"mappings":""}
|