@rsaglobaltech/specgate 0.27.1 → 0.27.3

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 (28) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/packages/core/src/domain/BriefCards.js +32 -5
  3. package/dist/packages/core/src/domain/BriefCards.js.map +1 -1
  4. package/dist/packages/core/src/domain/DraftChecklist.js +61 -1
  5. package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
  6. package/dist/packages/core/src/domain/QualityChecks.js +23 -0
  7. package/dist/packages/core/src/domain/QualityChecks.js.map +1 -1
  8. package/dist/scripts/cli/commands/change/TicketCommand.js +2 -1
  9. package/dist/scripts/cli/commands/change/TicketCommand.js.map +1 -1
  10. package/dist/scripts/cli/commands/project/Forja.js +61 -5
  11. package/dist/scripts/cli/commands/project/Forja.js.map +1 -1
  12. package/dist/scripts/cli/commands/project/InitProjectCommand.js +19 -0
  13. package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
  14. package/dist/scripts/cli/commands/quality/QualityCommand.js +23 -1
  15. package/dist/scripts/cli/commands/quality/QualityCommand.js.map +1 -1
  16. package/dist/scripts/cli/commands/spec/DraftCommand.js +16 -6
  17. package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
  18. package/dist/scripts/cli/commands/spec/StatusCommand.js +21 -2
  19. package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
  20. package/dist/scripts/draft/brief-check.js +55 -4
  21. package/dist/scripts/draft/brief-check.js.map +1 -1
  22. package/dist/scripts/draft/confined-agent.js +28 -1
  23. package/dist/scripts/draft/confined-agent.js.map +1 -1
  24. package/dist/scripts/lib/quality-presets.js +171 -72
  25. package/dist/scripts/lib/quality-presets.js.map +1 -1
  26. package/dist/scripts/lib/quality-run.js +41 -2
  27. package/dist/scripts/lib/quality-run.js.map +1 -1
  28. package/package.json +1 -1
@@ -58,6 +58,17 @@ const path = __importStar(require("node:path"));
58
58
  const os = __importStar(require("node:os"));
59
59
  const node_child_process_1 = require("node:child_process");
60
60
  const AuthoringScope_1 = require("../../packages/core/src/domain/AuthoringScope");
61
+ /**
62
+ * Where what an undo removed is kept: inside the repository's git folder, so
63
+ * the working tree is left exactly as it was and nothing new shows in status.
64
+ */
65
+ function undoneDir(projectDir) {
66
+ const r = (0, node_child_process_1.spawnSync)("git", ["-C", projectDir, "rev-parse", "--git-dir"], { encoding: "utf8" });
67
+ const gitDir = String(r.stdout || ".git").trim() || ".git";
68
+ const abs = path.resolve(projectDir, gitDir);
69
+ const rel = path.relative(projectDir, abs).split(path.sep).join("/");
70
+ return `${rel || ".git"}/specgate-undone`;
71
+ }
61
72
  /** Every path git sees as changed or untracked, one file per entry. */
