kustodian 1.13.0 → 1.14.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.
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/diff.ts"],"names":[],"mappings":"AAyBA;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,qCAiUvB,CAAC"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/diff.ts"],"names":[],"mappings":"AAsCA;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,qCAsdvB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { existsSync } from 'node:fs';
1
2
  import { mkdtemp, rm, unlink, writeFile } from 'node:fs/promises';
2
3
  import { tmpdir } from 'node:os';
3
4
  import * as path from 'node:path';
@@ -10,6 +11,7 @@ import { define_command } from '../command.js';
10
11
  import { PLUGIN_REGISTRY_ID } from '../services.js';
11
12
  import { OCI_REGISTRY_PROVIDER } from '../utils/cluster-secrets.js';
12
13
  import { resolve_defaults } from '../utils/defaults.js';
14
+ import { has_changes as diff_has_changes, empty_diff_stats, merge_diff_stats, parse_diff_stats, render_markdown_report, render_summary_table, } from '../utils/diff-stats.js';
13
15
  import { is_not_found_error } from '../utils/k8s-errors.js';
14
16
  import { create_namespace_manifest, create_registry_secret_manifest, get_oci_tag, get_provider_token_from_env, } from '../utils/oci.js';
15
17
  import { load_and_resolve_project, sanitize_filename_part } from '../utils/project.js';
@@ -42,87 +44,187 @@ export const diff_command = define_command({
42
44
  type: 'string',
43
45
  default_value: 'k0s',
44
46
  },
47
+ {
48
+ name: 'kubeconfig',
49
+ short: 'k',
50
+ description: 'Path to kubeconfig file (skips provider/SSH)',
51
+ type: 'string',
52
+ },
45
53
  {
46
54
  name: 'project',
47
55
  short: 'p',
48
56
  description: 'Path to project root',
49
57
  type: 'string',
50
58
  },
59
+ {
60
+ name: 'format',
61
+ short: 'f',
62
+ description: 'Output format: terminal (default) or markdown (PR-comment ready)',
63
+ type: 'string',
64
+ default_value: 'terminal',
65
+ },
51
66
  ],
