@codyswann/lisa 2.286.8 → 2.286.10
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 +35 -10
- package/dist/cli/doctor-readiness-delivery.js.map +1 -1
- package/dist/cli/doctor-readiness-release-path.d.ts +11 -33
- package/dist/cli/doctor-readiness-release-path.d.ts.map +1 -1
- package/dist/cli/doctor-readiness-release-path.js +53 -55
- 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":"
|
|
1
|
+
{"version":3,"file":"doctor-readiness-delivery.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-delivery.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EACL,KAAK,cAAc,EAEpB,MAAM,iCAAiC,CAAC;AAGzC,+EAA+E;AAC/E,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AA8PpE;;;;;;;;;GASG;AACH,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,MAAM,EACZ,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,GAC1C,OAAO,CAAC,wBAAwB,CAAC,CAoBnC"}
|
|
@@ -24,10 +24,13 @@
|
|
|
24
24
|
* was validated.
|
|
25
25
|
* @module cli/doctor-readiness-delivery
|
|
26
26
|
*/
|
|
27
|
+
import { readFile } from "node:fs/promises";
|
|
28
|
+
import * as path from "node:path";
|
|
27
29
|
import { detectCredentialFindings, } from "./doctor-readiness-credentials.js";
|
|
28
30
|
import { informationalFindings } from "./doctor-readiness-shared.js";
|
|
29
|
-
import {
|
|
31
|
+
import { assessReleasePaths, PROMOTION_ACTION, } from "./doctor-readiness-release-path.js";
|
|
30
32
|
import { parseRepositoryWorkflows, } from "./doctor-readiness-workflows.js";
|
|
33
|
+
import { isJsonObject } from "../sync/json-path.js";
|
|
31
34
|
/** The delivery/authority readiness dimension id (readiness-rubric, RRR-1). */
|
|
32
35
|
export const DELIVERY_AUTHORITY_DIMENSION_ID = "delivery-authority";
|
|
33
36
|
/** The ship blocker for a release path that bypasses the validated artifact. */
|
|
@@ -37,20 +40,42 @@ const CREDENTIAL_BLOCKER_ID = "B3";
|
|
|
37
40
|
/**
|
|
38
41
|
* Assess every publishing job across every workflow.
|
|
39
42
|
* @param workflows - Parsed workflows
|
|
43
|
+
* @param defaultBranches - Project-local default-like branch names
|
|
40
44
|
* @returns What the release paths established, in aggregate
|
|
41
45
|
*/
|
|
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
|
-
}));
|
|
46
|
+
function summarizeReleasePaths(workflows, defaultBranches) {
|
|
47
|
+
const outcomes = workflows.flatMap(workflow => workflow.jobs.flatMap(job => assessReleasePaths(workflow, job, defaultBranches)));
|
|
47
48
|
return {
|
|
48
49
|
violations: outcomes.flatMap(outcome => outcome.kind === "violation" ? [outcome.evidence] : []),
|
|
49
50
|
unresolved: outcomes.flatMap(outcome => outcome.kind === "unresolved" ? [outcome.reason] : []),
|
|
50
51
|
cleanCount: outcomes.filter(outcome => outcome.kind === "clean").length,
|
|
51
|
-
|
|
52
|
+
publishStepCount: outcomes.length,
|
|
52
53
|
};
|
|
53
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Read the local production branch hint Lisa writes into project config. This
|
|
57
|
+
* stays offline and best-effort: unreadable or unusual config falls back to the
|
|
58
|
+
* built-in `main`/`master` defaults in the release-path assessor.
|
|
59
|
+
* @param root - Project root to inspect
|
|
60
|
+
* @returns Configured default-like branch names
|
|
61
|
+
*/
|
|
62
|
+
async function configuredDefaultBranches(root) {
|
|
63
|
+
try {
|
|
64
|
+
const raw = await readFile(path.join(root, ".lisa.config.json"), "utf8");
|
|
65
|
+
const parsed = JSON.parse(raw);
|
|
66
|
+
if (!isJsonObject(parsed) || !isJsonObject(parsed.deploy)) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
const branches = parsed.deploy.branches;
|
|
70
|
+
if (!isJsonObject(branches)) {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
return typeof branches.production === "string" ? [branches.production] : [];
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
54
79
|
/**
|
|
55
80
|
* Build the B2 finding from its evidence lines.
|
|
56
81
|
* @param violations - Evidence lines
|
|
@@ -125,7 +150,7 @@ function cleanRecord(summary, workflows, credentials) {
|
|
|
125
150
|
status: "PASS",
|
|
126
151
|
findings: [
|
|
127
152
|
{
|
|
128
|
-
evidence: `Inspected ${summary.
|
|
153
|
+
evidence: `Inspected ${summary.publishStepCount} publishing step(s) across ` +
|
|
129
154
|
`${workflows.length} workflow file(s): each is preceded by a test ` +
|
|
130
155
|
`run or promotes the CI-built artifact via \`${PROMOTION_ACTION}\`. ` +
|
|
131
156
|
"No workflow declares blanket permissions, inherited secrets, or " +
|
|
@@ -218,7 +243,7 @@ export async function assessDeliveryAuthorityDimension(root, parsedWorkflows) {
|
|
|
218
243
|
if (workflows.length === 0) {
|
|
219
244
|
return noWorkflowsRecord();
|
|
220
245
|
}
|
|
221
|
-
const summary = summarizeReleasePaths(workflows);
|
|
246
|
+
const summary = summarizeReleasePaths(workflows, await configuredDefaultBranches(root));
|
|
222
247
|
const credentials = detectCredentialFindings(workflows);
|
|
223
248
|
if (summary.violations.length > 0 || credentials.violations.length > 0) {
|
|
224
249
|
return violationRecord(summary, credentials);
|
|
@@ -226,7 +251,7 @@ export async function assessDeliveryAuthorityDimension(root, parsedWorkflows) {
|
|
|
226
251
|
if (summary.unresolved.length > 0) {
|
|
227
252
|
return unresolvedRecord(summary.unresolved, credentials);
|
|
228
253
|
}
|
|
229
|
-
if (summary.
|
|
254
|
+
if (summary.publishStepCount === 0) {
|
|
230
255
|
return noReleasePathRecord(workflows, credentials);
|
|
231
256
|
}
|
|
232
257
|
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
|
/**
|
|
@@ -47,16 +24,17 @@ export type ReleasePathOutcome =
|
|
|
47
24
|
*/
|
|
48
25
|
export declare function describeStep(step: ParsedWorkflowStep): string;
|
|
49
26
|
/**
|
|
50
|
-
* Find
|
|
27
|
+
* Find every step in a job that ships something.
|
|
51
28
|
* @param job - The parsed job
|
|
52
|
-
* @returns The publishing
|
|
29
|
+
* @returns The publishing steps, in execution order
|
|
53
30
|
*/
|
|
54
|
-
export declare function
|
|
31
|
+
export declare function findPublishSteps(job: ParsedWorkflowJob): readonly ParsedWorkflowStep[];
|
|
55
32
|
/**
|
|
56
|
-
* Assess one job
|
|
33
|
+
* Assess every publishing step in one job against B2.
|
|
57
34
|
* @param workflow - The workflow declaring the job
|
|
58
35
|
* @param job - The job to assess
|
|
59
|
-
* @
|
|
36
|
+
* @param defaultBranches - Project-local default-like branch names
|
|
37
|
+
* @returns One outcome per publishing step, or an empty list when it ships nothing
|
|
60
38
|
*/
|
|
61
|
-
export declare function
|
|
39
|
+
export declare function assessReleasePaths(workflow: ParsedWorkflow, job: ParsedWorkflowJob, defaultBranches?: readonly string[]): readonly ReleasePathOutcome[];
|
|
62
40
|
//# 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;AAqFzC,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAI5D,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;AAuDD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,iBAAiB,GACrB,SAAS,kBAAkB,EAAE,CAE/B;AAuKD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,iBAAiB,EACtB,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAClC,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:-]+/,
|
|
@@ -73,15 +66,10 @@ function isLocalBuildCommand(run) {
|
|
|
73
66
|
return (LOCAL_BUILD_COMMANDS.some(pattern => pattern.test(run)) ||
|
|
74
67
|
isTemplatedPackageManagerBuild(run));
|
|
75
68
|
}
|
|
76
|
-
/** A publish argument naming a local path rather than a registry coordinate. */
|
|
77
69
|
const LOCAL_PATH_ARGUMENT = /\s\.{0,2}\//;
|
|
78
|
-
/** A publish argument naming a packaged artifact file on disk. */
|
|
79
70
|
const LOCAL_ARTIFACT_FILE = /\.(tgz|tar\.gz|zip|whl)\b/;
|
|
80
|
-
/** The action that promotes the artifact CI already built and validated. */
|
|
81
71
|
export const PROMOTION_ACTION = "actions/download-artifact";
|
|
82
|
-
/** Branch names treated as the repository's default branch. */
|
|
83
72
|
const DEFAULT_BRANCHES = new Set(["main", "master"]);
|
|
84
|
-
/** Longest step description carried into persisted evidence. */
|
|
85
73
|
const MAX_STEP_LABEL = 80;
|
|
86
74
|
/**
|
|
87
75
|
* Describe a step for persisted evidence: prefer its `name`, else the first
|
|
@@ -101,9 +89,7 @@ export function describeStep(step) {
|
|
|
101
89
|
? `${source.slice(0, MAX_STEP_LABEL).trimEnd()}…`
|
|
102
90
|
: source;
|
|
103
91
|
}
|
|
104
|
-
/**
|
|
105
|
-
* A rehearsal flag: the command goes through the motions and ships nothing.
|
|
106
|
-
*/
|
|
92
|
+
/** A rehearsal flag: the command goes through the motions and ships nothing. */
|
|
107
93
|
const DRY_RUN_FLAG = /--dry[-_]?run\b/;
|
|
108
94
|
/**
|
|
109
95
|
* Normalize an action reference to its owner/repo component.
|
|
@@ -148,12 +134,12 @@ function isPublishStep(step) {
|
|
|
148
134
|
isPublishAction(step));
|
|
149
135
|
}
|
|
150
136
|
/**
|
|
151
|
-
* Find
|
|
137
|
+
* Find every step in a job that ships something.
|
|
152
138
|
* @param job - The parsed job
|
|
153
|
-
* @returns The publishing
|
|
139
|
+
* @returns The publishing steps, in execution order
|
|
154
140
|
*/
|
|
155
|
-
export function
|
|
156
|
-
return job.steps.
|
|
141
|
+
export function findPublishSteps(job) {
|
|
142
|
+
return job.steps.filter(isPublishStep);
|
|
157
143
|
}
|
|
158
144
|
/**
|
|
159
145
|
* Whether a job proves anything about the artifact.
|
|
@@ -221,9 +207,13 @@ function shipsSelfBuiltArtifact(job, publishStep) {
|
|
|
221
207
|
if (actionId(publishStep.uses) === DOCKER_BUILD_PUSH_ACTION) {
|
|
222
208
|
return true;
|
|
223
209
|
}
|
|
224
|
-
const
|
|
210
|
+
const publishIndex = job.steps.indexOf(publishStep);
|
|
211
|
+
const stepsThroughPublish = job.steps.slice(0, publishIndex + 1);
|
|
212
|
+
const downloadIndex = job.steps
|
|
213
|
+
.slice(0, publishIndex)
|
|
214
|
+
.reduce((latest, step, index) => step.uses.includes(PROMOTION_ACTION) ? index : latest, -1);
|
|
225
215
|
if (downloadIndex >= 0) {
|
|
226
|
-
const rebuildsAfterDownload =
|
|
216
|
+
const rebuildsAfterDownload = stepsThroughPublish
|
|
227
217
|
.slice(downloadIndex + 1)
|
|
228
218
|
.some(step => isLocalBuildCommand(step.run));
|
|
229
219
|
if (!rebuildsAfterDownload) {
|
|
@@ -232,15 +222,16 @@ function shipsSelfBuiltArtifact(job, publishStep) {
|
|
|
232
222
|
}
|
|
233
223
|
return (LOCAL_PATH_ARGUMENT.test(publishStep.run) ||
|
|
234
224
|
LOCAL_ARTIFACT_FILE.test(publishStep.run) ||
|
|
235
|
-
|
|
225
|
+
stepsThroughPublish.some(step => isLocalBuildCommand(step.run)));
|
|
236
226
|
}
|
|
237
227
|
/**
|
|
238
228
|
* Decide whether a workflow's trigger makes in-file validation the expected
|
|
239
229
|
* place for it — the only case where absent validation proves a bypass.
|
|
240
230
|
* @param workflow - The workflow to classify
|
|
231
|
+
* @param defaultBranches - Project-local default-like branch names
|
|
241
232
|
* @returns The reason validation may live elsewhere, or null when it must be here
|
|
242
233
|
*/
|
|
243
|
-
function offlineUnresolvableTrigger(workflow) {
|
|
234
|
+
function offlineUnresolvableTrigger(workflow, defaultBranches) {
|
|
244
235
|
const events = workflow.on.events;
|
|
245
236
|
if (events.length > 0 && events.every(event => event === "workflow_call")) {
|
|
246
237
|
return ("it is a reusable `workflow_call` workflow, so validation is the calling " +
|
|
@@ -259,7 +250,11 @@ function offlineUnresolvableTrigger(workflow) {
|
|
|
259
250
|
const unfilteredPush = workflow.on.events.includes("push") &&
|
|
260
251
|
workflow.on.pushBranches.length === 0 &&
|
|
261
252
|
workflow.on.pushTags.length === 0;
|
|
262
|
-
const defaultBranchPush = workflow.on.pushBranches.some(branch =>
|
|
253
|
+
const defaultBranchPush = workflow.on.pushBranches.some(branch => {
|
|
254
|
+
const trimmed = branch.trim();
|
|
255
|
+
return (DEFAULT_BRANCHES.has(trimmed) ||
|
|
256
|
+
(defaultBranches ?? []).some(candidate => candidate.trim() === trimmed));
|
|
257
|
+
});
|
|
263
258
|
if (unfilteredPush || defaultBranchPush) {
|
|
264
259
|
return ("it is triggered by a push to the default branch, where branch protection " +
|
|
265
260
|
"may already require the validating checks — a rule that is not visible " +
|
|
@@ -268,35 +263,34 @@ function offlineUnresolvableTrigger(workflow) {
|
|
|
268
263
|
return null;
|
|
269
264
|
}
|
|
270
265
|
/**
|
|
271
|
-
* Assess one job
|
|
266
|
+
* Assess every publishing step in one job against B2.
|
|
272
267
|
* @param workflow - The workflow declaring the job
|
|
273
268
|
* @param job - The job to assess
|
|
274
|
-
* @
|
|
269
|
+
* @param defaultBranches - Project-local default-like branch names
|
|
270
|
+
* @returns One outcome per publishing step, or an empty list when it ships nothing
|
|
275
271
|
*/
|
|
276
|
-
export function
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
:
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
"ships cannot be tied to anything that was validated",
|
|
299
|
-
};
|
|
272
|
+
export function assessReleasePaths(workflow, job, defaultBranches) {
|
|
273
|
+
return findPublishSteps(job).map(publishStep => {
|
|
274
|
+
const where = `${workflow.file} job \`${job.id}\` step \`${describeStep(publishStep)}\``;
|
|
275
|
+
const validated = validationPrecedesPublish(workflow, job, publishStep);
|
|
276
|
+
if (shipsSelfBuiltArtifact(job, publishStep)) {
|
|
277
|
+
return validated
|
|
278
|
+
? rebuildPastValidation(where)
|
|
279
|
+
: unvalidatedSelfBuild(where, workflow, defaultBranches);
|
|
280
|
+
}
|
|
281
|
+
if (validated || promotesValidatedArtifact(job, publishStep)) {
|
|
282
|
+
return { kind: "clean" };
|
|
283
|
+
}
|
|
284
|
+
// Neither built here nor promoted from CI, and nothing validating precedes it:
|
|
285
|
+
// the link between what ships and what was validated is simply not observable
|
|
286
|
+
// in this file. That is unestablished, not clean.
|
|
287
|
+
return {
|
|
288
|
+
kind: "unresolved",
|
|
289
|
+
reason: `${where} neither builds its own artifact nor promotes a CI-built one via ` +
|
|
290
|
+
`\`${PROMOTION_ACTION}\`, and no validating job precedes it, so what it ` +
|
|
291
|
+
"ships cannot be tied to anything that was validated",
|
|
292
|
+
};
|
|
293
|
+
});
|
|
300
294
|
}
|
|
301
295
|
/**
|
|
302
296
|
* The provable bypass that survives every trigger: the pipeline validated the
|
|
@@ -321,10 +315,11 @@ function rebuildPastValidation(where) {
|
|
|
321
315
|
* a stated-reason SKIP when the proof could live somewhere not visible offline.
|
|
322
316
|
* @param where - Evidence location label
|
|
323
317
|
* @param workflow - The workflow declaring the job
|
|
318
|
+
* @param defaultBranches - Project-local default-like branch names
|
|
324
319
|
* @returns The violation or unresolved outcome
|
|
325
320
|
*/
|
|
326
|
-
function unvalidatedSelfBuild(where, workflow) {
|
|
327
|
-
const unresolvable = offlineUnresolvableTrigger(workflow);
|
|
321
|
+
function unvalidatedSelfBuild(where, workflow, defaultBranches) {
|
|
322
|
+
const unresolvable = offlineUnresolvableTrigger(workflow, defaultBranches);
|
|
328
323
|
if (unresolvable !== null) {
|
|
329
324
|
return {
|
|
330
325
|
kind: "unresolved",
|
|
@@ -343,9 +338,12 @@ function unvalidatedSelfBuild(where, workflow) {
|
|
|
343
338
|
/**
|
|
344
339
|
* Whether the job promotes the artifact CI already built and validated.
|
|
345
340
|
* @param job - The publishing job
|
|
341
|
+
* @param publishStep - The step that ships
|
|
346
342
|
* @returns True when a download-artifact step is present
|
|
347
343
|
*/
|
|
348
|
-
function promotesValidatedArtifact(job) {
|
|
349
|
-
return job.steps
|
|
344
|
+
function promotesValidatedArtifact(job, publishStep) {
|
|
345
|
+
return job.steps
|
|
346
|
+
.slice(0, job.steps.indexOf(publishStep))
|
|
347
|
+
.some(step => step.uses.includes(PROMOTION_ACTION));
|
|
350
348
|
}
|
|
351
349
|
//# 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":"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"}
|
|
@@ -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,
|