62
73
  function dirtyPaths(projectDir) {
63
74
  const r = (0, node_child_process_1.spawnSync)("git", ["-C", projectDir, "status", "--porcelain", "--untracked-files=all", "-z"], { encoding: "utf8" });
@@ -136,6 +147,18 @@ function runConfinedAgent(o) {
136
147
  const after = dirtyPaths(o.projectDir) || [];
137
148
  const wrote = [];
138
149
  const reverted = [];
150
+ // Before a file is put back, what it held is kept (REQ-248).
151
+ const runDir = `${undoneDir(o.projectDir)}/${new Date().toISOString().replace(/[:.]/g, "-")}`;
152
+ let keptAny = false;
153
+ const keep = (rel) => {
154
+ const full = path.join(o.projectDir, rel);
155
+ if (!fs.existsSync(full) || !fs.statSync(full).isFile())
156
+ return;
157
+ const dest = path.join(o.projectDir, runDir, rel);
158
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
159
+ fs.copyFileSync(full, dest);
160
+ keptAny = true;
161
+ };
139
162
  for (const rel of after) {
140
163
  if (inScope(rel)) {
141
164
  if (!before.includes(rel))
@@ -151,6 +174,7 @@ function runConfinedAgent(o) {
151
174
  continue;
152
175
  if (was !== null && now !== null && was.equals(now))
153
176
  continue;
177
+ keep(rel);
154
178
  if (was === null)
155
179
  fs.rmSync(full, { recursive: true, force: true });
156
180
  else
@@ -162,6 +186,7 @@ function runConfinedAgent(o) {
162
186
  const tracked = (0, node_child_process_1.spawnSync)("git", ["-C", o.projectDir, "ls-files", "--error-unmatch", "--", rel], {
163
187
  encoding: "utf8",
164
188
  }).status === 0;
189
+ keep(rel);
165
190
  if (tracked)
166
191
  (0, node_child_process_1.spawnSync)("git", ["-C", o.projectDir, "checkout", "--", rel]);
167
192
  else
@@ -180,6 +205,7 @@ function runConfinedAgent(o) {
180
205
  reverted.push(rel);
181
206
  }
182
207
  }
208
+ const kept = keptAny ? runDir : undefined;
183
209
  if (agent.status !== 0) {
184
210
  const tail = `${agent.stdout || ""}${agent.stderr || ""}`.trim().slice(-500);
185
211
  return {
@@ -188,8 +214,9 @@ function runConfinedAgent(o) {
188
214
  detail: `exited ${agent.status ?? "on a signal"}${tail ? `: ${tail}` : ""}`,
189
215
  wrote,
190
216
  reverted,
217
+ kept,
191
218
  };
192
219
  }
193
- return { ok: true, wrote, reverted };
220
+ return { ok: true, wrote, reverted, kept };
194
221
  }
195
222
  //# sourceMappingURL=confined-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"confined-agent.js","sourceRoot":"","sources":["../../../scripts/draft/confined-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confined-agent.js","sourceRoot":"","sources":["../../../scripts/draft/confined-agent.ts"],"names":[],"mappings":"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"}
@@ -34,8 +34,10 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.IMAGES = void 0;
37
+ exports.detectApps = detectApps;
37
38
  exports.detectStacks = detectStacks;
38
39
  exports.javaVersion = javaVersion;
40
+ exports.pomGroup = pomGroup;
39
41
  exports.presetYaml = presetYaml;
40
42
  exports.withPreset = withPreset;
41
43
  const fs = __importStar(require("node:fs"));
@@ -44,7 +46,7 @@ const path = __importStar(require("node:path"));
44
46
  exports.IMAGES = {
45
47
  gitleaks: "ghcr.io/gitleaks/gitleaks:v8.24.3",
46
48
  semgrep: "semgrep/semgrep:1.99.0",
47
- osv: "ghcr.io/google/osv-scanner:v2.0.2",
49
+ osv: "ghcr.io/google/osv-scanner:v2.2.4",
48
50
  node: "node:22",
49
51
  };
50
52
  const read = (dir, rel) => {
@@ -55,18 +57,56 @@ const read = (dir, rel) => {
55
57
  return "";
56
58
  }
57
59
  };
58
- /** The stacks a project's build files give away, in the order presets are written. */
59
- function detectStacks(projectDir) {
60
+ const STACKS = ["maven", "gradle", "node"];
61
+ const BUILD_FILES = {
62
+ maven: ["pom.xml"],
63
+ gradle: ["build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts"],
64
+ node: ["package.json"],
65
+ };
66
+ const NOT_APPS = new Set(["node_modules", "target", "build", "dist", "docs", "features", "infra"]);
67
+ /** Folders one level down, and in apps/, packages/ and services/: where a monorepo keeps its apps. */
68
+ function appFolders(projectDir) {
69
+ const children = (rel) => {
70
+ try {
71
+ return fs
72
+ .readdirSync(path.join(projectDir, rel), { withFileTypes: true })
73
+ .filter((e) => e.isDirectory() && !e.name.startsWith(".") && !NOT_APPS.has(e.name))
74
+ .map((e) => (rel ? `${rel}/${e.name}` : e.name))
75
+ .sort();
76
+ }
77
+ catch {
78
+ return [];
79
+ }
80
+ };
81
+ const top = children("");
82
+ const nested = ["apps", "packages", "services"].flatMap((d) => top.includes(d) ? children(d) : []);
83
+ return [...top, ...nested];
84
+ }
85
+ /**
86
+ * Each stack with the folder it is built in (REQ-235). The root wins: a stack
87
+ * whose build file is at the root covers the whole repository (a Maven
88
+ * reactor, npm workspaces); otherwise each folder with that build file is an
89
+ * app of its own, such as forja's `apps/api`.
90
+ */
91
+ function detectApps(projectDir) {
60
92
  const has = (rel) => fs.existsSync(path.join(projectDir, rel));
61
93
  const out = [];
62
- if (has("pom.xml"))
63
- out.push("maven");
64
- if (has("build.gradle") || has("build.gradle.kts"))
65
- out.push("gradle");
66
- if (has("package.json"))
67
- out.push("node");
94
+ const folders = appFolders(projectDir);
95
+ for (const stack of STACKS) {
96
+ const at = (dir) => BUILD_FILES[stack].some((f) => has(dir ? `${dir}/${f}` : f));
97
+ if (at(""))
98
+ out.push({ stack, dir: "" });
99
+ else
100
+ for (const dir of folders)
101
+ if (at(dir))
102
+ out.push({ stack, dir });
103
+ }
68
104
  return out;
69
105
  }
106
+ /** The stacks a project's build files give away, in the order presets are written. */
107
+ function detectStacks(projectDir) {
108
+ return [...new Set(detectApps(projectDir).map((a) => a.stack))];
109
+ }
70
110
  /** The JDK a Java build declares (release, source or java.version), 21 when it says none. */
71
111
  function javaVersion(projectDir) {
72
112
  const text = `${read(projectDir, "pom.xml")}\n${read(projectDir, "build.gradle")}\n${read(projectDir, "build.gradle.kts")}`;
@@ -107,14 +147,19 @@ function render(c) {
107
147
  ...(c.report ? [` report: ${c.report}`] : []),
108
148
  ...(c.scope ? [` scope: ${c.scope}`] : []),
109
149
  ...(c.timeout ? [` timeout: ${c.timeout}`] : []),
150
+ ...(c.docker ? [" docker: true"] : []),
151
+ ...(c.needs ? [` needs: ${c.needs}`] : []),
110
152
  ];
111
153
  return c.missing ? [` # ${c.missing}`, ...lines.map((l) => ` #${l.slice(1)}`)] : lines;
112
154
  }
113
- /** The secrets and dependency checks every stack shares. */
114
- function shared(projectDir, level, depsLock) {
155
+ /**
156
+ * The secrets and dependency checks every stack shares; `depsLock` is from the
157
+ * root, and `generated` when a check before it writes it (Maven's bill of materials).
158
+ */
159
+ function shared(projectDir, level, depsLock, generated = false) {
115
160
  // osv-scanner reads a lockfile (or pom.xml); without one it finds nothing to
116
161
  // scan and writes no SARIF, so the check would fail on every run.
117
- const lockMissing = !fs.existsSync(path.join(projectDir, depsLock))
162
+ const lockMissing = !generated && !fs.existsSync(path.join(projectDir, depsLock))
118
163
  ? `Dependencies need ${depsLock}, which this project does not have yet; once it does, uncomment:`
119
164
  : undefined;
120
165
  return [
@@ -137,53 +182,100 @@ function shared(projectDir, level, depsLock) {
137
182
  },
138
183
  ];
139
184
  }
140
- function maven(projectDir, level) {
141
- const pom = read(projectDir, "pom.xml");
142
- const image = `maven:3.9-eclipse-temurin-${javaVersion(projectDir)}`;
185
+ /** A path of an app, from the root. */
186
+ const inApp = (dir, rel) => (dir ? `${dir}/${rel}` : rel);
187
+ /** A command of an app, run in its folder. */
188
+ const cdApp = (dir, cmd) => (dir ? `cd ${dir} && ${cmd}` : cmd);
189
+ /** Semgrep's rules for a stack: one scan carries every stack's (REQ-235). */
190
+ const SEMGREP_RULES = {
191
+ maven: ["p/java"],
192
+ gradle: ["p/java"],
193
+ node: ["p/typescript", "p/react"],
194
+ };
195
+ function semgrep(rules) {
196
+ return {
197
+ name: "semgrep",
198
+ run: `semgrep scan ${rules.map((r) => `--config ${r}`).join(" ")} --sarif --output .specgate/quality/semgrep.sarif --metrics off --quiet`,
199
+ when: "end",
200
+ image: exports.IMAGES.semgrep,
201
+ sarif: ".specgate/quality/semgrep.sarif",
202
+ };
203
+ }
204
+ /** The project's own group in a pom, its parent's and its dependencies' aside; "" when it names none. */
205
+ function pomGroup(pom) {
206
+ const own = pom.replace(/<(parent|dependencies|dependencyManagement|build|profiles|reporting|plugins|pluginRepositories|repositories)\b[\s\S]*?<\/\1>/g, "");
207
+ return (/<groupId>\s*([\w.-]+)\s*<\/groupId>/.exec(own) || [])[1] || "";
208
+ }
209
+ /**
210
+ * Coverage with JaCoCo's agent on the project's classes only (REQ-250). With
211
+ * every class instrumented, Testcontainers' were too: its container stop ran
212
+ * into JaCoCo's dump at shutdown and Surefire killed the JVM after 30 s, on
213
+ * every run of a Spring Boot API (truck-flote, S36).
214
+ */
215
+ function jacocoCoverage(mvn, group) {
216
+ const report = "org.jacoco:jacoco-maven-plugin:0.8.12:report";
217
+ if (!group)
218
+ return `${mvn} org.jacoco:jacoco-maven-plugin:0.8.12:prepare-agent test ${report}`;
219
+ const agent = "org.apache.maven.plugins:maven-dependency-plugin:3.8.1:copy -Dartifact=org.jacoco:org.jacoco.agent:0.8.12:jar:runtime -DoutputDirectory=target/jacoco-agent -Dmdep.stripVersion=true";
220
+ return `${mvn} ${agent} test ${report} '-DargLine=-javaagent:target/jacoco-agent/org.jacoco.agent-runtime.jar=destfile=target/jacoco.exec,includes=${group}.*'`;
221
+ }
222
+ function maven(projectDir, level, dir = "") {
223
+ const appDir = path.join(projectDir, dir);
224
+ const pom = read(appDir, "pom.xml");
225
+ const image = `maven:3.9-eclipse-temurin-${javaVersion(appDir)}`;
143
226
  const m2 = ["specgate-m2:/root/.m2"];
144
227
  const mvn = "mvn -B -q";
228
+ // REQ-238: the tests start containers; they need the host's Docker.
229
+ const testcontainers = /org\.testcontainers/.test(pom);
230
+ // REQ-237: Maven resolves what a parent POM or a BOM manages, with its own
231
+ // repositories and cache; osv-scanner then reads that bill of materials.
232
+ const [secrets, dependencies] = shared(projectDir, level, inApp(dir, "target/bom.json"), true);
145
233
  const checks = [
146
- ...shared(projectDir, level, "pom.xml"),
234
+ secrets,
235
+ {
236
+ name: "sbom",
237
+ run: cdApp(dir, `${mvn} org.cyclonedx:cyclonedx-maven-plugin:2.9.1:makeBom -DoutputFormat=json -DoutputName=bom`),
238
+ when: dependencies.when,
239
+ image,
240
+ volumes: m2,
241
+ },
242
+ { ...dependencies, needs: "sbom" },
147
243
  {
148
244
  name: "coverage",
149
- run: `${mvn} org.jacoco:jacoco-maven-plugin:0.8.12:prepare-agent test org.jacoco:jacoco-maven-plugin:0.8.12:report`,
245
+ run: cdApp(dir, jacocoCoverage(mvn, pomGroup(pom))),
150
246
  when: "attempt",
151
247
  image,
152
248
  volumes: m2,
153
- report: "jacoco:target/site/jacoco/jacoco.xml",
249
+ report: `jacoco:${inApp(dir, "target/site/jacoco/jacoco.xml")}`,
154
250
  timeout: 1800,
251
+ docker: testcontainers,
155
252
  },
156
253
  {
157
254
  name: "spotbugs",
158
- run: `${mvn} compile com.github.spotbugs:spotbugs-maven-plugin:4.8.6.6:spotbugs -Dspotbugs.sarifOutput=true`,
255
+ run: cdApp(dir, `${mvn} compile com.github.spotbugs:spotbugs-maven-plugin:4.8.6.6:spotbugs -Dspotbugs.sarifOutput=true`),
159
256
  when: level === "strict" ? "attempt" : "end",
160
257
  image,
161
258
  volumes: m2,
162
- sarif: "target/spotbugsSarif.json",
259
+ sarif: inApp(dir, "target/spotbugsSarif.json"),
163
260
  },
164
261
  ];
165
262
  if (level === "strict") {
166
263
  checks.push({
167
264
  name: "pmd",
168
- run: `${mvn} org.apache.maven.plugins:maven-pmd-plugin:3.26.0:pmd -Dformat=net.sourceforge.pmd.renderers.SarifRenderer -DlinkXRef=false`,
265
+ run: cdApp(dir, `${mvn} org.apache.maven.plugins:maven-pmd-plugin:3.26.0:pmd -Dformat=net.sourceforge.pmd.renderers.SarifRenderer -DlinkXRef=false`),
169
266
  when: "attempt",
170
267
  image,
171
268
  volumes: m2,
172
- sarif: "target/pmd.sarif.json",
173
- }, {
174
- name: "semgrep",
175
- run: "semgrep scan --config p/java --sarif --output .specgate/quality/semgrep.sarif --metrics off --quiet",
176
- when: "end",
177
- image: exports.IMAGES.semgrep,
178
- sarif: ".specgate/quality/semgrep.sarif",
179
- }, {
269
+ sarif: inApp(dir, "target/pmd.sarif.json"),
270
+ }, semgrep(SEMGREP_RULES.maven), {
180
271
  name: "mutation",
181
- run: `${mvn} test-compile org.pitest:pitest-maven:mutationCoverage -DtargetClasses={changed_classes} -DoutputFormats=XML -DtimestampedReports=false`,
272
+ run: cdApp(dir, `${mvn} test-compile org.pitest:pitest-maven:mutationCoverage -DtargetClasses=${dir ? `{changed_classes@${dir}}` : "{changed_classes}"} -DoutputFormats=XML -DtimestampedReports=false`),
182
273
  when: "end",
183
274
  image,
184
275
  volumes: m2,
185
- report: "pit:target/pit-reports/mutations.xml",
276
+ report: `pit:${inApp(dir, "target/pit-reports/mutations.xml")}`,
186
277
  timeout: 3600,
278
+ docker: testcontainers,
187
279
  missing: /pitest-maven/.test(pom)
188
280
  ? undefined
189
281
  : "Mutation needs pitest-maven with pitest-junit5-plugin declared in pom.xml (JUnit 5 cannot be added from the command line); add them and uncomment:",
@@ -191,59 +283,58 @@ function maven(projectDir, level) {
191
283
  }
192
284
  return checks;
193
285
  }
194
- function gradle(projectDir, level) {
195
- const build = `${read(projectDir, "build.gradle")}\n${read(projectDir, "build.gradle.kts")}`;
286
+ function gradle(projectDir, level, dir = "") {
287
+ const appDir = path.join(projectDir, dir);
288
+ const build = `${read(appDir, "build.gradle")}\n${read(appDir, "build.gradle.kts")}`;
196
289
  // osv-scanner reads Gradle's lockfile, not the build script: dependency locking must be on.
197
- const lock = "gradle.lockfile";
198
- const image = `gradle:8-jdk${javaVersion(projectDir)}`;
290
+ const lock = inApp(dir, "gradle.lockfile");
291
+ const image = `gradle:8-jdk${javaVersion(appDir)}`;
199
292
  const cache = ["specgate-gradle:/home/gradle/.gradle"];
200
293
  const checks = [
201
294
  ...shared(projectDir, level, lock),
202
295
  {
203
296
  name: "coverage",
204
- run: "gradle --no-daemon -q test jacocoTestReport",
297
+ run: cdApp(dir, "gradle --no-daemon -q test jacocoTestReport"),
205
298
  when: "attempt",
206
299
  image,
207
300
  volumes: cache,
208
- report: "jacoco:build/reports/jacoco/test/jacocoTestReport.xml",
301
+ report: `jacoco:${inApp(dir, "build/reports/jacoco/test/jacocoTestReport.xml")}`,
302
+ docker: /org\.testcontainers/.test(build),
209
303
  timeout: 1800,
210
304
  missing: /\bjacoco\b/.test(build)
211
305
  ? undefined
212
306
  : "Coverage needs the jacoco plugin applied, with reports { xml.required = true }; add it and uncomment:",
213
307
  },
214
308
  ];
215
- if (level === "strict") {
216
- checks.push({
217
- name: "semgrep",
218
- run: "semgrep scan --config p/java --sarif --output .specgate/quality/semgrep.sarif --metrics off --quiet",
219
- when: "end",
220
- image: exports.IMAGES.semgrep,
221
- sarif: ".specgate/quality/semgrep.sarif",
222
- });
223
- }
309
+ if (level === "strict")
310
+ checks.push(semgrep(SEMGREP_RULES.gradle));
224
311
  return checks;
225
312
  }
226
- function node(projectDir, level) {
313
+ function node(projectDir, level, dir = "") {
314
+ const appDir = path.join(projectDir, dir);
227
315
  let pkg = {};
228
316
  try {
229
- pkg = JSON.parse(read(projectDir, "package.json") || "{}");
317
+ pkg = JSON.parse(read(appDir, "package.json") || "{}");
230
318
  }
231
319
  catch {
232
320
  pkg = {};
233
321
  }
234
322
  const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
235
- const { lock, install } = nodeInstall(projectDir);
323
+ const { lock, install } = nodeInstall(appDir);
236
324
  const slug = path
237
- .basename(projectDir)
325
+ .basename(appDir)
238
326
  .toLowerCase()
239
327
  .replace(/[^a-z0-9]+/g, "-")
240
328
  .replace(/^-|-$/g, "") || "project";
241
329
  // node_modules lives in a volume: the host's may hold another platform's binaries.
242
- const volumes = [`specgate-nm-${slug}:/src/node_modules`, "specgate-npm:/root/.npm"];
243
- const inNode = (cmd) => `${install} && ${cmd}`;
244
- const tsconfig = fs.existsSync(path.join(projectDir, "tsconfig.json"));
330
+ const volumes = [
331
+ `specgate-nm-${slug}:/src/${inApp(dir, "node_modules")}`,
332
+ "specgate-npm:/root/.npm",
333
+ ];
334
+ const inNode = (cmd) => cdApp(dir, `${install} && ${cmd}`);
335
+ const tsconfig = fs.existsSync(path.join(appDir, "tsconfig.json"));
245
336
  const runner = deps.vitest ? "vitest" : deps.jest ? "jest" : "";
246
- const checks = [...shared(projectDir, level, lock)];
337
+ const checks = [...shared(projectDir, level, inApp(dir, lock))];
247
338
  if (tsconfig) {
248
339
  checks.push({
249
340
  name: "types",
@@ -270,7 +361,7 @@ function node(projectDir, level) {
270
361
  when: "attempt",
271
362
  image: exports.IMAGES.node,
272
363
  volumes,
273
- report: "lcov:coverage/lcov.info",
364
+ report: `lcov:${inApp(dir, "coverage/lcov.info")}`,
274
365
  timeout: 1800,
275
366
  missing: runner
276
367
  ? runner === "vitest" && !deps["@vitest/coverage-v8"] && !deps["@vitest/coverage-istanbul"]
@@ -279,19 +370,13 @@ function node(projectDir, level) {
279
370
  : "Coverage needs Vitest or Jest; with one installed, uncomment:",
280
371
  });
281
372
  if (level === "strict") {
282
- checks.push({
283
- name: "semgrep",
284
- run: "semgrep scan --config p/typescript --config p/react --sarif --output .specgate/quality/semgrep.sarif --metrics off --quiet",
285
- when: "end",
286
- image: exports.IMAGES.semgrep,
287
- sarif: ".specgate/quality/semgrep.sarif",
288
- }, {
373
+ checks.push(semgrep(SEMGREP_RULES.node), {
289
374
  name: "mutation",
290
- run: inNode("npx --no-install stryker run --mutate {changed_src} --reporters json"),
375
+ run: inNode(`npx --no-install stryker run --mutate ${dir ? `{changed_src@${dir}}` : "{changed_src}"} --reporters json`),
291
376
  when: "end",
292
377
  image: exports.IMAGES.node,
293
378
  volumes,
294
- report: "stryker:reports/mutation/mutation.json",
379
+ report: `stryker:${inApp(dir, "reports/mutation/mutation.json")}`,
295
380
  timeout: 3600,
296
381
  missing: deps["@stryker-mutator/core"]
297
382
  ? undefined
@@ -302,7 +387,10 @@ function node(projectDir, level) {
302
387
  }
303
388
  /** The `quality:` block a level writes for a project, as YAML lines. */
304
389
  function presetYaml(projectDir, level) {
305
- const stacks = detectStacks(projectDir);
390
+ const found = detectApps(projectDir);
391
+ const apps = found.length ? found : [{ stack: "node", dir: "" }];
392
+ // One Semgrep scan of the repository, with the rules of every stack in it.
393
+ const rules = [...new Set(apps.flatMap((a) => SEMGREP_RULES[a.stack]))];
306
394
  const lines = [
307
395
  "# Quality and security checks (ADR-0040), written by `specgate quality init`.",
308
396
  "# Every check runs in Docker, with tools that need no account. Take the",
@@ -332,19 +420,30 @@ function presetYaml(projectDir, level) {
332
420
  " runner: local",
333
421
  ];
334
422
  const seen = new Set(["commits"]);
335
- for (const stack of stacks.length ? stacks : ["node"]) {
423
+ for (const { stack, dir } of apps) {
336
424
  const checks = stack === "maven"
337
- ? maven(projectDir, level)
425
+ ? maven(projectDir, level, dir)
338
426
  : stack === "gradle"
339
- ? gradle(projectDir, level)
340
- : node(projectDir, level);
427
+ ? gradle(projectDir, level, dir)
428
+ : node(projectDir, level, dir);
341
429
  for (const c of checks) {
342
- // One secrets scan for the whole repository; per-stack checks get the stack's name.
343
- const name = seen.has(c.name) ? `${c.name}-${stack}` : c.name;
430
+ // One secrets and one Semgrep scan for the whole repository; per-app
431
+ // checks get the stack's name, then the folder's when a stack repeats.
344
432
  if (seen.has(c.name) && (c.name === "secrets" || c.name === "semgrep"))
345
433
  continue;
434
+ let name = c.name;
435
+ if (seen.has(name))
436
+ name = `${c.name}-${stack}`;
437
+ if (seen.has(name) && dir)
438
+ name = `${c.name}-${path.basename(dir)}`;
346
439
  seen.add(name);
347
- lines.push(...render({ ...c, name }));
440
+ let check = c.name === "semgrep" ? { ...semgrep(rules), name } : { ...c, name };
441
+ // A renamed check writes its own report: `osv.sarif` → `dependencies-node.sarif`.
442
+ if (name !== c.name && check.sarif && check.sarif.startsWith(".specgate/quality/")) {
443
+ const own = `.specgate/quality/${name}.sarif`;
444
+ check = { ...check, run: check.run.split(check.sarif).join(own), sarif: own };
445
+ }
446
+ lines.push(...render(check));
348
447
  }
349
448
  }
350
449
  if (level === "strict")
@@ -1 +1 @@
1
- {"version":3,"file":"quality-presets.js","sourceRoot":"","sources":["../../../scripts/lib/quality-presets.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,oCAOC;AAGD,kCASC;AAkQD,gCAgDC;AASD,gCAcC;AA5XD,4CAA8B;AAC9B,gDAAkC;AAclC,gEAAgE;AACnD,QAAA,MAAM,GAAG;IACpB,QAAQ,EAAE,mCAAmC;IAC7C,OAAO,EAAE,wBAAwB;IACjC,GAAG,EAAE,mCAAmC;IACxC,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE;IACxC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,sFAAsF;AACtF,SAAgB,YAAY,CAAC,UAAkB;IAC7C,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,GAAG,GAAY,EAAE,CAAC;IACxB,IAAI,GAAG,CAAC,SAAS,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvE,IAAI,GAAG,CAAC,cAAc,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6FAA6F;AAC7F,SAAgB,WAAW,CAAC,UAAkB;IAC5C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,CAAC;IAC5H,MAAM,CAAC,GACL,6CAA6C,CAAC,IAAI,CAAC,IAAI,CAAC;QACxD,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,oEAAoE,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/E,gEAAgE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,2DAA2D;AAC3D,SAAS,WAAW,CAAC,UAAkB;IACrC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,IAAI,GAAG,CAAC,gBAAgB,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,qEAAqE;SAC/E,CAAC;IACJ,IAAI,GAAG,CAAC,WAAW,CAAC;QAClB,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,4DAA4D;SACtE,CAAC;IACJ,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;AACxF,CAAC;AAkBD,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAE3C,SAAS,MAAM,CAAC,CAAc;IAC5B,MAAM,KAAK,GAAG;QACZ,aAAa,CAAC,CAAC,IAAI,EAAE;QACrB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QACtB,aAAa,CAAC,CAAC,IAAI,EAAE;QACrB,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,oBAAoB;QACpB,cAAc,CAAC,CAAC,KAAK,EAAE;QACvB,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;IACF,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3F,CAAC;AAED,4DAA4D;AAC5D,SAAS,MAAM,CAAC,UAAkB,EAAE,KAAY,EAAE,QAAgB;IAChE,6EAA6E;IAC7E,kEAAkE;IAClE,MAAM,WAAW,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjE,CAAC,CAAC,qBAAqB,QAAQ,kEAAkE;QACjG,CAAC,CAAC,SAAS,CAAC;IACd,OAAO;QACL;YACE,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,iGAAiG;YACtG,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,cAAM,CAAC,QAAQ;YACtB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,kCAAkC;SAC1C;QACD;YACE,IAAI,EAAE,cAAc;YACpB,GAAG,EAAE,+BAA+B,QAAQ,sDAAsD;YAClG,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;YAC5C,KAAK,EAAE,cAAM,CAAC,GAAG;YACjB,KAAK,EAAE,6BAA6B;YACpC,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,WAAW;SACrB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,UAAkB,EAAE,KAAY;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,6BAA6B,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;IACrE,MAAM,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,WAAW,CAAC;IACxB,MAAM,MAAM,GAAkB;QAC5B,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC;QACvC;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,GAAG,GAAG,wGAAwG;YACnH,IAAI,EAAE,SAAS;YACf,KAAK;YACL,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,sCAAsC;YAC9C,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,GAAG,GAAG,iGAAiG;YAC5G,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;YAC5C,KAAK;YACL,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,2BAA2B;SACnC;KACF,CAAC;IACF,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CACT;YACE,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,GAAG,GAAG,6HAA6H;YACxI,IAAI,EAAE,SAAS;YACf,KAAK;YACL,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,uBAAuB;SAC/B,EACD;YACE,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,qGAAqG;YAC1G,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,cAAM,CAAC,OAAO;YACrB,KAAK,EAAE,iCAAiC;SACzC,EACD;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,GAAG,GAAG,yIAAyI;YACpJ,IAAI,EAAE,KAAK;YACX,KAAK;YACL,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,sCAAsC;YAC9C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC/B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,oJAAoJ;SACzJ,CACF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,MAAM,CAAC,UAAkB,EAAE,KAAY;IAC9C,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,CAAC;IAC7F,4FAA4F;IAC5F,MAAM,IAAI,GAAG,iBAAiB,CAAC;IAC/B,MAAM,KAAK,GAAG,eAAe,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAkB;QAC5B,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC;QAClC;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,6CAA6C;YAClD,IAAI,EAAE,SAAS;YACf,KAAK;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,uDAAuD;YAC/D,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,uGAAuG;SAC5G;KACF,CAAC;IACF,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,qGAAqG;YAC1G,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,cAAM,CAAC,OAAO;YACrB,KAAK,EAAE,iCAAiC;SACzC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,UAAkB,EAAE,KAAY;IAC5C,IAAI,GAAG,GAAwF,EAAE,CAAC;IAClG,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,GAAG,EAAE,CAAC;IACX,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,IAAI,GACR,IAAI;SACD,QAAQ,CAAC,UAAU,CAAC;SACpB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;IACxC,mFAAmF;IACnF,MAAM,OAAO,GAAG,CAAC,eAAe,IAAI,oBAAoB,EAAE,yBAAyB,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,OAAO,OAAO,GAAG,EAAE,CAAC;IACvD,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,MAAM,GAAkB,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,MAAM,CAAC,+BAA+B,CAAC;YAC5C,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,cAAM,CAAC,IAAI;YAClB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,MAAM,CAAC,2BAA2B,CAAC;YACxC,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,cAAM,CAAC,IAAI;YAClB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,MAAM,CACT,MAAM,KAAK,MAAM;YACf,CAAC,CAAC,2DAA2D;YAC7D,CAAC,CAAC,iEAAiE,CACtE;QACD,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,cAAM,CAAC,IAAI;QAClB,OAAO;QACP,MAAM,EAAE,yBAAyB;QACjC,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,MAAM;YACb,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC;gBACzF,CAAC,CAAC,8EAA8E;gBAChF,CAAC,CAAC,SAAS;YACb,CAAC,CAAC,+DAA+D;KACpE,CAAC,CAAC;IACH,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CACT;YACE,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,4HAA4H;YACjI,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,cAAM,CAAC,OAAO;YACrB,KAAK,EAAE,iCAAiC;SACzC,EACD;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,MAAM,CAAC,sEAAsE,CAAC;YACnF,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,cAAM,CAAC,IAAI;YAClB,OAAO;YACP,MAAM,EAAE,wCAAwC;YAChD,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC;gBACpC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,iGAAiG;SACtG,CACF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wEAAwE;AACxE,SAAgB,UAAU,CAAC,UAAkB,EAAE,KAAY;IACzD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG;QACZ,+EAA+E;QAC/E,yEAAyE;QACzE,0EAA0E;QAC1E,YAAY,KAAK,EAAE;QACnB,SAAS;QACT,0EAA0E;QAC1E,mBAAmB;QACnB,4BAA4B;QAC5B,mBAAmB;QACnB,mBAAmB;KACpB,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,iFAAiF;QACjF,oFAAoF;QACpF,mBAAmB;QACnB,4BAA4B;QAC5B,iBAAiB;QACjB,sBAAsB;QACtB,4CAA4C;QAC5C,qBAAqB;QACrB,gFAAgF;QAChF,kBAAkB;QAClB,2BAA2B;QAC3B,eAAe;QACf,iBAAiB;QACjB,mBAAmB;KACpB,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,MAAM,CAAa,EAAE,CAAC;QACnE,MAAM,MAAM,GACV,KAAK,KAAK,OAAO;YACf,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;YAC1B,CAAC,CAAC,KAAK,KAAK,QAAQ;gBAClB,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;gBAC3B,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,oFAAoF;YACpF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;gBAAE,SAAS;YACjF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,0DAA0D;AAC1D,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAEvE;;;GAGG;AACH,SAAgB,UAAU,CAAC,MAAc,EAAE,MAAc;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,GAAG;YAAE,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC,IAAI,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,QAAQ,GAAG,KAAK,CAAC;QAC/D,IAAI,QAAQ;YAAE,SAAS;QACvB,IAAI,2EAA2E,CAAC,IAAI,CAAC,IAAI,CAAC;YACxF,SAAS;QACX,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,MAAM,EAAE,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"quality-presets.js","sourceRoot":"","sources":["../../../scripts/lib/quality-presets.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,7 @@ exports.REPORTS = void 0;
37
37
  exports.commitsOutcome = commitsOutcome;
38
38
  exports.changedLineMap = changedLineMap;
39
39
  exports.measureReport = measureReport;
40
+ exports.ignoredByGit = ignoredByGit;
40
41
  exports.sarifFindings = sarifFindings;
41
42
  exports.repositoryPath = repositoryPath;
42
43
  exports.baseOf = baseOf;
@@ -160,14 +161,36 @@ function linesOf(projectDir) {
160
161
  return cache.get(rel);
161
162
  };
162
163
  }
163
- /** Every finding of a check's SARIF, or null when it wrote none. */
164
+ /** The paths, of those given, that git ignores; none outside a repository. */
165
+ function ignoredByGit(projectDir, paths) {
166
+ if (paths.length === 0)
167
+ return new Set();
168
+ const r = (0, node_child_process_1.spawnSync)("git", ["-C", projectDir, "check-ignore", "--stdin"], {
169
+ input: paths.join("\n") + "\n",
170
+ encoding: "utf8",
171
+ });
172
+ // 0: some are ignored; 1: none are; anything else: not a repository.
173
+ if (r.status !== 0)
174
+ return new Set();
175
+ return new Set(String(r.stdout)
176
+ .split(/\r?\n/)
177
+ .map((l) => l.trim().replace(/\\/g, "/"))
178
+ .filter(Boolean));
179
+ }
180
+ /**
181
+ * Every finding of a check's SARIF, or null when it wrote none. A finding in
182
+ * a file git ignores (REQ-241) — a development `.env.local` — is never part
183
+ * of a change or of the repository, so it is left out.
184
+ */
164
185
  function sarifFindings(projectDir, check) {
165
186
  if (!check.sarif)
166
187
  return null;
167
188
  const file = path.join(projectDir, check.sarif);
168
189
  if (!fs.existsSync(file))
169
190
  return null;
170
- return (0, Sarif_1.readSarif)(fs.readFileSync(file, "utf8"), projectDir, linesOf(projectDir), repositoryPath(projectDir));
191
+ const findings = (0, Sarif_1.readSarif)(fs.readFileSync(file, "utf8"), projectDir, linesOf(projectDir), repositoryPath(projectDir));
192
+ const ignored = ignoredByGit(projectDir, [...new Set(findings.map((f) => f.path))]);
193
+ return ignored.size ? findings.filter((f) => !ignored.has(f.path)) : findings;
171
194
  }
172
195
  /**
173
196
  * A path a tool reported, as the repository file it is: itself when it
@@ -332,6 +355,20 @@ function dockerArgs(check, projectDir, command, container) {
332
355
  ...(check.network ? [] : ["--network", "none"]),
333
356
  ...check.env.flatMap((e) => ["-e", e]),
334
357
  ...check.volumes.flatMap((v) => ["-v", v]),
358
+ // REQ-238: tests that start containers (Testcontainers) reach the host's
359
+ // Docker, and the containers they start through the host's address.
360
+ ...(check.docker
361
+ ? [
362
+ "-v",
363
+ "/var/run/docker.sock:/var/run/docker.sock",
364
+ "-e",
365
+ "TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal",
366
+ "-e",
367
+ "TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE=/var/run/docker.sock",
368
+ "--add-host",
369
+ "host.docker.internal:host-gateway",
370
+ ]
371
+ : []),
335
372
  ...(check.shell
336
373
  ? ["--entrypoint", "sh", check.image, "-c", script]
337
374
  : [check.image, ...splitArgs(command)]),
@@ -530,6 +567,8 @@ function archCheck(archCmd, archSarif) {
530
567
  report: null,
531
568
  scope: "diff",
532
569
  profile: "",
570
+ docker: false,
571
+ needs: "",
533
572
  };
534
573
  }
535
574
  /** `arch_cmd` judged through its SARIF, shaped like spawnSync's result for the gates that run it. */