@codeledger/cli 0.6.6 → 0.6.8

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 (111) hide show
  1. package/dist/architecture-graph/dependency-scanner.d.ts +16 -0
  2. package/dist/architecture-graph/dependency-scanner.d.ts.map +1 -0
  3. package/dist/architecture-graph/dependency-scanner.js +96 -0
  4. package/dist/architecture-graph/dependency-scanner.js.map +1 -0
  5. package/dist/architecture-graph/graph-builder.d.ts +70 -0
  6. package/dist/architecture-graph/graph-builder.d.ts.map +1 -0
  7. package/dist/architecture-graph/graph-builder.js +231 -0
  8. package/dist/architecture-graph/graph-builder.js.map +1 -0
  9. package/dist/architecture-graph/index.d.ts +4 -0
  10. package/dist/architecture-graph/index.d.ts.map +1 -0
  11. package/dist/architecture-graph/index.js +7 -0
  12. package/dist/architecture-graph/index.js.map +1 -0
  13. package/dist/architecture-graph/service-scanner.d.ts +22 -0
  14. package/dist/architecture-graph/service-scanner.d.ts.map +1 -0
  15. package/dist/architecture-graph/service-scanner.js +181 -0
  16. package/dist/architecture-graph/service-scanner.js.map +1 -0
  17. package/dist/commands/audit-export.d.ts +8 -0
  18. package/dist/commands/audit-export.d.ts.map +1 -0
  19. package/dist/commands/audit-export.js +190 -0
  20. package/dist/commands/audit-export.js.map +1 -0
  21. package/dist/commands/fix.d.ts +7 -0
  22. package/dist/commands/fix.d.ts.map +1 -0
  23. package/dist/commands/fix.js +107 -0
  24. package/dist/commands/fix.js.map +1 -0
  25. package/dist/commands/graph.d.ts +8 -0
  26. package/dist/commands/graph.d.ts.map +1 -0
  27. package/dist/commands/graph.js +29 -0
  28. package/dist/commands/graph.js.map +1 -0
  29. package/dist/commands/learn.d.ts +8 -0
  30. package/dist/commands/learn.d.ts.map +1 -0
  31. package/dist/commands/learn.js +33 -0
  32. package/dist/commands/learn.js.map +1 -0
  33. package/dist/commands/pack.d.ts +12 -0
  34. package/dist/commands/pack.d.ts.map +1 -0
  35. package/dist/commands/pack.js +75 -0
  36. package/dist/commands/pack.js.map +1 -0
  37. package/dist/commands/serve.d.ts +13 -0
  38. package/dist/commands/serve.d.ts.map +1 -0
  39. package/dist/commands/serve.js +179 -0
  40. package/dist/commands/serve.js.map +1 -0
  41. package/dist/commands/setup-ci.d.ts +6 -4
  42. package/dist/commands/setup-ci.d.ts.map +1 -1
  43. package/dist/commands/setup-ci.js +216 -23
  44. package/dist/commands/setup-ci.js.map +1 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +82 -3
  47. package/dist/index.js.map +1 -1
  48. package/dist/review-intelligence/detectors/cjs-named-import.d.ts +13 -0
  49. package/dist/review-intelligence/detectors/cjs-named-import.d.ts.map +1 -0
  50. package/dist/review-intelligence/detectors/cjs-named-import.js +134 -0
  51. package/dist/review-intelligence/detectors/cjs-named-import.js.map +1 -0
  52. package/dist/review-intelligence/detectors/exact-count-assertion.d.ts +17 -0
  53. package/dist/review-intelligence/detectors/exact-count-assertion.d.ts.map +1 -0
  54. package/dist/review-intelligence/detectors/exact-count-assertion.js +93 -0
  55. package/dist/review-intelligence/detectors/exact-count-assertion.js.map +1 -0
  56. package/dist/review-intelligence/detectors/exports-map-missing.d.ts +14 -0
  57. package/dist/review-intelligence/detectors/exports-map-missing.d.ts.map +1 -0
  58. package/dist/review-intelligence/detectors/exports-map-missing.js +131 -0
  59. package/dist/review-intelligence/detectors/exports-map-missing.js.map +1 -0
  60. package/dist/review-intelligence/detectors/fixture-keyword-drift.d.ts +12 -0
  61. package/dist/review-intelligence/detectors/fixture-keyword-drift.d.ts.map +1 -0
  62. package/dist/review-intelligence/detectors/fixture-keyword-drift.js +82 -0
  63. package/dist/review-intelligence/detectors/fixture-keyword-drift.js.map +1 -0
  64. package/dist/review-intelligence/detectors/optional-infra-crash.d.ts +12 -0
  65. package/dist/review-intelligence/detectors/optional-infra-crash.d.ts.map +1 -0
  66. package/dist/review-intelligence/detectors/optional-infra-crash.js +97 -0
  67. package/dist/review-intelligence/detectors/optional-infra-crash.js.map +1 -0
  68. package/dist/review-intelligence/detectors/undeclared-dependency.d.ts +11 -0
  69. package/dist/review-intelligence/detectors/undeclared-dependency.d.ts.map +1 -0
  70. package/dist/review-intelligence/detectors/undeclared-dependency.js +100 -0
  71. package/dist/review-intelligence/detectors/undeclared-dependency.js.map +1 -0
  72. package/dist/review-intelligence/engine/ast-parser.d.ts +90 -0
  73. package/dist/review-intelligence/engine/ast-parser.d.ts.map +1 -0
  74. package/dist/review-intelligence/engine/ast-parser.js +266 -0
  75. package/dist/review-intelligence/engine/ast-parser.js.map +1 -0
  76. package/dist/review-intelligence/engine/dataflow.d.ts +34 -0
  77. package/dist/review-intelligence/engine/dataflow.d.ts.map +1 -0
  78. package/dist/review-intelligence/engine/dataflow.js +115 -0
  79. package/dist/review-intelligence/engine/dataflow.js.map +1 -0
  80. package/dist/review-intelligence/engine/index.d.ts +7 -0
  81. package/dist/review-intelligence/engine/index.d.ts.map +1 -0
  82. package/dist/review-intelligence/engine/index.js +7 -0
  83. package/dist/review-intelligence/engine/index.js.map +1 -0
  84. package/dist/review-intelligence/engine/symbol-resolver.d.ts +34 -0
  85. package/dist/review-intelligence/engine/symbol-resolver.d.ts.map +1 -0
  86. package/dist/review-intelligence/engine/symbol-resolver.js +106 -0
  87. package/dist/review-intelligence/engine/symbol-resolver.js.map +1 -0
  88. package/dist/review-intelligence/fixes/index.d.ts +36 -0
  89. package/dist/review-intelligence/fixes/index.d.ts.map +1 -0
  90. package/dist/review-intelligence/fixes/index.js +157 -0
  91. package/dist/review-intelligence/fixes/index.js.map +1 -0
  92. package/dist/review-intelligence/index.d.ts.map +1 -1
  93. package/dist/review-intelligence/index.js +2 -0
  94. package/dist/review-intelligence/index.js.map +1 -1
  95. package/dist/review-intelligence/invariants.d.ts.map +1 -1
  96. package/dist/review-intelligence/invariants.js +14 -1
  97. package/dist/review-intelligence/invariants.js.map +1 -1
  98. package/dist/review-intelligence/learning/index.d.ts +39 -0
  99. package/dist/review-intelligence/learning/index.d.ts.map +1 -0
  100. package/dist/review-intelligence/learning/index.js +265 -0
  101. package/dist/review-intelligence/learning/index.js.map +1 -0
  102. package/dist/review-intelligence/packs/index.d.ts +69 -0
  103. package/dist/review-intelligence/packs/index.d.ts.map +1 -0
  104. package/dist/review-intelligence/packs/index.js +168 -0
  105. package/dist/review-intelligence/packs/index.js.map +1 -0
  106. package/dist/review-intelligence/repair-guidance.d.ts.map +1 -1
  107. package/dist/review-intelligence/repair-guidance.js +46 -0
  108. package/dist/review-intelligence/repair-guidance.js.map +1 -1
  109. package/dist/review-intelligence/types.d.ts +6 -1
  110. package/dist/review-intelligence/types.d.ts.map +1 -1
  111. package/package.json +9 -9
