kustodian 1.13.0 → 1.15.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 (39) hide show
  1. package/dist/cli/commands/diff.d.ts.map +1 -1
  2. package/dist/cli/commands/diff.js +217 -78
  3. package/dist/cli/commands/diff.js.map +1 -1
  4. package/dist/cli/utils/diff-stats.d.ts +76 -0
  5. package/dist/cli/utils/diff-stats.d.ts.map +1 -0
  6. package/dist/cli/utils/diff-stats.js +388 -0
  7. package/dist/cli/utils/diff-stats.js.map +1 -0
  8. package/dist/generator/flux.d.ts +2 -2
  9. package/dist/generator/flux.d.ts.map +1 -1
  10. package/dist/generator/flux.js +11 -4
  11. package/dist/generator/flux.js.map +1 -1
  12. package/dist/generator/generator.d.ts.map +1 -1
  13. package/dist/generator/generator.js +3 -3
  14. package/dist/generator/generator.js.map +1 -1
  15. package/dist/generator/index.d.ts +1 -0
  16. package/dist/generator/index.d.ts.map +1 -1
  17. package/dist/generator/index.js +1 -0
  18. package/dist/generator/index.js.map +1 -1
  19. package/dist/generator/kustomization-resolution.d.ts +4 -3
  20. package/dist/generator/kustomization-resolution.d.ts.map +1 -1
  21. package/dist/generator/kustomization-resolution.js +8 -2
  22. package/dist/generator/kustomization-resolution.js.map +1 -1
  23. package/dist/generator/scheduling.d.ts +36 -0
  24. package/dist/generator/scheduling.d.ts.map +1 -0
  25. package/dist/generator/scheduling.js +423 -0
  26. package/dist/generator/scheduling.js.map +1 -0
  27. package/dist/schema/cluster.d.ts +49396 -2920
  28. package/dist/schema/cluster.d.ts.map +1 -1
  29. package/dist/schema/cluster.js +4 -0
  30. package/dist/schema/cluster.js.map +1 -1
  31. package/dist/schema/index.d.ts +1 -0
  32. package/dist/schema/index.d.ts.map +1 -1
  33. package/dist/schema/index.js +1 -0
  34. package/dist/schema/index.js.map +1 -1
  35. package/dist/schema/scheduling.d.ts +7251 -0
  36. package/dist/schema/scheduling.d.ts.map +1 -0
  37. package/dist/schema/scheduling.js +183 -0
  38. package/dist/schema/scheduling.js.map +1 -0
  39. package/package.json +1 -1
@@ -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"}