@gfdelarue/testkit 0.3.7 → 0.4.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.
- package/README.md +125 -0
- package/dist/app/bugs/areas.d.ts +38 -0
- package/dist/app/bugs/areas.js +1 -0
- package/dist/app/bugs/assessment.d.ts +9 -0
- package/dist/app/bugs/assessment.js +1 -0
- package/dist/app/bugs/categories.d.ts +41 -0
- package/dist/app/bugs/categories.js +1 -0
- package/dist/app/bugs/ci-report.d.ts +21 -0
- package/dist/app/bugs/ci-report.js +2 -0
- package/dist/app/bugs/ci-summary.d.ts +13 -0
- package/dist/app/bugs/ci-summary.js +5 -0
- package/dist/app/bugs/draft.d.ts +70 -0
- package/dist/app/bugs/draft.js +4 -0
- package/dist/app/bugs/facts.d.ts +48 -0
- package/dist/app/bugs/facts.js +2 -0
- package/dist/app/bugs/file.d.ts +45 -0
- package/dist/app/bugs/file.js +1 -0
- package/dist/app/bugs/gate.d.ts +22 -0
- package/dist/app/bugs/gate.js +1 -0
- package/dist/app/bugs/guide.d.ts +20 -0
- package/dist/app/bugs/guide.js +8 -0
- package/dist/app/bugs/issue.d.ts +18 -0
- package/dist/app/bugs/issue.js +6 -0
- package/dist/app/bugs/known-failures.d.ts +49 -0
- package/dist/app/bugs/known-failures.js +1 -0
- package/dist/app/bugs/record.d.ts +14 -0
- package/dist/app/bugs/record.js +2 -0
- package/dist/app/bugs/run-reading.d.ts +51 -0
- package/dist/app/bugs/run-reading.js +1 -0
- package/dist/app/bugs/store.d.ts +34 -0
- package/dist/app/bugs/store.js +2 -0
- package/dist/app/campaigns/brief.d.ts +7 -0
- package/dist/app/campaigns/brief.js +10 -0
- package/dist/app/campaigns/campaign.d.ts +14 -0
- package/dist/app/campaigns/campaign.js +1 -0
- package/dist/app/campaigns/index.d.ts +38 -0
- package/dist/app/campaigns/index.js +2 -0
- package/dist/app/campaigns/store.d.ts +5 -0
- package/dist/app/campaigns/store.js +1 -0
- package/dist/app/campaigns/summary.d.ts +13 -0
- package/dist/app/campaigns/summary.js +8 -0
- package/dist/app/run/engine-execution.d.ts +1 -0
- package/dist/app/run/engine-execution.js +1 -1
- package/dist/app/run/failure-details.d.ts +1 -0
- package/dist/app/run/failure-details.js +1 -1
- package/dist/app/tracker/index.d.ts +8 -0
- package/dist/app/tracker/index.js +1 -0
- package/dist/app/tracker/remote.d.ts +13 -0
- package/dist/app/tracker/remote.js +1 -0
- package/dist/app/tracker/token.d.ts +7 -0
- package/dist/app/tracker/token.js +5 -0
- package/dist/cli/command-catalog.d.ts +21 -122
- package/dist/cli/command-catalog.js +1 -1
- package/dist/cli/command-registry.d.ts +1 -0
- package/dist/cli/command-registry.js +1 -1
- package/dist/cli/commands/bug/file.d.ts +16 -0
- package/dist/cli/commands/bug/file.js +2 -0
- package/dist/cli/commands/bug/guide.d.ts +5 -0
- package/dist/cli/commands/bug/guide.js +1 -0
- package/dist/cli/commands/bug/record.d.ts +9 -0
- package/dist/cli/commands/bug/record.js +2 -0
- package/dist/cli/commands/campaign/finish.d.ts +10 -0
- package/dist/cli/commands/campaign/finish.js +1 -0
- package/dist/cli/commands/campaign/start.d.ts +7 -0
- package/dist/cli/commands/campaign/start.js +1 -0
- package/dist/cli/commands/campaign/status.d.ts +13 -0
- package/dist/cli/commands/campaign/status.js +2 -0
- package/dist/cli/commands/ci/report.d.ts +15 -0
- package/dist/cli/commands/ci/report.js +2 -0
- package/dist/cli/commands/run.d.ts +1 -1
- package/dist/cli/commands/run.js +2 -1
- package/dist/cli/entrypoint.js +1 -1
- package/dist/cli/framework/execute.d.ts +1 -0
- package/dist/cli/framework/execute.js +6 -6
- package/dist/cli/index.js +1 -1
- package/dist/cli/renderers/bug/text.d.ts +8 -0
- package/dist/cli/renderers/bug/text.js +1 -0
- package/dist/cli/renderers/campaign/text.d.ts +2 -0
- package/dist/cli/renderers/campaign/text.js +1 -0
- package/dist/cli/renderers/ci/text.d.ts +2 -0
- package/dist/cli/renderers/ci/text.js +1 -0
- package/dist/cli/version-drift.js +7 -7
- package/dist/config/authoring/index.d.ts +10 -5
- package/dist/config/loader/bugs.d.ts +15 -0
- package/dist/config/loader/bugs.js +1 -0
- package/dist/config/loader/index.d.ts +0 -1
- package/dist/config/loader/index.js +1 -1
- package/dist/engines/adapters/execution.d.ts +4 -0
- package/dist/engines/adapters/execution.js +1 -1
- package/dist/engines/k6/adapter/executor.js +1 -1
- package/dist/engines/k6/runtime/checks.js +1 -1
- package/dist/engines/k6/runtime/http-assertions.d.ts +2 -2
- package/dist/engines/k6/runtime/http-assertions.js +1 -1
- package/dist/engines/k6/runtime/types.d.ts +2 -0
- package/dist/engines/node-vitest/adapter/evidence.js +2 -2
- package/dist/engines/node-vitest/adapter/failure-details.d.ts +1 -0
- package/dist/engines/node-vitest/adapter/failure-details.js +2 -2
- package/dist/engines/playwright/adapter/adapter.js +1 -1
- package/dist/engines/playwright/adapter/attachments.d.ts +1 -0
- package/dist/engines/playwright/adapter/config.js +3 -3
- package/dist/engines/playwright/adapter/evidence.js +1 -1
- package/dist/engines/playwright/adapter/reporter.js +1 -1
- package/dist/evidence/bundles.d.ts +2 -3
- package/dist/evidence/bundles.js +1 -1
- package/dist/evidence/contracts.d.ts +0 -8
- package/dist/evidence/index.d.ts +1 -1
- package/dist/evidence/index.js +1 -1
- package/dist/kernel/redaction.d.ts +1 -0
- package/dist/kernel/redaction.js +1 -1
- package/dist/process/execa-bundle.json +1 -1
- package/dist/process/files/json-file.d.ts +1 -0
- package/dist/process/files/json-file.js +1 -1
- package/dist/repo/history.d.ts +17 -0
- package/dist/repo/history.js +4 -0
- package/dist/repo/tree-listing.d.ts +10 -0
- package/dist/repo/tree-listing.js +1 -0
- package/dist/tracker/gitea.d.ts +14 -0
- package/dist/tracker/gitea.js +1 -0
- package/dist/tracker/github.d.ts +14 -0
- package/dist/tracker/github.js +1 -0
- package/dist/tracker/http.d.ts +33 -0
- package/dist/tracker/http.js +1 -0
- package/dist/tracker/index.d.ts +4 -0
- package/dist/tracker/index.js +1 -0
- package/dist/tracker/redaction.d.ts +4 -0
- package/dist/tracker/redaction.js +2 -0
- package/dist/tracker/requests.d.ts +17 -0
- package/dist/tracker/requests.js +1 -0
- package/dist/tracker/responses.d.ts +24 -0
- package/dist/tracker/responses.js +1 -0
- package/dist/tracker/types.d.ts +51 -0
- package/docs/bug-records.md +303 -0
- package/package.json +4 -10
- package/testkit-config-schema.md +50 -23
- package/dist/app/cloud/campaigns.d.ts +0 -6
- package/dist/app/cloud/campaigns.js +0 -1
- package/dist/app/cloud/control-actions.d.ts +0 -12
- package/dist/app/cloud/control-actions.js +0 -2
- package/dist/app/cloud/control-links.d.ts +0 -5
- package/dist/app/cloud/control-links.js +0 -1
- package/dist/app/cloud/control-read.d.ts +0 -24
- package/dist/app/cloud/control-read.js +0 -1
- package/dist/app/cloud/control-resources.d.ts +0 -3
- package/dist/app/cloud/control-resources.js +0 -1
- package/dist/app/cloud/control.d.ts +0 -34
- package/dist/app/cloud/control.js +0 -5
- package/dist/app/cloud/credentials.d.ts +0 -11
- package/dist/app/cloud/credentials.js +0 -2
- package/dist/app/cloud/index.d.ts +0 -22
- package/dist/app/cloud/index.js +0 -2
- package/dist/app/cloud/login.d.ts +0 -63
- package/dist/app/cloud/login.js +0 -2
- package/dist/app/cloud/migration/archive.d.ts +0 -13
- package/dist/app/cloud/migration/archive.js +0 -1
- package/dist/app/cloud/migration/commands.d.ts +0 -8
- package/dist/app/cloud/migration/commands.js +0 -1
- package/dist/app/cloud/migration/evidence.d.ts +0 -13
- package/dist/app/cloud/migration/evidence.js +0 -2
- package/dist/app/cloud/migration/files.d.ts +0 -16
- package/dist/app/cloud/migration/files.js +0 -2
- package/dist/app/cloud/migration/index.d.ts +0 -6
- package/dist/app/cloud/migration/index.js +0 -1
- package/dist/app/cloud/migration/journal.d.ts +0 -64
- package/dist/app/cloud/migration/journal.js +0 -1
- package/dist/app/cloud/migration/mapping-dispositions.d.ts +0 -3
- package/dist/app/cloud/migration/mapping-dispositions.js +0 -1
- package/dist/app/cloud/migration/mapping.d.ts +0 -11
- package/dist/app/cloud/migration/mapping.js +0 -2
- package/dist/app/cloud/migration/model.d.ts +0 -175
- package/dist/app/cloud/migration/plan.d.ts +0 -7
- package/dist/app/cloud/migration/plan.js +0 -1
- package/dist/app/cloud/migration/progress.d.ts +0 -19
- package/dist/app/cloud/migration/progress.js +0 -1
- package/dist/app/cloud/migration/reconcile.d.ts +0 -22
- package/dist/app/cloud/migration/reconcile.js +0 -1
- package/dist/app/cloud/migration/reconciliation-spool.d.ts +0 -4
- package/dist/app/cloud/migration/reconciliation-spool.js +0 -1
- package/dist/app/cloud/migration/state.d.ts +0 -15
- package/dist/app/cloud/migration/state.js +0 -1
- package/dist/app/cloud/migration/transfer.d.ts +0 -6
- package/dist/app/cloud/migration/transfer.js +0 -1
- package/dist/cli/cloud-apply-help.d.ts +0 -1
- package/dist/cli/cloud-apply-help.js +0 -56
- package/dist/cli/cloud-selection.d.ts +0 -2
- package/dist/cli/cloud-selection.js +0 -3
- package/dist/cli/commands/cloud/apply.d.ts +0 -5
- package/dist/cli/commands/cloud/apply.js +0 -1
- package/dist/cli/commands/cloud/campaign/create.d.ts +0 -5
- package/dist/cli/commands/cloud/campaign/create.js +0 -1
- package/dist/cli/commands/cloud/download.d.ts +0 -5
- package/dist/cli/commands/cloud/download.js +0 -1
- package/dist/cli/commands/cloud/list.d.ts +0 -5
- package/dist/cli/commands/cloud/list.js +0 -1
- package/dist/cli/commands/cloud/login.d.ts +0 -13
- package/dist/cli/commands/cloud/login.js +0 -2
- package/dist/cli/commands/cloud/logout.d.ts +0 -7
- package/dist/cli/commands/cloud/logout.js +0 -1
- package/dist/cli/commands/cloud/migrate/apply.d.ts +0 -2
- package/dist/cli/commands/cloud/migrate/apply.js +0 -1
- package/dist/cli/commands/cloud/migrate/plan.d.ts +0 -7
- package/dist/cli/commands/cloud/migrate/plan.js +0 -1
- package/dist/cli/commands/cloud/migrate/progress.d.ts +0 -2
- package/dist/cli/commands/cloud/migrate/progress.js +0 -2
- package/dist/cli/commands/cloud/migrate/reconcile.d.ts +0 -2
- package/dist/cli/commands/cloud/migrate/reconcile.js +0 -1
- package/dist/cli/commands/cloud/policy/preview.d.ts +0 -5
- package/dist/cli/commands/cloud/policy/preview.js +0 -1
- package/dist/cli/commands/cloud/project/create.d.ts +0 -5
- package/dist/cli/commands/cloud/project/create.js +0 -1
- package/dist/cli/commands/cloud/publish.d.ts +0 -7
- package/dist/cli/commands/cloud/publish.js +0 -1
- package/dist/cli/commands/cloud/session/revoke.d.ts +0 -8
- package/dist/cli/commands/cloud/session/revoke.js +0 -1
- package/dist/cli/commands/cloud/show.d.ts +0 -5
- package/dist/cli/commands/cloud/show.js +0 -1
- package/dist/cli/commands/cloud/snapshot.d.ts +0 -5
- package/dist/cli/commands/cloud/snapshot.js +0 -1
- package/dist/cli/commands/cloud/status.d.ts +0 -33
- package/dist/cli/commands/cloud/status.js +0 -1
- package/dist/cloud/account.d.ts +0 -34
- package/dist/cloud/account.js +0 -1
- package/dist/cloud/archive-contract.d.ts +0 -1
- package/dist/cloud/archive-contract.js +0 -1
- package/dist/cloud/archive.d.ts +0 -12
- package/dist/cloud/archive.js +0 -1
- package/dist/cloud/campaigns.d.ts +0 -200
- package/dist/cloud/campaigns.js +0 -2
- package/dist/cloud/client.d.ts +0 -68
- package/dist/cloud/client.js +0 -4
- package/dist/cloud/download.d.ts +0 -5
- package/dist/cloud/download.js +0 -1
- package/dist/cloud/historical-contract.d.ts +0 -224
- package/dist/cloud/historical-contract.js +0 -1
- package/dist/cloud/historical-json.d.ts +0 -16
- package/dist/cloud/historical-json.js +0 -1
- package/dist/cloud/historical.d.ts +0 -69
- package/dist/cloud/historical.js +0 -1
- package/dist/cloud/pagination.d.ts +0 -5
- package/dist/cloud/pagination.js +0 -1
- package/dist/cloud/transport.d.ts +0 -18
- package/dist/cloud/transport.js +0 -1
- package/dist/config/loader/cloud.d.ts +0 -2
- package/dist/config/loader/cloud.js +0 -1
- package/docs/cloud-control.md +0 -108
- package/docs/testkit-cloud-boundary.md +0 -628
- package/node_modules/buffer-crc32/LICENSE +0 -19
- package/node_modules/buffer-crc32/README.md +0 -55
- package/node_modules/buffer-crc32/dist/index.cjs +0 -306
- package/node_modules/buffer-crc32/dist/index.d.cts +0 -35
- package/node_modules/buffer-crc32/dist/index.d.mts +0 -35
- package/node_modules/buffer-crc32/dist/index.mjs +0 -304
- package/node_modules/buffer-crc32/index.d.ts +0 -35
- package/node_modules/buffer-crc32/package.json +0 -54
- package/node_modules/yazl/LICENSE +0 -21
- package/node_modules/yazl/README.md +0 -457
- package/node_modules/yazl/index.js +0 -826
- package/node_modules/yazl/package.json +0 -34
- /package/dist/{app/cloud/migration/model.js → tracker/types.js} +0 -0
|
@@ -11,139 +11,38 @@ export declare const commandCatalog: Readonly<{
|
|
|
11
11
|
}, {
|
|
12
12
|
readonly file: import("./framework/definitions.js").ArgumentDefinition<string | undefined>;
|
|
13
13
|
}>;
|
|
14
|
-
|
|
14
|
+
"bug file": import("./framework/command.js").CommandDefinition<{
|
|
15
15
|
readonly dir: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
16
|
-
readonly service: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
17
|
-
readonly "dry-run": import("./framework/definitions.js").FlagDefinition<boolean>;
|
|
18
|
-
readonly cache: import("./framework/definitions.js").FlagDefinition<("all" | "bundles" | "runtime")[] | undefined>;
|
|
19
|
-
readonly resources: import("./framework/definitions.js").FlagDefinition<boolean>;
|
|
20
|
-
}, undefined>;
|
|
21
|
-
"cloud campaign create": import("./framework/command.js").CommandDefinition<{
|
|
22
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
23
|
-
readonly org: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
24
|
-
readonly project: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
25
|
-
readonly "request-key": import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
26
|
-
readonly focus: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
27
|
-
readonly "target-bugs": import("./framework/definitions.js").FlagDefinition<number | undefined>;
|
|
28
|
-
}, undefined>;
|
|
29
|
-
"cloud policy preview": import("./framework/command.js").CommandDefinition<{
|
|
30
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
31
|
-
readonly org: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
32
|
-
readonly file: import("./framework/definitions.js").FlagDefinition<string>;
|
|
33
16
|
}, {
|
|
34
|
-
readonly
|
|
35
|
-
}>;
|
|
36
|
-
"cloud download": import("./framework/command.js").CommandDefinition<{
|
|
37
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
38
|
-
readonly receipt: import("./framework/definitions.js").FlagDefinition<string>;
|
|
39
|
-
readonly path: import("./framework/definitions.js").FlagDefinition<string>;
|
|
40
|
-
readonly output: import("./framework/definitions.js").FlagDefinition<string>;
|
|
41
|
-
}, undefined>;
|
|
42
|
-
"cloud list": import("./framework/command.js").CommandDefinition<{
|
|
43
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
44
|
-
readonly org: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
45
|
-
readonly project: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
46
|
-
readonly limit: import("./framework/definitions.js").FlagDefinition<number | undefined>;
|
|
47
|
-
readonly cursor: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
48
|
-
readonly receipt: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
49
|
-
readonly case: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
50
|
-
readonly path: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
51
|
-
readonly decision: import("./framework/definitions.js").FlagDefinition<"hold" | "ineligible" | "ship" | undefined>;
|
|
52
|
-
readonly pr: import("./framework/definitions.js").FlagDefinition<number | undefined>;
|
|
53
|
-
readonly sort: import("./framework/definitions.js").FlagDefinition<"accepted_at" | undefined>;
|
|
54
|
-
readonly direction: import("./framework/definitions.js").FlagDefinition<"asc" | "desc" | undefined>;
|
|
55
|
-
readonly flaky: import("./framework/definitions.js").FlagDefinition<boolean | undefined>;
|
|
56
|
-
readonly page: import("./framework/definitions.js").FlagDefinition<number | undefined>;
|
|
57
|
-
readonly branch: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
58
|
-
readonly campaign: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
59
|
-
readonly "root-cause-key": import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
60
|
-
readonly "issue-reference": import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
61
|
-
readonly view: import("./framework/definitions.js").FlagDefinition<"all" | "counted" | "secondary" | undefined>;
|
|
62
|
-
readonly order: import("./framework/definitions.js").FlagDefinition<"created" | "verified" | undefined>;
|
|
63
|
-
}, {
|
|
64
|
-
readonly resource: import("./framework/definitions.js").ArgumentDefinition<string>;
|
|
65
|
-
}>;
|
|
66
|
-
"cloud show": import("./framework/command.js").CommandDefinition<{
|
|
67
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
68
|
-
readonly org: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
69
|
-
readonly project: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
70
|
-
readonly campaign: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
71
|
-
}, {
|
|
72
|
-
readonly resource: import("./framework/definitions.js").ArgumentDefinition<"account" | "campaign" | "case" | "connection" | "finding" | "organisation" | "performance" | "policy" | "project" | "project-policy" | "receipt" | "run" | "test-file">;
|
|
73
|
-
readonly id: import("./framework/definitions.js").ArgumentDefinition<string | undefined>;
|
|
17
|
+
readonly id: import("./framework/definitions.js").ArgumentDefinition<string>;
|
|
74
18
|
}>;
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
readonly
|
|
78
|
-
readonly name: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
79
|
-
readonly repository: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
80
|
-
readonly provider: import("./framework/definitions.js").FlagDefinition<"gitea" | "github" | undefined>;
|
|
81
|
-
readonly host: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
82
|
-
readonly "publish-decisions": import("./framework/definitions.js").FlagDefinition<boolean>;
|
|
83
|
-
readonly "request-key": import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
84
|
-
readonly browser: import("./framework/definitions.js").FlagDefinition<boolean>;
|
|
85
|
-
}, undefined>;
|
|
86
|
-
"cloud login": import("./framework/command.js").CommandDefinition<{
|
|
87
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
88
|
-
readonly browser: import("./framework/definitions.js").FlagDefinition<boolean>;
|
|
89
|
-
readonly force: import("./framework/definitions.js").FlagDefinition<boolean | undefined>;
|
|
90
|
-
}, undefined>;
|
|
91
|
-
"cloud session revoke": import("./framework/command.js").CommandDefinition<{
|
|
92
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
19
|
+
"bug guide": import("./framework/command.js").CommandDefinition<undefined, undefined>;
|
|
20
|
+
"bug record": import("./framework/command.js").CommandDefinition<{
|
|
21
|
+
readonly dir: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
93
22
|
}, {
|
|
94
|
-
readonly
|
|
23
|
+
readonly file: import("./framework/definitions.js").ArgumentDefinition<string>;
|
|
95
24
|
}>;
|
|
96
|
-
"
|
|
97
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
98
|
-
}, undefined>;
|
|
99
|
-
"cloud logout": import("./framework/command.js").CommandDefinition<{
|
|
100
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
101
|
-
}, undefined>;
|
|
102
|
-
"cloud apply": import("./framework/command.js").CommandDefinition<{
|
|
103
|
-
readonly browser: import("./framework/definitions.js").FlagDefinition<boolean>;
|
|
104
|
-
readonly "secret-output": import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
105
|
-
readonly campaign: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
25
|
+
"campaign finish": import("./framework/command.js").CommandDefinition<{
|
|
106
26
|
readonly dir: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
107
|
-
readonly file: import("./framework/definitions.js").FlagDefinition<string>;
|
|
108
|
-
readonly project: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
109
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
110
27
|
}, undefined>;
|
|
111
|
-
"
|
|
112
|
-
readonly
|
|
113
|
-
readonly
|
|
114
|
-
readonly
|
|
115
|
-
readonly mapping: import("./framework/definitions.js").FlagDefinition<string>;
|
|
116
|
-
readonly output: import("./framework/definitions.js").FlagDefinition<string>;
|
|
117
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string>;
|
|
118
|
-
readonly project: import("./framework/definitions.js").FlagDefinition<string>;
|
|
119
|
-
readonly campaign: import("./framework/definitions.js").FlagDefinition<string>;
|
|
28
|
+
"campaign start": import("./framework/command.js").CommandDefinition<{
|
|
29
|
+
readonly dir: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
30
|
+
readonly id: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
31
|
+
readonly target: import("./framework/definitions.js").FlagDefinition<string>;
|
|
120
32
|
}, undefined>;
|
|
121
|
-
"
|
|
122
|
-
readonly
|
|
33
|
+
"campaign status": import("./framework/command.js").CommandDefinition<{
|
|
34
|
+
readonly dir: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
123
35
|
}, undefined>;
|
|
124
|
-
"
|
|
125
|
-
readonly
|
|
36
|
+
"ci report": import("./framework/command.js").CommandDefinition<{
|
|
37
|
+
readonly context: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
38
|
+
readonly dir: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
126
39
|
}, undefined>;
|
|
127
|
-
|
|
128
|
-
readonly campaign: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
40
|
+
cleanup: import("./framework/command.js").CommandDefinition<{
|
|
129
41
|
readonly dir: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
130
|
-
readonly
|
|
131
|
-
readonly run: import("./framework/definitions.js").FlagDefinition<
|
|
132
|
-
readonly
|
|
133
|
-
|
|
134
|
-
"cloud snapshot": import("./framework/command.js").CommandDefinition<{
|
|
135
|
-
readonly campaign: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
136
|
-
readonly finding: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
137
|
-
readonly findings: import("./framework/definitions.js").FlagDefinition<boolean | undefined>;
|
|
138
|
-
readonly receipts: import("./framework/definitions.js").FlagDefinition<boolean | undefined>;
|
|
139
|
-
readonly history: import("./framework/definitions.js").FlagDefinition<boolean | undefined>;
|
|
140
|
-
readonly "root-cause-key": import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
141
|
-
readonly "issue-reference": import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
142
|
-
readonly view: import("./framework/definitions.js").FlagDefinition<"all" | "counted" | "secondary" | undefined>;
|
|
143
|
-
readonly limit: import("./framework/definitions.js").FlagDefinition<number | undefined>;
|
|
144
|
-
readonly cursor: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
145
|
-
readonly project: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
146
|
-
readonly url: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
42
|
+
readonly service: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
43
|
+
readonly "dry-run": import("./framework/definitions.js").FlagDefinition<boolean>;
|
|
44
|
+
readonly cache: import("./framework/definitions.js").FlagDefinition<("all" | "bundles" | "runtime")[] | undefined>;
|
|
45
|
+
readonly resources: import("./framework/definitions.js").FlagDefinition<boolean>;
|
|
147
46
|
}, undefined>;
|
|
148
47
|
"db schema refresh": import("./framework/command.js").CommandDefinition<{
|
|
149
48
|
dir: import("./framework/definitions.js").FlagDefinition<string | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{cloudListResources as o,cloudShowResources as n}from"../app/cloud/control-resources.js";import{cloudApplyHelp as a}from"./cloud-apply-help.js";import{Args as r,Flags as e}from"./framework/definitions.js";import{defineCommand as t}from"./framework/command.js";import{sharedFlags as i,runFlags as l}from"./command-flags.js";import{publicTestTypeList as c,publicTestTypeListText as s}from"../domain/test-types.js";export const commandCatalog=Object.freeze({artifacts:t({summary:"List, verify, or inspect artifacts from immutable Testkit runs",enableJsonFlag:!0,args:{file:r.string({description:"Optional test file selector",required:!1})},flags:{...i,kind:e.string({description:"Limit artifacts to one kind"}),format:e.string({description:"Output format",options:["list","text"],default:"list"}),run:e.string({description:"Read one immutable run ID instead of latest"}),list:e.boolean({description:"List retained immutable runs",default:!1}),verify:e.boolean({description:"Verify the selected run manifest and checksums",default:!1})}}),cleanup:t({summary:"Clean stale local testkit state",enableJsonFlag:!0,flags:{...i,"dry-run":e.boolean({description:"Show cleanup actions without deleting state",default:!1}),cache:e.string({description:"Clean cache state: runtime, bundles, or all",multiple:!0,options:["runtime","bundles","all"]}),resources:e.boolean({description:"Clean Testkit-owned Docker resources that are stale or orphaned",default:!1})}}),"cloud campaign create":t({summary:"Create a campaign without starting tests or investigators",enableJsonFlag:!0,flags:{url:e.string({description:"Cloud origin"}),org:e.string({description:"Organisation selector"}),project:e.string({description:"Project ID, slug, or name"}),"request-key":e.string({description:"Reuse a key to retry the same creation"}),focus:e.string({description:"Campaign focus"}),"target-bugs":e.integer({description:"Target bug count"})}}),"cloud policy preview":t({summary:"Evaluate draft policy rules against a receipt without saving",enableJsonFlag:!0,args:{policy:r.string({required:!0,description:"Policy ID"})},flags:{url:e.string({description:"Cloud origin"}),org:e.string({description:"Organisation selector"}),file:e.string({required:!0,description:"JSON file with receiptId and rules"})}}),"cloud download":t({summary:"Download and verify a receipt artifact",enableJsonFlag:!0,flags:{url:e.string({description:"Cloud origin"}),receipt:e.string({required:!0,description:"Receipt ID"}),path:e.string({required:!0,description:"Exact manifest artifact path"}),output:e.string({required:!0,description:"New destination file"})}}),"cloud list":t({summary:"List Cloud resources with their identifiers and pagination",enableJsonFlag:!0,args:{resource:r.string({required:!0,options:Object.keys(o)})},flags:{url:e.string({description:"Cloud origin"}),org:e.string({description:"Organisation ID, slug, or unambiguous name"}),project:e.string({description:"Project ID, slug, or unambiguous name"}),limit:e.integer({description:"Page size"}),cursor:e.string({description:"Opaque nextCursor from the previous page"}),receipt:e.string({description:"Receipt for artifact metadata"}),case:e.string({description:"Case ID for history"}),path:e.string({description:"Exact test file path for history"}),decision:e.string({description:"Run decision",options:["ship","hold","ineligible"]}),pr:e.integer({description:"Pull request number"}),sort:e.string({description:"Run sort",options:["accepted_at"]}),direction:e.string({description:"Run order",options:["asc","desc"]}),flaky:e.boolean({description:"Only flaky tests"}),page:e.integer({description:"Run page number"}),branch:e.string({description:"Exact run branch"}),campaign:e.string({description:"Limit findings to a campaign"}),"root-cause-key":e.string({description:"Exact finding root cause key"}),"issue-reference":e.string({description:"Exact finding issue URL"}),view:e.string({description:"Finding view",options:["all","counted","secondary"]}),order:e.string({description:"Finding order",options:["created","verified"]})}}),"cloud show":t({summary:"Inspect a Cloud resource, result, or pending connection",enableJsonFlag:!0,args:{resource:r.string({required:!0,options:n}),id:r.string({description:"Resource ID or test file path"})},flags:{url:e.string({description:"Cloud origin"}),org:e.string({description:"Organisation ID, slug, or name"}),project:e.string({description:"Project ID, slug, or name"}),campaign:e.string({description:"Campaign for a finding"})}}),"cloud project create":t({summary:"Connect a repository to Cloud and wait for any provider consent",enableJsonFlag:!0,flags:{url:e.string({description:"Cloud origin"}),org:e.string({description:"Organisation ID, slug, or name"}),name:e.string({description:"Project name; defaults to repository name"}),repository:e.string({description:"owner/repo or remote URL; defaults to Git origin"}),provider:e.string({description:"Repository provider",options:["github","gitea"]}),host:e.string({description:"Repository host"}),"publish-decisions":e.boolean({description:"Explicitly enable provider decision publishing",default:!1}),"request-key":e.string({description:"Reuse the same key to resume an uncertain creation"}),browser:e.boolean({description:"Open provider consent in the browser",allowNo:!0,default:!0})}}),"cloud login":t({summary:"Connect your Cloud account through browser approval",enableJsonFlag:!0,flags:{url:e.string({description:"Testkit Cloud origin"}),browser:e.boolean({description:"Open the approval link in your browser",allowNo:!0,default:!0}),force:e.boolean({description:"Start a new approval to switch accounts or replace a session"})}}),"cloud session revoke":t({summary:"Revoke one of your Cloud CLI sessions",enableJsonFlag:!0,args:{id:r.string({required:!0,description:"Session ID from cloud list sessions"})},flags:{url:e.string({description:"Testkit Cloud origin"})}}),"cloud status":t({summary:"Show the Cloud origin, credential source, and signed-in account",enableJsonFlag:!0,flags:{url:e.string({description:"Testkit Cloud origin"})}}),"cloud logout":t({summary:"Revoke and remove the saved Cloud account session",enableJsonFlag:!0,flags:{url:e.string({description:"Testkit Cloud origin"})}}),"cloud apply":t({summary:"Apply an idempotent, file-based mutation to Testkit Cloud",description:a,enableJsonFlag:!0,flags:{browser:e.boolean({description:"Open any required provider consent",allowNo:!0,default:!0}),"secret-output":e.string({description:"New private file for an explicitly created credential"}),campaign:e.string({description:"Apply a report to this campaign"}),dir:e.string({description:"Product directory containing optional local verification config"}),file:e.string({description:"JSON command envelope to apply",required:!0}),project:e.string({description:"Testkit Cloud project ID"}),url:e.string({description:"Testkit Cloud origin"})}}),"cloud migrate plan":t({summary:"Plan a legacy campaign migration without remote writes",enableJsonFlag:!0,flags:{source:e.string({description:"Legacy source root",required:!0}),registry:e.string({description:"Campaign registry path relative to source root",required:!0}),regressions:e.string({description:"Regression registry path relative to source root",required:!0}),mapping:e.string({description:"Mapping file, absolute or relative to source root",required:!0}),output:e.string({description:"New private output directory outside source root",required:!0}),url:e.string({description:"Testkit Cloud origin",required:!0}),project:e.string({description:"Testkit Cloud project ID",required:!0}),campaign:e.string({description:"Existing campaign ID",required:!0})}}),"cloud migrate apply":t({summary:"Apply or resume a saved legacy campaign migration",enableJsonFlag:!0,flags:{plan:e.string({description:"Saved migration plan path",required:!0})}}),"cloud migrate reconcile":t({summary:"Read back and reconcile a saved legacy campaign migration",enableJsonFlag:!0,flags:{plan:e.string({description:"Saved migration plan path",required:!0})}}),"cloud publish":t({summary:"Publish one verified immutable run bundle to Testkit Cloud",enableJsonFlag:!0,flags:{campaign:e.string({description:"Associate receipt with this campaign; requires --run"}),dir:e.string({description:"Explicit product directory"}),project:e.string({description:"Testkit Cloud project ID"}),run:e.string({description:"Immutable run ID; defaults to latest"}),url:e.string({description:"Testkit Cloud origin"})}}),"cloud snapshot":t({summary:"Read the current versioned Testkit Cloud project state",enableJsonFlag:!0,flags:{campaign:e.string({description:"Campaign ID"}),finding:e.string({description:"Finding detail within the campaign"}),findings:e.boolean({description:"Read project-wide findings"}),receipts:e.boolean({description:"Read campaign receipt history"}),history:e.boolean({description:"Read accepted campaign changes"}),"root-cause-key":e.string({description:"Exact finding root-cause key"}),"issue-reference":e.string({description:"Exact external issue URL"}),view:e.string({description:"Finding view",options:["all","counted","secondary"]}),limit:e.integer({description:"Page size, 1\u2013100; history maximum 20"}),cursor:e.string({description:"Opaque nextCursor from the preceding page"}),project:e.string({description:"Testkit Cloud project ID"}),url:e.string({description:"Testkit Cloud origin"})}}),"db schema refresh":t({summary:"Refresh a source database schema cache",enableJsonFlag:!0,flags:i}),"db schema verify":t({summary:"Verify local schema replay against the source database schema",enableJsonFlag:!0,flags:{...i,"skip-schema-source-verify":e.boolean({description:"Skip the check that local schema replay matches the source database schema",default:!1})}}),destroy:t({summary:"Destroy local testkit state",enableJsonFlag:!0,flags:i}),discover:t({summary:"Discover managed tests and report their metadata",enableJsonFlag:!0,flags:{...i,type:e.string({char:"t",multiple:!0,description:`Filter by suite type(s): ${s({includeAll:!0})}`}),suite:e.string({char:"s",multiple:!0,description:"Filter by suite selector(s)"}),file:e.string({char:"f",multiple:!0,description:"Filter by exact file path(s)"}),"runnable-only":e.boolean({description:"Show only files not skipped by repo rules",default:!1}),strict:e.boolean({description:"Fail instead of reporting discovery/config diagnostics",default:!1}),output:e.string({description:"Write machine-readable discovery JSON to a file"}),"output-mode":e.string({description:"Human-readable output mode",options:["compact","verbose"],default:"compact"})}}),doctor:t({summary:"Run built-in config, discovery, and hygiene checks",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"}),typecheck:e.boolean({description:"Include generated TypeScript checks",default:!0,allowNo:!0})}}),"guard unsafe-entrypoint":t({summary:"Fail a local script that must be run through Testkit",flags:{command:e.string({char:"c",description:"Disabled command name shown in the error message",required:!0}),use:e.string({char:"u",description:"Replacement command shown in the error message",required:!0})}}),lint:t({summary:"Run built-in Testkit repository hygiene checks",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"})}}),"run status":t({summary:"Show active Testkit run progress",enableJsonFlag:!0,flags:{...i,run:e.string({description:"Specific run id to show"}),full:e.boolean({description:"Include the full live status payload in JSON output"})}}),"run stop":t({summary:"Stop active Testkit run work",enableJsonFlag:!0,flags:{...i,run:e.string({description:"Specific run id to stop; defaults to the newest active run"}),all:e.boolean({description:"Stop all active runs for this product",default:!1}),reason:e.string({description:"Operator-visible reason recorded with cancelled runs and dirty slots"})}}),run:t({summary:"Run test suites",enableJsonFlag:!0,args:{type:r.string({description:`Optional suite type shortcut: ${s({includeAll:!0})}`,required:!1,options:c({includeAll:!0})})},flags:l}),"setup playwright":t({summary:"Install the managed Playwright Chromium runtime",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"}),force:e.boolean({default:!1,description:"Force Playwright to repair the browser installation"}),"with-deps":e.boolean({default:!1,description:"Install required host dependencies with Chromium"})}}),status:t({summary:"Show local testkit state",enableJsonFlag:!0,flags:i}),stop:t({summary:"Stop all Testkit-owned runs",enableJsonFlag:!0,flags:{...i,reason:e.string({description:"Operator-visible reason recorded with cancelled runs"})}}),typecheck:t({summary:"Typecheck testkit config, helpers, and suites",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"})}}),workspace:t({summary:"Inspect Testkit workstation data for a product",enableJsonFlag:!0,flags:{...i,"target-limit":e.integer({description:"Maximum number of quick-run target previews",default:24}),"no-status":e.boolean({description:"Skip runtime status collection",default:!1})}})});
|
|
1
|
+
import{Args as s,Flags as e}from"./framework/definitions.js";import{defineCommand as t}from"./framework/command.js";import{sharedFlags as r,runFlags as i}from"./command-flags.js";import{publicTestTypeList as n,publicTestTypeListText as a}from"../domain/test-types.js";export const commandCatalog=Object.freeze({artifacts:t({summary:"List, verify, or inspect artifacts from immutable Testkit runs",enableJsonFlag:!0,args:{file:s.string({description:"Optional test file selector",required:!1})},flags:{...r,kind:e.string({description:"Limit artifacts to one kind"}),format:e.string({description:"Output format",options:["list","text"],default:"list"}),run:e.string({description:"Read one immutable run ID instead of latest"}),list:e.boolean({description:"List retained immutable runs",default:!1}),verify:e.boolean({description:"Verify the selected run manifest and checksums",default:!1})}}),"bug file":t({summary:"Run a recorded bug's test and file the bug as an issue",enableJsonFlag:!0,args:{id:s.string({description:"Draft id that `testkit bug record` printed",required:!0})},flags:{dir:e.string({description:"Product directory"})}}),"bug guide":t({summary:"Print the bug record format, the severities, and the category lists",enableJsonFlag:!0}),"bug record":t({summary:"Record a confirmed bug as a local draft",enableJsonFlag:!0,args:{file:s.string({description:"Bug record JSON file, or - to read standard input",required:!0})},flags:{dir:e.string({description:"Product directory"})}}),"campaign finish":t({summary:"Finish the active campaign and write its pull request summary",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"})}}),"campaign start":t({summary:"Start a bug-hunting campaign and print the agent's brief",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"}),id:e.string({description:"Campaign id, instead of one made from the target and the date"}),target:e.string({description:"What the agent should hunt, in one line of at most 200 characters",required:!0})}}),"campaign status":t({summary:"Show the active campaign, its recorded bugs, and the area map coverage",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"})}}),"ci report":t({summary:"Post the last run as a commit status, a step summary, and one pull request comment",enableJsonFlag:!0,flags:{context:e.string({description:"Commit status context, instead of testkit"}),dir:e.string({description:"Product directory"})}}),cleanup:t({summary:"Clean stale local testkit state",enableJsonFlag:!0,flags:{...r,"dry-run":e.boolean({description:"Show cleanup actions without deleting state",default:!1}),cache:e.string({description:"Clean cache state: runtime, bundles, or all",multiple:!0,options:["runtime","bundles","all"]}),resources:e.boolean({description:"Clean Testkit-owned Docker resources that are stale or orphaned",default:!1})}}),"db schema refresh":t({summary:"Refresh a source database schema cache",enableJsonFlag:!0,flags:r}),"db schema verify":t({summary:"Verify local schema replay against the source database schema",enableJsonFlag:!0,flags:{...r,"skip-schema-source-verify":e.boolean({description:"Skip the check that local schema replay matches the source database schema",default:!1})}}),destroy:t({summary:"Destroy local testkit state",enableJsonFlag:!0,flags:r}),discover:t({summary:"Discover managed tests and report their metadata",enableJsonFlag:!0,flags:{...r,type:e.string({char:"t",multiple:!0,description:`Filter by suite type(s): ${a({includeAll:!0})}`}),suite:e.string({char:"s",multiple:!0,description:"Filter by suite selector(s)"}),file:e.string({char:"f",multiple:!0,description:"Filter by exact file path(s)"}),"runnable-only":e.boolean({description:"Show only files not skipped by repo rules",default:!1}),strict:e.boolean({description:"Fail instead of reporting discovery/config diagnostics",default:!1}),output:e.string({description:"Write machine-readable discovery JSON to a file"}),"output-mode":e.string({description:"Human-readable output mode",options:["compact","verbose"],default:"compact"})}}),doctor:t({summary:"Run built-in config, discovery, and hygiene checks",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"}),typecheck:e.boolean({description:"Include generated TypeScript checks",default:!0,allowNo:!0})}}),"guard unsafe-entrypoint":t({summary:"Fail a local script that must be run through Testkit",flags:{command:e.string({char:"c",description:"Disabled command name shown in the error message",required:!0}),use:e.string({char:"u",description:"Replacement command shown in the error message",required:!0})}}),lint:t({summary:"Run built-in Testkit repository hygiene checks",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"})}}),"run status":t({summary:"Show active Testkit run progress",enableJsonFlag:!0,flags:{...r,run:e.string({description:"Specific run id to show"}),full:e.boolean({description:"Include the full live status payload in JSON output"})}}),"run stop":t({summary:"Stop active Testkit run work",enableJsonFlag:!0,flags:{...r,run:e.string({description:"Specific run id to stop; defaults to the newest active run"}),all:e.boolean({description:"Stop all active runs for this product",default:!1}),reason:e.string({description:"Operator-visible reason recorded with cancelled runs and dirty slots"})}}),run:t({summary:"Run test suites",enableJsonFlag:!0,args:{type:s.string({description:`Optional suite type shortcut: ${a({includeAll:!0})}`,required:!1,options:n({includeAll:!0})})},flags:i}),"setup playwright":t({summary:"Install the managed Playwright Chromium runtime",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"}),force:e.boolean({default:!1,description:"Force Playwright to repair the browser installation"}),"with-deps":e.boolean({default:!1,description:"Install required host dependencies with Chromium"})}}),status:t({summary:"Show local testkit state",enableJsonFlag:!0,flags:r}),stop:t({summary:"Stop all Testkit-owned runs",enableJsonFlag:!0,flags:{...r,reason:e.string({description:"Operator-visible reason recorded with cancelled runs"})}}),typecheck:t({summary:"Typecheck testkit config, helpers, and suites",enableJsonFlag:!0,flags:{dir:e.string({description:"Product directory"})}}),workspace:t({summary:"Inspect Testkit workstation data for a product",enableJsonFlag:!0,flags:{...r,"target-limit":e.integer({description:"Maximum number of quick-run target previews",default:24}),"no-status":e.boolean({description:"Skip runtime status collection",default:!1})}})});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{commandCatalog as i}from"./command-catalog.js";export const commandRegistry=Object.freeze([
|
|
1
|
+
import{commandCatalog as i}from"./command-catalog.js";export const commandRegistry=Object.freeze([t("artifacts",()=>import("./commands/artifacts.js")),t("bug file",()=>import("./commands/bug/file.js")),t("bug guide",()=>import("./commands/bug/guide.js")),t("bug record",()=>import("./commands/bug/record.js")),t("campaign finish",()=>import("./commands/campaign/finish.js")),t("campaign start",()=>import("./commands/campaign/start.js")),t("campaign status",()=>import("./commands/campaign/status.js")),t("ci report",()=>import("./commands/ci/report.js")),t("cleanup",()=>import("./commands/cleanup.js")),t("db schema refresh",()=>import("./commands/db/schema/refresh.js")),t("db schema verify",()=>import("./commands/db/schema/verify.js")),t("destroy",()=>import("./commands/destroy.js")),t("discover",()=>import("./commands/discover.js")),t("doctor",()=>import("./commands/doctor.js")),t("guard unsafe-entrypoint",()=>import("./commands/guard/unsafe-entrypoint.js")),t("lint",()=>import("./commands/lint.js")),t("run status",()=>import("./commands/run/status.js")),t("run stop",()=>import("./commands/run/stop.js")),t("run",()=>import("./commands/run.js")),t("setup playwright",()=>import("./commands/setup/playwright.js")),t("status",()=>import("./commands/status.js")),t("stop",()=>import("./commands/stop.js")),t("typecheck",()=>import("./commands/typecheck.js")),t("workspace",()=>import("./commands/workspace.js"))]),removedCommands=new Map([["cloud","The testkit cloud commands were removed in Testkit 0.4.0. Testkit no longer publishes runs to Testkit Cloud."]]);function t(r,o){return Object.freeze({...i[r],id:r.split(" "),load:o})}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CommandContext } from "../../command-catalog.js";
|
|
2
|
+
export default function run({ args, flags, json, log }: CommandContext<"bug file">): Promise<{
|
|
3
|
+
ok: boolean;
|
|
4
|
+
created: boolean;
|
|
5
|
+
draft: import("../../../app/bugs/draft.js").BugDraft;
|
|
6
|
+
issue: import("../../../app/bugs/file.js").BugIssueReference;
|
|
7
|
+
} | {
|
|
8
|
+
area: import("../../../app/bugs/facts.js").BugFactsArea | null;
|
|
9
|
+
covers: import("../../../app/bugs/issue.js").BugCoverage;
|
|
10
|
+
draft: import("../../../app/bugs/draft.js").BugDraft;
|
|
11
|
+
introducedBy: string | null;
|
|
12
|
+
issue: import("../../../app/bugs/file.js").BugIssueReference;
|
|
13
|
+
path: string;
|
|
14
|
+
ok: boolean;
|
|
15
|
+
created: boolean;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{fileBug as d,prepareBugFiling as n}from"../../../app/bugs/file.js";import{readRun as c}from"../../../app/bugs/run-reading.js";import{buildRunRequest as f}from"../../../app/run/request.js";import{executeRunRequest as l}from"../../operations/run/operation.js";import{renderAlreadyFiledBug as p,renderBugFileResult as m,renderBugFileRun as R}from"../../renderers/bug/text.js";export default async function w({args:a,flags:i,json:r,log:t}){const e=await n({dir:i.dir,env:process.env,id:a.id});if(e.status==="already-filed")return r||t(p(e.issue)),{ok:!0,created:!1,draft:e.draft,issue:e.issue};r||t(R(e));const s=await f({allowEmpty:!1,dir:i.dir,file:[e.testFile],ignoreSkipRules:!1,skipSchemaSourceVerify:!1},null,process.cwd(),process.cwd()),o=await l(s,{json:r,outputMode:"compact"}),u=await d(e,c(o.runArtifact,e.checkout.productPath));return r||t(m(u).join(`
|
|
2
|
+
`)),{ok:!0,created:!0,...u}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BUG_GUIDE as r,renderBugGuide as t}from"../../../app/bugs/guide.js";export default function i({json:e,log:u}){return e||u(t(r)),{ok:!0,guide:r}}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CommandContext } from "../../command-catalog.js";
|
|
2
|
+
export default function run({ args, flags, json, log }: CommandContext<"bug record">): Promise<{
|
|
3
|
+
draft: import("../../../app/bugs/draft.js").BugDraft;
|
|
4
|
+
path: string;
|
|
5
|
+
redactedFields: readonly string[];
|
|
6
|
+
replaced: boolean;
|
|
7
|
+
unreadableDrafts: readonly import("../../../app/bugs/store.js").UnreadableDraft[];
|
|
8
|
+
ok: boolean;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CommandContext } from "../../command-catalog.js";
|
|
2
|
+
export default function run({ flags, json, log }: CommandContext<"campaign finish">): Promise<{
|
|
3
|
+
campaign: import("../../../app/campaigns/campaign.js").Campaign;
|
|
4
|
+
filed: readonly import("../../../app/bugs/draft.js").BugDraft[];
|
|
5
|
+
headCommit: string;
|
|
6
|
+
summary: string;
|
|
7
|
+
summaryPath: string;
|
|
8
|
+
unfiled: readonly import("../../../app/bugs/draft.js").BugDraft[];
|
|
9
|
+
ok: boolean;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{finishCampaign as a}from"../../../app/campaigns/index.js";export default async function u({flags:i,json:t,log:n}){const r=await a({dir:i.dir});return t||n(r.summary),{ok:!0,...r}}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CommandContext } from "../../command-catalog.js";
|
|
2
|
+
export default function run({ flags, json, log }: CommandContext<"campaign start">): Promise<{
|
|
3
|
+
ok: boolean;
|
|
4
|
+
campaign: import("../../../app/campaigns/campaign.js").Campaign;
|
|
5
|
+
areas: import("../../../app/bugs/areas.js").AreaMapCoverage;
|
|
6
|
+
brief: string;
|
|
7
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{startCampaign as e}from"../../../app/campaigns/index.js";export default async function n({flags:a,json:t,log:i}){const r=await e({dir:a.dir,id:a.id,target:a.target});return t||i(r.brief),{ok:!0,campaign:r.campaign,areas:r.areas,brief:r.brief}}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CommandContext } from "../../command-catalog.js";
|
|
2
|
+
export default function run({ flags, json, log }: CommandContext<"campaign status">): Promise<{
|
|
3
|
+
active: import("../../../app/campaigns/campaign.js").Campaign | null;
|
|
4
|
+
areas: {
|
|
5
|
+
readonly areaCount: number;
|
|
6
|
+
readonly doubleClaimCount: number;
|
|
7
|
+
readonly unclaimedShare: number;
|
|
8
|
+
};
|
|
9
|
+
drafts: readonly import("../../../app/bugs/draft.js").BugDraft[];
|
|
10
|
+
lastFinished: import("../../../app/campaigns/campaign.js").Campaign | null;
|
|
11
|
+
unreadableDrafts: readonly import("../../../app/bugs/store.js").UnreadableDraft[];
|
|
12
|
+
ok: boolean;
|
|
13
|
+
}>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CommandContext } from "../../command-catalog.js";
|
|
2
|
+
export default function run({ flags, json, log }: CommandContext<"ci report">): Promise<{
|
|
3
|
+
comment: import("../../../tracker/types.js").TrackerCommentReference | null;
|
|
4
|
+
commit: string;
|
|
5
|
+
context: string;
|
|
6
|
+
description: string;
|
|
7
|
+
known: readonly import("../../../app/bugs/known-failures.js").KnownFailure[];
|
|
8
|
+
new: readonly import("../../../app/bugs/known-failures.js").FailedTest[];
|
|
9
|
+
pullRequest: number | null;
|
|
10
|
+
state: import("../../../tracker/types.js").TrackerCommitState;
|
|
11
|
+
stepSummary: string | null;
|
|
12
|
+
trackerProblem: string | null;
|
|
13
|
+
unreadableIssues: readonly import("../../../app/bugs/known-failures.js").UnreadableIssue[];
|
|
14
|
+
ok: boolean;
|
|
15
|
+
}>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{reportCiRun as n}from"../../../app/bugs/ci-report.js";import{renderCiReport as i}from"../../renderers/ci/text.js";export default async function p({flags:r,json:o,log:e}){const t=await n({context:r.context,dir:r.dir,env:process.env});return o||e(i(t).join(`
|
|
2
|
+
`)),{ok:!0,...t}}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CommandContext } from "../command-catalog.js";
|
|
2
|
-
export default function run({ args, flags, json, setExitCode }: CommandContext<"run">): Promise<{
|
|
2
|
+
export default function run({ args, flags, json, log, setExitCode }: CommandContext<"run">): Promise<{
|
|
3
3
|
exitCode: number;
|
|
4
4
|
failure?: import("../../kernel/error-serialization.js").SerializedError;
|
|
5
5
|
results: import("../../app/run/results.js").FinalizedServiceResult[];
|
package/dist/cli/commands/run.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{buildRunRequest as
|
|
1
|
+
import{applyKnownFailures as s,loadBugPolicy as d}from"../../app/bugs/gate.js";import{buildRunRequest as l}from"../../app/run/request.js";import{executeRunRequest as a}from"../operations/run/operation.js";import{renderKnownFailures as m}from"../renderers/bug/text.js";export default async function w({args:i,flags:e,json:u,log:n,setExitCode:c}){const r=await l({dir:e.dir,service:e.service,taskConcurrency:e["task-concurrency"],workers:e.workers,fileTimeoutSeconds:e["file-timeout-seconds"],type:e.type,suite:e.suite,file:e.file,allowEmpty:e["allow-empty"],ignoreSkipRules:e["ignore-skip-rules"],skipSchemaSourceVerify:e["skip-schema-source-verify"]},i.type||null,process.cwd(),process.cwd()),p=await d(r.productDir),o=await a(r,{outputMode:e["output-mode"]||"compact",json:u,debug:e.debug}),t=await s({env:process.env,exitCode:o.exitCode,failedOutsideTests:o.failure!==void 0,policy:p,productDir:r.productDir,run:o.runArtifact});return t.knownFailures!==null&&(o.outputMode==="compact"||o.outputMode==="debug")&&n(m(t.knownFailures).join(`
|
|
2
|
+
`)),c(t.exitCode),t.knownFailures===null?o:{...o,...t}}
|
package/dist/cli/entrypoint.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{commandRegistry as c}from"./command-registry.js";export function normalizeCliArgs(n){if(n[0]==="help")return
|
|
1
|
+
import{commandRegistry as c,removedCommands as u}from"./command-registry.js";export function normalizeCliArgs(n){if(n[0]==="help")return m(n);if(f(n))return[...n];const e=new Set([...c.map(s=>s.id[0]),...u.keys()]),l=new Set(c.flatMap(s=>Object.entries(s.flags??{}).flatMap(([i,r])=>r.kind==="boolean"?[]:[`--${i}`,...r.char?[`-${r.char}`]:[]]))),o=d(n,l),t=o.at(0)??null;return t!==null&&e.has(t.value)?h(n,o):["run",...n]}function f(n){const e=n[0];return e==="--help"||e==="-h"||e==="--version"||e==="-v"}function m(n){const e=n[1];return e?[e,...n.slice(2),"--help"]:["--help"]}function d(n,e){const l=[];for(let o=0;o<n.length;o+=1){const t=n[o];if(t==="--")break;if(!t.startsWith("-")){l.push({index:o,value:t});continue}const s=t.indexOf("="),i=s<0?t:t.slice(0,s);s<0&&e.has(i)&&(o+=1)}return l}function h(n,e){if(!e.at(0))return[...n];const o=[...c].sort((i,r)=>r.id.length-i.id.length).find(i=>i.id.every((r,a)=>e[a]?.value===r)),t=e.slice(0,o?.id.length??1),s=new Set(t.map(i=>i.index));return[...t.map(i=>i.value),...n.filter((i,r)=>!s.has(r))]}
|
|
@@ -9,5 +9,6 @@ export interface ExecuteCliOptions {
|
|
|
9
9
|
readonly beforeAction?: (id: readonly string[]) => Promise<void>;
|
|
10
10
|
readonly identity: CliIdentity;
|
|
11
11
|
readonly registrations: readonly CommandRegistration[];
|
|
12
|
+
readonly removedCommands?: ReadonlyMap<string, string>;
|
|
12
13
|
}
|
|
13
14
|
export declare function executeCliArguments(argv: readonly string[], options: Readonly<ExecuteCliOptions>): Promise<void>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{serializeCliError as g,writeStandardOutput as m}from"../json-errors.js";import{CliUsageError as
|
|
2
|
-
`)},setExitCode:
|
|
3
|
-
`)}catch(
|
|
4
|
-
`),
|
|
5
|
-
Run "testkit --help" to see available commands and options.`:"";
|
|
6
|
-
`)}function
|
|
1
|
+
import{serializeCliError as g,writeStandardOutput as m}from"../json-errors.js";import{CliUsageError as d,commandExitCode as w,errorMessage as p}from"./errors.js";import{renderCommandHelp as h,renderRootHelp as C,renderTopicHelp as x,renderVersion as O}from"./help.js";import{parseCommandArguments as S}from"./parser.js";export async function executeCliArguments(t,i){const e=H;if(t.length===1&&l(t[0])){await e.writeStandardOutput(C(i.identity,i.registrations));return}if(t.length===1&&y(t[0])){await e.writeStandardOutput(O(i.identity));return}let r;try{r=E(t,i)}catch(n){const s=F(t,i.registrations);if(s){await e.writeStandardOutput(x(s,i.registrations));return}await c(n,!1,e);return}if(u(r.argv,l)){await e.writeStandardOutput(h(r.registration,i.registrations));return}const a=r.registration.enableJsonFlag===!0&&u(r.argv,n=>n==="--json");try{const n=S(r.argv,r.registration.flags,r.registration.args,r.registration.enableJsonFlag===!0);await i.beforeAction?.(r.registration.id);const o=await(await r.registration.load()).default({...n,json:a,log(f=""){e.writeStandardOutput(`${f}
|
|
2
|
+
`)},setExitCode:e.setExitCode});a&&o!==void 0&&await e.writeStandardOutput(`${JSON.stringify(o,null,2)}
|
|
3
|
+
`)}catch(n){await c(n,a,e)}}function E(t,{registrations:i,removedCommands:e}){const a=i.filter(n=>n.id.every((s,o)=>t[o]===s)).sort((n,s)=>s.id.length-n.id.length).at(0);if(!a){const n=t.filter(s=>!s.startsWith("-")).at(0);throw n?new d(e?.get(n)??`Unknown command: ${n}`):new d("A Testkit command is required")}return{registration:a,argv:t.slice(a.id.length)}}async function c(t,i,e){const r=w(t);if(i){await e.writeStandardOutput(`${JSON.stringify({error:g(t)},null,2)}
|
|
4
|
+
`),e.setExitCode(r);return}e.setExitCode(r);const a=t instanceof d?`
|
|
5
|
+
Run "testkit --help" to see available commands and options.`:"";e.writeStandardError(`Error: ${p(t)}${a}
|
|
6
|
+
`)}function l(t){return t==="--help"||t==="-h"}function y(t){return t==="--version"||t==="-v"}function F(t,i){const e=t.findIndex(l);if(e<1)return null;const r=t.slice(0,e);return i.some(a=>a.id.length>r.length&&r.every((n,s)=>a.id[s]===n))?r:null}function u(t,i){const e=t.indexOf("--");return(e<0?t:t.slice(0,e)).some(i)}const H={setExitCode(t){process.exitCode=t},writeStandardError(t){process.stderr.write(t)},writeStandardOutput:m};
|
package/dist/cli/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{testkitIdentity as r}from"../app/package-inspection.js";import{commandRegistry as e}from"./command-registry.js";import{normalizeCliArgs as
|
|
1
|
+
import{testkitIdentity as r}from"../app/package-inspection.js";import{commandRegistry as e,removedCommands as o}from"./command-registry.js";import{normalizeCliArgs as m}from"./entrypoint.js";import{executeCliArguments as n}from"./framework/index.js";export async function executeCli(t,i={}){await n(t,{...i,identity:r(),registrations:e,removedCommands:o})}export async function run(t=process.argv){await executeCli(m(t.slice(2)))}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BugIssueReference, FiledBug, ReadyBugFiling } from "../../../app/bugs/file.js";
|
|
2
|
+
import type { KnownFailureReport } from "../../../app/bugs/gate.js";
|
|
3
|
+
import type { RecordBugResult } from "../../../app/bugs/record.js";
|
|
4
|
+
export declare function renderBugRecordResult(result: RecordBugResult): string[];
|
|
5
|
+
export declare function renderAlreadyFiledBug(issue: BugIssueReference): string;
|
|
6
|
+
export declare function renderBugFileRun(ready: Pick<ReadyBugFiling, "draft" | "filing">): string;
|
|
7
|
+
export declare function renderBugFileResult(result: FiledBug): string[];
|
|
8
|
+
export declare function renderKnownFailures(report: KnownFailureReport): string[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describeUnnamedFailure as s}from"../../../app/bugs/known-failures.js";import{formatShare as d}from"../../../app/campaigns/brief.js";const i=12,a=20;export function renderBugRecordResult(e){return[`Recorded ${e.draft.id}`,`Draft: ${e.path}`,...e.redactedFields.length===0?[]:[`Redacted secrets in: ${e.redactedFields.join(", ")}`],...e.replaced?["Replaced the earlier draft for this test."]:[],...e.unreadableDrafts.map(n=>`Testkit cannot read ${n.file}: ${n.problem}`),`Next: commit and push the test, then run \`testkit bug file ${e.draft.id}\`.`]}export function renderAlreadyFiledBug(e){return`Already filed as #${String(e.number)}: ${e.url}`}export function renderBugFileRun(e){return`Running ${e.draft.test.file} at ${e.filing.foundAt.slice(0,i)}. Testkit files the bug when the test fails.`}export function renderBugFileResult(e){return[`Filed #${String(e.issue.number)}: ${e.issue.url}`,...e.covers==="file"?[`Covers: the whole script ${e.draft.test.file}, not one test. While the issue is open, every named failure in that file and its script failure are known.`]:[],e.area===null?"Area: none, because testkit.config.ts has no areas":`Area: ${e.area.id}, ${d(e.area.share)} of source bytes`,e.introducedBy===null?"Introduced by: unknown, because this shallow clone stops before the commit that wrote the faulty lines":`Introduced by: ${e.introducedBy.slice(0,i)}`,`Draft: ${e.path}`]}export function renderKnownFailures(e){const n=e.known.length,r=n-a;return[...e.trackerProblem===null?[]:[`Testkit could not read the open bugs, so every failure counts as new: ${e.trackerProblem}`],e.new.length===0?`Known failures: ${String(n)}. Every failing test has an open bug, so the run passes.`:`New failures: ${String(e.new.length)}. Known failures: ${String(n)}. The run fails on the new failures.`,...e.known.slice(0,a).map(({failure:t,issue:o})=>` #${String(o.issue)} ${t.file}: ${t.title??s(t)}`),...r>0?[` and ${String(r)} more`]:[]]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{formatCount as s,formatShare as o}from"../../../app/campaigns/brief.js";export function renderCampaignStatus(a){const{active:i,areas:r,lastFinished:n}=a,t=[];if(i===null)t.push("No campaign is active."),n?.finishedAt!==void 0&&t.push(`Last finished: ${n.id}, finished ${n.finishedAt}`);else{t.push(`Active campaign: ${i.id}`,` Target: ${i.target}`,` Started: ${i.startedAt}`,` Start commit: ${i.startCommit}`,`Recorded bugs: ${String(a.drafts.length)}`);for(const e of a.drafts)t.push(` ${e.severity}: ${e.title}`,` Test: ${e.test.file}`,` Issue: ${e.filed?.url??`not filed, draft ${e.id}`}`)}for(const e of a.unreadableDrafts)t.push(`Testkit cannot read ${e.file}: ${e.problem}`);return t.push(r.areaCount===0?"Area map: testkit.config.ts has no areas.":`Area map: ${o(r.unclaimedShare)} of source bytes unclaimed, ${s(r.doubleClaimCount,"double-claimed file")}.`),t}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const t=12;export function renderCiReport(e){return[`Status ${e.context} on ${e.commit.slice(0,12)}: ${e.state}, ${e.description}`,e.comment===null?"Pull request comment: none, because this run has no pull request":`Pull request comment: ${e.comment.created?"created":"updated"} ${e.comment.url}`,...e.stepSummary===null?[]:["Step summary: written"],...e.trackerProblem===null?[]:[`Testkit could not read the open bugs, so every failure counts as new: ${e.trackerProblem}`]]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{inspectPackageVersionDrift as a}from"../app/package-inspection.js";export function checkCliVersionDrift(t
|
|
2
|
-
`):(
|
|
3
|
-
`),
|
|
4
|
-
`),
|
|
5
|
-
`),
|
|
6
|
-
`),
|
|
7
|
-
`)),
|
|
1
|
+
import{inspectPackageVersionDrift as a}from"../app/package-inspection.js";export function checkCliVersionDrift(r,t={}){if(S(r))return null;const e=a({...t,binUrl:t.binUrl||import.meta.url,dir:$(r)});return e?p({...e,args:r}):null}export function emitCliVersionDriftAndExit(r,{json:t=!1}={}){if(!r)return!1;const e=f;return t?e.writeStandardOutput(`${JSON.stringify({error:r},null,2)}
|
|
2
|
+
`):(e.writeStandardError(`${r.message}
|
|
3
|
+
`),e.writeStandardError(`Current binary: @gfdelarue/testkit ${r.current.version} (${r.current.packageRoot})
|
|
4
|
+
`),r.product.version&&r.product.packageRoot&&e.writeStandardError(`Product install: @gfdelarue/testkit ${r.product.version} (${r.product.packageRoot})
|
|
5
|
+
`),r.product.declaredSpec&&e.writeStandardError(`Product declaration: ${r.product.declaredSpec}
|
|
6
|
+
`),e.writeStandardError(`Run: ${r.hint}
|
|
7
|
+
`)),e.setExitCode(1),!0}export function isJsonMode(r=[]){return o(r).includes("--json")}const f=Object.freeze({setExitCode(r){process.exitCode=r},writeStandardError(r){process.stderr.write(r)},writeStandardOutput(r){process.stdout.write(r)}});function p({productDir:r,currentPackageRoot:t,currentVersion:e,productPackageRoot:n,productVersion:i,declaredSpec:s,args:d}){const c=n?"./node_modules/.bin/testkit":"npm exec testkit --",l=`cd ${u(r)} && ${c} ${x(k(d))}`.trim();return{code:"testkit_cli_version_mismatch",message:`Testkit CLI version mismatch for ${r}`,current:{version:e,packageRoot:t},product:{dir:r,version:i,packageRoot:n,declaredSpec:s||null},hint:l}}function S(r=[]){const t=r[0];return!t||t==="--help"||t==="-h"||t==="--version"||t==="-v"||t==="help"}function k(r=[]){const t=[];for(let e=0;e<r.length;e+=1){const n=r[e];if(n==="--"){t.push(...r.slice(e));break}if(n==="--dir"){const i=r.at(e+1);i!==void 0&&i!=="--"&&(e+=1);continue}n.startsWith("--dir=")||t.push(n)}return t}function $(r){const t=o(r);for(let e=0;e<t.length;e+=1){const n=t[e];if(n==="--dir"){const i=t.at(e+1);return i&&(i==="-"||!i.startsWith("-"))?i:null}if(n.startsWith("--dir="))return n.slice(6)||null}return null}function o(r){const t=r.indexOf("--");return t<0?r:r.slice(0,t)}function x(r=[]){return r.map(u).join(" ")}function u(r){const t=r;return/^[A-Za-z0-9_./:=@+-]+$/u.test(t)?t:`'${t.replace(/'/g,"'\\''")}'`}
|
|
@@ -264,12 +264,16 @@ export interface NodeNextPresetOptions {
|
|
|
264
264
|
/** @deprecated Use taskConcurrency. Removed in 0.3.0. */
|
|
265
265
|
workers?: number;
|
|
266
266
|
}
|
|
267
|
+
export interface AreaConfig {
|
|
268
|
+
name: string;
|
|
269
|
+
paths: string[];
|
|
270
|
+
}
|
|
271
|
+
export interface BugsConfig {
|
|
272
|
+
knownFailures?: "allow" | "fail";
|
|
273
|
+
repository?: string;
|
|
274
|
+
}
|
|
267
275
|
export interface TestkitConfig {
|
|
268
|
-
|
|
269
|
-
verification?: {
|
|
270
|
-
minimumConfirmingRuns?: number;
|
|
271
|
-
};
|
|
272
|
-
};
|
|
276
|
+
areas?: Record<string, AreaConfig>;
|
|
273
277
|
artifacts?: {
|
|
274
278
|
publication?: {
|
|
275
279
|
directory: string;
|
|
@@ -281,6 +285,7 @@ export interface TestkitConfig {
|
|
|
281
285
|
preserveSuites?: string[];
|
|
282
286
|
};
|
|
283
287
|
};
|
|
288
|
+
bugs?: BugsConfig;
|
|
284
289
|
discovery?: DiscoveryConfig;
|
|
285
290
|
execution?: TestkitExecutionConfig;
|
|
286
291
|
fingerprints?: FingerprintConfig;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const AREA_ID_PATTERN: RegExp;
|
|
2
|
+
export declare const AREA_ID_MAX_LENGTH = 40;
|
|
3
|
+
export interface AreaDefinition {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly paths: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export type KnownFailuresPolicy = "allow" | "fail";
|
|
9
|
+
export interface BugPolicy {
|
|
10
|
+
readonly knownFailures: KnownFailuresPolicy;
|
|
11
|
+
readonly repository: string | null;
|
|
12
|
+
}
|
|
13
|
+
export declare function isAreaId(value: unknown): value is string;
|
|
14
|
+
export declare function readAreaMap(config: object): readonly AreaDefinition[];
|
|
15
|
+
export declare function readBugPolicy(config: object): BugPolicy;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{attachErrorDiagnostics as h}from"../../kernel/error-serialization.js";import{isUnknownRecord as i}from"../../kernel/unknown-values.js";export const AREA_ID_PATTERN=/^[a-z0-9]+(?:-[a-z0-9]+)*$/u,AREA_ID_MAX_LENGTH=40;const a=60;export function isAreaId(t){return typeof t=="string"&&t.length<=AREA_ID_MAX_LENGTH&&AREA_ID_PATTERN.test(t)}export function readAreaMap(t){const e=i(t)?t.areas:void 0;if(e===void 0)return[];if(!i(e))throw s("areas","areas must be an object keyed by area id");return Object.entries(e).map(([n,r])=>f(n,r))}export function readBugPolicy(t){const e=i(t)?t.bugs:void 0;if(e===void 0)return{knownFailures:"fail",repository:null};if(!i(e))throw s("bugs","bugs must be an object");u(e,["knownFailures","repository"],"bugs");const n=e.knownFailures??"fail";if(n!=="allow"&&n!=="fail")throw s("bugs.knownFailures",'bugs.knownFailures must be "fail" or "allow"');const r=e.repository??null;if(r!==null&&(typeof r!="string"||!/^\S+$/u.test(r)))throw s("bugs.repository",`bugs.repository must be "owner/name" or the repository's URL`);return{knownFailures:n,repository:r}}function f(t,e){const n=`areas.${t}`;if(!isAreaId(t))throw s(n,`area id ${JSON.stringify(t)} must be lowercase letters, digits, and single hyphens, at most ${String(AREA_ID_MAX_LENGTH)} characters`);if(!i(e))throw s(n,`${n} must be an object with name and paths`);u(e,["name","paths"],n);const r=e.name;if(typeof r!="string"||r.trim().length===0||r.length>a||/[\r\n]/u.test(r))throw s(`${n}.name`,`${n}.name must be one line of 1 to ${String(a)} characters`);const o=e.paths;if(!Array.isArray(o)||o.length===0)throw s(`${n}.paths`,`${n}.paths must list at least one glob`);return{id:t,name:r.trim(),paths:o.map(c=>l(c,`${n}.paths`))}}function l(t,e){if(typeof t!="string"||t.length===0||t.startsWith("/")||t.startsWith("!")||t.includes("\\")||t.split("/").includes(".."))throw s(e,`${e} entries must be globs relative to the repository root, written with "/", with no "..", and with no leading "!" or "/"; got ${JSON.stringify(t)}`);return t.replace(/^\.\//u,"")}function u(t,e,n){const r=Object.keys(t).filter(o=>!e.includes(o));if(r.length>0)throw s(`${n}.${r[0]}`,`${n} has no key ${JSON.stringify(r[0])}; it accepts ${e.join(" and ")}`)}function s(t,e){return h(Object.assign(new Error(e),{code:"invalid_bug_config"}),{source:"local",field:t})}
|
|
@@ -7,5 +7,4 @@ export { detectNextApp, type NormalizedRuntimeConfig } from "./runtime.js";
|
|
|
7
7
|
export { DEFAULT_RUNTIME_ISOLATION_POLICY, resolveRuntimeIsolationPolicy, type RuntimeIsolationFileMetadata, type RuntimeIsolationPolicy, type RuntimeIsolationResolutionSuite, type RuntimeIsolationResolverConfig, type RuntimeIsolationResolverTestkitConfig, } from "./runtime-isolation.js";
|
|
8
8
|
export { collectModuleSpecifiers, requireMatchingEngineAuthoringImports, type TestFileMetadata, } from "./file-metadata.js";
|
|
9
9
|
export type { NormalizedSkipConfig } from "./skip-config.js";
|
|
10
|
-
export { minimumConfirmingRuns } from "./cloud.js";
|
|
11
10
|
export { hasDiscoveryErrors, buildDiscoveryErrorFromDiagnostics } from "./discovery.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{loadConfigContext,loadConfigs,parseDotenv,resolveProductDir,resolveServiceCwd}from"./load.js";export{discoverTests,loadDiscoveredConfigContext,loadDiscoveryContext,fileDisplayName,formatDisplayName,testTypeContract}from"./discover-tests.js";export{findConfigFile,loadTestkitConfig}from"./config-loader.js";export{materializeDatabaseConfig}from"./database-materialization.js";export{detectNextApp}from"./runtime.js";export{DEFAULT_RUNTIME_ISOLATION_POLICY,resolveRuntimeIsolationPolicy}from"./runtime-isolation.js";export{collectModuleSpecifiers,requireMatchingEngineAuthoringImports}from"./file-metadata.js";export{
|
|
1
|
+
export{loadConfigContext,loadConfigs,parseDotenv,resolveProductDir,resolveServiceCwd}from"./load.js";export{discoverTests,loadDiscoveredConfigContext,loadDiscoveryContext,fileDisplayName,formatDisplayName,testTypeContract}from"./discover-tests.js";export{findConfigFile,loadTestkitConfig}from"./config-loader.js";export{materializeDatabaseConfig}from"./database-materialization.js";export{detectNextApp}from"./runtime.js";export{DEFAULT_RUNTIME_ISOLATION_POLICY,resolveRuntimeIsolationPolicy}from"./runtime-isolation.js";export{collectModuleSpecifiers,requireMatchingEngineAuthoringImports}from"./file-metadata.js";export{hasDiscoveryErrors,buildDiscoveryErrorFromDiagnostics}from"./discovery.js";
|
|
@@ -27,6 +27,10 @@ export declare function taskBeforeStartOutcome(task: EngineExecutionTask, signal
|
|
|
27
27
|
export declare function taskTimeoutFailure(timeoutMs: number, identity: EngineFailureIdentity): EngineFailureEvidence;
|
|
28
28
|
export declare function managedProcessFailure(result: ManagedProcessResult, identity: EngineFailureIdentity, evidenceError?: Error | null): EngineFailureEvidence | null;
|
|
29
29
|
export declare function classifyManagedProcessResult(result: ManagedProcessResult, timeoutMs: number, deadlineExceeded: boolean, identity: EngineFailureIdentity): ProcessClassification | null;
|
|
30
|
+
export declare function processExitDetails(result: ManagedProcessResult): {
|
|
31
|
+
exitCode?: number;
|
|
32
|
+
exitSignal?: string;
|
|
33
|
+
};
|
|
30
34
|
export declare function processExitFailure(result: ManagedProcessResult, identity: EngineFailureIdentity, selectedMessage?: string | null, fallbackLabel?: string): ProcessClassification;
|
|
31
35
|
export declare function firstOutputLine(output: string): string | null;
|
|
32
36
|
export declare function terminalOutcome(taskId: string, status: TestOutcomeStatus, startedAtMs: number, evidence: EngineEvidence, failure: EngineFailureEvidence | null): EngineTaskOutcome;
|