@@ -0,0 +1,75 @@
1
+ import { listPacks, enablePack, disablePack, } from '../review-intelligence/packs/index.js';
2
+ /**
3
+ * `codeledger pack <subcommand>`
4
+ *
5
+ * Manage invariant packs.
6
+ *
7
+ * Subcommands:
8
+ * list List all available packs and their status
9
+ * enable <name> Enable a pack
10
+ * disable <name> Disable a pack
11
+ */
12
+ export async function runPack(cwd, flags) {
13
+ const subcommand = flags['_sub'] ?? 'list';
14
+ switch (subcommand) {
15
+ case 'list': {
16
+ const packs = listPacks(cwd);
17
+ console.log('');
18
+ console.log('Invariant Packs');
19
+ console.log('───────────────');
20
+ if (packs.length === 0) {
21
+ console.log(' No packs available.');
22
+ console.log(' Run `codeledger learn --save` to generate a pack from repository conventions.');
23
+ }
24
+ else {
25
+ for (const pack of packs) {
26
+ const status = pack.enabled ? 'ENABLED' : 'disabled';
27
+ console.log(` ${pack.name} [${status}]`);
28
+ console.log(` ${pack.description}`);
29
+ console.log(` Rules: ${pack.rules.length}`);
30
+ console.log('');
31
+ }
32
+ }
33
+ break;
34
+ }
35
+ case 'enable': {
36
+ const packName = flags['name'] ?? flags['pack'];
37
+ if (!packName) {
38
+ console.error('Pack name required. Usage: codeledger pack enable --name <pack-name>');
39
+ // Also check for positional arg
40
+ console.error('Or: codeledger pack enable <pack-name>');
41
+ process.exit(2);
42
+ }
43
+ const enabled = enablePack(cwd, packName);
44
+ if (enabled) {
45
+ console.log(`Pack '${packName}' enabled.`);
46
+ }
47
+ else {
48
+ console.error(`Pack '${packName}' not found. Run 'codeledger pack list' to see available packs.`);
49
+ process.exit(1);
50
+ }
51
+ break;
52
+ }
53
+ case 'disable': {
54
+ const packName = flags['name'] ?? flags['pack'];
55
+ if (!packName) {
56
+ console.error('Pack name required. Usage: codeledger pack disable --name <pack-name>');
57
+ process.exit(2);
58
+ }
59
+ const disabled = disablePack(cwd, packName);
60
+ if (disabled) {
61
+ console.log(`Pack '${packName}' disabled.`);
62
+ }
63
+ else {
64
+ console.error(`Pack '${packName}' not found.`);
65
+ process.exit(1);
66
+ }
67
+ break;
68
+ }
69
+ default:
70
+ console.error(`Unknown pack subcommand: ${subcommand}`);
71
+ console.error('Available: list, enable, disable');
72
+ process.exit(1);
73
+ }
74
+ }
75
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `codeledger serve [--port 7400]`
3
+ *
4
+ * Lightweight HTTP server for programmatic access to CodeLedger.
5
+ * Uses node:http — zero external dependencies.
6
+ *
7
+ * Endpoints:
8
+ * GET /health → { status: "ok", version: "..." }
9
+ * POST /verify → JSON verify result (body: { task, flags? })
10
+ * POST /bundle → JSON bundle result (body: { task, flags? })
11
+ */
12
+ export declare function runServe(cwd: string, flags: Record<string, string>): Promise<void>;
13
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
@@ -0,0 +1,179 @@
1
+ import { createServer } from 'node:http';
2
+ import { runBundle } from './bundle.js';
3
+ import { runVerify } from './verify.js';
4
+ /**
5
+ * `codeledger serve [--port 7400]`
6
+ *
7
+ * Lightweight HTTP server for programmatic access to CodeLedger.
8
+ * Uses node:http — zero external dependencies.
9
+ *
10
+ * Endpoints:
11
+ * GET /health → { status: "ok", version: "..." }
12
+ * POST /verify → JSON verify result (body: { task, flags? })
13
+ * POST /bundle → JSON bundle result (body: { task, flags? })
14
+ */
15
+ export async function runServe(cwd, flags) {
16
+ const port = parseInt(flags['port'] ?? '7400', 10);
17
+ if (isNaN(port) || port < 1 || port > 65535) {
18
+ console.error(`Invalid --port "${flags['port']}". Must be a number between 1 and 65535.`);
19
+ process.exit(1);
20
+ }
21
+ const server = createServer(async (req, res) => {
22
+ // CORS headers for cross-origin access
23
+ res.setHeader('Access-Control-Allow-Origin', '*');
24
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
25
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
26
+ if (req.method === 'OPTIONS') {
27
+ res.writeHead(204);
28
+ res.end();
29
+ return;
30
+ }
31
+ const url = (req.url ?? '/').split('?')[0];
32
+ try {
33
+ if (url === '/health' && req.method === 'GET') {
34
+ await handleHealth(res);
35
+ }
36
+ else if (url === '/verify' && req.method === 'POST') {
37
+ await handleVerify(req, res, cwd);
38
+ }
39
+ else if (url === '/bundle' && req.method === 'POST') {
40
+ await handleBundle(req, res, cwd);
41
+ }
42
+ else {
43
+ sendJson(res, 404, { error: 'Not found', endpoints: ['/health', '/verify', '/bundle'] });
44
+ }
45
+ }
46
+ catch (err) {
47
+ const message = err instanceof Error ? err.message : String(err);
48
+ sendJson(res, 500, { error: 'Internal server error', message });
49
+ }
50
+ });
51
+ server.listen(port, () => {
52
+ console.log(`CodeLedger API server listening on port ${port}`);
53
+ console.log('');
54
+ console.log('Endpoints:');
55
+ console.log(` GET http://localhost:${port}/health`);
56
+ console.log(` POST http://localhost:${port}/verify { "task": "..." }`);
57
+ console.log(` POST http://localhost:${port}/bundle { "task": "..." }`);
58
+ console.log('');
59
+ console.log('Press Ctrl+C to stop.');
60
+ });
61
+ }
62
+ // ─── Handlers ─────────────────────────────────────────────────────────────────
63
+ async function handleHealth(res) {
64
+ let version = 'unknown';
65
+ try {
66
+ const { CLI_VERSION } = await import('../version.js');
67
+ version = CLI_VERSION;
68
+ }
69
+ catch {
70
+ // version file may not exist in all environments
71
+ }
72
+ sendJson(res, 200, {
73
+ status: 'ok',
74
+ version,
75
+ timestamp: new Date().toISOString(),
76
+ });
77
+ }
78
+ async function handleVerify(req, res, cwd) {
79
+ const body = await readBody(req);
80
+ if (!body.task) {
81
+ sendJson(res, 400, { error: 'Missing required field: task' });
82
+ return;
83
+ }
84
+ const verifyFlags = {
85
+ task: String(body.task),
86
+ json: 'true',
87
+ ...(body.flags ?? {}),
88
+ };
89
+ // Capture stdout to return as JSON
90
+ const result = await captureOutput(() => runVerify(cwd, verifyFlags));
91
+ sendJsonRaw(res, 200, result.stdout);
92
+ }
93
+ async function handleBundle(req, res, cwd) {
94
+ const body = await readBody(req);
95
+ if (!body.task) {
96
+ sendJson(res, 400, { error: 'Missing required field: task' });
97
+ return;
98
+ }
99
+ const bundleFlags = {
100
+ task: String(body.task),
101
+ json: 'true',
102
+ ...(body.flags ?? {}),
103
+ };
104
+ const result = await captureOutput(() => runBundle(cwd, bundleFlags));
105
+ sendJsonRaw(res, 200, result.stdout);
106
+ }
107
+ // ─── Utilities ────────────────────────────────────────────────────────────────
108
+ function sendJson(res, status, data) {
109
+ res.writeHead(status, { 'Content-Type': 'application/json' });
110
+ res.end(JSON.stringify(data));
111
+ }
112
+ function sendJsonRaw(res, status, raw) {
113
+ res.writeHead(status, { 'Content-Type': 'application/json' });
114
+ // If raw is valid JSON, send it directly; otherwise wrap it
115
+ try {
116
+ JSON.parse(raw);
117
+ res.end(raw);
118
+ }
119
+ catch {
120
+ res.end(JSON.stringify({ output: raw }));
121
+ }
122
+ }
123
+ const MAX_BODY_SIZE = 1_000_000; // 1 MB
124
+ async function readBody(req) {
125
+ return new Promise((resolve, reject) => {
126
+ const chunks = [];
127
+ let totalSize = 0;
128
+ req.on('data', (chunk) => {
129
+ totalSize += chunk.length;
130
+ if (totalSize > MAX_BODY_SIZE) {
131
+ req.destroy();
132
+ reject(new Error('Request body too large (max 1 MB)'));
133
+ return;
134
+ }
135
+ chunks.push(chunk);
136
+ });
137
+ req.on('end', () => {
138
+ const raw = Buffer.concat(chunks).toString('utf-8');
139
+ if (!raw) {
140
+ resolve({});
141
+ return;
142
+ }
143
+ try {
144
+ const parsed = JSON.parse(raw);
145
+ if (typeof parsed === 'object' && parsed !== null) {
146
+ resolve(parsed);
147
+ }
148
+ else {
149
+ reject(new Error('Request body must be a JSON object'));
150
+ }
151
+ }
152
+ catch {
153
+ reject(new Error('Invalid JSON in request body'));
154
+ }
155
+ });
156
+ req.on('error', reject);
157
+ });
158
+ }
159
+ async function captureOutput(fn) {
160
+ const originalLog = console.log;
161
+ const originalError = console.error;
162
+ let stdout = '';
163
+ let stderr = '';
164
+ console.log = (...args) => {
165
+ stdout += args.map(String).join(' ') + '\n';
166
+ };
167
+ console.error = (...args) => {
168
+ stderr += args.map(String).join(' ') + '\n';
169
+ };
170
+ try {
171
+ await fn();
172
+ }
173
+ finally {
174
+ console.log = originalLog;
175
+ console.error = originalError;
176
+ }
177
+ return { stdout: stdout.trim(), stderr: stderr.trim() };
178
+ }
179
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
+ export type CiProvider = 'github' | 'gitlab' | 'circleci' | 'azure';
1
2
  /**
2
- * `codeledger setup-ci [--mode observe|warn|block] [--output <path>]`
3
+ * `codeledger setup-ci [--mode observe|warn|block] [--provider github|gitlab|circleci|azure] [--output <path>]`
3
4
  *
4
- * Generates a ready-to-use GitHub Actions workflow and policy file for CI
5
- * enforcement. Designed to get enterprise users from zero to working CI
6
- * integration in one command.
5
+ * Generates a ready-to-use CI workflow and policy file for CI enforcement.
6
+ * Supports GitHub Actions, GitLab CI, CircleCI, and Azure Pipelines.
7
7
  */
