@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,161 @@
1
+ import chalk from "chalk";
2
+ /**
3
+ * Output options that control formatting behavior.
4
+ */
5
+ export interface OutputOptions {
6
+ json?: boolean;
7
+ quiet?: boolean;
8
+ verbose?: boolean;
9
+ noColor?: boolean;
10
+ }
11
+ /**
12
+ * Column definition for table output.
13
+ */
14
+ export interface ColumnDef {
15
+ header: string;
16
+ key: string;
17
+ width?: number;
18
+ align?: "left" | "center" | "right";
19
+ }
20
+ /**
21
+ * Detects if stdout is a TTY (interactive terminal).
22
+ */
23
+ export declare function isTTY(): boolean;
24
+ /**
25
+ * Detects if stderr is a TTY (for spinners).
26
+ */
27
+ export declare function isStderrTTY(): boolean;
28
+ /**
29
+ * Checks if colors should be disabled.
30
+ * Respects NO_COLOR environment variable and --no-color flag.
31
+ */
32
+ export declare function shouldUseColors(options?: OutputOptions): boolean;
33
+ /**
34
+ * Output formatter that handles different output modes.
35
+ */
36
+ export declare class Formatter {
37
+ private options;
38
+ private c;
39
+ constructor(options?: OutputOptions);
40
+ /**
41
+ * Outputs a success message with green checkmark.
42
+ */
43
+ success(message: string): void;
44
+ /**
45
+ * Outputs an error message with red X.
46
+ */
47
+ error(message: string): void;
48
+ /**
49
+ * Outputs an info message with blue info symbol.
50
+ */
51
+ info(message: string): void;
52
+ /**
53
+ * Outputs a warning message with yellow warning symbol.
54
+ */
55
+ warning(message: string): void;
56
+ /**
57
+ * Outputs plain text (no prefix).
58
+ */
59
+ text(message: string): void;
60
+ /**
61
+ * Outputs a blank line.
62
+ */
63
+ newline(): void;
64
+ /**
65
+ * Outputs a header (bold text).
66
+ */
67
+ header(message: string): void;
68
+ /**
69
+ * Outputs a section header with divider.
70
+ */
71
+ section(title: string): void;
72
+ /**
73
+ * Outputs a key-value pair.
74
+ */
75
+ keyValue(key: string, value: string, indent?: number): void;
76
+ /**
77
+ * Outputs verbose/debug information.
78
+ */
79
+ verbose(message: string): void;
80
+ /**
81
+ * Outputs data as a formatted table.
82
+ */
83
+ table<T extends Record<string, unknown>>(data: T[], columns: ColumnDef[]): void;
84
+ /**
85
+ * Outputs data as JSON.
86
+ */
87
+ json(data: unknown): void;
88
+ /**
89
+ * Outputs JSON if in JSON mode, otherwise returns false.
90
+ * Useful for commands to conditionally output JSON.
91
+ */
92
+ maybeJson(data: unknown): boolean;
93
+ /**
94
+ * Creates a spinner for long-running operations.
95
+ * Returns a no-op spinner if not in a TTY or in quiet/JSON mode.
96
+ */
97
+ spinner(message: string): Spinner;
98
+ /**
99
+ * Formats a status indicator.
100
+ */
101
+ status(status: "passing" | "failing" | "pending" | "draft" | "published"): string;
102
+ /**
103
+ * Formats a boolean as Yes/No.
104
+ */
105
+ yesNo(value: boolean): string;
106
+ /**
107
+ * Formats a URL as a clickable link (if terminal supports it).
108
+ */
109
+ link(text: string, url: string): string;
110
+ /**
111
+ * Formats a relative time string.
112
+ */
113
+ relativeTime(date: string | Date): string;
114
+ /**
115
+ * Gets the chalk instance for custom formatting.
116
+ */
117
+ chalk(): typeof chalk;
118
+ /**
119
+ * Checks if in JSON output mode.
120
+ */
121
+ isJsonMode(): boolean;
122
+ /**
123
+ * Checks if in quiet mode.
124
+ */
125
+ isQuietMode(): boolean;
126
+ /**
127
+ * Formats a short date string (e.g., "Jan 6, 2026").
128
+ */
129
+ shortDate(date: string | Date | null): string;
130
+ /**
131
+ * Derives a checks status label from check counts.
132
+ */
133
+ checksStatusLabel(checks: {
134
+ allPassing: boolean;
135
+ pending: number;
136
+ }): "passing" | "pending" | "failing";
137
+ /**
138
+ * Returns a symbol for checks status.
139
+ */
140
+ checksSymbol(checks: {
141
+ allPassing: boolean;
142
+ pending: number;
143
+ }): string;
144
+ }
145
+ /**
146
+ * Spinner interface for progress indication.
147
+ */
148
+ export interface Spinner {
149
+ start(text?: string): Spinner;
150
+ stop(): Spinner;
151
+ succeed(text?: string): Spinner;
152
+ fail(text?: string): Spinner;
153
+ warn(text?: string): Spinner;
154
+ info(text?: string): Spinner;
155
+ text: string;
156
+ }
157
+ /**
158
+ * Creates a new formatter instance.
159
+ */
160
+ export declare function createFormatter(options?: OutputOptions): Formatter;
161
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,398 @@
1
+ // ABOUTME: Output formatting utilities with TTY detection and multiple output modes.
2
+ // ABOUTME: Supports human-readable, JSON, and quiet output with colors and spinners.
3
+ import chalk from "chalk";
4
+ import ora from "ora";
5
+ import Table from "cli-table3";
6
+ /**
7
+ * Detects if stdout is a TTY (interactive terminal).
8
+ */
9
+ export function isTTY() {
10
+ return process.stdout.isTTY === true;
11
+ }
12
+ /**
13
+ * Detects if stderr is a TTY (for spinners).
14
+ */
15
+ export function isStderrTTY() {
16
+ return process.stderr.isTTY === true;
17
+ }
18
+ /**
19
+ * Checks if colors should be disabled.
20
+ * Respects NO_COLOR environment variable and --no-color flag.
21
+ */
22
+ export function shouldUseColors(options = {}) {
23
+ if (options.noColor)
24
+ return false;
25
+ if (process.env.NO_COLOR !== undefined)
26
+ return false;
27
+ return isTTY();
28
+ }
29
+ /**
30
+ * Creates a chalk instance that respects color settings.
31
+ * In Chalk 5, we use the default instance and rely on environment detection.
32
+ */
33
+ function getChalk(options = {}) {
34
+ // Chalk 5 automatically detects color support via environment
35
+ // We use a wrapper to disable colors when needed
36
+ if (!shouldUseColors(options)) {
37
+ // Return an object that mimics chalk but strips colors
38
+ const noColor = (str) => str;
39
+ const chainable = new Proxy(noColor, {
40
+ get: () => chainable,
41
+ apply: (_target, _thisArg, args) => String(args[0] ?? ""),
42
+ });
43
+ return chainable;
44
+ }
45
+ return chalk;
46
+ }
47
+ /**
48
+ * Output formatter that handles different output modes.
49
+ */
50
+ export class Formatter {
51
+ options;
52
+ c;
53
+ constructor(options = {}) {
54
+ this.options = options;
55
+ this.c = getChalk(options);
56
+ }
57
+ /**
58
+ * Outputs a success message with green checkmark.
59
+ */
60
+ success(message) {
61
+ if (this.options.quiet)
62
+ return;
63
+ if (this.options.json)
64
+ return;
65
+ console.log(`${this.c.green("✓")} ${message}`);
66
+ }
67
+ /**
68
+ * Outputs an error message with red X.
69
+ */
70
+ error(message) {
71
+ if (this.options.json)
72
+ return;
73
+ console.error(`${this.c.red("✗")} ${this.c.red(message)}`);
74
+ }
75
+ /**
76
+ * Outputs an info message with blue info symbol.
77
+ */
78
+ info(message) {
79
+ if (this.options.quiet)
80
+ return;
81
+ if (this.options.json)
82
+ return;
83
+ console.log(`${this.c.blue("ℹ")} ${message}`);
84
+ }
85
+ /**
86
+ * Outputs a warning message with yellow warning symbol.
87
+ */
88
+ warning(message) {
89
+ if (this.options.json)
90
+ return;
91
+ console.log(`${this.c.yellow("⚠")} ${this.c.yellow(message)}`);
92
+ }
93
+ /**
94
+ * Outputs plain text (no prefix).
95
+ */
96
+ text(message) {
97
+ if (this.options.quiet)
98
+ return;
99
+ if (this.options.json)
100
+ return;
101
+ console.log(message);
102
+ }
103
+ /**
104
+ * Outputs a blank line.
105
+ */
106
+ newline() {
107
+ if (this.options.quiet)
108
+ return;
109
+ if (this.options.json)
110
+ return;
111
+ console.log();
112
+ }
113
+ /**
114
+ * Outputs a header (bold text).
115
+ */
116
+ header(message) {
117
+ if (this.options.quiet)
118
+ return;
119
+ if (this.options.json)
120
+ return;
121
+ console.log(this.c.bold(message));
122
+ }
123
+ /**
124
+ * Outputs a section header with divider.
125
+ */
126
+ section(title) {
127
+ if (this.options.quiet)
128
+ return;
129
+ if (this.options.json)
130
+ return;
131
+ console.log();
132
+ console.log(this.c.bold.underline(title));
133
+ }
134
+ /**
135
+ * Outputs a key-value pair.
136
+ */
137
+ keyValue(key, value, indent = 0) {
138
+ if (this.options.quiet)
139
+ return;
140
+ if (this.options.json)
141
+ return;
142
+ const padding = " ".repeat(indent);
143
+ console.log(`${padding}${this.c.dim(key + ":")} ${value}`);
144
+ }
145
+ /**
146
+ * Outputs verbose/debug information.
147
+ */
148
+ verbose(message) {
149
+ if (!this.options.verbose)
150
+ return;
151
+ if (this.options.json)
152
+ return;
153
+ console.error(this.c.dim(`[debug] ${message}`));
154
+ }
155
+ /**
156
+ * Outputs data as a formatted table.
157
+ */
158
+ table(data, columns) {
159
+ if (this.options.quiet)
160
+ return;
161
+ if (this.options.json) {
162
+ this.json(data);
163
+ return;
164
+ }
165
+ const table = new Table({
166
+ head: columns.map((col) => this.c.bold(col.header)),
167
+ colWidths: columns.map((col) => col.width ?? null),
168
+ colAligns: columns.map((col) => col.align ?? "left"),
169
+ style: {
170
+ head: [],
171
+ border: [],
172
+ },
173
+ });
174
+ for (const row of data) {
175
+ table.push(columns.map((col) => {
176
+ const value = row[col.key];
177
+ return value === null || value === undefined ? "-" : String(value);
178
+ }));
179
+ }
180
+ console.log(table.toString());
181
+ }
182
+ /**
183
+ * Outputs data as JSON.
184
+ */
185
+ json(data) {
186
+ console.log(JSON.stringify(data, null, 2));
187
+ }
188
+ /**
189
+ * Outputs JSON if in JSON mode, otherwise returns false.
190
+ * Useful for commands to conditionally output JSON.
191
+ */
192
+ maybeJson(data) {
193
+ if (this.options.json) {
194
+ this.json(data);
195
+ return true;
196
+ }
197
+ return false;
198
+ }
199
+ /**
200
+ * Creates a spinner for long-running operations.
201
+ * Returns a no-op spinner if not in a TTY or in quiet/JSON mode.
202
+ */
203
+ spinner(message) {
204
+ if (this.options.quiet || this.options.json || !isStderrTTY()) {
205
+ return new NoOpSpinner();
206
+ }
207
+ return new OraSpinner(message, this.options);
208
+ }
209
+ /**
210
+ * Formats a status indicator.
211
+ */
212
+ status(status) {
213
+ switch (status) {
214
+ case "passing":
215
+ return this.c.green("✓ Passing");
216
+ case "failing":
217
+ return this.c.red("✗ Failing");
218
+ case "pending":
219
+ return this.c.yellow("⏳ Pending");
220
+ case "draft":
221
+ return this.c.yellow("Draft");
222
+ case "published":
223
+ return this.c.green("Published");
224
+ }
225
+ }
226
+ /**
227
+ * Formats a boolean as Yes/No.
228
+ */
229
+ yesNo(value) {
230
+ return value ? this.c.green("Yes") : this.c.red("No");
231
+ }
232
+ /**
233
+ * Formats a URL as a clickable link (if terminal supports it).
234
+ */
235
+ link(text, url) {
236
+ if (!shouldUseColors(this.options)) {
237
+ return `${text} (${url})`;
238
+ }
239
+ // OSC 8 hyperlink escape sequence
240
+ return `\u001B]8;;${url}\u0007${this.c.cyan.underline(text)}\u001B]8;;\u0007`;
241
+ }
242
+ /**
243
+ * Formats a relative time string.
244
+ */
245
+ relativeTime(date) {
246
+ const d = typeof date === "string" ? new Date(date) : date;
247
+ const now = new Date();
248
+ const diffMs = now.getTime() - d.getTime();
249
+ const diffSecs = Math.floor(diffMs / 1000);
250
+ const diffMins = Math.floor(diffSecs / 60);
251
+ const diffHours = Math.floor(diffMins / 60);
252
+ const diffDays = Math.floor(diffHours / 24);
253
+ if (diffDays > 30) {
254
+ return d.toLocaleDateString();
255
+ }
256
+ if (diffDays > 0) {
257
+ return `${diffDays}d ago`;
258
+ }
259
+ if (diffHours > 0) {
260
+ return `${diffHours}h ago`;
261
+ }
262
+ if (diffMins > 0) {
263
+ return `${diffMins}m ago`;
264
+ }
265
+ return "just now";
266
+ }
267
+ /**
268
+ * Gets the chalk instance for custom formatting.
269
+ */
270
+ chalk() {
271
+ return this.c;
272
+ }
273
+ /**
274
+ * Checks if in JSON output mode.
275
+ */
276
+ isJsonMode() {
277
+ return this.options.json === true;
278
+ }
279
+ /**
280
+ * Checks if in quiet mode.
281
+ */
282
+ isQuietMode() {
283
+ return this.options.quiet === true;
284
+ }
285
+ /**
286
+ * Formats a short date string (e.g., "Jan 6, 2026").
287
+ */
288
+ shortDate(date) {
289
+ if (!date)
290
+ return "-";
291
+ const d = typeof date === "string" ? new Date(date) : date;
292
+ return d.toLocaleDateString("en-US", {
293
+ month: "short",
294
+ day: "numeric",
295
+ year: "numeric",
296
+ });
297
+ }
298
+ /**
299
+ * Derives a checks status label from check counts.
300
+ */
301
+ checksStatusLabel(checks) {
302
+ if (checks.allPassing)
303
+ return "passing";
304
+ if (checks.pending > 0)
305
+ return "pending";
306
+ return "failing";
307
+ }
308
+ /**
309
+ * Returns a symbol for checks status.
310
+ */
311
+ checksSymbol(checks) {
312
+ if (checks.allPassing)
313
+ return "✓";
314
+ if (checks.pending > 0)
315
+ return "⏳";
316
+ return "✗";
317
+ }
318
+ }
319
+ /**
320
+ * Spinner implementation using ora.
321
+ */
322
+ class OraSpinner {
323
+ spinner;
324
+ constructor(message, options) {
325
+ this.spinner = ora({
326
+ text: message,
327
+ stream: process.stderr,
328
+ color: shouldUseColors(options) ? "cyan" : undefined,
329
+ });
330
+ }
331
+ get text() {
332
+ return this.spinner.text;
333
+ }
334
+ set text(value) {
335
+ this.spinner.text = value;
336
+ }
337
+ start(text) {
338
+ this.spinner.start(text);
339
+ return this;
340
+ }
341
+ stop() {
342
+ this.spinner.stop();
343
+ return this;
344
+ }
345
+ succeed(text) {
346
+ this.spinner.succeed(text);
347
+ return this;
348
+ }
349
+ fail(text) {
350
+ this.spinner.fail(text);
351
+ return this;
352
+ }
353
+ warn(text) {
354
+ this.spinner.warn(text);
355
+ return this;
356
+ }
357
+ info(text) {
358
+ this.spinner.info(text);
359
+ return this;
360
+ }
361
+ }
362
+ /**
363
+ * No-op spinner for non-TTY or quiet mode.
364
+ */
365
+ class NoOpSpinner {
366
+ _text = "";
367
+ get text() {
368
+ return this._text;
369
+ }
370
+ set text(value) {
371
+ this._text = value;
372
+ }
373
+ start() {
374
+ return this;
375
+ }
376
+ stop() {
377
+ return this;
378
+ }
379
+ succeed() {
380
+ return this;
381
+ }
382
+ fail() {
383
+ return this;
384
+ }
385
+ warn() {
386
+ return this;
387
+ }
388
+ info() {
389
+ return this;
390
+ }
391
+ }
392
+ /**
393
+ * Creates a new formatter instance.
394
+ */
395
+ export function createFormatter(options = {}) {
396
+ return new Formatter(options);
397
+ }
398
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/output/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=formatter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.test.d.ts","sourceRoot":"","sources":["../../src/output/formatter.test.ts"],"names":[],"mappings":""}