52
67
  handler: async (ctx, container) => {
53
68
  const cluster_filter = ctx.options['cluster'];
54
69
  const provider_name = ctx.options['provider'];
70
+ const kubeconfig_path = ctx.options['kubeconfig'];
55
71
  const project_path = ctx.options['project'] || process.cwd();
56
- console.log('\n━━━ Kustodian Diff ━━━');
72
+ const format = (ctx.options['format'] || 'terminal').toLowerCase();
73
+ if (format !== 'terminal' && format !== 'markdown') {
74
+ return {
75
+ success: false,
76
+ error: {
77
+ code: 'INVALID_ARGUMENT',
78
+ message: `--format must be 'terminal' or 'markdown', got '${format}'`,
79
+ },
80
+ };
81
+ }
82
+ const is_markdown = format === 'markdown';
83
+ // In markdown mode we own stdout entirely so the captured output is a
84
+ // valid comment. Progress goes to stderr instead of stdout.
85
+ const log = (message) => (is_markdown ? process.stderr : process.stdout).write(`${message}\n`);
86
+ const warn = (message) => process.stderr.write(`${message}\n`);
87
+ log('\n━━━ Kustodian Diff ━━━');
57
88
  const project_result = await load_and_resolve_project(project_path, cluster_filter);
58
89
  if (!is_success(project_result)) {
59
90
  return project_result;
60
91
  }
61
92
  const { project_root, project, target_clusters } = project_result.value;
62
- let has_changes = false;
93
+ const cluster_summaries = [];
94
+ let first_error;
95
+ const record_error = (err) => {
96
+ if (!first_error)
97
+ first_error = err;
98
+ };
63
99
  for (const loaded_cluster of target_clusters) {
64
100
  const cluster_name = loaded_cluster.cluster.metadata.name;
65
101
  const defaults = resolve_defaults(loaded_cluster.cluster, project.config);
66
102
  const flux_namespace = defaults.flux_namespace;
67
103
  const oci_registry_secret_name = defaults.oci_registry_secret_name;
68
- console.log(`\n━━━ Cluster: ${cluster_name} ━━━`);
69
- console.log(` Provider: ${provider_name}`);
70
- console.log(` ✓ Loaded ${loaded_cluster.nodes.length} nodes`);
104
+ log(`\n━━━ Cluster: ${cluster_name} ━━━`);
71
105
  if (!loaded_cluster.cluster.spec.oci) {
72
- process.exitCode = 2;
73
- return {
74
- success: false,
75
- error: { code: 'INVALID_CONFIG', message: 'spec.oci configuration required' },
106
+ const err = {
107
+ code: 'INVALID_CONFIG',
108
+ message: 'spec.oci configuration required',
76
109
  };
110
+ warn(` ✗ ${err.message}`);
111
+ cluster_summaries.push({
112
+ cluster: cluster_name,
113
+ stats: empty_diff_stats(),
114
+ error: 'spec.oci required',
115
+ });
116
+ record_error(err);
117
+ continue;
77
118
  }
78
119
  const validation_result = validate_cluster_template_requirements(loaded_cluster, project.templates);
79
120
  if (!is_success(validation_result)) {
80
- process.exitCode = 2;
81
- return validation_result;
82
- }
83
- // Resolve provider from plugin registry (before try block — no cleanup needed)
84
- const registry_result = container.resolve(PLUGIN_REGISTRY_ID);
85
- if (!is_success(registry_result)) {
86
- return registry_result;
87
- }
88
- const provider_result = resolve_provider(registry_result.value, loaded_cluster, provider_name);
89
- if (!is_success(provider_result)) {
90
- return provider_result;
121
+ warn(` ✗ ${validation_result.error.message}`);
122
+ cluster_summaries.push({
123
+ cluster: cluster_name,
124
+ stats: empty_diff_stats(),
125
+ error: validation_result.error.message,
126
+ });
127
+ record_error(validation_result.error);
128
+ continue;
91
129
  }
130
+ // Resolve kubeconfig: either from --kubeconfig flag or via provider SSH
131
+ let resolved_kubeconfig;
92
132
  let temp_kubeconfig;
93
- let temp_flux_kustomization_dir;
94
- const provider = provider_result.value;
95
- try {
133
+ let provider;
134
+ if (kubeconfig_path) {
135
+ if (!existsSync(kubeconfig_path)) {
136
+ const err = {
137
+ code: 'INVALID_CONFIG',
138
+ message: `Kubeconfig file not found: ${kubeconfig_path}`,
139
+ };
140
+ warn(` ✗ ${err.message}`);
141
+ cluster_summaries.push({
142
+ cluster: cluster_name,
143
+ stats: empty_diff_stats(),
144
+ error: 'kubeconfig not found',
145
+ });
146
+ record_error(err);
147
+ continue;
148
+ }
149
+ log(` Kubeconfig: ${kubeconfig_path}`);
150
+ resolved_kubeconfig = kubeconfig_path;
151
+ }
152
+ else {
153
+ log(` Provider: ${provider_name}`);
154
+ log(` ✓ Loaded ${loaded_cluster.nodes.length} nodes`);
155
+ const registry_result = container.resolve(PLUGIN_REGISTRY_ID);
156
+ if (!is_success(registry_result)) {
157
+ return registry_result;
158
+ }
159
+ const provider_result = resolve_provider(registry_result.value, loaded_cluster, provider_name);
160
+ if (!is_success(provider_result)) {
161
+ warn(` ✗ ${provider_result.error.message}`);
162
+ cluster_summaries.push({
163
+ cluster: cluster_name,
164
+ stats: empty_diff_stats(),
165
+ error: provider_result.error.message,
166
+ });
167
+ record_error(provider_result.error);
168
+ continue;
169
+ }
170
+ provider = provider_result.value;
96
171
  const node_list = build_node_list(loaded_cluster);
97
172
  const validate_result = provider.validate(node_list);
98
173
  if (!is_success(validate_result)) {
99
- process.exitCode = 2;
100
- return validate_result;
174
+ warn(` ✗ ${validate_result.error.message}`);
175
+ cluster_summaries.push({
176
+ cluster: cluster_name,
177
+ stats: empty_diff_stats(),
178
+ error: validate_result.error.message,
179
+ });
180
+ record_error(validate_result.error);
181
+ await provider.cleanup?.();
182
+ continue;
101
183
  }
102
184
  const kubeconfig_result = await provider.get_kubeconfig(node_list);
103
185
  if (!is_success(kubeconfig_result)) {
104
- process.exitCode = 2;
105
- return kubeconfig_result;
186
+ warn(` ✗ ${kubeconfig_result.error.message}`);
187
+ cluster_summaries.push({
188
+ cluster: cluster_name,
189
+ stats: empty_diff_stats(),
190
+ error: kubeconfig_result.error.message,
191
+ });
192
+ record_error(kubeconfig_result.error);
193
+ await provider.cleanup?.();
194
+ continue;
106
195
  }
107
196
  temp_kubeconfig = path.join(tmpdir(), `kustodian-diff-kubeconfig-${sanitize_filename_part(cluster_name)}.yaml`);
108
197
  await writeFile(temp_kubeconfig, kubeconfig_result.value, 'utf-8');
109
- // Rename kubeconfig entries to cluster-scoped names
110
198
  const kubeconfig_manager = create_kubeconfig_manager();
111
199
  const rename_result = await kubeconfig_manager.rename_entries(temp_kubeconfig, cluster_name);
112
200
  if (!is_success(rename_result)) {
113
- process.exitCode = 2;
114
- return rename_result;
201
+ warn(` ✗ ${rename_result.error.message}`);
202
+ cluster_summaries.push({
203
+ cluster: cluster_name,
204
+ stats: empty_diff_stats(),
205
+ error: rename_result.error.message,
206
+ });
207
+ record_error(rename_result.error);
208
+ await provider.cleanup?.();
209
+ await unlink(temp_kubeconfig).catch(() => undefined);
210
+ continue;
115
211
  }
116
- const client_options = { kubeconfig: temp_kubeconfig };
212
+ resolved_kubeconfig = temp_kubeconfig;
213
+ }
214
+ let temp_flux_kustomization_dir;
215
+ let cluster_stats = empty_diff_stats();
216
+ let cluster_error;
217
+ const cluster_sections = [];
218
+ try {
219
+ const client_options = { kubeconfig: resolved_kubeconfig };
117
220
  const kubectl_client = create_kubectl_client(client_options);
118
221
  const flux_client = create_flux_client(client_options);
119
222
  const flux_cli_result = await flux_client.check_cli();
120
223
  if (!is_success(flux_cli_result) || !flux_cli_result.value) {
121
- process.exitCode = 2;
122
- return {
123
- success: false,
124
- error: { code: 'MISSING_DEPENDENCY', message: 'flux CLI not found' },
125
- };
224
+ cluster_error = 'flux CLI not found';
225
+ warn(` ✗ ${cluster_error}`);
226
+ record_error({ code: 'MISSING_DEPENDENCY', message: cluster_error });
227
+ continue;
126
228
  }
127
229
  const templates_dir = path.join(project_root, 'templates');
128
230
  const template_paths = new Map();
@@ -139,8 +241,10 @@ export const diff_command = define_command({
139
241
  });
140
242
  const gen_result = await generator.generate(loaded_cluster.cluster, project.templates.map((t) => t.template), {});
141
243
  if (!is_success(gen_result)) {
142
- process.exitCode = 2;
143
- return gen_result;
244
+ cluster_error = gen_result.error.message;
245
+ warn(` ✗ ${cluster_error}`);
246
+ record_error(gen_result.error);
247
+ continue;
144
248
  }
145
249
  const gen_data = gen_result.value;
146
250
  const tag = await get_oci_tag(loaded_cluster.cluster, project_root);
@@ -155,14 +259,10 @@ export const diff_command = define_command({
155
259
  oci_has_auth = true;
156
260
  }
157
261
  else if (!is_not_found_error(secret_check.error.message)) {
158
- process.exitCode = 2;
159
- return {
160
- success: false,
161
- error: {
162
- code: 'KUBECTL_GET_ERROR',
163
- message: `Failed to check OCI secret: ${secret_check.error.message}`,
164
- },
165
- };
262
+ cluster_error = `Failed to check OCI secret: ${secret_check.error.message}`;
263
+ warn(` ✗ ${cluster_error}`);
264
+ record_error({ code: 'KUBECTL_GET_ERROR', message: cluster_error });
265
+ continue;
166
266
  }
167
267
  else {
168
268
  const token = get_provider_token_from_env(OCI_REGISTRY_PROVIDER.env_vars);
@@ -177,20 +277,16 @@ export const diff_command = define_command({
177
277
  resources.push(create_namespace_manifest(flux_namespace));
178
278
  }
179
279
  else {
180
- process.exitCode = 2;
181
- return {
182
- success: false,
183
- error: {
184
- code: 'KUBECTL_GET_ERROR',
185
- message: `Failed to check namespace '${flux_namespace}': ${namespace_check.error.message}`,
186
- },
187
- };
280
+ cluster_error = `Failed to check namespace '${flux_namespace}': ${namespace_check.error.message}`;
281
+ warn(` ✗ ${cluster_error}`);
282
+ record_error({ code: 'KUBECTL_GET_ERROR', message: cluster_error });
283
+ continue;
188
284
  }
189
285
  }
190
286
  resources.push(create_registry_secret_manifest(loaded_cluster.cluster.spec.oci.registry, token, oci_registry_secret_name, flux_namespace));
191
287
  }
192
288
  else {
193
- console.warn(` ⚠ ${OCI_REGISTRY_PROVIDER.skip_warning}`);
289
+ warn(` ⚠ ${OCI_REGISTRY_PROVIDER.skip_warning}`);
194
290
  }
195
291
  }
196
292
  if (gen_data.oci_repository) {
@@ -213,26 +309,32 @@ export const diff_command = define_command({
213
309
  resources.push(k.flux_kustomization);
214
310
  }
215
311
  if (resources.length > 0) {
216
- console.log('\n → Diffing Flux control-plane resources...');
312
+ log('\n → Diffing Flux control-plane resources...');
217
313
  const object_diff_result = await kubectl_client.diff_stdin(resources.map((resource) => serialize_resource(resource)).join('---\n'));
218
314
  if (!is_success(object_diff_result)) {
219
- process.exitCode = 2;
220
- return object_diff_result;
315
+ cluster_error = object_diff_result.error.message;
316
+ warn(` ✗ ${cluster_error}`);
317
+ record_error(object_diff_result.error);
318
+ continue;
221
319
  }
222
320
  if (object_diff_result.value.stdout) {
223
- console.log(object_diff_result.value.stdout);
321
+ log(object_diff_result.value.stdout);
322
+ cluster_stats = merge_diff_stats(cluster_stats, parse_diff_stats(object_diff_result.value.stdout));
323
+ if (object_diff_result.value.has_changes) {
324
+ cluster_sections.push({
325
+ title: 'Flux control plane',
326
+ output: object_diff_result.value.stdout,
327
+ });
328
+ }
224
329
  }
225
330
  if (object_diff_result.value.stderr) {
226
- console.error(object_diff_result.value.stderr);
227
- }
228
- if (object_diff_result.value.has_changes) {
229
- has_changes = true;
331
+ warn(object_diff_result.value.stderr);
230
332
  }
231
- else {
232
- console.log(' ✓ No Flux object changes');
333
+ if (!object_diff_result.value.has_changes) {
334
+ log(' ✓ No Flux object changes');
233
335
  }
234
336
  }
235
- console.log('\n → Diffing rendered workloads...');
337
+ log('\n → Diffing rendered workloads...');
236
338
  temp_flux_kustomization_dir = await mkdtemp(path.join(tmpdir(), `kustodian-diff-${sanitize_filename_part(cluster_name)}-`));
237
339
  for (const generated of gen_data.kustomizations) {
238
340
  const flux_kustomization_file = path.join(temp_flux_kustomization_dir, `${generated.name}.yaml`);
@@ -245,37 +347,74 @@ export const diff_command = define_command({
245
347
  progress_bar: false,
246
348
  });
247
349
  if (!is_success(workload_diff_result)) {
248
- process.exitCode = 2;
249
- return workload_diff_result;
350
+ cluster_error = workload_diff_result.error.message;
351
+ warn(` ✗ ${cluster_error}`);
352
+ record_error(workload_diff_result.error);
353
+ break;
250
354
  }
251
355
  if (workload_diff_result.value.stdout) {
252
- console.log(workload_diff_result.value.stdout);
356
+ log(workload_diff_result.value.stdout);
357
+ cluster_stats = merge_diff_stats(cluster_stats, parse_diff_stats(workload_diff_result.value.stdout));
358
+ if (workload_diff_result.value.has_changes) {
359
+ cluster_sections.push({
360
+ title: `Kustomization: ${generated.name}`,
361
+ output: workload_diff_result.value.stdout,
362
+ });
363
+ }
253
364
  }
254
365
  if (workload_diff_result.value.stderr) {
255
- console.error(workload_diff_result.value.stderr);
256
- }
257
- if (workload_diff_result.value.has_changes) {
258
- has_changes = true;
366
+ warn(workload_diff_result.value.stderr);
259
367
  }
260
368
  }
261
369
  }
262
370
  finally {
263
- await provider?.cleanup?.();
371
+ if (provider)
372
+ await provider.cleanup?.();
264
373
  if (temp_kubeconfig) {
265
374
  await unlink(temp_kubeconfig).catch(() => undefined);
266
375
  }
267
376
  if (temp_flux_kustomization_dir) {
268
377
  await rm(temp_flux_kustomization_dir, { recursive: true, force: true }).catch(() => undefined);
269
378
  }
379
+ const entry = {
380
+ cluster: cluster_name,
381
+ stats: cluster_stats,
382
+ };
383
+ if (cluster_error)
384
+ entry.error = cluster_error;
385
+ if (cluster_sections.length > 0)
386
+ entry.sections = cluster_sections;
387
+ cluster_summaries.push(entry);
270
388
  }
271
389
  }
272
- if (has_changes) {
390
+ const any_changes = cluster_summaries.some((c) => !c.error && diff_has_changes(c.stats));
391
+ if (is_markdown) {
392
+ process.stdout.write(`${render_markdown_report(cluster_summaries, {
393
+ scope: cluster_filter ?? 'all clusters',
394
+ })}\n`);
395
+ }
396
+ else if (cluster_summaries.length > 0) {
397
+ log('\n━━━ Summary ━━━\n');
398
+ log(render_summary_table(cluster_summaries));
399
+ log('');
400
+ }
401
+ if (first_error) {
402
+ // Return the error so the runner/bin decides exit code. Do not mutate
403
+ // `process.exitCode` here: it is a global that leaks across tests
404
+ // sharing a process.
405
+ log('━━━ Diff Complete: errors occurred ━━━\n');
406
+ return {
407
+ success: false,
408
+ error: first_error,
409
+ };
410
+ }
411
+ if (any_changes) {
412
+ // exit-code 1 = differences found (Unix `diff` convention)
273
413
  process.exitCode = 1;
274
- console.log('\n━━━ Diff Complete: changes detected ━━━\n');
414
+ log('━━━ Diff Complete: changes detected ━━━\n');
275
415
  return success(undefined);
276
416
  }
277
- process.exitCode = 0;
278
- console.log('\n━━━ Diff Complete: no changes ━━━\n');
417
+ log('━━━ Diff Complete: no changes ━━━\n');
279
418
  return success(undefined);
280
419
  },
281
420
  });
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/cli/commands/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/cli/commands/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Parse flux/kubectl diff output and render per-cluster summary tables.
3
+ *
4
+ * `flux diff kustomization` and `kubectl diff` emit unified-diff style output
5
+ * with per-resource status markers. We walk the output line-by-line and
6
+ * accumulate:
7
+ * - resources created / modified / deleted (by status keyword)
8
+ * - line-level additions / removals (git-status style)
9
+ */
10
+ export interface DiffStatsType {
11
+ resources_created: number;
12
+ resources_modified: number;
13
+ resources_deleted: number;
14
+ lines_added: number;
15
+ lines_removed: number;
16
+ }
17
+ export interface ClusterDiffSectionType {
18
+ title: string;
19
+ output: string;
20
+ }
21
+ export interface ClusterDiffStatsType {
22
+ cluster: string;
23
+ stats: DiffStatsType;
24
+ error?: string;
25
+ skipped?: string;
26
+ sections?: ClusterDiffSectionType[];
27
+ }
28
+ export declare function empty_diff_stats(): DiffStatsType;
29
+ export declare function total_resources(stats: DiffStatsType): number;
30
+ export declare function has_changes(stats: DiffStatsType): boolean;
31
+ export declare function merge_diff_stats(a: DiffStatsType, b: DiffStatsType): DiffStatsType;
32
+ /**
33
+ * Count additions/deletions and per-resource status lines from a diff blob.
34
+ */
35
+ export declare function parse_diff_stats(output: string): DiffStatsType;
36
+ /**
37
+ * Format a git-status-style "+A -R" hint for a cluster row.
38
+ */
39
+ export declare function format_line_counts(stats: DiffStatsType): string;
40
+ /**
41
+ * Format a resource summary like "3 modified, 1 created".
42
+ */
43
+ export declare function format_resource_counts(stats: DiffStatsType): string;
44
+ /**
45
+ * Render a per-cluster summary table.
46
+ */
47
+ export declare function render_summary_table(entries: ClusterDiffStatsType[], options?: {
48
+ color?: boolean;
49
+ }): string;
50
+ /**
51
+ * Sentinel used to locate a previously-posted kustodian PR diff comment so
52
+ * the GitHub Action can update it in place instead of stacking duplicates.
53
+ */
54
+ export declare const PR_COMMENT_MARKER = "<!-- kustodian-pr-diff -->";
55
+ export interface MarkdownReportOptions {
56
+ title?: string;
57
+ /** If provided, included in the header (e.g. "production" or "all clusters"). */
58
+ scope?: string;
59
+ /**
60
+ * Truncate the comment to this byte length (approx). GitHub comments max
61
+ * out around 65k chars; default to a conservative 60k.
62
+ */
63
+ max_length?: number;
64
+ }
65
+ /**
66
+ * Render the full PR-ready markdown document (including the detection marker).
67
+ *
68
+ * Structure:
69
+ * 1. Hidden marker
70
+ * 2. Heading + short status line
71
+ * 3. Summary table
72
+ * 4. Per-cluster <details> blocks with raw diff blobs
73
+ * 5. Footer signature
74
+ */
75
+ export declare function render_markdown_report(entries: ClusterDiffStatsType[], options?: MarkdownReportOptions): string;
76
+ //# sourceMappingURL=diff-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-stats.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/diff-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACrC;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAQhD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE5D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,CAQlF;AAsBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CA0B9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAK/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAMnE;AA6FD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,oBAAoB,EAAE,EAC/B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,MAAM,CAkBR;AAMD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,+BAA+B,CAAC;AAwD9D,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,oBAAoB,EAAE,EAC/B,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAwHR"}
@@ -0,0 +1,388 @@
1
+ /**
2
+ * Parse flux/kubectl diff output and render per-cluster summary tables.
3
+ *
4
+ * `flux diff kustomization` and `kubectl diff` emit unified-diff style output
5
+ * with per-resource status markers. We walk the output line-by-line and
6
+ * accumulate:
7
+ * - resources created / modified / deleted (by status keyword)
8
+ * - line-level additions / removals (git-status style)
9
+ */
10
+ export function empty_diff_stats() {
11
+ return {
12
+ resources_created: 0,
13
+ resources_modified: 0,
14
+ resources_deleted: 0,
15
+ lines_added: 0,
16
+ lines_removed: 0,
17
+ };
18
+ }
19
+ export function total_resources(stats) {
20
+ return stats.resources_created + stats.resources_modified + stats.resources_deleted;
21
+ }
22
+ export function has_changes(stats) {
23
+ return total_resources(stats) > 0 || stats.lines_added > 0 || stats.lines_removed > 0;
24
+ }
25
+ export function merge_diff_stats(a, b) {
26
+ return {
27
+ resources_created: a.resources_created + b.resources_created,
28
+ resources_modified: a.resources_modified + b.resources_modified,
29
+ resources_deleted: a.resources_deleted + b.resources_deleted,
30
+ lines_added: a.lines_added + b.lines_added,
31
+ lines_removed: a.lines_removed + b.lines_removed,
32
+ };
33
+ }
34
+ /**
35
+ * Strip ANSI escape sequences so regex matching is reliable.
36
+ */
37
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escapes start with ESC
38
+ const ANSI_RE = /\x1b\[[0-9;]*[a-zA-Z]/g;
39
+ /**
40
+ * Detect lines that announce a per-resource status in flux/kubectl diff output.
41
+ *
42
+ * Flux 2.x emits lines such as:
43
+ * ► Deployment/default/app drifted
44
+ * ✚ ConfigMap/kube-system/new created
45
+ * ✗ Service/legacy/old deleted
46
+ *
47
+ * kubectl diff emits unified-diff file headers — those are recognized through
48
+ * the `+++`/`---` prefixes below instead.
49
+ */
50
+ const RESOURCE_STATUS_RE = /^\s*(?:[►✚✗►»!+\-~*]|[►])?\s*[A-Za-z][A-Za-z0-9.]*\/\S+\s+(?:is\s+)?(created|modified|drifted|deleted|added|removed|configured|pruned)\b/i;
51
+ /**
52
+ * Count additions/deletions and per-resource status lines from a diff blob.
53
+ */
54
+ export function parse_diff_stats(output) {
55
+ const stats = empty_diff_stats();
56
+ if (!output)
57
+ return stats;
58
+ const clean = output.replace(ANSI_RE, '');
59
+ for (const raw_line of clean.split('\n')) {
60
+ const line = raw_line.replace(/\r$/, '');
61
+ // Unified-diff file headers — skip so they do not inflate line counts.
62
+ if (line.startsWith('+++') || line.startsWith('---'))
63
+ continue;
64
+ if (line.startsWith('diff '))
65
+ continue;
66
+ if (line.startsWith('+'))
67
+ stats.lines_added += 1;
68
+ else if (line.startsWith('-'))
69
+ stats.lines_removed += 1;
70
+ const match = line.match(RESOURCE_STATUS_RE);
71
+ if (match) {
72
+ const status = match[1]?.toLowerCase();
73
+ if (status === 'created' || status === 'added')
74
+ stats.resources_created += 1;
75
+ else if (status === 'deleted' || status === 'removed' || status === 'pruned')
76
+ stats.resources_deleted += 1;
77
+ else
78
+ stats.resources_modified += 1;
79
+ }
80
+ }
81
+ return stats;
82
+ }
83
+ /**
84
+ * Format a git-status-style "+A -R" hint for a cluster row.
85
+ */
86
+ export function format_line_counts(stats) {
87
+ const parts = [];
88
+ if (stats.lines_added)
89
+ parts.push(`+${stats.lines_added}`);
90
+ if (stats.lines_removed)
91
+ parts.push(`-${stats.lines_removed}`);
92
+ return parts.length > 0 ? parts.join(' ') : '—';
93
+ }
94
+ /**
95
+ * Format a resource summary like "3 modified, 1 created".
96
+ */
97
+ export function format_resource_counts(stats) {
98
+ const parts = [];
99
+ if (stats.resources_created)
100
+ parts.push(`${stats.resources_created} created`);
101
+ if (stats.resources_modified)
102
+ parts.push(`${stats.resources_modified} modified`);
103
+ if (stats.resources_deleted)
104
+ parts.push(`${stats.resources_deleted} deleted`);
105
+ return parts.length > 0 ? parts.join(', ') : '—';
106
+ }
107
+ function pad(value, width, align) {
108
+ const visible = visible_length(value);
109
+ if (visible >= width)
110
+ return value;
111
+ const padding = ' '.repeat(width - visible);
112
+ return align === 'right' ? padding + value : value + padding;
113
+ }
114
+ // ANSI-aware length so colored strings still align.
115
+ function visible_length(value) {
116
+ return value.replace(ANSI_RE, '').length;
117
+ }
118
+ function render_table(columns, rows) {
119
+ const widths = columns.map((col, idx) => {
120
+ const header_width = visible_length(col.header);
121
+ const data_width = rows.reduce((max, row) => Math.max(max, visible_length(row[idx] ?? '')), 0);
122
+ return Math.max(header_width, data_width);
123
+ });
124
+ const render_row = (row) => `│ ${row
125
+ .map((cell, idx) => {
126
+ const width = widths[idx] ?? 0;
127
+ const align = columns[idx]?.align ?? 'left';
128
+ return pad(cell ?? '', width, align);
129
+ })
130
+ .join(' │ ')} │`;
131
+ const border = (left, mid, right) => left + widths.map((w) => '─'.repeat(w + 2)).join(mid) + right;
132
+ const lines = [];
133
+ lines.push(border('┌', '┬', '┐'));
134
+ lines.push(render_row(columns.map((c) => c.header)));
135
+ lines.push(border('├', '┼', '┤'));
136
+ for (const row of rows)
137
+ lines.push(render_row(row));
138
+ lines.push(border('└', '┴', '┘'));
139
+ return lines.join('\n');
140
+ }
141
+ const GREEN = '\x1b[32m';
142
+ const RED = '\x1b[31m';
143
+ const YELLOW = '\x1b[33m';
144
+ const DIM = '\x1b[2m';
145
+ const BOLD = '\x1b[1m';
146
+ const RESET = '\x1b[0m';
147
+ function color(value, code, use_color) {
148
+ return use_color ? `${code}${value}${RESET}` : value;
149
+ }
150
+ function status_cell(entry, use_color) {
151
+ if (entry.error)
152
+ return color('error', RED, use_color);
153
+ if (entry.skipped)
154
+ return color('skipped', YELLOW, use_color);
155
+ if (!has_changes(entry.stats))
156
+ return color('no changes', DIM, use_color);
157
+ return color('changed', YELLOW, use_color);
158
+ }
159
+ function changes_cell(entry, use_color) {
160
+ if (entry.error)
161
+ return entry.error;
162
+ if (entry.skipped)
163
+ return entry.skipped;
164
+ if (!has_changes(entry.stats))
165
+ return color('—', DIM, use_color);
166
+ const added = entry.stats.lines_added
167
+ ? color(`+${entry.stats.lines_added}`, GREEN, use_color)
168
+ : '';
169
+ const removed = entry.stats.lines_removed
170
+ ? color(`-${entry.stats.lines_removed}`, RED, use_color)
171
+ : '';
172
+ return [added, removed].filter(Boolean).join(' ') || color('—', DIM, use_color);
173
+ }
174
+ function resources_cell(entry, use_color) {
175
+ if (entry.error || entry.skipped)
176
+ return color('—', DIM, use_color);
177
+ if (!has_changes(entry.stats))
178
+ return color('—', DIM, use_color);
179
+ const parts = [];
180
+ if (entry.stats.resources_created)
181
+ parts.push(color(`+${entry.stats.resources_created}`, GREEN, use_color));
182
+ if (entry.stats.resources_modified)
183
+ parts.push(color(`~${entry.stats.resources_modified}`, YELLOW, use_color));
184
+ if (entry.stats.resources_deleted)
185
+ parts.push(color(`-${entry.stats.resources_deleted}`, RED, use_color));
186
+ return parts.length > 0 ? parts.join(' ') : color('—', DIM, use_color);
187
+ }
188
+ /**
189
+ * Render a per-cluster summary table.
190
+ */
191
+ export function render_summary_table(entries, options = {}) {
192
+ const use_color = options.color ?? true;
193
+ const rows = entries.map((entry) => [
194
+ color(entry.cluster, BOLD, use_color),
195
+ status_cell(entry, use_color),
196
+ resources_cell(entry, use_color),
197
+ changes_cell(entry, use_color),
198
+ ]);
199
+ return render_table([
200
+ { header: 'Cluster' },
201
+ { header: 'Status' },
202
+ { header: 'Resources', align: 'left' },
203
+ { header: 'Lines', align: 'left' },
204
+ ], rows);
205
+ }
206
+ // ---------------------------------------------------------------------------
207
+ // Markdown PR comment rendering
208
+ // ---------------------------------------------------------------------------
209
+ /**
210
+ * Sentinel used to locate a previously-posted kustodian PR diff comment so
211
+ * the GitHub Action can update it in place instead of stacking duplicates.
212
+ */
213
+ export const PR_COMMENT_MARKER = '<!-- kustodian-pr-diff -->';
214
+ const STATUS_EMOJI = {
215
+ changed: '🔵',
216
+ no_changes: '✅',
217
+ error: '❌',
218
+ skipped: '⏭️',
219
+ };
220
+ function markdown_status_emoji(entry) {
221
+ if (entry.error)
222
+ return STATUS_EMOJI.error;
223
+ if (entry.skipped)
224
+ return STATUS_EMOJI.skipped;
225
+ if (!has_changes(entry.stats))
226
+ return STATUS_EMOJI.no_changes;
227
+ return STATUS_EMOJI.changed;
228
+ }
229
+ function markdown_status_label(entry) {
230
+ if (entry.error)
231
+ return 'error';
232
+ if (entry.skipped)
233
+ return 'skipped';
234
+ if (!has_changes(entry.stats))
235
+ return 'no changes';
236
+ return 'changed';
237
+ }
238
+ function markdown_resources_cell(entry) {
239
+ if (entry.error || entry.skipped || !has_changes(entry.stats))
240
+ return '—';
241
+ const parts = [];
242
+ if (entry.stats.resources_created)
243
+ parts.push(`+${entry.stats.resources_created}`);
244
+ if (entry.stats.resources_modified)
245
+ parts.push(`~${entry.stats.resources_modified}`);
246
+ if (entry.stats.resources_deleted)
247
+ parts.push(`-${entry.stats.resources_deleted}`);
248
+ return parts.length > 0 ? parts.join(' ') : '—';
249
+ }
250
+ function markdown_lines_cell(entry) {
251
+ if (entry.error)
252
+ return `\`${escape_markdown_code(entry.error)}\``;
253
+ if (entry.skipped)
254
+ return entry.skipped;
255
+ if (!has_changes(entry.stats))
256
+ return '—';
257
+ const parts = [];
258
+ if (entry.stats.lines_added)
259
+ parts.push(`+${entry.stats.lines_added}`);
260
+ if (entry.stats.lines_removed)
261
+ parts.push(`-${entry.stats.lines_removed}`);
262
+ return parts.length > 0 ? parts.join(' ') : '—';
263
+ }
264
+ function escape_markdown_code(value) {
265
+ // Backticks break inline code spans. Trim and escape them.
266
+ return value.replace(/`/g, "'").replace(/\r?\n/g, ' ').trim();
267
+ }
268
+ function fence_diff(output) {
269
+ // Strip ANSI and normalize trailing whitespace, then wrap in a ```diff fence.
270
+ const clean = output.replace(ANSI_RE, '').trimEnd();
271
+ // A code fence of 4 backticks is needed if the diff itself contains triple
272
+ // backticks — this is rare in k8s diffs, but be defensive.
273
+ const fence = clean.includes('```') ? '````' : '```';
274
+ return `${fence}diff\n${clean}\n${fence}`;
275
+ }
276
+ /**
277
+ * Render the full PR-ready markdown document (including the detection marker).
278
+ *
279
+ * Structure:
280
+ * 1. Hidden marker
281
+ * 2. Heading + short status line
282
+ * 3. Summary table
283
+ * 4. Per-cluster <details> blocks with raw diff blobs
284
+ * 5. Footer signature
285
+ */
286
+ export function render_markdown_report(entries, options = {}) {
287
+ const title = options.title ?? 'Kustodian Cluster Diff';
288
+ const scope = options.scope ? ` — \`${options.scope}\`` : '';
289
+ const max_length = options.max_length ?? 60000;
290
+ const error_count = entries.filter((e) => e.error).length;
291
+ const changed_count = entries.filter((e) => !e.error && !e.skipped && has_changes(e.stats)).length;
292
+ const clean_count = entries.filter((e) => !e.error && !e.skipped && !has_changes(e.stats)).length;
293
+ const skipped_count = entries.filter((e) => e.skipped).length;
294
+ const total_lines_added = entries.reduce((sum, e) => sum + e.stats.lines_added, 0);
295
+ const total_lines_removed = entries.reduce((sum, e) => sum + e.stats.lines_removed, 0);
296
+ const parts = [];
297
+ parts.push(PR_COMMENT_MARKER);
298
+ parts.push(`### ${title}${scope}`);
299
+ parts.push('');
300
+ if (entries.length === 0) {
301
+ parts.push('_No clusters were diffed._');
302
+ return parts.join('\n');
303
+ }
304
+ const status_bits = [];
305
+ if (changed_count)
306
+ status_bits.push(`**${changed_count}** changed`);
307
+ if (clean_count)
308
+ status_bits.push(`${clean_count} unchanged`);
309
+ if (error_count)
310
+ status_bits.push(`${error_count} errored`);
311
+ if (skipped_count)
312
+ status_bits.push(`${skipped_count} skipped`);
313
+ const line_bits = [];
314
+ if (total_lines_added)
315
+ line_bits.push(`+${total_lines_added}`);
316
+ if (total_lines_removed)
317
+ line_bits.push(`-${total_lines_removed}`);
318
+ const summary_line = [status_bits.join(', '), line_bits.join(' ') || '']
319
+ .filter(Boolean)
320
+ .join(' — ');
321
+ parts.push(summary_line);
322
+ parts.push('');
323
+ // Markdown summary table
324
+ parts.push('| Cluster | Status | Resources | Lines |');
325
+ parts.push('|---------|--------|-----------|-------|');
326
+ for (const entry of entries) {
327
+ parts.push(`| **${entry.cluster}** | ${markdown_status_emoji(entry)} ${markdown_status_label(entry)} | ${markdown_resources_cell(entry)} | ${markdown_lines_cell(entry)} |`);
328
+ }
329
+ parts.push('');
330
+ // Per-cluster detail blocks
331
+ for (const entry of entries) {
332
+ if (entry.error) {
333
+ parts.push(`<details>\n<summary>${markdown_status_emoji(entry)} <b>${entry.cluster}</b> — error</summary>\n`);
334
+ parts.push('```');
335
+ parts.push(entry.error);
336
+ parts.push('```');
337
+ parts.push('</details>');
338
+ parts.push('');
339
+ continue;
340
+ }
341
+ if (entry.skipped) {
342
+ parts.push(`<details>\n<summary>${markdown_status_emoji(entry)} <b>${entry.cluster}</b> — ${entry.skipped}</summary>\n</details>`);
343
+ parts.push('');
344
+ continue;
345
+ }
346
+ if (!has_changes(entry.stats)) {
347
+ // Keep no-change clusters off the detail list to reduce noise; they
348
+ // already appear in the summary table.
349
+ continue;
350
+ }
351
+ const sections = entry.sections ?? [];
352
+ const resources_hint = markdown_resources_cell(entry);
353
+ const lines_hint = markdown_lines_cell(entry);
354
+ parts.push(`<details open>\n<summary>${markdown_status_emoji(entry)} <b>${entry.cluster}</b> — ${resources_hint} resources, ${lines_hint} lines</summary>\n`);
355
+ if (sections.length === 0) {
356
+ parts.push('_No detailed diff output captured._');
357
+ }
358
+ else {
359
+ for (const section of sections) {
360
+ if (!section.output.trim())
361
+ continue;
362
+ parts.push(`**${section.title}**`);
363
+ parts.push('');
364
+ parts.push(fence_diff(section.output));
365
+ parts.push('');
366
+ }
367
+ }
368
+ parts.push('</details>');
369
+ parts.push('');
370
+ }
371
+ parts.push('---');
372
+ parts.push('<sub>Generated by <a href="https://github.com/lucasilverentand/kustodian">Kustodian</a></sub>');
373
+ let result = parts.join('\n');
374
+ if (result.length > max_length) {
375
+ result = result.slice(0, max_length);
376
+ // Balance any dangling code fences or <details> tags
377
+ const open_code = (result.match(/```/g) ?? []).length;
378
+ if (open_code % 2 !== 0)
379
+ result += '\n```';
380
+ const open_details = (result.match(/<details(?:\s[^>]*)?>/g) ?? []).length;
381
+ const close_details = (result.match(/<\/details>/g) ?? []).length;
382
+ for (let i = 0; i < open_details - close_details; i++)
383
+ result += '\n</details>';
384
+ result += '\n\n_Comment truncated — see the workflow logs for the full diff._';
385
+ }
386
+ return result;
387
+ }
388
+ //# sourceMappingURL=diff-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-stats.js","sourceRoot":"","sources":["../../../src/cli/utils/diff-stats.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kustodian",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "description": "A GitOps templating framework for Kubernetes with Flux CD",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.5",