8
8
  export declare function runSetupCi(cwd: string, flags: Record<string, string>): Promise<void>;
9
+ /** Generate CI workflow content for the given provider and mode */
10
+ export declare function generateWorkflow(provider: CiProvider, mode: string): string;
9
11
  //# sourceMappingURL=setup-ci.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-ci.d.ts","sourceRoot":"","sources":["../../src/commands/setup-ci.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAqFf"}
1
+ {"version":3,"file":"setup-ci.d.ts","sourceRoot":"","sources":["../../src/commands/setup-ci.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAoBpE;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAqFf;AAID,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAW3E"}
@@ -1,11 +1,25 @@
1
1
  import { writeFileSync, existsSync, mkdirSync } from 'node:fs';
2
2
  import { join, resolve } from 'node:path';
3
+ const VALID_PROVIDERS = ['github', 'gitlab', 'circleci', 'azure'];
4
+ /** Default output directory per provider */
5
+ const DEFAULT_OUTPUT_DIRS = {
6
+ github: '.github/workflows',
7
+ gitlab: '.',
8
+ circleci: '.circleci',
9
+ azure: '.',
10
+ };
11
+ /** Output filename per provider */
12
+ const WORKFLOW_FILENAMES = {
13
+ github: 'codeledger-verify.yml',
14
+ gitlab: '.gitlab-ci.yml',
15
+ circleci: 'config.yml',
16
+ azure: 'azure-pipelines-codeledger.yml',
17
+ };
3
18
  /**
4
- * `codeledger setup-ci [--mode observe|warn|block] [--output <path>]`
19
+ * `codeledger setup-ci [--mode observe|warn|block] [--provider github|gitlab|circleci|azure] [--output <path>]`
5
20
  *
6
- * Generates a ready-to-use GitHub Actions workflow and policy file for CI
7
- * enforcement. Designed to get enterprise users from zero to working CI
8
- * integration in one command.
21
+ * Generates a ready-to-use CI workflow and policy file for CI enforcement.
22
+ * Supports GitHub Actions, GitLab CI, CircleCI, and Azure Pipelines.
9
23
  */
10
24
  export async function runSetupCi(cwd, flags) {
11
25
  const mode = (flags['mode'] ?? 'warn');
@@ -13,7 +27,12 @@ export async function runSetupCi(cwd, flags) {
13
27
  console.error(`Invalid --mode "${mode}". Must be one of: observe, warn, block`);
14
28
  process.exit(1);
15
29
  }
16
- const outputDir = flags['output'] ?? '.github/workflows';
30
+ const provider = (flags['provider'] ?? 'github');
31
+ if (!VALID_PROVIDERS.includes(provider)) {
32
+ console.error(`Invalid --provider "${provider}". Must be one of: ${VALID_PROVIDERS.join(', ')}`);
33
+ process.exit(1);
34
+ }
35
+ const outputDir = flags['output'] ?? DEFAULT_OUTPUT_DIRS[provider];
17
36
  const resolvedOutputDir = resolve(cwd, outputDir);
18
37
  const policyDir = join(cwd, '.codeledger', 'policy', 'org');
19
38
  // -- Step 1: Create policy file -------------------------------------------
@@ -47,29 +66,23 @@ export async function runSetupCi(cwd, flags) {
47
66
  console.log(` Max drift: ${policy.max_drift}`);
48
67
  console.log(` Deny paths: ${policy.deny_paths.join(', ')}`);
49
68
  }
50
- // -- Step 2: Create GitHub Actions workflow --------------------------------
51
- const workflowDir = resolvedOutputDir;
52
- if (!existsSync(workflowDir)) {
53
- mkdirSync(workflowDir, { recursive: true });
69
+ // -- Step 2: Create CI workflow file --------------------------------------
70
+ if (!existsSync(resolvedOutputDir)) {
71
+ mkdirSync(resolvedOutputDir, { recursive: true });
54
72
  }
55
- const workflowPath = join(workflowDir, 'codeledger-verify.yml');
73
+ const workflowFilename = WORKFLOW_FILENAMES[provider];
74
+ const workflowPath = join(resolvedOutputDir, workflowFilename);
56
75
  if (existsSync(workflowPath)) {
57
76
  console.log(`\nWorkflow already exists at ${workflowPath}`);
58
77
  console.log('To overwrite, delete it and re-run this command.');
59
78
  }
60
79
  else {
61
- const workflow = generateWorkflow(mode);
80
+ const workflow = generateWorkflow(provider, mode);
62
81
  writeFileSync(workflowPath, workflow);
63
- console.log(`\nCreated workflow: ${workflowPath}`);
82
+ console.log(`\nCreated ${provider} workflow: ${workflowPath}`);
64
83
  }
65
- // -- Step 3: Signing secret instructions -----------------------------------
66
- console.log('\n--- Signing (optional) ---');
67
- console.log('To enable tamper-evident manifests, add a repository secret:');
68
- console.log('');
69
- console.log(' 1. Go to: Settings > Secrets and variables > Actions');
70
- console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
71
- console.log('');
72
- console.log('When set, `codeledger verify` will also produce a signed manifest.');
84
+ // -- Step 3: Provider-specific setup instructions -------------------------
85
+ printProviderInstructions(provider, mode);
73
86
  // -- Summary ---------------------------------------------------------------
74
87
  console.log('\n--- What happens next ---');
75
88
  console.log('');
@@ -78,7 +91,7 @@ export async function runSetupCi(cwd, flags) {
78
91
  console.log(' but will never fail the build. Good for evaluation.');
79
92
  }
80
93
  else if (mode === 'warn') {
81
- console.log(' Mode: WARN — CI will annotate PRs with warnings for policy');
94
+ console.log(' Mode: WARN — CI will annotate PRs/MRs with warnings for policy');
82
95
  console.log(' violations but will not block merging. Good for rollout.');
83
96
  }
84
97
  else {
@@ -89,9 +102,23 @@ export async function runSetupCi(cwd, flags) {
89
102
  console.log(' Commit the workflow and policy files to enable CI verification.');
90
103
  console.log(' Tune thresholds in: .codeledger/policy/org/default.json');
91
104
  }
92
- function generateWorkflow(mode) {
105
+ // ─── Workflow Generators ──────────────────────────────────────────────────────
106
+ /** Generate CI workflow content for the given provider and mode */
107
+ export function generateWorkflow(provider, mode) {
108
+ switch (provider) {
109
+ case 'github':
110
+ return generateGitHubWorkflow(mode);
111
+ case 'gitlab':
112
+ return generateGitLabWorkflow(mode);
113
+ case 'circleci':
114
+ return generateCircleCiWorkflow(mode);
115
+ case 'azure':
116
+ return generateAzurePipelinesWorkflow(mode);
117
+ }
118
+ }
119
+ function generateGitHubWorkflow(mode) {
93
120
  return `# CodeLedger CI Verification
94
- # Generated by: codeledger setup-ci --mode ${mode}
121
+ # Generated by: codeledger setup-ci --provider github --mode ${mode}
95
122
  # Docs: codeledger verify --help
96
123
 
97
124
  name: CodeLedger Verify
@@ -136,4 +163,170 @@ jobs:
136
163
  retention-days: 30
137
164
  `;
138
165
  }
166
+ function generateGitLabWorkflow(mode) {
167
+ const allowFailure = mode !== 'block' ? 'true' : 'false';
168
+ return `# CodeLedger CI Verification
169
+ # Generated by: codeledger setup-ci --provider gitlab --mode ${mode}
170
+ # Docs: codeledger verify --help
171
+
172
+ stages:
173
+ - verify
174
+
175
+ codeledger-verify:
176
+ stage: verify
177
+ image: node:20-alpine
178
+ rules:
179
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event"
180
+ variables:
181
+ CODELEDGER_SIGNING_SECRET: $CODELEDGER_SIGNING_SECRET
182
+ before_script:
183
+ - npm ci
184
+ script:
185
+ - |
186
+ # Extract task from MR title
187
+ TASK="$CI_MERGE_REQUEST_TITLE"
188
+ npx codeledger verify \\
189
+ --task "\${TASK}" \\
190
+ --artifacts-dir ./codeledger-artifacts
191
+ allow_failure: ${allowFailure}
192
+ artifacts:
193
+ when: always
194
+ paths:
195
+ - codeledger-artifacts/
196
+ expire_in: 30 days
197
+ `;
198
+ }
199
+ function generateCircleCiWorkflow(mode) {
200
+ // In block mode, verify exits non-zero on violations — CircleCI treats this
201
+ // as a step failure which fails the job. In observe/warn mode, we append
202
+ // `|| true` so the job always succeeds regardless of verify exit code.
203
+ const verifySuffix = mode === 'block' ? '' : ' || true';
204
+ return `# CodeLedger CI Verification
205
+ # Generated by: codeledger setup-ci --provider circleci --mode ${mode}
206
+ # Docs: codeledger verify --help
207
+ #
208
+ # Required environment variables (set in CircleCI project settings):
209
+ # CODELEDGER_SIGNING_SECRET - (optional) HMAC signing key
210
+
211
+ version: 2.1
212
+
213
+ jobs:
214
+ codeledger-verify:
215
+ docker:
216
+ - image: cimg/node:20.0
217
+ steps:
218
+ - checkout
219
+
220
+ - restore_cache:
221
+ keys:
222
+ - deps-v1-{{ checksum "package-lock.json" }}
223
+ - deps-v1-
224
+
225
+ - run:
226
+ name: Install dependencies
227
+ command: npm ci
228
+
229
+ - save_cache:
230
+ key: deps-v1-{{ checksum "package-lock.json" }}
231
+ paths:
232
+ - node_modules
233
+
234
+ - run:
235
+ name: Run CodeLedger verification
236
+ command: |
237
+ # Extract task from branch name or use default
238
+ TASK="\${CIRCLE_BRANCH:-verification}"
239
+ npx codeledger verify \\
240
+ --task "\${TASK}" \\
241
+ --artifacts-dir ./codeledger-artifacts${verifySuffix}
242
+
243
+ - store_artifacts:
244
+ path: codeledger-artifacts
245
+ destination: codeledger-verify
246
+
247
+ workflows:
248
+ verify:
249
+ jobs:
250
+ - codeledger-verify:
251
+ filters:
252
+ branches:
253
+ ignore:
254
+ - main
255
+ - master
256
+ `;
257
+ }
258
+ function generateAzurePipelinesWorkflow(mode) {
259
+ const continueOnError = mode !== 'block' ? 'true' : 'false';
260
+ return `# CodeLedger CI Verification
261
+ # Generated by: codeledger setup-ci --provider azure --mode ${mode}
262
+ # Docs: codeledger verify --help
263
+ #
264
+ # Required pipeline variables (set in Azure DevOps project settings):
265
+ # CODELEDGER_SIGNING_SECRET - (optional) HMAC signing key
266
+
267
+ trigger: none
268
+
269
+ pr:
270
+ branches:
271
+ include:
272
+ - main
273
+ - master
274
+
275
+ pool:
276
+ vmImage: 'ubuntu-latest'
277
+
278
+ steps:
279
+ - task: NodeTool@0
280
+ inputs:
281
+ versionSpec: '20.x'
282
+ displayName: 'Install Node.js'
283
+
284
+ - script: npm ci
285
+ displayName: 'Install dependencies'
286
+
287
+ - script: |
288
+ # Extract task from PR title
289
+ TASK="$(System.PullRequest.SourceBranch)"
290
+ npx codeledger verify \\
291
+ --task "\${TASK}" \\
292
+ --artifacts-dir $(Build.ArtifactStagingDirectory)/codeledger-artifacts
293
+ displayName: 'Run CodeLedger verification'
294
+ continueOnError: ${continueOnError}
295
+ env:
296
+ CODELEDGER_SIGNING_SECRET: $(CODELEDGER_SIGNING_SECRET)
297
+
298
+ - publish: $(Build.ArtifactStagingDirectory)/codeledger-artifacts
299
+ artifact: codeledger-verify
300
+ condition: always()
301
+ displayName: 'Publish verification artifacts'
302
+ `;
303
+ }
304
+ // ─── Provider-Specific Instructions ───────────────────────────────────────────
305
+ function printProviderInstructions(provider, _mode) {
306
+ console.log('\n--- Signing (optional) ---');
307
+ console.log('To enable tamper-evident manifests, add a secret:');
308
+ console.log('');
309
+ switch (provider) {
310
+ case 'github':
311
+ console.log(' 1. Go to: Settings > Secrets and variables > Actions');
312
+ console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
313
+ break;
314
+ case 'gitlab':
315
+ console.log(' 1. Go to: Settings > CI/CD > Variables');
316
+ console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
317
+ console.log(' Mark as "Masked" and optionally "Protected"');
318
+ break;
319
+ case 'circleci':
320
+ console.log(' 1. Go to: Project Settings > Environment Variables');
321
+ console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
322
+ break;
323
+ case 'azure':
324
+ console.log(' 1. Go to: Pipelines > Edit > Variables');
325
+ console.log(' 2. Add: CODELEDGER_SIGNING_SECRET = <your-secret-key>');
326
+ console.log(' Mark as secret');
327
+ break;
328
+ }
329
+ console.log('');
330
+ console.log('When set, `codeledger verify` will also produce a signed manifest.');
331
+ }
139
332
  //# sourceMappingURL=setup-ci.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-ci.js","sourceRoot":"","sources":["../../src/commands/setup-ci.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-ci.js","sourceRoot":"","sources":["../../src/commands/setup-ci.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAuCA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA6CA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBhE"}