@agent-teams/engineering-foundation 0.17.0-rc.7 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -47
- package/dist/capabilities/quality-gate-runner/adapters/inbound/cli/report-renderer.d.ts +3 -0
- package/dist/capabilities/quality-gate-runner/adapters/inbound/cli/report-renderer.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/adapters/inbound/cli/report-renderer.js +17 -0
- package/dist/capabilities/quality-gate-runner/adapters/inbound/cli/report-renderer.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/filesystem/filesystem-package-script-catalog-reader.d.ts +7 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/filesystem/filesystem-package-script-catalog-reader.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/filesystem/filesystem-package-script-catalog-reader.js +51 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/filesystem/filesystem-package-script-catalog-reader.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/pnpm/pnpm-package-script-executor.d.ts +22 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/pnpm/pnpm-package-script-executor.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/pnpm/pnpm-package-script-executor.js +90 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/pnpm/pnpm-package-script-executor.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/time/performance-monotonic-clock.d.ts +3 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/time/performance-monotonic-clock.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/time/performance-monotonic-clock.js +5 -0
- package/dist/capabilities/quality-gate-runner/adapters/outbound/time/performance-monotonic-clock.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/model/quality-gate-report.d.ts +18 -0
- package/dist/capabilities/quality-gate-runner/application/model/quality-gate-report.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/model/quality-gate-report.js +2 -0
- package/dist/capabilities/quality-gate-runner/application/model/quality-gate-report.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/model/quality-gate.d.ts +19 -0
- package/dist/capabilities/quality-gate-runner/application/model/quality-gate.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/model/quality-gate.js +2 -0
- package/dist/capabilities/quality-gate-runner/application/model/quality-gate.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/policies/evaluate-quality-gate-scripts.d.ts +4 -0
- package/dist/capabilities/quality-gate-runner/application/policies/evaluate-quality-gate-scripts.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/policies/evaluate-quality-gate-scripts.js +64 -0
- package/dist/capabilities/quality-gate-runner/application/policies/evaluate-quality-gate-scripts.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/policies/validate-quality-gate-graph.d.ts +6 -0
- package/dist/capabilities/quality-gate-runner/application/policies/validate-quality-gate-graph.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/policies/validate-quality-gate-graph.js +75 -0
- package/dist/capabilities/quality-gate-runner/application/policies/validate-quality-gate-graph.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/ports/monotonic-clock.d.ts +4 -0
- package/dist/capabilities/quality-gate-runner/application/ports/monotonic-clock.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/ports/monotonic-clock.js +2 -0
- package/dist/capabilities/quality-gate-runner/application/ports/monotonic-clock.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/ports/package-script-catalog-reader.d.ts +5 -0
- package/dist/capabilities/quality-gate-runner/application/ports/package-script-catalog-reader.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/ports/package-script-catalog-reader.js +2 -0
- package/dist/capabilities/quality-gate-runner/application/ports/package-script-catalog-reader.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/ports/package-script-executor.d.ts +20 -0
- package/dist/capabilities/quality-gate-runner/application/ports/package-script-executor.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/ports/package-script-executor.js +9 -0
- package/dist/capabilities/quality-gate-runner/application/ports/package-script-executor.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/rules.d.ts +12 -0
- package/dist/capabilities/quality-gate-runner/application/rules.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/rules.js +18 -0
- package/dist/capabilities/quality-gate-runner/application/rules.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/use-cases/analyze-quality-gate-runner.d.ts +9 -0
- package/dist/capabilities/quality-gate-runner/application/use-cases/analyze-quality-gate-runner.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/use-cases/analyze-quality-gate-runner.js +5 -0
- package/dist/capabilities/quality-gate-runner/application/use-cases/analyze-quality-gate-runner.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/use-cases/run-quality-gate-profile.d.ts +10 -0
- package/dist/capabilities/quality-gate-runner/application/use-cases/run-quality-gate-profile.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/application/use-cases/run-quality-gate-profile.js +138 -0
- package/dist/capabilities/quality-gate-runner/application/use-cases/run-quality-gate-profile.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/contract/config.d.ts +5 -0
- package/dist/capabilities/quality-gate-runner/contract/config.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/contract/config.js +89 -0
- package/dist/capabilities/quality-gate-runner/contract/config.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/gate-command.d.ts +10 -0
- package/dist/capabilities/quality-gate-runner/gate-command.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/gate-command.js +82 -0
- package/dist/capabilities/quality-gate-runner/gate-command.js.map +1 -0
- package/dist/capabilities/quality-gate-runner/module.d.ts +5 -0
- package/dist/capabilities/quality-gate-runner/module.d.ts.map +1 -0
- package/dist/capabilities/quality-gate-runner/module.js +49 -0
- package/dist/capabilities/quality-gate-runner/module.js.map +1 -0
- package/dist/capabilities/repository-agent-workflow/adapters/inbound/cli/report-renderer.d.ts +2 -0
- package/dist/capabilities/repository-agent-workflow/adapters/inbound/cli/report-renderer.d.ts.map +1 -1
- package/dist/capabilities/repository-agent-workflow/adapters/inbound/cli/report-renderer.js +32 -0
- package/dist/capabilities/repository-agent-workflow/adapters/inbound/cli/report-renderer.js.map +1 -1
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/filesystem/filesystem-effective-instructions-reader.d.ts +16 -0
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/filesystem/filesystem-effective-instructions-reader.d.ts.map +1 -0
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/filesystem/filesystem-effective-instructions-reader.js +213 -0
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/filesystem/filesystem-effective-instructions-reader.js.map +1 -0
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/git/git-repository-changes-reader.d.ts +9 -0
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/git/git-repository-changes-reader.d.ts.map +1 -1
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/git/git-repository-changes-reader.js +232 -62
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/git/git-repository-changes-reader.js.map +1 -1
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/process/process-execution.d.ts +1 -0
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/process/process-execution.d.ts.map +1 -1
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/process/process-execution.js +2 -1
- package/dist/capabilities/repository-agent-workflow/adapters/outbound/process/process-execution.js.map +1 -1
- package/dist/capabilities/repository-agent-workflow/application/model/changed-workflow.d.ts +26 -0
- package/dist/capabilities/repository-agent-workflow/application/model/changed-workflow.d.ts.map +1 -1
- package/dist/capabilities/repository-agent-workflow/application/model/effective-instructions.d.ts +61 -0
- package/dist/capabilities/repository-agent-workflow/application/model/effective-instructions.d.ts.map +1 -0
- package/dist/capabilities/repository-agent-workflow/application/model/effective-instructions.js +7 -0
- package/dist/capabilities/repository-agent-workflow/application/model/effective-instructions.js.map +1 -0
- package/dist/capabilities/repository-agent-workflow/application/ports/effective-instructions-reader.d.ts +15 -0
- package/dist/capabilities/repository-agent-workflow/application/ports/effective-instructions-reader.d.ts.map +1 -0
- package/dist/capabilities/repository-agent-workflow/application/ports/effective-instructions-reader.js +2 -0
- package/dist/capabilities/repository-agent-workflow/application/ports/effective-instructions-reader.js.map +1 -0
- package/dist/capabilities/repository-agent-workflow/application/use-cases/resolve-effective-instructions.d.ts +8 -0
- package/dist/capabilities/repository-agent-workflow/application/use-cases/resolve-effective-instructions.d.ts.map +1 -0
- package/dist/capabilities/repository-agent-workflow/application/use-cases/resolve-effective-instructions.js +128 -0
- package/dist/capabilities/repository-agent-workflow/application/use-cases/resolve-effective-instructions.js.map +1 -0
- package/dist/capabilities/repository-agent-workflow/application/use-cases/run-changed-agent-workflow.d.ts.map +1 -1
- package/dist/capabilities/repository-agent-workflow/application/use-cases/run-changed-agent-workflow.js +8 -0
- package/dist/capabilities/repository-agent-workflow/application/use-cases/run-changed-agent-workflow.js.map +1 -1
- package/dist/capabilities/repository-agent-workflow/instructions-command.d.ts +6 -0
- package/dist/capabilities/repository-agent-workflow/instructions-command.d.ts.map +1 -0
- package/dist/capabilities/repository-agent-workflow/instructions-command.js +26 -0
- package/dist/capabilities/repository-agent-workflow/instructions-command.js.map +1 -0
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +15 -8
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli.js +31 -8
- package/dist/cli.js.map +1 -1
- package/dist/composition/capability-modules.d.ts +13 -0
- package/dist/composition/capability-modules.d.ts.map +1 -0
- package/dist/composition/capability-modules.js +30 -0
- package/dist/composition/capability-modules.js.map +1 -0
- package/dist/composition/capability-registry.d.ts +2 -0
- package/dist/composition/capability-registry.d.ts.map +1 -1
- package/dist/composition/capability-registry.js +5 -25
- package/dist/composition/capability-registry.js.map +1 -1
- package/dist/composition/rule-registry.d.ts +4 -7
- package/dist/composition/rule-registry.d.ts.map +1 -1
- package/dist/composition/rule-registry.js +17 -25
- package/dist/composition/rule-registry.js.map +1 -1
- package/dist/filesystem-path-safety.d.ts +6 -0
- package/dist/filesystem-path-safety.d.ts.map +1 -1
- package/dist/filesystem-path-safety.js +76 -21
- package/dist/filesystem-path-safety.js.map +1 -1
- package/dist/legacy-docs-cli-deprecation.d.ts +10 -0
- package/dist/legacy-docs-cli-deprecation.d.ts.map +1 -0
- package/dist/legacy-docs-cli-deprecation.js +36 -0
- package/dist/legacy-docs-cli-deprecation.js.map +1 -0
- package/dist/process-execution/node-process-runner.d.ts +6 -1
- package/dist/process-execution/node-process-runner.d.ts.map +1 -1
- package/dist/process-execution/node-process-runner.js +29 -6
- package/dist/process-execution/node-process-runner.js.map +1 -1
- package/dist/quality-gate-cli-command.d.ts +3 -0
- package/dist/quality-gate-cli-command.d.ts.map +1 -0
- package/dist/quality-gate-cli-command.js +37 -0
- package/dist/quality-gate-cli-command.js.map +1 -0
- package/dist/schema-ids.d.ts +1 -1
- package/dist/schema-ids.d.ts.map +1 -1
- package/dist/schema-ids.js +2 -0
- package/dist/schema-ids.js.map +1 -1
- package/package.json +3 -1
- package/schemas/foundation-config/v1.schema.json +10 -0
- package/schemas/quality-gate-run-report/v1.schema.json +47 -0
- package/schemas/quality-gate-runner/v1.schema.json +74 -0
package/README.md
CHANGED
|
@@ -34,70 +34,45 @@ const catalog = await buildDocumentationCatalog({
|
|
|
34
34
|
});
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
results sort by ID and then repository path.
|
|
41
|
-
|
|
42
|
-
Node/pnpm consumers expose the short agent-facing commands through their own
|
|
43
|
-
repository manifest; Foundation keeps the underlying CLI package-manager
|
|
44
|
-
neutral:
|
|
37
|
+
The operator and agent-facing documentation workflow is owned by
|
|
38
|
+
`@agent-teams/docs-protocol`. New and migrated consumers expose its commands
|
|
39
|
+
through their repository manifest:
|
|
45
40
|
|
|
46
41
|
```json
|
|
47
42
|
{
|
|
48
43
|
"scripts": {
|
|
49
|
-
"docs:
|
|
50
|
-
"docs:
|
|
51
|
-
"docs:
|
|
44
|
+
"docs:info": "agent-teams-docs info",
|
|
45
|
+
"docs:find": "agent-teams-docs find",
|
|
46
|
+
"docs:new": "agent-teams-docs new",
|
|
47
|
+
"docs:doctor": "agent-teams-docs doctor",
|
|
48
|
+
"docs:recover": "agent-teams-docs recover",
|
|
49
|
+
"docs:check": "agent-teams-docs check",
|
|
52
50
|
"check": "agent-teams-foundation repo check"
|
|
53
51
|
}
|
|
54
52
|
}
|
|
55
53
|
```
|
|
56
54
|
|
|
57
55
|
```bash
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
The default profile is
|
|
63
|
-
`architecture/foundation/document-authoring.yaml`; `--profile` selects another
|
|
64
|
-
repository-relative profile. Zero matches is success. A partial catalog retains
|
|
65
|
-
valid matches and structured diagnostics while returning exit code `1`.
|
|
66
|
-
|
|
67
|
-
Create a governed document with an explicit ID, owner, and summary. Foundation
|
|
68
|
-
does not infer `--owner` or `--summary` from the document type, schema, path, or
|
|
69
|
-
current user:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
agent-teams-foundation docs new --type adr --id ADR-0083 \
|
|
56
|
+
agent-teams-docs find "tenant isolation" --consumer /repo
|
|
57
|
+
agent-teams-docs new --type adr --id ADR-0083 \
|
|
73
58
|
--title "Tenant isolation" --owner architecture/tooling \
|
|
74
59
|
--summary "Defines the tenant-isolation boundary and its verification evidence." \
|
|
75
60
|
--dry-run --consumer /repo
|
|
76
|
-
agent-teams-
|
|
61
|
+
agent-teams-docs new --type adr --id ADR-0083 \
|
|
77
62
|
--title "Tenant isolation" --owner architecture/tooling \
|
|
78
63
|
--summary "Defines the tenant-isolation boundary and its verification evidence." \
|
|
79
|
-
--consumer /repo
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
`--dry-run` compiles a non-reserving preview and performs no repository
|
|
83
|
-
mutation. A successful create reports the document path and either the exact
|
|
84
|
-
consumer-authorized index path and Markdown link to add, or the standard
|
|
85
|
-
repository check as the next step. Use the read-only doctor before operating on
|
|
86
|
-
uncertain transaction state, and run recovery only when it reports an automatic
|
|
87
|
-
document recovery route:
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
agent-teams-foundation docs doctor --consumer /repo
|
|
91
|
-
agent-teams-foundation docs recover --consumer /repo
|
|
92
|
-
agent-teams-foundation check --consumer /repo
|
|
64
|
+
--apply --consumer /repo
|
|
65
|
+
agent-teams-docs check --consumer /repo
|
|
93
66
|
```
|
|
94
67
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
68
|
+
Foundation's legacy `docs` CLI namespace remains executable only as a frozen
|
|
69
|
+
compatibility surface. Human invocations emit the stable diagnostic code
|
|
70
|
+
`FOUNDATION_DOCS_CLI_DEPRECATED`; JSON invocations retain their published
|
|
71
|
+
stdout, stderr, envelope, and exit-code contract. The legacy namespace must not
|
|
72
|
+
receive new commands, options, orchestration behavior, or Docs Protocol imports.
|
|
73
|
+
Removal requires the evidence defined by
|
|
74
|
+
[ADR-0033](../../docs/decisions/0033-freeze-legacy-foundation-docs-cli.md).
|
|
75
|
+
The canonical current workflow and JSON contract are in the
|
|
101
76
|
[document authoring protocol](../../docs/architecture/document-authoring-protocol.md#canonical-agent-and-operator-cli).
|
|
102
77
|
|
|
103
78
|
Consumer CI should run both policy gates:
|
|
@@ -135,6 +110,17 @@ Repositories may also declare `repository.agent-workflow` and expose
|
|
|
135
110
|
`agent-teams-foundation agent-workflow changed`. Foundation then discovers the
|
|
136
111
|
current Git delta and invokes the consumer's configured pnpm scripts. This local
|
|
137
112
|
preflight is portable across agents and never replaces the complete CI gate.
|
|
113
|
+
`agent-teams-foundation agent-workflow instructions <repository-file>` reports
|
|
114
|
+
the applicable instruction scopes, precedence, shadowing, byte budget, and
|
|
115
|
+
digests without printing or injecting instruction content.
|
|
116
|
+
|
|
117
|
+
Repositories may independently declare `quality.gate-runner` and run
|
|
118
|
+
`agent-teams-foundation gate run <profile>`. A profile is a validated DAG of
|
|
119
|
+
existing root package scripts with bounded concurrency, optional task deadlines,
|
|
120
|
+
and explicit `needs` versus `after` semantics. Configuration cannot supply
|
|
121
|
+
commands or plugins, static `check` never executes scripts, and installation or
|
|
122
|
+
upgrade never activates a profile. See the
|
|
123
|
+
[quality gate runner reference](../../docs/reference/quality-gate-runner.md).
|
|
138
124
|
|
|
139
125
|
The root file is `foundation.config.yaml`. Use
|
|
140
126
|
`agent-teams-foundation schema foundation-config/v1` for its canonical schema
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-renderer.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/inbound/cli/report-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AAE9F,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAe/E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function renderQualityGateRunReport(report) {
|
|
2
|
+
const lines = [
|
|
3
|
+
`Quality gate profile: ${report.profileId}`,
|
|
4
|
+
`Outcome: ${report.outcome}`,
|
|
5
|
+
`Duration: ${report.durationMs}ms`
|
|
6
|
+
];
|
|
7
|
+
for (const task of report.tasks) {
|
|
8
|
+
const exit = task.exitCode === null ? "" : ` exit=${task.exitCode}`;
|
|
9
|
+
const signal = task.signal === null ? "" : ` signal=${task.signal}`;
|
|
10
|
+
lines.push(`- ${task.id}: ${task.outcome} (${task.durationMs}ms)${exit}${signal}`);
|
|
11
|
+
if (task.failureTail.length > 0) {
|
|
12
|
+
lines.push(task.failureTail);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return `${lines.join("\n")}\n`;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=report-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-renderer.js","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/inbound/cli/report-renderer.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,0BAA0B,CAAC,MAA4B;IACrE,MAAM,KAAK,GAAG;QACZ,yBAAyB,MAAM,CAAC,SAAS,EAAE;QAC3C,YAAY,MAAM,CAAC,OAAO,EAAE;QAC5B,aAAa,MAAM,CAAC,UAAU,IAAI;KACnC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;QACnF,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PackageScriptCatalogReader } from "../../../application/ports/package-script-catalog-reader.js";
|
|
2
|
+
export declare class FilesystemPackageScriptCatalogReader implements PackageScriptCatalogReader {
|
|
3
|
+
read(consumerRoot: string, signal?: AbortSignal): Promise<Readonly<{
|
|
4
|
+
scripts: Readonly<Record<string, string>>;
|
|
5
|
+
}>>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=filesystem-package-script-catalog-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-package-script-catalog-reader.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/outbound/filesystem/filesystem-package-script-catalog-reader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AAiB9G,qBAAa,oCAAqC,YAAW,0BAA0B;IAC/E,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW;;QAiCpD;CACF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { assertNotCancelled } from "../../../../../cancellation.js";
|
|
3
|
+
import { CapabilityInputError } from "../../../../../capability-runtime.js";
|
|
4
|
+
import { readContainedRegularFile } from "../../../../../filesystem-path-safety.js";
|
|
5
|
+
import { parseStrictJson } from "../../../../../strict-json.js";
|
|
6
|
+
const MAX_PACKAGE_JSON_BYTES = 1024 * 1024;
|
|
7
|
+
function inputError(message) {
|
|
8
|
+
throw new CapabilityInputError({
|
|
9
|
+
code: "QUALITY_GATE_RUNNER_PACKAGE_INVALID",
|
|
10
|
+
message,
|
|
11
|
+
phase: "quality-gate-runner-package-catalog",
|
|
12
|
+
retryable: false
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
export class FilesystemPackageScriptCatalogReader {
|
|
19
|
+
async read(consumerRoot, signal) {
|
|
20
|
+
assertNotCancelled(signal);
|
|
21
|
+
let input;
|
|
22
|
+
try {
|
|
23
|
+
const source = await readContainedRegularFile({
|
|
24
|
+
root: consumerRoot,
|
|
25
|
+
candidate: join(consumerRoot, "package.json"),
|
|
26
|
+
maxBytes: MAX_PACKAGE_JSON_BYTES
|
|
27
|
+
});
|
|
28
|
+
input = parseStrictJson(source.toString("utf8"));
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
inputError(`The consumer root package.json must be a stable strict JSON file: ${error instanceof Error ? error.message : "unavailable"}`);
|
|
32
|
+
}
|
|
33
|
+
assertNotCancelled(signal);
|
|
34
|
+
if (!isRecord(input)) {
|
|
35
|
+
inputError("The consumer root package.json must be an object.");
|
|
36
|
+
}
|
|
37
|
+
const scriptsInput = input["scripts"];
|
|
38
|
+
if (!isRecord(scriptsInput)) {
|
|
39
|
+
inputError("The consumer root package.json must declare a scripts object.");
|
|
40
|
+
}
|
|
41
|
+
const scripts = Object.create(null);
|
|
42
|
+
for (const [id, command] of Object.entries(scriptsInput)) {
|
|
43
|
+
if (typeof command !== "string") {
|
|
44
|
+
inputError(`package.json script ${id} must be a string.`);
|
|
45
|
+
}
|
|
46
|
+
scripts[id] = command;
|
|
47
|
+
}
|
|
48
|
+
return Object.freeze({ scripts: Object.freeze(scripts) });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=filesystem-package-script-catalog-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-package-script-catalog-reader.js","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/outbound/filesystem/filesystem-package-script-catalog-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,IAAI,oBAAoB,CAAC;QAC7B,IAAI,EAAE,qCAAqC;QAC3C,OAAO;QACP,KAAK,EAAE,qCAAqC;QAC5C,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,OAAO,oCAAoC;IAC/C,KAAK,CAAC,IAAI,CAAC,YAAoB,EAAE,MAAoB;QACnD,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC;gBAC5C,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC;gBAC7C,QAAQ,EAAE,sBAAsB;aACjC,CAAC,CAAC;YACH,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CACR,qEACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAC3C,EAAE,CACH,CAAC;QACJ,CAAC;QACD,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,UAAU,CAAC,mDAAmD,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,UAAU,CAAC,+DAA+D,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,OAAO,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA2B,CAAC;QACtF,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,UAAU,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type PackageScriptExecutor } from "../../../application/ports/package-script-executor.js";
|
|
2
|
+
export interface QualityGatePnpmEnvironment {
|
|
3
|
+
readonly npmExecPath?: string;
|
|
4
|
+
readonly pnpmHome?: string;
|
|
5
|
+
readonly pathValue?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class PnpmQualityGateScriptExecutor implements PackageScriptExecutor {
|
|
8
|
+
private readonly environment;
|
|
9
|
+
constructor(environment: QualityGatePnpmEnvironment);
|
|
10
|
+
run(input: {
|
|
11
|
+
readonly consumerRoot: string;
|
|
12
|
+
readonly scriptId: string;
|
|
13
|
+
readonly timeoutMs?: number;
|
|
14
|
+
readonly signal?: AbortSignal;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
signal: NodeJS.Signals | null;
|
|
17
|
+
stdout: string;
|
|
18
|
+
stderr: string;
|
|
19
|
+
exitCode: number | null;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=pnpm-package-script-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm-package-script-executor.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/outbound/pnpm/pnpm-package-script-executor.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,uDAAuD,CAAC;AAE/D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAyED,qBAAa,6BAA8B,YAAW,qBAAqB;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAxC,YAA6B,WAAW,EAAE,0BAA0B,EAAI;IAElE,GAAG,CAAC,KAAK,EAAE;QACf,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;KAC/B;;;;;OAwBA;CACF"}
|
package/dist/capabilities/quality-gate-runner/adapters/outbound/pnpm/pnpm-package-script-executor.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { lstat, realpath } from "node:fs/promises";
|
|
2
|
+
import { delimiter, isAbsolute, resolve } from "node:path";
|
|
3
|
+
import { FoundationError } from "../../../../../errors.js";
|
|
4
|
+
import { executeManagedProcess } from "../../../../../process-execution/node-process-runner.js";
|
|
5
|
+
import { PackageScriptTimeoutError } from "../../../application/ports/package-script-executor.js";
|
|
6
|
+
async function isRegularFile(path) {
|
|
7
|
+
const metadata = await lstat(path).catch(() => null);
|
|
8
|
+
return metadata !== null && metadata.isFile();
|
|
9
|
+
}
|
|
10
|
+
async function nodeEntrypoint(candidates) {
|
|
11
|
+
for (const candidate of candidates) {
|
|
12
|
+
if (candidate !== undefined && isAbsolute(candidate)) {
|
|
13
|
+
const canonical = await realpath(candidate).catch(() => null);
|
|
14
|
+
if (canonical !== null &&
|
|
15
|
+
/\.(?:c|m)?js$/u.test(canonical) &&
|
|
16
|
+
await isRegularFile(canonical)) {
|
|
17
|
+
return canonical;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
async function resolvePnpmInvocation(environment) {
|
|
24
|
+
const homeEntrypoint = environment.pnpmHome === undefined
|
|
25
|
+
? undefined
|
|
26
|
+
: resolve(environment.pnpmHome, "..", "pnpm", "bin", "pnpm.cjs");
|
|
27
|
+
const pathEntrypoints = environment.pathValue === undefined
|
|
28
|
+
? []
|
|
29
|
+
: environment.pathValue.split(delimiter)
|
|
30
|
+
.filter((path) => path.length > 0)
|
|
31
|
+
.map((path) => resolve(path, process.platform === "win32" ? "pnpm.exe" : "pnpm"));
|
|
32
|
+
const entrypoint = await nodeEntrypoint([
|
|
33
|
+
environment.npmExecPath,
|
|
34
|
+
homeEntrypoint,
|
|
35
|
+
...pathEntrypoints
|
|
36
|
+
]);
|
|
37
|
+
if (entrypoint !== undefined) {
|
|
38
|
+
return { command: process.execPath, argsPrefix: [entrypoint] };
|
|
39
|
+
}
|
|
40
|
+
if (process.platform !== "win32") {
|
|
41
|
+
return { command: "pnpm", argsPrefix: [] };
|
|
42
|
+
}
|
|
43
|
+
const candidates = [
|
|
44
|
+
...(environment.pnpmHome === undefined
|
|
45
|
+
? []
|
|
46
|
+
: [resolve(environment.pnpmHome, "pnpm.exe")]),
|
|
47
|
+
...(environment.pathValue === undefined
|
|
48
|
+
? []
|
|
49
|
+
: environment.pathValue.split(delimiter)
|
|
50
|
+
.filter((path) => path.length > 0)
|
|
51
|
+
.map((path) => resolve(path, "pnpm.exe")))
|
|
52
|
+
];
|
|
53
|
+
for (const candidate of candidates) {
|
|
54
|
+
if (await isRegularFile(candidate)) {
|
|
55
|
+
return { command: candidate, argsPrefix: [] };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
throw new FoundationError("PROCESS_FAILED", "Unable to resolve a shell-free pnpm entrypoint on Windows.");
|
|
59
|
+
}
|
|
60
|
+
export class PnpmQualityGateScriptExecutor {
|
|
61
|
+
environment;
|
|
62
|
+
constructor(environment) {
|
|
63
|
+
this.environment = environment;
|
|
64
|
+
}
|
|
65
|
+
async run(input) {
|
|
66
|
+
const invocation = await resolvePnpmInvocation(this.environment);
|
|
67
|
+
try {
|
|
68
|
+
const result = await executeManagedProcess({
|
|
69
|
+
command: invocation.command,
|
|
70
|
+
args: [...invocation.argsPrefix, "run", input.scriptId],
|
|
71
|
+
cwd: input.consumerRoot,
|
|
72
|
+
...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),
|
|
73
|
+
...(input.signal === undefined ? {} : { signal: input.signal })
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
...result,
|
|
77
|
+
exitCode: result.signal === null ? result.exitCode : null
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (input.timeoutMs !== undefined &&
|
|
82
|
+
error instanceof FoundationError &&
|
|
83
|
+
error.message.endsWith(`timed out after ${input.timeoutMs}ms.`)) {
|
|
84
|
+
throw new PackageScriptTimeoutError(input.timeoutMs, { cause: error });
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=pnpm-package-script-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm-package-script-executor.js","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/outbound/pnpm/pnpm-package-script-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-monotonic-clock.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/outbound/time/performance-monotonic-clock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAEpF,eAAO,MAAM,yBAAyB,EAAE,cAEtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-monotonic-clock.js","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/outbound/time/performance-monotonic-clock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,MAAM,CAAC,MAAM,yBAAyB,GAAmB,MAAM,CAAC,MAAM,CAAC;IACrE,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;CAC/B,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type QualityGateTaskOutcome = "passed" | "failed" | "timed-out" | "blocked" | "cancelled";
|
|
2
|
+
export interface QualityGateTaskReport {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly outcome: QualityGateTaskOutcome;
|
|
5
|
+
readonly durationMs: number;
|
|
6
|
+
readonly exitCode: number | null;
|
|
7
|
+
readonly signal: NodeJS.Signals | null;
|
|
8
|
+
readonly failureTail: string;
|
|
9
|
+
}
|
|
10
|
+
export interface QualityGateRunReport {
|
|
11
|
+
readonly reportSchemaVersion: 1;
|
|
12
|
+
readonly profileId: string;
|
|
13
|
+
readonly outcome: "passed" | "failed" | "cancelled";
|
|
14
|
+
readonly durationMs: number;
|
|
15
|
+
readonly tasks: readonly QualityGateTaskReport[];
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=quality-gate-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-gate-report.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/model/quality-gate-report.ts"],"names":[],"mappings":"AAAA,KAAK,sBAAsB,GACvB,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAClD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-gate-report.js","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/model/quality-gate-report.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface QualityGateTask {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly needs: readonly string[];
|
|
4
|
+
readonly after: readonly string[];
|
|
5
|
+
readonly timeoutMs?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface QualityGateProfile {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly concurrency: number;
|
|
10
|
+
readonly tasks: readonly QualityGateTask[];
|
|
11
|
+
}
|
|
12
|
+
export interface QualityGatePolicy {
|
|
13
|
+
readonly packageManager: "pnpm";
|
|
14
|
+
readonly profiles: readonly QualityGateProfile[];
|
|
15
|
+
}
|
|
16
|
+
export interface PackageScriptCatalog {
|
|
17
|
+
readonly scripts: Readonly<Record<string, string>>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=quality-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-gate.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/model/quality-gate.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-gate.js","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/model/quality-gate.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FoundationDiagnostic } from "../../../../check-contract.js";
|
|
2
|
+
import type { PackageScriptCatalog, QualityGatePolicy } from "../model/quality-gate.js";
|
|
3
|
+
export declare function evaluateQualityGateScripts(policy: QualityGatePolicy, catalog: PackageScriptCatalog): readonly FoundationDiagnostic[];
|
|
4
|
+
//# sourceMappingURL=evaluate-quality-gate-scripts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate-quality-gate-scripts.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/policies/evaluate-quality-gate-scripts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AA8DlC,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,oBAAoB,GAC5B,SAAS,oBAAoB,EAAE,CAqBjC"}
|
package/dist/capabilities/quality-gate-runner/application/policies/evaluate-quality-gate-scripts.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const PACKAGE_SCRIPT_REFERENCE = /(?:^|[;&|()]|\s)(?:pnpm|npm)\s+(?:run(?:-script)?\s+)?([A-Za-z0-9][A-Za-z0-9:._-]*)/gu;
|
|
2
|
+
function scriptReferences(command) {
|
|
3
|
+
const references = [];
|
|
4
|
+
for (const match of command.matchAll(PACKAGE_SCRIPT_REFERENCE)) {
|
|
5
|
+
const script = match[1];
|
|
6
|
+
if (script !== undefined) {
|
|
7
|
+
references.push(script);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return Object.freeze(references);
|
|
11
|
+
}
|
|
12
|
+
function reachesRunner(scriptId, catalog, visiting = new Set()) {
|
|
13
|
+
if (visiting.has(scriptId)) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const command = catalog.scripts[scriptId];
|
|
17
|
+
if (command === undefined) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if ((command.includes("agent-teams-foundation") ||
|
|
21
|
+
command.includes("engineering-foundation/dist/cli.js")) &&
|
|
22
|
+
(command.includes("gate run") || command.includes("gate\trun"))) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
const next = new Set(visiting);
|
|
26
|
+
next.add(scriptId);
|
|
27
|
+
return scriptReferences(command).some((reference) => reachesRunner(reference, catalog, next));
|
|
28
|
+
}
|
|
29
|
+
function diagnostic(input) {
|
|
30
|
+
return Object.freeze({
|
|
31
|
+
ruleId: input.ruleId,
|
|
32
|
+
severity: "error",
|
|
33
|
+
subject: input.scriptId,
|
|
34
|
+
message: input.message,
|
|
35
|
+
location: { path: "package.json" },
|
|
36
|
+
relatedLocations: [],
|
|
37
|
+
evidence: [{ kind: "script-id", value: input.scriptId }],
|
|
38
|
+
remediation: input.ruleId.endsWith("missing")
|
|
39
|
+
? "Add the package script or remove it from every quality gate profile."
|
|
40
|
+
: "Remove the direct or indirect quality gate runner invocation from this script.",
|
|
41
|
+
requiresArchitectureReview: false
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export function evaluateQualityGateScripts(policy, catalog) {
|
|
45
|
+
const scriptIds = [...new Set(policy.profiles.flatMap(({ tasks }) => tasks.map(({ id }) => id)))].toSorted();
|
|
46
|
+
return Object.freeze(scriptIds.flatMap((scriptId) => {
|
|
47
|
+
if (catalog.scripts[scriptId] === undefined) {
|
|
48
|
+
return [diagnostic({
|
|
49
|
+
ruleId: "quality.gate-runner.script-missing",
|
|
50
|
+
scriptId,
|
|
51
|
+
message: `Quality gate task ${scriptId} is not an existing root package.json script.`
|
|
52
|
+
})];
|
|
53
|
+
}
|
|
54
|
+
if (reachesRunner(scriptId, catalog)) {
|
|
55
|
+
return [diagnostic({
|
|
56
|
+
ruleId: "quality.gate-runner.script-recursive",
|
|
57
|
+
scriptId,
|
|
58
|
+
message: `Quality gate task ${scriptId} directly or indirectly invokes the gate runner.`
|
|
59
|
+
})];
|
|
60
|
+
}
|
|
61
|
+
return [];
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=evaluate-quality-gate-scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate-quality-gate-scripts.js","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/policies/evaluate-quality-gate-scripts.ts"],"names":[],"mappings":"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"}
|
package/dist/capabilities/quality-gate-runner/application/policies/validate-quality-gate-graph.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QualityGatePolicy } from "../model/quality-gate.js";
|
|
2
|
+
export declare class QualityGateGraphError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function validateQualityGatePolicy(policy: QualityGatePolicy): void;
|
|
6
|
+
//# sourceMappingURL=validate-quality-gate-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-quality-gate-graph.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/policies/validate-quality-gate-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,0BAA0B,CAAC;AAElC,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AA+CD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAqCzE"}
|
package/dist/capabilities/quality-gate-runner/application/policies/validate-quality-gate-graph.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export class QualityGateGraphError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "QualityGateGraphError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
function duplicate(values) {
|
|
8
|
+
const observed = new Set();
|
|
9
|
+
for (const value of values) {
|
|
10
|
+
if (observed.has(value)) {
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
observed.add(value);
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
function dependencies(task) {
|
|
18
|
+
return [...task.needs, ...task.after];
|
|
19
|
+
}
|
|
20
|
+
function assertAcyclic(profile) {
|
|
21
|
+
const tasks = new Map(profile.tasks.map((task) => [task.id, task]));
|
|
22
|
+
const visiting = new Set();
|
|
23
|
+
const visited = new Set();
|
|
24
|
+
const visit = (id, path) => {
|
|
25
|
+
if (visiting.has(id)) {
|
|
26
|
+
const cycleStart = path.indexOf(id);
|
|
27
|
+
const cycle = [...path.slice(cycleStart), id];
|
|
28
|
+
throw new QualityGateGraphError(`Profile ${profile.id} contains a dependency cycle: ${cycle.join(" -> ")}.`);
|
|
29
|
+
}
|
|
30
|
+
if (visited.has(id)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
visiting.add(id);
|
|
34
|
+
const task = tasks.get(id);
|
|
35
|
+
for (const dependency of task === undefined ? [] : dependencies(task)) {
|
|
36
|
+
visit(dependency, [...path, id]);
|
|
37
|
+
}
|
|
38
|
+
visiting.delete(id);
|
|
39
|
+
visited.add(id);
|
|
40
|
+
};
|
|
41
|
+
for (const task of profile.tasks) {
|
|
42
|
+
visit(task.id, []);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function validateQualityGatePolicy(policy) {
|
|
46
|
+
const duplicateProfile = duplicate(policy.profiles.map(({ id }) => id));
|
|
47
|
+
if (duplicateProfile !== undefined) {
|
|
48
|
+
throw new QualityGateGraphError(`Duplicate profile ID: ${duplicateProfile}.`);
|
|
49
|
+
}
|
|
50
|
+
for (const profile of policy.profiles) {
|
|
51
|
+
const taskIds = profile.tasks.map(({ id }) => id);
|
|
52
|
+
const duplicateTask = duplicate(taskIds);
|
|
53
|
+
if (duplicateTask !== undefined) {
|
|
54
|
+
throw new QualityGateGraphError(`Profile ${profile.id} contains duplicate task ID: ${duplicateTask}.`);
|
|
55
|
+
}
|
|
56
|
+
const known = new Set(taskIds);
|
|
57
|
+
for (const task of profile.tasks) {
|
|
58
|
+
for (const dependency of dependencies(task)) {
|
|
59
|
+
if (dependency === task.id) {
|
|
60
|
+
throw new QualityGateGraphError(`Profile ${profile.id} task ${task.id} cannot depend on itself.`);
|
|
61
|
+
}
|
|
62
|
+
if (!known.has(dependency)) {
|
|
63
|
+
throw new QualityGateGraphError(`Profile ${profile.id} task ${task.id} references unknown task ${dependency}.`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const needs = new Set(task.needs);
|
|
67
|
+
const overlap = task.after.find((dependency) => needs.has(dependency));
|
|
68
|
+
if (overlap !== undefined) {
|
|
69
|
+
throw new QualityGateGraphError(`Profile ${profile.id} task ${task.id} declares ${overlap} in both needs and after.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
assertAcyclic(profile);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=validate-quality-gate-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-quality-gate-graph.js","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/policies/validate-quality-gate-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monotonic-clock.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/ports/monotonic-clock.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monotonic-clock.js","sourceRoot":"","sources":["../../../../../src/capabilities/quality-gate-runner/application/ports/monotonic-clock.ts"],"names":[],"mappings":""}
|