@rsaglobaltech/specgate 0.26.0 → 0.27.1

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 (58) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +6 -0
  3. package/dist/packages/core/src/domain/ChangeMeasures.js +198 -0
  4. package/dist/packages/core/src/domain/ChangeMeasures.js.map +1 -0
  5. package/dist/packages/core/src/domain/ConventionalCommit.js +73 -0
  6. package/dist/packages/core/src/domain/ConventionalCommit.js.map +1 -0
  7. package/dist/packages/core/src/domain/HarnessConfig.js.map +1 -1
  8. package/dist/packages/core/src/domain/HarnessReport.js +2 -0
  9. package/dist/packages/core/src/domain/HarnessReport.js.map +1 -1
  10. package/dist/packages/core/src/domain/QualityChecks.js +218 -0
  11. package/dist/packages/core/src/domain/QualityChecks.js.map +1 -0
  12. package/dist/packages/core/src/domain/QualitySummary.js +58 -0
  13. package/dist/packages/core/src/domain/QualitySummary.js.map +1 -0
  14. package/dist/packages/core/src/domain/Sarif.js +121 -0
  15. package/dist/packages/core/src/domain/Sarif.js.map +1 -0
  16. package/dist/packages/core/src/infrastructure/GitContributionStager.js +1 -1
  17. package/dist/packages/core/src/infrastructure/GitContributionStager.js.map +1 -1
  18. package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +21 -0
  19. package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -1
  20. package/dist/packages/core/src/infrastructure/QualityBaselineFile.js +67 -0
  21. package/dist/packages/core/src/infrastructure/QualityBaselineFile.js.map +1 -0
  22. package/dist/scripts/cli/commands/change/TicketCommand.js +1 -1
  23. package/dist/scripts/cli/commands/change/TicketCommand.js.map +1 -1
  24. package/dist/scripts/cli/commands/harness/RunCommand.js +212 -15
  25. package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
  26. package/dist/scripts/cli/commands/quality/CheckCommand.js +54 -3
  27. package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
  28. package/dist/scripts/cli/commands/quality/QualityCommand.js +314 -0
  29. package/dist/scripts/cli/commands/quality/QualityCommand.js.map +1 -0
  30. package/dist/scripts/cli/commands/spec/DoneCommand.js +4 -1
  31. package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
  32. package/dist/scripts/cli/commands/spec/StudioCommand.js +14 -0
  33. package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
  34. package/dist/scripts/docs/nav.js +13 -2
  35. package/dist/scripts/docs/nav.js.map +1 -1
  36. package/dist/scripts/harness/prompt.js +4 -0
  37. package/dist/scripts/harness/prompt.js.map +1 -1
  38. package/dist/scripts/harness/report.js +13 -0
  39. package/dist/scripts/harness/report.js.map +1 -1
  40. package/dist/scripts/lib/quality-presets.js +378 -0
  41. package/dist/scripts/lib/quality-presets.js.map +1 -0
  42. package/dist/scripts/lib/quality-run.js +579 -0
  43. package/dist/scripts/lib/quality-run.js.map +1 -0
  44. package/dist/scripts/lib/sonar-local.js +308 -0
  45. package/dist/scripts/lib/sonar-local.js.map +1 -0
  46. package/dist/scripts/lib/studio-app-page.js +74 -11
  47. package/dist/scripts/lib/studio-app-page.js.map +1 -1
  48. package/dist/scripts/lib/studio-app.js +80 -0
  49. package/dist/scripts/lib/studio-app.js.map +1 -1
  50. package/dist/scripts/lib/studio-route.js +64 -1
  51. package/dist/scripts/lib/studio-route.js.map +1 -1
  52. package/dist/scripts/lib/surface.js +11 -0
  53. package/dist/scripts/lib/surface.js.map +1 -1
  54. package/dist/scripts/lib/ticket-keys.js +1 -1
  55. package/dist/scripts/lib/ticket-keys.js.map +1 -1
  56. package/dist/scripts/quality.js +10 -0
  57. package/dist/scripts/quality.js.map +1 -0
  58. package/package.json +1 -1
