@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,220 @@
1
+ // ABOUTME: Publish command that merges a prepare-release PR to publish a release.
2
+ // ABOUTME: Validates PR has correct label and passing checks before merging.
3
+ import { NotFoundError, ValidationError, GitHubError } from "../utils/errors.js";
4
+ import { parseFullVersion, formatPrepBranch, formatReleaseTag, extractMajorMinor, } from "../services/version.js";
5
+ import { confirm } from "../utils/prompts.js";
6
+ /**
7
+ * Prepare-release label that triggers the promote pipeline on merge.
8
+ */
9
+ const PREPARE_RELEASE_LABEL = "prepare-release";
10
+ /**
11
+ * Executes the publish command.
12
+ * Merges a prepare-release PR to trigger the promote pipeline.
13
+ */
14
+ export async function publishCommand(ctx, versionInput, options) {
15
+ const { github, formatter } = ctx;
16
+ // Parse and validate version format (must be major.minor.patch)
17
+ const version = parseFullVersion(versionInput);
18
+ const prepBranchName = formatPrepBranch(version);
19
+ const releaseTag = formatReleaseTag(version);
20
+ const spinner = formatter.spinner(`Finding prepare-release PR for ${versionInput}...`);
21
+ spinner.start();
22
+ // Find the prepare-release PR
23
+ const pr = await github.findPullRequestByHead(prepBranchName);
24
+ if (!pr) {
25
+ spinner.stop();
26
+ throw new NotFoundError(`Prepare-release PR`, `No open PR found for branch '${prepBranchName}'.\n` +
27
+ `The prepare-release pipeline may not have run yet.\n` +
28
+ `Run 'gitops-release status ${extractMajorMinor(version).major}.${extractMajorMinor(version).minor}' to check.`);
29
+ }
30
+ // Validate PR has the prepare-release label
31
+ if (!pr.labels.includes(PREPARE_RELEASE_LABEL)) {
32
+ spinner.stop();
33
+ throw new ValidationError(`PR #${pr.number} does not have the '${PREPARE_RELEASE_LABEL}' label.\n` +
34
+ `This label is required to trigger the promote pipeline on merge.\n` +
35
+ `Add the label manually or wait for the prepare-release pipeline to complete.`);
36
+ }
37
+ // Get check status
38
+ const checks = await github.getCommitChecks(pr.headBranch);
39
+ // Get draft release info (if exists)
40
+ const draftRelease = await github.getDraftRelease(releaseTag);
41
+ spinner.stop();
42
+ // Validate checks are passing
43
+ if (!checks.allPassing) {
44
+ const failMessage = buildChecksFailureMessage(checks, pr);
45
+ if (!options.force) {
46
+ throw new ValidationError(failMessage);
47
+ }
48
+ formatter.warning("Proceeding despite failing checks due to --force flag");
49
+ formatter.text(failMessage);
50
+ }
51
+ // Dry run mode - just show what would happen
52
+ if (options.dryRun) {
53
+ outputDryRun(formatter, versionInput, pr, checks, draftRelease);
54
+ return;
55
+ }
56
+ // Show PR info and confirm
57
+ if (!formatter.isJsonMode()) {
58
+ outputPublishPreview(formatter, versionInput, pr, checks, draftRelease);
59
+ }
60
+ // Confirm before merging
61
+ await confirm(`Merge PR #${pr.number} to publish release ${versionInput}?`, {
62
+ force: options.force,
63
+ });
64
+ // Merge the PR
65
+ const mergeSpinner = formatter.spinner(`Merging PR #${pr.number}...`);
66
+ mergeSpinner.start();
67
+ try {
68
+ await github.mergePullRequest(pr.number);
69
+ }
70
+ catch (error) {
71
+ mergeSpinner.stop();
72
+ if (error instanceof GitHubError) {
73
+ throw new GitHubError(`Failed to merge PR #${pr.number}: ${error.message}\n` +
74
+ `The PR may have merge conflicts or required checks may not have passed.`);
75
+ }
76
+ throw error;
77
+ }
78
+ mergeSpinner.stop();
79
+ // Handle JSON output
80
+ if (formatter.isJsonMode()) {
81
+ const jsonOutput = {
82
+ version: versionInput,
83
+ pr: {
84
+ number: pr.number,
85
+ title: pr.title,
86
+ url: pr.url,
87
+ headBranch: pr.headBranch,
88
+ baseBranch: pr.baseBranch,
89
+ },
90
+ checks: {
91
+ total: checks.totalCount,
92
+ passing: checks.passing,
93
+ failing: checks.failing,
94
+ pending: checks.pending,
95
+ allPassing: checks.allPassing,
96
+ },
97
+ release: draftRelease
98
+ ? {
99
+ tag: draftRelease.tag,
100
+ url: draftRelease.url,
101
+ draft: draftRelease.draft,
102
+ }
103
+ : null,
104
+ merged: true,
105
+ dryRun: false,
106
+ };
107
+ formatter.json(jsonOutput);
108
+ return;
109
+ }
110
+ // Human-readable success output
111
+ formatter.success(`Merged PR #${pr.number}`);
112
+ formatter.newline();
113
+ formatter.section("Next steps");
114
+ formatter.text(" The promote pipeline will now:");
115
+ formatter.text(` • Publish chart to quay.io/codefresh/gitops-runtime:${releaseTag}`);
116
+ formatter.text(" • Publish GitHub release (draft → published)");
117
+ formatter.text(" • Sign container images");
118
+ formatter.newline();
119
+ if (draftRelease) {
120
+ formatter.text(` Release URL: ${draftRelease.url}`);
121
+ }
122
+ else {
123
+ const repo = github.getRepo();
124
+ formatter.text(` Release URL: https://github.com/${repo.owner}/${repo.repo}/releases/tag/${releaseTag}`);
125
+ }
126
+ }
127
+ /**
128
+ * Builds a detailed error message when checks are not passing.
129
+ */
130
+ function buildChecksFailureMessage(checks, pr) {
131
+ const lines = [`CI checks are not passing on PR #${pr.number}`];
132
+ if (checks.failing > 0) {
133
+ lines.push(` ${checks.failing} check(s) failing`);
134
+ }
135
+ if (checks.pending > 0) {
136
+ lines.push(` ${checks.pending} check(s) still running`);
137
+ }
138
+ const failedChecks = checks.checks.filter((c) => c.status === "completed" &&
139
+ c.conclusion !== "success" &&
140
+ c.conclusion !== "skipped" &&
141
+ c.conclusion !== "neutral");
142
+ if (failedChecks.length > 0) {
143
+ lines.push("");
144
+ lines.push("Failed checks:");
145
+ for (const check of failedChecks.slice(0, 5)) {
146
+ lines.push(` • ${check.name}: ${check.conclusion}`);
147
+ }
148
+ if (failedChecks.length > 5) {
149
+ lines.push(` ... and ${failedChecks.length - 5} more`);
150
+ }
151
+ }
152
+ lines.push("");
153
+ lines.push(`Review the PR at: ${pr.url}`);
154
+ return lines.join("\n");
155
+ }
156
+ /**
157
+ * Outputs dry run information.
158
+ */
159
+ function outputDryRun(formatter, version, pr, checks, release) {
160
+ if (formatter.isJsonMode()) {
161
+ const jsonOutput = {
162
+ version,
163
+ pr: {
164
+ number: pr.number,
165
+ title: pr.title,
166
+ url: pr.url,
167
+ headBranch: pr.headBranch,
168
+ baseBranch: pr.baseBranch,
169
+ },
170
+ checks: {
171
+ total: checks.totalCount,
172
+ passing: checks.passing,
173
+ failing: checks.failing,
174
+ pending: checks.pending,
175
+ allPassing: checks.allPassing,
176
+ },
177
+ release: release
178
+ ? {
179
+ tag: release.tag,
180
+ url: release.url,
181
+ draft: release.draft,
182
+ }
183
+ : null,
184
+ merged: false,
185
+ dryRun: true,
186
+ };
187
+ formatter.json(jsonOutput);
188
+ return;
189
+ }
190
+ formatter.header("Dry Run - No changes will be made");
191
+ formatter.newline();
192
+ formatter.section("Prepare-Release PR");
193
+ formatter.text(` #${pr.number} ${pr.headBranch} → ${pr.baseBranch}`);
194
+ formatter.text(` Title: ${pr.title}`);
195
+ formatter.text(` URL: ${pr.url}`);
196
+ formatter.text(` Checks: ${formatter.status(formatter.checksStatusLabel(checks))}`);
197
+ if (release) {
198
+ formatter.section("Draft Release");
199
+ formatter.text(` Tag: ${release.tag}`);
200
+ formatter.text(` URL: ${release.url}`);
201
+ }
202
+ formatter.newline();
203
+ formatter.info("Run without --dry-run to merge the PR and publish the release");
204
+ }
205
+ /**
206
+ * Outputs publish preview before confirmation.
207
+ */
208
+ function outputPublishPreview(formatter, version, pr, checks, draftRelease) {
209
+ formatter.text(`Publishing release ${version}...`);
210
+ formatter.newline();
211
+ formatter.section("Prepare-Release PR");
212
+ formatter.text(` #${pr.number} ${pr.headBranch} → ${pr.baseBranch}`);
213
+ formatter.text(` Status: ${formatter.status(formatter.checksStatusLabel(checks))}`);
214
+ if (draftRelease) {
215
+ formatter.section("Draft Release");
216
+ formatter.text(` ${draftRelease.tag} ${draftRelease.url}`);
217
+ }
218
+ formatter.newline();
219
+ }
220
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=publish.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.test.d.ts","sourceRoot":"","sources":["../../src/commands/publish.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,371 @@
1
+ // ABOUTME: Unit tests for the publish command.
2
+ // ABOUTME: Tests version validation, PR discovery, check validation, and merge behavior.
3
+ import { describe, it, expect, vi, beforeEach } from "vitest";
4
+ import { publishCommand } from "./publish.js";
5
+ import { ValidationError, NotFoundError } from "../utils/errors.js";
6
+ // Mock the prompts module
7
+ vi.mock("../utils/prompts.js", () => ({
8
+ confirm: vi.fn().mockResolvedValue(true),
9
+ }));
10
+ /**
11
+ * Creates a mock PullRequestInfo.
12
+ */
13
+ function createMockPR(overrides = {}) {
14
+ return {
15
+ number: 456,
16
+ title: "prepare-version(0.27.0): prepare chart content for release",
17
+ state: "open",
18
+ draft: false,
19
+ headBranch: "prep/v0.27.0",
20
+ baseBranch: "stable/0.27",
21
+ url: "https://github.com/test-owner/test-repo/pull/456",
22
+ labels: ["prepare-release"],
23
+ mergeable: true,
24
+ createdAt: "2025-01-01T00:00:00Z",
25
+ updatedAt: "2025-01-01T00:00:00Z",
26
+ ...overrides,
27
+ };
28
+ }
29
+ /**
30
+ * Creates a mock CheckStatus.
31
+ */
32
+ function createMockChecks(overrides = {}) {
33
+ return {
34
+ totalCount: 3,
35
+ passing: 3,
36
+ failing: 0,
37
+ pending: 0,
38
+ allPassing: true,
39
+ checks: [
40
+ { name: "lint", status: "completed", conclusion: "success" },
41
+ { name: "test", status: "completed", conclusion: "success" },
42
+ { name: "build", status: "completed", conclusion: "success" },
43
+ ],
44
+ ...overrides,
45
+ };
46
+ }
47
+ /**
48
+ * Creates a mock ReleaseInfo.
49
+ */
50
+ function createMockRelease(overrides = {}) {
51
+ return {
52
+ id: 123,
53
+ tag: "0.27.0",
54
+ name: "0.27.0",
55
+ draft: true,
56
+ prerelease: false,
57
+ publishedAt: null,
58
+ url: "https://github.com/test-owner/test-repo/releases/tag/0.27.0",
59
+ body: null,
60
+ ...overrides,
61
+ };
62
+ }
63
+ /**
64
+ * Creates a mock GitHubService with default implementations.
65
+ */
66
+ function createMockGitHub() {
67
+ const findPullRequestByHead = vi.fn();
68
+ const getCommitChecks = vi.fn();
69
+ const getDraftRelease = vi.fn();
70
+ const mergePullRequest = vi.fn();
71
+ const getRepo = vi.fn().mockReturnValue({ owner: "test-owner", repo: "test-repo" });
72
+ const github = {
73
+ findPullRequestByHead,
74
+ getCommitChecks,
75
+ getDraftRelease,
76
+ mergePullRequest,
77
+ getRepo,
78
+ };
79
+ return {
80
+ github,
81
+ mocks: { findPullRequestByHead, getCommitChecks, getDraftRelease, mergePullRequest, getRepo },
82
+ };
83
+ }
84
+ /**
85
+ * Creates a mock Formatter that captures output.
86
+ */
87
+ function createMockFormatter() {
88
+ const output = {
89
+ json: null,
90
+ texts: [],
91
+ successes: [],
92
+ warnings: [],
93
+ };
94
+ const formatter = {
95
+ spinner: vi.fn().mockReturnValue({
96
+ start: vi.fn(),
97
+ stop: vi.fn(),
98
+ }),
99
+ isJsonMode: vi.fn().mockReturnValue(false),
100
+ json: vi.fn((data) => {
101
+ output.json = data;
102
+ }),
103
+ header: vi.fn(),
104
+ newline: vi.fn(),
105
+ keyValue: vi.fn(),
106
+ info: vi.fn(),
107
+ text: vi.fn((msg) => {
108
+ output.texts.push(msg);
109
+ }),
110
+ section: vi.fn(),
111
+ success: vi.fn((msg) => {
112
+ output.successes.push(msg);
113
+ }),
114
+ warning: vi.fn((msg) => {
115
+ output.warnings.push(msg);
116
+ }),
117
+ status: vi.fn((s) => `[${s}]`),
118
+ checksStatusLabel: vi.fn((checks) => {
119
+ if (checks.allPassing)
120
+ return "passing";
121
+ if (checks.pending > 0)
122
+ return "pending";
123
+ return "failing";
124
+ }),
125
+ };
126
+ return { formatter, output };
127
+ }
128
+ /**
129
+ * Creates a CommandContext with mocked services.
130
+ */
131
+ function createMockContext() {
132
+ const { github, mocks } = createMockGitHub();
133
+ const { formatter, output } = createMockFormatter();
134
+ const ctx = {
135
+ github,
136
+ formatter,
137
+ options: {
138
+ repo: "test-owner/test-repo",
139
+ json: false,
140
+ quiet: false,
141
+ verbose: false,
142
+ },
143
+ };
144
+ return { ctx, mocks, output };
145
+ }
146
+ describe("publishCommand", () => {
147
+ beforeEach(() => {
148
+ vi.clearAllMocks();
149
+ });
150
+ describe("version validation", () => {
151
+ it("rejects major.minor format (requires patch)", async () => {
152
+ const { ctx } = createMockContext();
153
+ const options = { force: false, dryRun: false };
154
+ await expect(publishCommand(ctx, "0.27", options)).rejects.toThrow(ValidationError);
155
+ await expect(publishCommand(ctx, "0.27", options)).rejects.toThrow("Expected: major.minor.patch");
156
+ });
157
+ it("rejects invalid version formats", async () => {
158
+ const { ctx } = createMockContext();
159
+ const options = { force: false, dryRun: false };
160
+ await expect(publishCommand(ctx, "27", options)).rejects.toThrow(ValidationError);
161
+ await expect(publishCommand(ctx, "v0.27.0", options)).rejects.toThrow(ValidationError);
162
+ await expect(publishCommand(ctx, "0.27.0.1", options)).rejects.toThrow(ValidationError);
163
+ });
164
+ it("accepts valid major.minor.patch format", async () => {
165
+ const { ctx, mocks } = createMockContext();
166
+ const options = { force: false, dryRun: true };
167
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
168
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
169
+ mocks.getDraftRelease.mockResolvedValue(createMockRelease());
170
+ await expect(publishCommand(ctx, "0.27.0", options)).resolves.not.toThrow();
171
+ });
172
+ });
173
+ describe("PR discovery", () => {
174
+ it("throws error when PR not found", async () => {
175
+ const { ctx, mocks } = createMockContext();
176
+ const options = { force: false, dryRun: false };
177
+ mocks.findPullRequestByHead.mockResolvedValue(null);
178
+ await expect(publishCommand(ctx, "0.27.0", options)).rejects.toThrow(NotFoundError);
179
+ await expect(publishCommand(ctx, "0.27.0", options)).rejects.toThrow("No open PR found");
180
+ });
181
+ it("searches for PR with correct prep branch name", async () => {
182
+ const { ctx, mocks } = createMockContext();
183
+ const options = { force: false, dryRun: true };
184
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
185
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
186
+ mocks.getDraftRelease.mockResolvedValue(null);
187
+ await publishCommand(ctx, "0.27.0", options);
188
+ expect(mocks.findPullRequestByHead).toHaveBeenCalledWith("prep/v0.27.0");
189
+ });
190
+ it("searches for correct prep branch for different versions", async () => {
191
+ const { ctx, mocks } = createMockContext();
192
+ const options = { force: false, dryRun: true };
193
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR({ headBranch: "prep/v1.2.3" }));
194
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
195
+ mocks.getDraftRelease.mockResolvedValue(null);
196
+ await publishCommand(ctx, "1.2.3", options);
197
+ expect(mocks.findPullRequestByHead).toHaveBeenCalledWith("prep/v1.2.3");
198
+ });
199
+ });
200
+ describe("prepare-release label validation", () => {
201
+ it("throws error when PR missing prepare-release label", async () => {
202
+ const { ctx, mocks } = createMockContext();
203
+ const options = { force: false, dryRun: false };
204
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR({ labels: [] }));
205
+ await expect(publishCommand(ctx, "0.27.0", options)).rejects.toThrow(ValidationError);
206
+ await expect(publishCommand(ctx, "0.27.0", options)).rejects.toThrow("prepare-release");
207
+ });
208
+ it("proceeds when PR has prepare-release label", async () => {
209
+ const { ctx, mocks } = createMockContext();
210
+ const options = { force: false, dryRun: true };
211
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR({ labels: ["prepare-release", "other-label"] }));
212
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
213
+ mocks.getDraftRelease.mockResolvedValue(null);
214
+ await expect(publishCommand(ctx, "0.27.0", options)).resolves.not.toThrow();
215
+ });
216
+ });
217
+ describe("check status validation", () => {
218
+ it("throws error when checks are failing without --force", async () => {
219
+ const { ctx, mocks } = createMockContext();
220
+ const options = { force: false, dryRun: false };
221
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
222
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks({
223
+ allPassing: false,
224
+ failing: 1,
225
+ checks: [{ name: "lint", status: "completed", conclusion: "failure" }],
226
+ }));
227
+ mocks.getDraftRelease.mockResolvedValue(null);
228
+ await expect(publishCommand(ctx, "0.27.0", options)).rejects.toThrow(ValidationError);
229
+ await expect(publishCommand(ctx, "0.27.0", options)).rejects.toThrow("checks are not passing");
230
+ });
231
+ it("throws error when checks are pending without --force", async () => {
232
+ const { ctx, mocks } = createMockContext();
233
+ const options = { force: false, dryRun: false };
234
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
235
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks({
236
+ allPassing: false,
237
+ pending: 1,
238
+ passing: 2,
239
+ checks: [
240
+ { name: "lint", status: "completed", conclusion: "success" },
241
+ { name: "test", status: "in_progress", conclusion: null },
242
+ { name: "build", status: "completed", conclusion: "success" },
243
+ ],
244
+ }));
245
+ mocks.getDraftRelease.mockResolvedValue(null);
246
+ await expect(publishCommand(ctx, "0.27.0", options)).rejects.toThrow(ValidationError);
247
+ });
248
+ it("proceeds when checks are passing", async () => {
249
+ const { ctx, mocks } = createMockContext();
250
+ const options = { force: false, dryRun: true };
251
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
252
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
253
+ mocks.getDraftRelease.mockResolvedValue(null);
254
+ await expect(publishCommand(ctx, "0.27.0", options)).resolves.not.toThrow();
255
+ });
256
+ it("allows merge with failing checks when --force is used", async () => {
257
+ const { ctx, mocks, output } = createMockContext();
258
+ const options = { force: true, dryRun: true };
259
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
260
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks({ allPassing: false, failing: 1 }));
261
+ mocks.getDraftRelease.mockResolvedValue(null);
262
+ await publishCommand(ctx, "0.27.0", options);
263
+ expect(output.warnings.length).toBeGreaterThan(0);
264
+ expect(output.warnings[0]).toContain("--force");
265
+ });
266
+ });
267
+ describe("dry run mode", () => {
268
+ it("does not merge PR in dry run mode", async () => {
269
+ const { ctx, mocks } = createMockContext();
270
+ const options = { force: false, dryRun: true };
271
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
272
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
273
+ mocks.getDraftRelease.mockResolvedValue(createMockRelease());
274
+ await publishCommand(ctx, "0.27.0", options);
275
+ expect(mocks.mergePullRequest).not.toHaveBeenCalled();
276
+ });
277
+ it("outputs dry run header in human mode", async () => {
278
+ const { ctx, mocks } = createMockContext();
279
+ const options = { force: false, dryRun: true };
280
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
281
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
282
+ mocks.getDraftRelease.mockResolvedValue(null);
283
+ await publishCommand(ctx, "0.27.0", options);
284
+ expect(ctx.formatter.header).toHaveBeenCalledWith(expect.stringContaining("Dry Run"));
285
+ });
286
+ it("outputs JSON with dryRun=true and merged=false in JSON mode", async () => {
287
+ const { ctx, mocks, output } = createMockContext();
288
+ const options = { force: false, dryRun: true };
289
+ ctx.formatter.isJsonMode.mockReturnValue(true);
290
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
291
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
292
+ mocks.getDraftRelease.mockResolvedValue(createMockRelease());
293
+ await publishCommand(ctx, "0.27.0", options);
294
+ expect(output.json).toMatchObject({
295
+ version: "0.27.0",
296
+ merged: false,
297
+ dryRun: true,
298
+ pr: { number: 456 },
299
+ checks: { allPassing: true },
300
+ });
301
+ });
302
+ });
303
+ describe("PR merge", () => {
304
+ it("merges PR with correct PR number", async () => {
305
+ const { ctx, mocks } = createMockContext();
306
+ const options = { force: true, dryRun: false };
307
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR({ number: 789 }));
308
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
309
+ mocks.getDraftRelease.mockResolvedValue(null);
310
+ mocks.mergePullRequest.mockResolvedValue(undefined);
311
+ await publishCommand(ctx, "0.27.0", options);
312
+ expect(mocks.mergePullRequest).toHaveBeenCalledWith(789);
313
+ });
314
+ it("outputs success message after merge", async () => {
315
+ const { ctx, mocks, output } = createMockContext();
316
+ const options = { force: true, dryRun: false };
317
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
318
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
319
+ mocks.getDraftRelease.mockResolvedValue(null);
320
+ mocks.mergePullRequest.mockResolvedValue(undefined);
321
+ await publishCommand(ctx, "0.27.0", options);
322
+ expect(output.successes).toContainEqual(expect.stringContaining("Merged PR #456"));
323
+ });
324
+ it("outputs JSON with merged=true after merge in JSON mode", async () => {
325
+ const { ctx, mocks, output } = createMockContext();
326
+ const options = { force: true, dryRun: false };
327
+ ctx.formatter.isJsonMode.mockReturnValue(true);
328
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
329
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
330
+ mocks.getDraftRelease.mockResolvedValue(createMockRelease());
331
+ mocks.mergePullRequest.mockResolvedValue(undefined);
332
+ await publishCommand(ctx, "0.27.0", options);
333
+ expect(output.json).toMatchObject({
334
+ version: "0.27.0",
335
+ merged: true,
336
+ dryRun: false,
337
+ pr: { number: 456 },
338
+ });
339
+ });
340
+ });
341
+ describe("draft release handling", () => {
342
+ it("includes draft release info in output when available", async () => {
343
+ const { ctx, mocks, output } = createMockContext();
344
+ const options = { force: false, dryRun: true };
345
+ ctx.formatter.isJsonMode.mockReturnValue(true);
346
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
347
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
348
+ mocks.getDraftRelease.mockResolvedValue(createMockRelease());
349
+ await publishCommand(ctx, "0.27.0", options);
350
+ expect(output.json).toMatchObject({
351
+ release: {
352
+ tag: "0.27.0",
353
+ draft: true,
354
+ },
355
+ });
356
+ });
357
+ it("handles missing draft release gracefully", async () => {
358
+ const { ctx, mocks, output } = createMockContext();
359
+ const options = { force: false, dryRun: true };
360
+ ctx.formatter.isJsonMode.mockReturnValue(true);
361
+ mocks.findPullRequestByHead.mockResolvedValue(createMockPR());
362
+ mocks.getCommitChecks.mockResolvedValue(createMockChecks());
363
+ mocks.getDraftRelease.mockResolvedValue(null);
364
+ await publishCommand(ctx, "0.27.0", options);
365
+ expect(output.json).toMatchObject({
366
+ release: null,
367
+ });
368
+ });
369
+ });
370
+ });
371
+ //# sourceMappingURL=publish.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.test.js","sourceRoot":"","sources":["../../src/commands/publish.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { CommandContext } from "../context.js";
2
+ /**
3
+ * Executes the status command.
4
+ * If version is provided, shows status for that specific version.
5
+ * Otherwise, shows an overview of all active releases.
6
+ */
7
+ export declare function statusCommand(ctx: CommandContext, version?: string): Promise<void>;
8
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AA6E/C;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxF"}