@codyswann/lisa 2.286.7 → 2.286.9
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/dist/cli/doctor-readiness-delivery.d.ts.map +1 -1
- package/dist/cli/doctor-readiness-delivery.js +5 -8
- package/dist/cli/doctor-readiness-delivery.js.map +1 -1
- package/dist/cli/doctor-readiness-release-path.d.ts +18 -28
- package/dist/cli/doctor-readiness-release-path.d.ts.map +1 -1
- package/dist/cli/doctor-readiness-release-path.js +93 -45
- package/dist/cli/doctor-readiness-release-path.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +1 -0
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-readiness-delivery.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-delivery.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EACL,KAAK,cAAc,EAEpB,MAAM,iCAAiC,CAAC;AAEzC,+EAA+E;AAC/E,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-readiness-delivery.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-delivery.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EACL,KAAK,cAAc,EAEpB,MAAM,iCAAiC,CAAC;AAEzC,+EAA+E;AAC/E,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AAgOpE;;;;;;;;;GASG;AACH,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,MAAM,EACZ,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,GAC1C,OAAO,CAAC,wBAAwB,CAAC,CAiBnC"}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import { detectCredentialFindings, } from "./doctor-readiness-credentials.js";
|
|
28
28
|
import { informationalFindings } from "./doctor-readiness-shared.js";
|
|
29
|
-
import {
|
|
29
|
+
import { assessReleasePaths, PROMOTION_ACTION, } from "./doctor-readiness-release-path.js";
|
|
30
30
|
import { parseRepositoryWorkflows, } from "./doctor-readiness-workflows.js";
|
|
31
31
|
/** The delivery/authority readiness dimension id (readiness-rubric, RRR-1). */
|
|
32
32
|
export const DELIVERY_AUTHORITY_DIMENSION_ID = "delivery-authority";
|
|
@@ -40,15 +40,12 @@ const CREDENTIAL_BLOCKER_ID = "B3";
|
|
|
40
40
|
* @returns What the release paths established, in aggregate
|
|
41
41
|
*/
|
|
42
42
|
function summarizeReleasePaths(workflows) {
|
|
43
|
-
const outcomes = workflows.flatMap(workflow => workflow.jobs.flatMap(job =>
|
|
44
|
-
const outcome = assessReleasePath(workflow, job);
|
|
45
|
-
return outcome ? [outcome] : [];
|
|
46
|
-
}));
|
|
43
|
+
const outcomes = workflows.flatMap(workflow => workflow.jobs.flatMap(job => assessReleasePaths(workflow, job)));
|
|
47
44
|
return {
|
|
48
45
|
violations: outcomes.flatMap(outcome => outcome.kind === "violation" ? [outcome.evidence] : []),
|
|
49
46
|
unresolved: outcomes.flatMap(outcome => outcome.kind === "unresolved" ? [outcome.reason] : []),
|
|
50
47
|
cleanCount: outcomes.filter(outcome => outcome.kind === "clean").length,
|
|
51
|
-
|
|
48
|
+
publishStepCount: outcomes.length,
|
|
52
49
|
};
|
|
53
50
|
}
|
|
54
51
|
/**
|
|
@@ -125,7 +122,7 @@ function cleanRecord(summary, workflows, credentials) {
|
|
|
125
122
|
status: "PASS",
|
|
126
123
|
findings: [
|
|
127
124
|
{
|
|
128
|
-
evidence: `Inspected ${summary.
|
|
125
|
+
evidence: `Inspected ${summary.publishStepCount} publishing step(s) across ` +
|
|
129
126
|
`${workflows.length} workflow file(s): each is preceded by a test ` +
|
|
130
127
|
`run or promotes the CI-built artifact via \`${PROMOTION_ACTION}\`. ` +
|
|
131
128
|
"No workflow declares blanket permissions, inherited secrets, or " +
|
|
@@ -226,7 +223,7 @@ export async function assessDeliveryAuthorityDimension(root, parsedWorkflows) {
|
|
|
226
223
|
if (summary.unresolved.length > 0) {
|
|
227
224
|
return unresolvedRecord(summary.unresolved, credentials);
|
|
228
225
|
}
|
|
229
|
-
if (summary.
|
|
226
|
+
if (summary.publishStepCount === 0) {
|
|
230
227
|
return noReleasePathRecord(workflows, credentials);
|
|
231
228
|
}
|
|
232
229
|
return cleanRecord(summary, workflows, credentials);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-readiness-delivery.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAEL,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"doctor-readiness-delivery.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Release-path assessment for the delivery/authority readiness dimension — ship
|
|
3
3
|
* blocker B2 (PRD #1739, #1896).
|
|
4
|
-
*
|
|
5
|
-
* B2 asks whether the thing that ships equals the thing that was validated. The
|
|
6
|
-
* question is answered offline, from the workflow files alone, which imposes a
|
|
7
|
-
* hard discipline: **absence of evidence is not evidence of a bypass.** A
|
|
8
|
-
* reusable `workflow_call` publish workflow has no validating job of its own
|
|
9
|
-
* because validation is the caller's obligation; a `workflow_run`-triggered
|
|
10
|
-
* deploy is gated by the upstream workflow that fired it; a default-branch push
|
|
11
|
-
* may be gated by branch protection. None of those are visible here, so none of
|
|
12
|
-
* them may be reported as a violation.
|
|
13
|
-
*
|
|
14
|
-
* The rule is therefore: stand B2 only when the bypass is provable from the file
|
|
15
|
-
* alone — a job that self-builds AND publishes with no validating ancestor, in a
|
|
16
|
-
* workflow whose trigger makes in-file validation the expected place for it
|
|
17
|
-
* (a tag push, `workflow_dispatch`, `schedule`, a non-default-branch push, or an
|
|
18
|
-
* unstated trigger). Everything else that cannot be settled offline returns a
|
|
19
|
-
* stated-reason SKIP, never a FAIL.
|
|
20
4
|
* @module cli/doctor-readiness-release-path
|
|
21
5
|
*/
|
|
22
6
|
import type { ParsedWorkflow, ParsedWorkflowJob, ParsedWorkflowStep } from "./doctor-readiness-workflows.js";
|
|
23
|
-
/** The action that promotes the artifact CI already built and validated. */
|
|
24
7
|
export declare const PROMOTION_ACTION = "actions/download-artifact";
|
|
25
|
-
/** What assessing one publishing
|
|
26
|
-
export type ReleasePathOutcome =
|
|
27
|
-
/** The bypass is provable from this file alone. */
|
|
28
|
-
{
|
|
8
|
+
/** What assessing one publishing step established. */
|
|
9
|
+
export type ReleasePathOutcome = {
|
|
29
10
|
readonly kind: "violation";
|
|
30
11
|
readonly evidence: string;
|
|
31
|
-
}
|
|
32
|
-
/** The proof, if any, lives somewhere not resolvable offline. */
|
|
33
|
-
| {
|
|
12
|
+
} | {
|
|
34
13
|
readonly kind: "unresolved";
|
|
35
14
|
readonly reason: string;
|
|
36
|
-
}
|
|
37
|
-
/** Validation provably precedes the publish, or the artifact is promoted. */
|
|
38
|
-
| {
|
|
15
|
+
} | {
|
|
39
16
|
readonly kind: "clean";
|
|
40
17
|
};
|
|
41
18
|
/**
|
|
@@ -46,10 +23,16 @@ export type ReleasePathOutcome =
|
|
|
46
23
|
* @returns A single-line label, at most {@link MAX_STEP_LABEL} characters
|
|
47
24
|
*/
|
|
48
25
|
export declare function describeStep(step: ParsedWorkflowStep): string;
|
|
26
|
+
/**
|
|
27
|
+
* Find every step in a job that ships something.
|
|
28
|
+
* @param job - The parsed job
|
|
29
|
+
* @returns The publishing steps, in execution order
|
|
30
|
+
*/
|
|
31
|
+
export declare function findPublishSteps(job: ParsedWorkflowJob): readonly ParsedWorkflowStep[];
|
|
49
32
|
/**
|
|
50
33
|
* Find the first step in a job that ships something.
|
|
51
34
|
* @param job - The parsed job
|
|
52
|
-
* @returns The publishing step, or undefined when the job ships nothing
|
|
35
|
+
* @returns The first publishing step, or undefined when the job ships nothing
|
|
53
36
|
*/
|
|
54
37
|
export declare function findPublishStep(job: ParsedWorkflowJob): ParsedWorkflowStep | undefined;
|
|
55
38
|
/**
|
|
@@ -59,4 +42,11 @@ export declare function findPublishStep(job: ParsedWorkflowJob): ParsedWorkflowS
|
|
|
59
42
|
* @returns What this job established, or undefined when it ships nothing
|
|
60
43
|
*/
|
|
61
44
|
export declare function assessReleasePath(workflow: ParsedWorkflow, job: ParsedWorkflowJob): ReleasePathOutcome | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Assess every publishing step in one job against B2.
|
|
47
|
+
* @param workflow - The workflow declaring the job
|
|
48
|
+
* @param job - The job to assess
|
|
49
|
+
* @returns One outcome per publishing step, or an empty list when it ships nothing
|
|
50
|
+
*/
|
|
51
|
+
export declare function assessReleasePaths(workflow: ParsedWorkflow, job: ParsedWorkflowJob): readonly ReleasePathOutcome[];
|
|
62
52
|
//# sourceMappingURL=doctor-readiness-release-path.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-readiness-release-path.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-release-path.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"doctor-readiness-release-path.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-release-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AAsFzC,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAM5D,sDAAsD;AACtD,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAE/B;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAW7D;AAyDD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,iBAAiB,GACrB,SAAS,kBAAkB,EAAE,CAE/B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,iBAAiB,GACrB,kBAAkB,GAAG,SAAS,CAEhC;AA+JD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,iBAAiB,GACrB,kBAAkB,GAAG,SAAS,CAEhC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,iBAAiB,GACrB,SAAS,kBAAkB,EAAE,CAuB/B"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/** Commands that put an artifact in front of users. */
|
|
2
1
|
const PUBLISH_VERBS = [
|
|
3
2
|
"npm publish",
|
|
4
3
|
"docker push",
|
|
@@ -7,16 +6,10 @@ const PUBLISH_VERBS = [
|
|
|
7
6
|
"cdk deploy",
|
|
8
7
|
"eas submit",
|
|
9
8
|
];
|
|
10
|
-
/** Publish actions that put release artifacts in front of users. */
|
|
11
9
|
const DOCKER_BUILD_PUSH_ACTION = "docker/build-push-action";
|
|
12
10
|
const PYPI_PUBLISH_ACTION = "pypa/gh-action-pypi-publish";
|
|
13
11
|
const GITHUB_RELEASE_ACTION = "softprops/action-gh-release";
|
|
14
|
-
/**
|
|
15
|
-
* Commands that actually run a test suite. Deliberately narrow: the invariant B2
|
|
16
|
-
* protects is "this artifact was *tested*", and a loose substring match (`echo
|
|
17
|
-
* "test the release notes"`, or a lint step) would manufacture false
|
|
18
|
-
* reassurance — the wrong direction to err for a gate.
|
|
19
|
-
*/
|
|
12
|
+
/** Commands that actually run a test suite. */
|
|
20
13
|
const VALIDATING_COMMANDS = [
|
|
21
14
|
/\b(npm|yarn|pnpm|bun|npx|bunx)\s+(run\s+)?test\b/,
|
|
22
15
|
/\btest:[\w:-]+/,
|
|
@@ -34,16 +27,49 @@ function isValidatingCommand(run) {
|
|
|
34
27
|
/** Reusable workflows whose whole purpose is validation. */
|
|
35
28
|
const VALIDATING_WORKFLOW = /(quality|quality-rails|test|ci)\.ya?ml/;
|
|
36
29
|
/** Commands that produce an artifact locally, inside the shipping job. */
|
|
37
|
-
const
|
|
38
|
-
|
|
30
|
+
const LOCAL_BUILD_COMMANDS = [
|
|
31
|
+
/\b(npm pack|npm run build|yarn build|bun run build|bun run build:\w+|pnpm build|docker build|tsc)\b/,
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Whether a templated package manager expression runs the standard build script.
|
|
35
|
+
* @param run - The step's `run` text
|
|
36
|
+
* @returns True for commands like `${{ inputs.package_manager }} run build`
|
|
37
|
+
*/
|
|
38
|
+
function isTemplatedPackageManagerBuild(run) {
|
|
39
|
+
const lower = run.toLowerCase();
|
|
40
|
+
const scan = (cursor) => {
|
|
41
|
+
const start = lower.indexOf("${{", cursor);
|
|
42
|
+
if (start < 0) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const end = lower.indexOf("}}", start + 3);
|
|
46
|
+
if (end < 0) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
const expression = lower.slice(start + 3, end);
|
|
50
|
+
const tail = lower.slice(end + 2).trimStart();
|
|
51
|
+
if ((expression.includes("package_manager") ||
|
|
52
|
+
expression.includes("package-manager")) &&
|
|
53
|
+
/^run\s+build(?:\s|$)/.test(tail)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
return scan(end + 2);
|
|
57
|
+
};
|
|
58
|
+
return scan(0);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Whether a command builds an artifact inside the shipping job.
|
|
62
|
+
* @param run - The step's `run` text
|
|
63
|
+
* @returns True when the command matches a known local build invocation
|
|
64
|
+
*/
|
|
65
|
+
function isLocalBuildCommand(run) {
|
|
66
|
+
return (LOCAL_BUILD_COMMANDS.some(pattern => pattern.test(run)) ||
|
|
67
|
+
isTemplatedPackageManagerBuild(run));
|
|
68
|
+
}
|
|
39
69
|
const LOCAL_PATH_ARGUMENT = /\s\.{0,2}\//;
|
|
40
|
-
/** A publish argument naming a packaged artifact file on disk. */
|
|
41
70
|
const LOCAL_ARTIFACT_FILE = /\.(tgz|tar\.gz|zip|whl)\b/;
|
|
42
|
-
/** The action that promotes the artifact CI already built and validated. */
|
|
43
71
|
export const PROMOTION_ACTION = "actions/download-artifact";
|
|
44
|
-
/** Branch names treated as the repository's default branch. */
|
|
45
72
|
const DEFAULT_BRANCHES = new Set(["main", "master"]);
|
|
46
|
-
/** Longest step description carried into persisted evidence. */
|
|
47
73
|
const MAX_STEP_LABEL = 80;
|
|
48
74
|
/**
|
|
49
75
|
* Describe a step for persisted evidence: prefer its `name`, else the first
|
|
@@ -109,13 +135,21 @@ function isPublishStep(step) {
|
|
|
109
135
|
!DRY_RUN_FLAG.test(step.run)) ||
|
|
110
136
|
isPublishAction(step));
|
|
111
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Find every step in a job that ships something.
|
|
140
|
+
* @param job - The parsed job
|
|
141
|
+
* @returns The publishing steps, in execution order
|
|
142
|
+
*/
|
|
143
|
+
export function findPublishSteps(job) {
|
|
144
|
+
return job.steps.filter(isPublishStep);
|
|
145
|
+
}
|
|
112
146
|
/**
|
|
113
147
|
* Find the first step in a job that ships something.
|
|
114
148
|
* @param job - The parsed job
|
|
115
|
-
* @returns The publishing step, or undefined when the job ships nothing
|
|
149
|
+
* @returns The first publishing step, or undefined when the job ships nothing
|
|
116
150
|
*/
|
|
117
151
|
export function findPublishStep(job) {
|
|
118
|
-
return job
|
|
152
|
+
return findPublishSteps(job)[0];
|
|
119
153
|
}
|
|
120
154
|
/**
|
|
121
155
|
* Whether a job proves anything about the artifact.
|
|
@@ -183,18 +217,22 @@ function shipsSelfBuiltArtifact(job, publishStep) {
|
|
|
183
217
|
if (actionId(publishStep.uses) === DOCKER_BUILD_PUSH_ACTION) {
|
|
184
218
|
return true;
|
|
185
219
|
}
|
|
186
|
-
const
|
|
220
|
+
const publishIndex = job.steps.indexOf(publishStep);
|
|
221
|
+
const stepsThroughPublish = job.steps.slice(0, publishIndex + 1);
|
|
222
|
+
const downloadIndex = job.steps
|
|
223
|
+
.slice(0, publishIndex)
|
|
224
|
+
.reduce((latest, step, index) => step.uses.includes(PROMOTION_ACTION) ? index : latest, -1);
|
|
187
225
|
if (downloadIndex >= 0) {
|
|
188
|
-
const rebuildsAfterDownload =
|
|
226
|
+
const rebuildsAfterDownload = stepsThroughPublish
|
|
189
227
|
.slice(downloadIndex + 1)
|
|
190
|
-
.some(step =>
|
|
228
|
+
.some(step => isLocalBuildCommand(step.run));
|
|
191
229
|
if (!rebuildsAfterDownload) {
|
|
192
230
|
return false;
|
|
193
231
|
}
|
|
194
232
|
}
|
|
195
233
|
return (LOCAL_PATH_ARGUMENT.test(publishStep.run) ||
|
|
196
234
|
LOCAL_ARTIFACT_FILE.test(publishStep.run) ||
|
|
197
|
-
|
|
235
|
+
stepsThroughPublish.some(step => isLocalBuildCommand(step.run)));
|
|
198
236
|
}
|
|
199
237
|
/**
|
|
200
238
|
* Decide whether a workflow's trigger makes in-file validation the expected
|
|
@@ -236,29 +274,36 @@ function offlineUnresolvableTrigger(workflow) {
|
|
|
236
274
|
* @returns What this job established, or undefined when it ships nothing
|
|
237
275
|
*/
|
|
238
276
|
export function assessReleasePath(workflow, job) {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
277
|
+
return assessReleasePaths(workflow, job)[0];
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Assess every publishing step in one job against B2.
|
|
281
|
+
* @param workflow - The workflow declaring the job
|
|
282
|
+
* @param job - The job to assess
|
|
283
|
+
* @returns One outcome per publishing step, or an empty list when it ships nothing
|
|
284
|
+
*/
|
|
285
|
+
export function assessReleasePaths(workflow, job) {
|
|
286
|
+
return findPublishSteps(job).map(publishStep => {
|
|
287
|
+
const where = `${workflow.file} job \`${job.id}\` step \`${describeStep(publishStep)}\``;
|
|
288
|
+
const validated = validationPrecedesPublish(workflow, job, publishStep);
|
|
289
|
+
if (shipsSelfBuiltArtifact(job, publishStep)) {
|
|
290
|
+
return validated
|
|
291
|
+
? rebuildPastValidation(where)
|
|
292
|
+
: unvalidatedSelfBuild(where, workflow);
|
|
293
|
+
}
|
|
294
|
+
if (validated || promotesValidatedArtifact(job, publishStep)) {
|
|
295
|
+
return { kind: "clean" };
|
|
296
|
+
}
|
|
297
|
+
// Neither built here nor promoted from CI, and nothing validating precedes it:
|
|
298
|
+
// the link between what ships and what was validated is simply not observable
|
|
299
|
+
// in this file. That is unestablished, not clean.
|
|
300
|
+
return {
|
|
301
|
+
kind: "unresolved",
|
|
302
|
+
reason: `${where} neither builds its own artifact nor promotes a CI-built one via ` +
|
|
303
|
+
`\`${PROMOTION_ACTION}\`, and no validating job precedes it, so what it ` +
|
|
304
|
+
"ships cannot be tied to anything that was validated",
|
|
305
|
+
};
|
|
306
|
+
});
|
|
262
307
|
}
|
|
263
308
|
/**
|
|
264
309
|
* The provable bypass that survives every trigger: the pipeline validated the
|
|
@@ -305,9 +350,12 @@ function unvalidatedSelfBuild(where, workflow) {
|
|
|
305
350
|
/**
|
|
306
351
|
* Whether the job promotes the artifact CI already built and validated.
|
|
307
352
|
* @param job - The publishing job
|
|
353
|
+
* @param publishStep - The step that ships
|
|
308
354
|
* @returns True when a download-artifact step is present
|
|
309
355
|
*/
|
|
310
|
-
function promotesValidatedArtifact(job) {
|
|
311
|
-
return job.steps
|
|
356
|
+
function promotesValidatedArtifact(job, publishStep) {
|
|
357
|
+
return job.steps
|
|
358
|
+
.slice(0, job.steps.indexOf(publishStep))
|
|
359
|
+
.some(step => step.uses.includes(PROMOTION_ACTION));
|
|
312
360
|
}
|
|
313
361
|
//# sourceMappingURL=doctor-readiness-release-path.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-readiness-release-path.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-release-path.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor-readiness-release-path.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-release-path.ts"],"names":[],"mappings":"AAWA,MAAM,aAAa,GAAG;IACpB,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,aAAa;IACb,YAAY;IACZ,YAAY;CACb,CAAC;AAEF,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAC1D,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AAE5D,+CAA+C;AAC/C,MAAM,mBAAmB,GAAsB;IAC7C,kDAAkD;IAClD,gBAAgB;IAChB,iDAAiD;IACjD,8CAA8C;CAC/C,CAAC;AAEF;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,4DAA4D;AAC5D,MAAM,mBAAmB,GAAG,wCAAwC,CAAC;AAErE,0EAA0E;AAC1E,MAAM,oBAAoB,GAAsB;IAC9C,qGAAqG;CACtG,CAAC;AAEF;;;;GAIG;AACH,SAAS,8BAA8B,CAAC,GAAW;IACjD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,CAAC,MAAc,EAAW,EAAE;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9C,IACE,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACrC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YACzC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EACjC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,CACL,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvD,8BAA8B,CAAC,GAAG,CAAC,CACpC,CAAC;AACJ,CAAC;AAED,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAE1C,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAExD,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAE5D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAErD,MAAM,cAAc,GAAG,EAAE,CAAC;AAQ1B;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,MAAM,MAAM,GACV,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAClB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;aACN,KAAK,CAAC,IAAI,CAAC;aACX,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACjC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,GAAG,cAAc;QACnC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,OAAO,EAAE,GAAG;QACjD,CAAC,CAAC,MAAM,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAEvC;;;;GAIG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,MAAc,EAAE,IAAY;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO,IAAI,MAAM,CAAC,UAAU,OAAO,4BAA4B,EAAE,GAAG,CAAC,CAAC,IAAI,CACxE,MAAM,CACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAwB;IAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,EAAE,KAAK,wBAAwB,EAAE,CAAC;QACpC,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,KAAK,mBAAmB,IAAI,EAAE,KAAK,qBAAqB,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAAwB;IAC7C,OAAO,CACL,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,eAAe,CAAC,IAAI,CAAC,CACtB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAsB;IAEtB,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAsB;IAEtB,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,GAAsB;IAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CACnB,IAAI,CAAC,EAAE,CACL,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CACnB,QAAwB,EACxB,GAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CACX,GAAsB,EACtB,IAAuB,EACO,EAAE;QAChC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO;YACL,GAAG,IAAI;YACP,GAAG,IAAI,CACL,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EACxC,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CACpB;SACF,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,yBAAyB,CAChC,QAAwB,EACxB,GAAsB,EACtB,WAA+B;IAE/B,IAAI,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC,KAAK;SACb,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,sBAAsB,CAC7B,GAAsB,EACtB,WAA+B;IAE/B,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,wBAAwB,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,mBAAmB,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK;SAC5B,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;SACtB,MAAM,CACL,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EACvD,CAAC,CAAC,CACH,CAAC;IACJ,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,qBAAqB,GAAG,mBAAmB;aAC9C,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;aACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,CACL,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QACzC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QACzC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAChE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,0BAA0B,CAAC,QAAwB;IAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC;IAClC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,eAAe,CAAC,EAAE,CAAC;QAC1E,OAAO,CACL,0EAA0E;YAC1E,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpC,OAAO,CACL,2EAA2E;YAC3E,8CAA8C,CAC/C,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,CACL,0EAA0E;YAC1E,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IACD,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,cAAc,GAClB,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QACrC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IACpC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAC/D,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAC7B,CAAC;IACF,IAAI,cAAc,IAAI,iBAAiB,EAAE,CAAC;QACxC,OAAO,CACL,2EAA2E;YAC3E,yEAAyE;YACzE,cAAc,CACf,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAwB,EACxB,GAAsB;IAEtB,OAAO,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAwB,EACxB,GAAsB;IAEtB,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QAC7C,MAAM,KAAK,GAAG,GAAG,QAAQ,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,aAAa,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC;QACzF,MAAM,SAAS,GAAG,yBAAyB,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACxE,IAAI,sBAAsB,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7C,OAAO,SAAS;gBACd,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC;gBAC9B,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,SAAS,IAAI,yBAAyB,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,+EAA+E;QAC/E,8EAA8E;QAC9E,kDAAkD;QAClD,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,MAAM,EACJ,GAAG,KAAK,mEAAmE;gBAC3E,KAAK,gBAAgB,oDAAoD;gBACzE,qDAAqD;SACxD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,QAAQ,EACN,GAAG,KAAK,kEAAkE;YAC1E,wEAAwE;YACxE,qEAAqE;YACrE,kBAAkB,gBAAgB,yCAAyC;KAC9E,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAC3B,KAAa,EACb,QAAwB;IAExB,MAAM,YAAY,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,MAAM,EACJ,GAAG,KAAK,+DAA+D;gBACvE,+BAA+B,YAAY,8BAA8B;gBACzE,4DAA4D;SAC/D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,QAAQ,EACN,GAAG,KAAK,kEAAkE;YAC1E,mCAAmC,gBAAgB,sBAAsB;YACzE,sEAAsE;KACzE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,yBAAyB,CAChC,GAAsB,EACtB,WAA+B;IAE/B,OAAO,GAAG,CAAC,KAAK;SACb,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAshEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAshEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CA0tMjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|
|
@@ -6655,6 +6655,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
6655
6655
|
"tests/unit/cli/doctor-readiness-context.test.ts": true,
|
|
6656
6656
|
"tests/unit/cli/doctor-readiness-credentials-round2.test.ts": true,
|
|
6657
6657
|
"tests/unit/cli/doctor-readiness-delivery-artifact.test.ts": true,
|
|
6658
|
+
"tests/unit/cli/doctor-readiness-delivery-multiple-publish.test.ts": true,
|
|
6658
6659
|
"tests/unit/cli/doctor-readiness-delivery-triggers.test.ts": true,
|
|
6659
6660
|
"tests/unit/cli/doctor-readiness-delivery.test.ts": true,
|
|
6660
6661
|
"tests/unit/cli/doctor-readiness-domain-ephemeral.test.ts": true,
|