@@ -0,0 +1,579 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.REPORTS = void 0;
37
+ exports.commitsOutcome = commitsOutcome;
38
+ exports.changedLineMap = changedLineMap;
39
+ exports.measureReport = measureReport;
40
+ exports.sarifFindings = sarifFindings;
41
+ exports.repositoryPath = repositoryPath;
42
+ exports.baseOf = baseOf;
43
+ exports.changedFiles = changedFiles;
44
+ exports.dockerAvailable = dockerAvailable;
45
+ exports.hasProgram = hasProgram;
46
+ exports.resolveRunner = resolveRunner;
47
+ exports.splitArgs = splitArgs;
48
+ exports.dockerArgs = dockerArgs;
49
+ exports.ensureImage = ensureImage;
50
+ exports.runCheck = runCheck;
51
+ exports.archCheck = archCheck;
52
+ exports.archRun = archRun;
53
+ exports.gateContext = gateContext;
54
+ exports.runStages = runStages;
55
+ exports.stagesPassed = stagesPassed;
56
+ exports.resetDockerProbe = resetDockerProbe;
57
+ const fs = __importStar(require("node:fs"));
58
+ const path = __importStar(require("node:path"));
59
+ const node_child_process_1 = require("node:child_process");
60
+ const QualityChecks_1 = require("../../packages/core/src/domain/QualityChecks");
61
+ const Sarif_1 = require("../../packages/core/src/domain/Sarif");
62
+ const QualityBaselineFile_1 = require("../../packages/core/src/infrastructure/QualityBaselineFile");
63
+ const sonar_local_1 = require("./sonar-local");
64
+ const ConventionalCommit_1 = require("../../packages/core/src/domain/ConventionalCommit");
65
+ const ChangeMeasures_1 = require("../../packages/core/src/domain/ChangeMeasures");
66
+ /**
67
+ * The built-in `commits` check (REQ-234): every commit since the base, merges
68
+ * left out, against Conventional Commits 1.0.0.
69
+ */
70
+ function commitsOutcome(projectDir, base, options) {
71
+ if (!base || base === "HEAD")
72
+ return { ok: true, output: "no commits since the base", checked: 0 };
73
+ const r = git(projectDir, ["log", "--no-merges", "--format=%h%x00%B%x1e", `${base}..HEAD`]);
74
+ if (r.status !== 0)
75
+ return { ok: false, output: (r.stderr || "").trim(), checked: 0 };
76
+ const types = [...ConventionalCommit_1.DEFAULT_TYPES, ...(options.commitTypes || [])];
77
+ const broken = [];
78
+ let checked = 0;
79
+ for (const entry of (r.stdout || "").split("\x1e")) {
80
+ const [hash, body] = entry.replace(/^\s+/, "").split("\0");
81
+ if (!hash || body === undefined)
82
+ continue;
83
+ if ((0, ConventionalCommit_1.exempt)(body, Boolean(options.ci)))
84
+ continue;
85
+ checked += 1;
86
+ const parsed = (0, ConventionalCommit_1.parseCommit)(body, types);
87
+ if (parsed.problems.length) {
88
+ broken.push(`${hash} "${body.split("\n")[0]}": ${parsed.problems.join("; ")}`);
89
+ }
90
+ }
91
+ return {
92
+ ok: broken.length === 0,
93
+ checked,
94
+ output: broken.length
95
+ ? [
96
+ `${broken.length} of ${checked} commit(s) do not follow Conventional Commits 1.0.0:`,
97
+ ...broken,
98
+ "Reword them (git rebase -i) as type(scope): description — e.g. feat(REQ-012): cancel a booking.",
99
+ ].join("\n")
100
+ : `${checked} commit(s) follow Conventional Commits 1.0.0`,
101
+ };
102
+ }
103
+ /** Lines changed since the base, per file; an untracked file counts whole. */
104
+ function changedLineMap(projectDir, base, files) {
105
+ const diff = base
106
+ ? git(projectDir, ["diff", "--unified=0", "--no-color", base]).stdout || ""
107
+ : "";
108
+ const map = (0, ChangeMeasures_1.changedLines)(diff);
109
+ for (const f of files) {
110
+ if (map.has(f))
111
+ continue;
112
+ const tracked = git(projectDir, ["ls-files", "--error-unmatch", f]).status === 0;
113
+ if (tracked)
114
+ continue;
115
+ try {
116
+ const n = fs.readFileSync(path.join(projectDir, f), "utf8").split(/\r?\n/).length;
117
+ map.set(f, new Set(Array.from({ length: n }, (_, i) => i + 1)));
118
+ }
119
+ catch {
120
+ /* gone */
121
+ }
122
+ }
123
+ return map;
124
+ }
125
+ /** The measure a report gives over the changed lines, or why there is none. */
126
+ function measureReport(projectDir, check, ctx, thresholds) {
127
+ if (!check.report)
128
+ return "no report";
129
+ const file = path.join(projectDir, check.report.path);
130
+ if (!fs.existsSync(file))
131
+ return `no report at ${check.report.path}`;
132
+ const text = fs.readFileSync(file, "utf8");
133
+ const changed = changedLineMap(projectDir, ctx.base === "HEAD" ? "" : ctx.base, ctx.changedFiles);
134
+ const f = check.report.format;
135
+ const coverage = f === "jacoco" || f === "lcov" || f === "cobertura";
136
+ const m = coverage
137
+ ? (0, ChangeMeasures_1.diffCoverage)(changed, f === "jacoco" ? (0, ChangeMeasures_1.readJacoco)(text) : f === "lcov" ? (0, ChangeMeasures_1.readLcov)(text) : (0, ChangeMeasures_1.readCobertura)(text))
138
+ : (0, ChangeMeasures_1.mutationScore)(changed, f === "pit" ? (0, ChangeMeasures_1.readPit)(text) : (0, ChangeMeasures_1.readStryker)(text));
139
+ return {
140
+ kind: coverage ? "coverage" : "mutation",
141
+ value: m.value,
142
+ threshold: coverage ? thresholds.diffCoverage : thresholds.mutationScore,
143
+ total: m.total,
144
+ passed: m.passed,
145
+ misses: m.misses.slice(0, 20),
146
+ };
147
+ }
148
+ /** The lines of a project file, for fingerprints; null when it cannot be read. */
149
+ function linesOf(projectDir) {
150
+ const cache = new Map();
151
+ return (rel) => {
152
+ if (!cache.has(rel)) {
153
+ try {
154
+ cache.set(rel, fs.readFileSync(path.join(projectDir, rel), "utf8").split(/\r?\n/));
155
+ }
156
+ catch {
157
+ cache.set(rel, null);
158
+ }
159
+ }
160
+ return cache.get(rel);
161
+ };
162
+ }
163
+ /** Every finding of a check's SARIF, or null when it wrote none. */
164
+ function sarifFindings(projectDir, check) {
165
+ if (!check.sarif)
166
+ return null;
167
+ const file = path.join(projectDir, check.sarif);
168
+ if (!fs.existsSync(file))
169
+ return null;
170
+ return (0, Sarif_1.readSarif)(fs.readFileSync(file, "utf8"), projectDir, linesOf(projectDir), repositoryPath(projectDir));
171
+ }
172
+ /**
173
+ * A path a tool reported, as the repository file it is: itself when it
174
+ * exists, else the one file that ends with it (`com/shop/Order.java` is
175
+ * `src/main/java/com/shop/Order.java`); left as it is when none or several do.
176
+ */
177
+ function repositoryPath(projectDir) {
178
+ let files = null;
179
+ return (p) => {
180
+ if (fs.existsSync(path.join(projectDir, p)))
181
+ return p;
182
+ if (files === null) {
183
+ const r = git(projectDir, ["ls-files", "--cached", "--others", "--exclude-standard"]);
184
+ files = r.status === 0 ? (r.stdout || "").split("\n").filter(Boolean) : [];
185
+ }
186
+ const hits = files.filter((f) => f.endsWith(`/${p}`));
187
+ return hits.length === 1 ? hits[0] : p;
188
+ };
189
+ }
190
+ /** Where a check's reports go, inside the project and ignored by git. */
191
+ exports.REPORTS = path.join(".specgate", "quality");
192
+ function git(projectDir, args) {
193
+ return (0, node_child_process_1.spawnSync)("git", ["-C", projectDir, ...args], { encoding: "utf8" });
194
+ }
195
+ /**
196
+ * The commit a change is measured from: the explicit base, else the first of
197
+ * SPECGATE_BASE, origin's default branch, main, master or develop that HEAD
198
+ * shares history with. Empty when none is found (no git, a first commit).
199
+ */
200
+ function baseOf(projectDir, explicit = "") {
201
+ const candidates = [
202
+ explicit,
203
+ process.env.SPECGATE_BASE || "",
204
+ (git(projectDir, ["symbolic-ref", "-q", "--short", "refs/remotes/origin/HEAD"]).stdout || "").trim(),
205
+ "main",
206
+ "master",
207
+ "develop",
208
+ ].filter(Boolean);
209
+ for (const ref of candidates) {
210
+ const r = git(projectDir, ["merge-base", "HEAD", ref]);
211
+ if (r.status === 0 && r.stdout.trim())
212
+ return r.stdout.trim();
213
+ }
214
+ return "";
215
+ }
216
+ /** Files changed since the base, committed or not, untracked included; repository-relative. */
217
+ function changedFiles(projectDir, base) {
218
+ const out = new Set();
219
+ const add = (text) => text
220
+ .split("\n")
221
+ .map((l) => l.trim())
222
+ .filter(Boolean)
223
+ .forEach((l) => out.add(l));
224
+ if (base)
225
+ add(git(projectDir, ["diff", "--name-only", base]).stdout || "");
226
+ add(git(projectDir, ["diff", "--name-only", "HEAD"]).stdout || "");
227
+ add(git(projectDir, ["ls-files", "--others", "--exclude-standard"]).stdout || "");
228
+ return [...out].filter((f) => fs.existsSync(path.join(projectDir, f))).sort();
229
+ }
230
+ let dockerAnswered = null;
231
+ /** Whether a Docker daemon answers; asked once per process. */
232
+ function dockerAvailable() {
233
+ if (dockerAnswered === null) {
234
+ const r = (0, node_child_process_1.spawnSync)("docker", ["version", "--format", "{{.Server.Version}}"], {
235
+ encoding: "utf8",
236
+ timeout: 15000,
237
+ });
238
+ dockerAnswered = r.status === 0 && Boolean((r.stdout || "").trim());
239
+ }
240
+ return dockerAnswered;
241
+ }
242
+ /** Whether the command's program is on this machine's PATH. */
243
+ function hasProgram(command) {
244
+ const program = (command.trim().split(/\s+/)[0] || "").replace(/^["']|["']$/g, "");
245
+ if (!program)
246
+ return false;
247
+ if (/[\\/]/.test(program))
248
+ return fs.existsSync(program);
249
+ const r = (0, node_child_process_1.spawnSync)(process.platform === "win32" ? "where" : "which", [program], {
250
+ encoding: "utf8",
251
+ });
252
+ return r.status === 0;
253
+ }
254
+ /** Which way the check runs here, or why it cannot. */
255
+ function resolveRunner(check) {
256
+ if (check.runner === "local")
257
+ return { runner: "local" };
258
+ if (check.runner === "docker") {
259
+ return dockerAvailable()
260
+ ? { runner: "docker" }
261
+ : { skip: "Docker is not running here: start Docker Desktop (or the docker daemon)." };
262
+ }
263
+ if (hasProgram(check.run))
264
+ return { runner: "local" };
265
+ if (check.image && dockerAvailable())
266
+ return { runner: "docker" };
267
+ return {
268
+ skip: check.image
269
+ ? "the tool is not installed and Docker is not running: install it, or start Docker."
270
+ : "the tool is not installed here, and the check names no image to run it in.",
271
+ };
272
+ }
273
+ /** Split a command into arguments, honouring single and double quotes. */
274
+ function splitArgs(command) {
275
+ const out = [];
276
+ let cur = "";
277
+ let quote = null;
278
+ let has = false;
279
+ for (const ch of command) {
280
+ if (quote) {
281
+ if (ch === quote)
282
+ quote = null;
283
+ else
284
+ cur += ch;
285
+ }
286
+ else if (ch === '"' || ch === "'") {
287
+ quote = ch;
288
+ has = true;
289
+ }
290
+ else if (/\s/.test(ch)) {
291
+ if (cur || has)
292
+ out.push(cur);
293
+ cur = "";
294
+ has = false;
295
+ }
296
+ else
297
+ cur += ch;
298
+ }
299
+ if (cur || has)
300
+ out.push(cur);
301
+ return out;
302
+ }
303
+ /**
304
+ * `docker run` for a check: the project mounted at /src, its user on Linux and
305
+ * macOS so reports are not root's, the environment names forwarded by name
306
+ * only, the named volumes for caches.
307
+ */
308
+ function dockerArgs(check, projectDir, command, container) {
309
+ const posix = process.platform !== "win32" && typeof process.getuid === "function";
310
+ const id = posix ? `${process.getuid()}:${process.getgid ? process.getgid() : 0}` : "";
311
+ // A cache volume belongs to root inside the container, so a check with one
312
+ // runs as root and hands what it wrote back to the person afterwards;
313
+ // without one it runs as the person from the start.
314
+ const asRoot = posix && check.volumes.length > 0 && check.shell;
315
+ // Run as the person, a check has no home of its own: HOME is "/", and a tool
316
+ // that keeps a cache there (Semgrep) fails unless the uid happens to be the
317
+ // image's own user.
318
+ const user = posix && !asRoot ? ["--user", id, "-e", "HOME=/tmp"] : [];
319
+ const script = asRoot
320
+ ? `touch /tmp/.specgate-start; ${command}; s=$?; find /src -newer /tmp/.specgate-start -user 0 -exec chown ${id} {} + 2>/dev/null; exit $s`
321
+ : command;
322
+ return [
323
+ "run",
324
+ "--rm",
325
+ "--name",
326
+ container,
327
+ "-v",
328
+ `${path.resolve(projectDir)}:/src`,
329
+ "-w",
330
+ "/src",
331
+ ...user,
332
+ ...(check.network ? [] : ["--network", "none"]),
333
+ ...check.env.flatMap((e) => ["-e", e]),
334
+ ...check.volumes.flatMap((v) => ["-v", v]),
335
+ ...(check.shell
336
+ ? ["--entrypoint", "sh", check.image, "-c", script]
337
+ : [check.image, ...splitArgs(command)]),
338
+ ];
339
+ }
340
+ /** Pull the image when it is not here yet; the pull is not the check's time. */
341
+ function ensureImage(image) {
342
+ if ((0, node_child_process_1.spawnSync)("docker", ["image", "inspect", image], { encoding: "utf8" }).status === 0) {
343
+ return { ok: true };
344
+ }
345
+ const pull = (0, node_child_process_1.spawnSync)("docker", ["pull", "-q", image], { encoding: "utf8" });
346
+ return pull.status === 0
347
+ ? { ok: true }
348
+ : {
349
+ ok: false,
350
+ message: `could not pull ${image}: ${(pull.stderr || pull.stdout || "").trim()}`,
351
+ };
352
+ }
353
+ const tail = (text, lines = 60) => text.trim().split("\n").slice(-lines).join("\n");
354
+ function runCheck(projectDir, check, ctx, thresholds = { diffCoverage: null, mutationScore: null }, agents = {}) {
355
+ const base = {
356
+ name: check.name,
357
+ when: check.when,
358
+ gate: check.gate,
359
+ ok: false,
360
+ skipped: "",
361
+ runner: "",
362
+ command: (0, QualityChecks_1.expandRun)(check.run, ctx),
363
+ ms: 0,
364
+ exit: null,
365
+ output: "",
366
+ };
367
+ if (check.run === "builtin:review" || check.run === "builtin:adversary") {
368
+ const perform = agents[check.run];
369
+ if (!perform) {
370
+ return {
371
+ ...base,
372
+ skipped: "an agent check runs inside the harness only (specgate harness run).",
373
+ };
374
+ }
375
+ const started = Date.now();
376
+ const done = perform(check);
377
+ return {
378
+ ...base,
379
+ runner: "local",
380
+ ms: Date.now() - started,
381
+ exit: done.ok ? 0 : 1,
382
+ ok: done.ok,
383
+ output: done.output,
384
+ };
385
+ }
386
+ if (check.run === "builtin:commits") {
387
+ const started = Date.now();
388
+ const c = commitsOutcome(projectDir, ctx.base, thresholds);
389
+ return {
390
+ ...base,
391
+ runner: "local",
392
+ ms: Date.now() - started,
393
+ exit: c.ok ? 0 : 1,
394
+ ok: c.ok,
395
+ output: c.output,
396
+ };
397
+ }
398
+ const missing = check.env.filter((e) => !process.env[e]);
399
+ if (missing.length) {
400
+ return { ...base, skipped: `set ${missing.join(", ")} in the environment (never in a file).` };
401
+ }
402
+ const how = resolveRunner(check);
403
+ if ("skip" in how)
404
+ return { ...base, skipped: how.skip };
405
+ fs.mkdirSync(path.join(projectDir, ctx.reportDir), { recursive: true });
406
+ const ignore = path.join(projectDir, exports.REPORTS, ".gitignore");
407
+ if (!fs.existsSync(ignore))
408
+ fs.writeFileSync(ignore, "*\n", "utf8");
409
+ const sonar = check.run === "builtin:sonar";
410
+ if (how.runner === "docker" && !sonar) {
411
+ const pulled = ensureImage(check.image);
412
+ if (!pulled.ok)
413
+ return { ...base, runner: "docker", skipped: pulled.message };
414
+ }
415
+ // A SARIF left by an earlier run must not speak for this one.
416
+ if (check.sarif)
417
+ fs.rmSync(path.join(projectDir, check.sarif), { force: true });
418
+ const container = `specgate-${check.name}-${process.pid}-${Date.now()}`;
419
+ const started = Date.now();
420
+ const r = sonar
421
+ ? (0, sonar_local_1.runSonar)(projectDir, check.timeout * 1000)
422
+ : how.runner === "docker"
423
+ ? (0, node_child_process_1.spawnSync)("docker", dockerArgs(check, projectDir, base.command, container), {
424
+ cwd: projectDir,
425
+ encoding: "utf8",
426
+ timeout: check.timeout * 1000,
427
+ maxBuffer: 64 * 1024 * 1024,
428
+ })
429
+ : (0, node_child_process_1.spawnSync)(base.command, {
430
+ cwd: projectDir,
431
+ encoding: "utf8",
432
+ shell: true,
433
+ timeout: check.timeout * 1000,
434
+ maxBuffer: 64 * 1024 * 1024,
435
+ });
436
+ const ms = Date.now() - started;
437
+ const timedOut = r.error && r.error.code === "ETIMEDOUT";
438
+ if (timedOut && how.runner === "docker")
439
+ (0, node_child_process_1.spawnSync)("docker", ["rm", "-f", container]);
440
+ const output = tail(`${r.stdout || ""}${r.stderr || ""}`);
441
+ const ran = {
442
+ ...base,
443
+ runner: how.runner,
444
+ ms,
445
+ exit: r.status,
446
+ ok: !timedOut && r.status === 0,
447
+ output: timedOut ? `${output}\n(timed out after ${check.timeout} s)`.trim() : output,
448
+ };
449
+ if (timedOut)
450
+ return ran;
451
+ if (check.report) {
452
+ // REQ-223, REQ-224: the report measures the lines this change touched.
453
+ const m = measureReport(projectDir, check, ctx, thresholds);
454
+ if (typeof m === "string") {
455
+ return {
456
+ ...ran,
457
+ ok: false,
458
+ output: `${ran.output}\n(${m}: the check cannot be measured)`.trim(),
459
+ };
460
+ }
461
+ const below = m.value !== null && m.threshold !== null && m.value < m.threshold;
462
+ const what = m.kind === "coverage" ? "diff coverage" : "mutation score";
463
+ return {
464
+ ...ran,
465
+ measure: m,
466
+ ok: ran.ok && !below,
467
+ output: below
468
+ ? [
469
+ `${what} ${m.value}% is below ${m.threshold}% (${m.passed} of ${m.total} on the changed lines):`,
470
+ ...m.misses,
471
+ ].join("\n")
472
+ : ran.output,
473
+ };
474
+ }
475
+ if (!check.sarif)
476
+ return ran;
477
+ // With SARIF the findings judge, not the exit code: a tool exits 1 on debt
478
+ // the baseline already holds. Only what this change adds fails it.
479
+ let findings;
480
+ try {
481
+ findings = sarifFindings(projectDir, check);
482
+ }
483
+ catch (err) {
484
+ return { ...ran, ok: false, output: `${ran.output}\n${err.message}`.trim() };
485
+ }
486
+ if (findings === null) {
487
+ return {
488
+ ...ran,
489
+ output: `${ran.output}\n(no SARIF at ${check.sarif}: judged by the exit code)`.trim(),
490
+ };
491
+ }
492
+ const { fresh, baselined } = (0, Sarif_1.newFindings)(findings, (0, QualityBaselineFile_1.readBaseline)(projectDir), check.name, check.scope === "diff" && ctx.changedKnown !== false ? ctx.changedFiles : null);
493
+ return {
494
+ ...ran,
495
+ ok: fresh.length === 0,
496
+ findings: {
497
+ fresh: fresh.slice(0, 50).map(Sarif_1.findingLine),
498
+ freshCount: fresh.length,
499
+ baselined,
500
+ total: findings.length,
501
+ },
502
+ output: fresh.length > 0
503
+ ? [
504
+ `${fresh.length} new finding(s)${baselined ? `, ${baselined} in the baseline` : ""}:`,
505
+ ...fresh.slice(0, 20).map(Sarif_1.findingLine),
506
+ ...(fresh.length > 20 ? [`… and ${fresh.length - 20} more in ${check.sarif}`] : []),
507
+ ].join("\n")
508
+ : ran.output,
509
+ };
510
+ }
511
+ /**
512
+ * `arch_cmd` as a check named `arch` (REQ-231): with `arch_sarif` its findings
513
+ * are judged against the baseline like any check's — only a violation the
514
+ * change adds fails — instead of by the tool's exit code.
515
+ */
516
+ function archCheck(archCmd, archSarif) {
517
+ return {
518
+ name: "arch",
519
+ run: archCmd,
520
+ when: "attempt",
521
+ gate: true,
522
+ runner: "local",
523
+ image: "",
524
+ network: true,
525
+ shell: true,
526
+ volumes: [],
527
+ env: [],
528
+ timeout: 1800,
529
+ sarif: archSarif,
530
+ report: null,
531
+ scope: "diff",
532
+ profile: "",
533
+ };
534
+ }
535
+ /** `arch_cmd` judged through its SARIF, shaped like spawnSync's result for the gates that run it. */
536
+ function archRun(projectDir, archCmd, archSarif, baseRef = "", req = "") {
537
+ const o = runCheck(projectDir, archCheck(archCmd, archSarif), gateContext(projectDir, req, baseRef));
538
+ return { status: o.ok ? 0 : 1, stdout: o.output, stderr: "" };
539
+ }
540
+ /** The context `check` and `done` measure from: the base branch, every file changed since. */
541
+ function gateContext(projectDir, req = "", baseRef = "") {
542
+ const base = baseOf(projectDir, baseRef);
543
+ const inGit = git(projectDir, ["rev-parse", "--is-inside-work-tree"]).status === 0;
544
+ return {
545
+ req,
546
+ base: base || "HEAD",
547
+ changedFiles: changedFiles(projectDir, base),
548
+ changedKnown: inGit,
549
+ reportDir: path
550
+ .join(exports.REPORTS, req || "check")
551
+ .split(path.sep)
552
+ .join("/"),
553
+ };
554
+ }
555
+ /** Run the checks of the stages given, in the file's order. */
556
+ function runStages(projectDir, config, stages, ctx, onEach, agents = {}) {
557
+ return (0, QualityChecks_1.checksFor)(config, stages).map((check) => {
558
+ const run = () => runCheck(projectDir, check, ctx, {
559
+ diffCoverage: config.diffCoverage,
560
+ mutationScore: config.mutationScore,
561
+ commitTypes: config.commitTypes,
562
+ ci: stages.includes("ci"),
563
+ }, agents);
564
+ return onEach ? onEach(check, run) : run();
565
+ });
566
+ }
567
+ /**
568
+ * Whether the outcomes let the gate pass: a gating check that ran and failed
569
+ * fails it; one that could not run fails it only in CI, where every tool is
570
+ * expected to be there.
571
+ */
572
+ function stagesPassed(outcomes, ci) {
573
+ return outcomes.every((o) => !o.gate || (o.skipped ? !ci : o.ok));
574
+ }
575
+ /** For tests: forget whether Docker answered. */
576
+ function resetDockerProbe(value = null) {
577
+ dockerAnswered = value;
578
+ }
579
+ //# sourceMappingURL=quality-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-run.js","sourceRoot":"","sources":["../../../scripts/lib/quality-run.ts"],"names":[],"mappings":"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"}