@intentius/chant 0.124.31 → 0.124.32
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/bin/chant +7 -2
- package/dist/cli/commands/check-lexicon-plugin.d.ts +7 -4
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +10 -7
- package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon.js +18 -12
- package/dist/cli/commands/import.d.ts +10 -0
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/import.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/project.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon/templates/project.js +4 -3
- package/dist/cli/commands/onboard.d.ts.map +1 -1
- package/dist/cli/commands/onboard.js +8 -4
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +2 -1
- package/dist/cli/dependencies.d.ts +18 -0
- package/dist/cli/dependencies.d.ts.map +1 -0
- package/dist/cli/dependencies.js +120 -0
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +23 -4
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +12 -4
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +16 -6
- package/dist/cli/handlers/lint.d.ts.map +1 -1
- package/dist/cli/handlers/lint.js +6 -0
- package/dist/cli/handlers/operator.d.ts +2 -2
- package/dist/cli/handlers/operator.js +3 -3
- package/dist/cli/handlers/pr.d.ts +14 -0
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +488 -32
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +3 -1
- package/dist/cli/handlers/run.d.ts +13 -1
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/run.js +38 -15
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +44 -16
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +15 -0
- package/dist/cli/registry.d.ts +13 -4
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +6 -2
- package/dist/codegen/generate-post-synth-barrel.js +2 -2
- package/dist/codegen/lexicon-regen.d.ts +4 -0
- package/dist/codegen/lexicon-regen.d.ts.map +1 -1
- package/dist/codegen/lexicon-regen.js +1 -1
- package/dist/codegen/pinned-upgrade.js +2 -2
- package/dist/components/capability.d.ts +44 -3
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/capability.js +21 -0
- package/dist/components/changed-files.d.ts +7 -1
- package/dist/components/changed-files.d.ts.map +1 -1
- package/dist/components/changed-files.js +9 -1
- package/dist/components/driver.d.ts +38 -0
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +47 -6
- package/dist/components/fan-out-record.d.ts +6 -1
- package/dist/components/fan-out-record.d.ts.map +1 -1
- package/dist/components/fan-out-record.js +24 -0
- package/dist/components/fan-out-run.d.ts +20 -0
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-run.js +21 -1
- package/dist/components/pr-pipeline.d.ts +65 -2
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +107 -15
- package/dist/components/pr-run.d.ts +127 -29
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +290 -70
- package/dist/components/wave-plan.d.ts +5 -2
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +12 -1
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +16 -6
- package/dist/discovery/sandbox/bundle.d.ts.map +1 -1
- package/dist/discovery/sandbox/bundle.js +6 -0
- package/dist/discovery/specifier-resolve.d.ts.map +1 -1
- package/dist/discovery/specifier-resolve.js +8 -2
- package/dist/fold/fold.d.ts.map +1 -1
- package/dist/fold/fold.js +68 -1
- package/dist/fold/subset.d.ts +37 -0
- package/dist/fold/subset.d.ts.map +1 -1
- package/dist/fold/subset.js +88 -0
- package/dist/lexicon-module.d.ts +10 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +53 -8
- package/dist/lexicon-plugin-helpers.d.ts.map +1 -1
- package/dist/lexicon-plugin-helpers.js +6 -4
- package/dist/lexicon.d.ts +2 -0
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/affected.d.ts.map +1 -1
- package/dist/lifecycle/affected.js +7 -1
- package/dist/lifecycle/release-ledger.d.ts +21 -0
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.js +24 -0
- package/dist/lifecycle/work-dir.d.ts +45 -0
- package/dist/lifecycle/work-dir.d.ts.map +1 -0
- package/dist/lifecycle/work-dir.js +78 -0
- package/dist/lint/discover.d.ts +17 -9
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +62 -54
- package/dist/module-source.d.ts +57 -0
- package/dist/module-source.d.ts.map +1 -0
- package/dist/module-source.js +104 -0
- package/dist/op/activities/factory.js +1 -1
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +13 -3
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +3 -0
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +20 -5
- package/dist/op/operator.d.ts +2 -2
- package/dist/op/operator.js +2 -2
- package/dist/op/steward.d.ts +6 -4
- package/dist/op/steward.d.ts.map +1 -1
- package/dist/op/steward.js +5 -3
- package/dist/op/work-lease-run.d.ts +20 -7
- package/dist/op/work-lease-run.d.ts.map +1 -1
- package/dist/op/work-lease-run.js +56 -12
- package/dist/pr-forge.d.ts +10 -0
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +39 -0
- package/dist/pr-loop.d.ts +141 -4
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +122 -6
- package/dist/pr-report-url.d.ts +2 -2
- package/dist/pr-report-url.d.ts.map +1 -1
- package/dist/pr-report-url.js +5 -5
- package/dist/ts-loader.d.ts +38 -4
- package/dist/ts-loader.d.ts.map +1 -1
- package/dist/ts-loader.js +190 -16
- package/dist/wave-runtime.mjs +208 -208
- package/dist/workspace/chant-migrations/fountain-retired-kinds.d.ts +34 -0
- package/dist/workspace/chant-migrations/fountain-retired-kinds.d.ts.map +1 -0
- package/dist/workspace/chant-migrations/fountain-retired-kinds.js +176 -0
- package/dist/workspace/chant-migrations.d.ts.map +1 -1
- package/dist/workspace/chant-migrations.js +2 -0
- package/dist/workspace/checks/boxes.d.ts +6 -6
- package/dist/workspace/checks/boxes.js +9 -9
- package/dist/workspace/ci-green-forge.d.ts +6 -4
- package/dist/workspace/ci-green-forge.d.ts.map +1 -1
- package/dist/workspace/ci-green.d.ts +28 -12
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +49 -21
- package/dist/workspace/ci-list.schema.json +12 -6
- package/dist/workspace/ci-report-url.d.ts +18 -0
- package/dist/workspace/ci-report-url.d.ts.map +1 -0
- package/dist/workspace/ci-report-url.js +33 -0
- package/dist/workspace/ci-run-index.d.ts +12 -0
- package/dist/workspace/ci-run-index.d.ts.map +1 -1
- package/dist/workspace/ci-run-index.js +6 -4
- package/dist/workspace/ci-run-index.schema.json +5 -3
- package/dist/workspace/ci-run.d.ts +75 -2
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +195 -53
- package/dist/workspace/ci-runner-key.d.ts +16 -3
- package/dist/workspace/ci-runner-key.d.ts.map +1 -1
- package/dist/workspace/ci-runner-key.js +30 -10
- package/dist/workspace/ci-serve.d.ts +54 -4
- package/dist/workspace/ci-serve.d.ts.map +1 -1
- package/dist/workspace/ci-serve.js +175 -26
- package/dist/workspace/declaration.d.ts +8 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +11 -2
- package/dist/workspace/declaration.schema.json +7 -2
- package/dist/workspace/export.d.ts +1 -1
- package/dist/workspace/export.d.ts.map +1 -1
- package/dist/workspace/export.js +7 -3
- package/dist/workspace/ls.d.ts +6 -1
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +1 -0
- package/dist/workspace/ls.schema.json +7 -1
- package/dist/workspace/pin-integrity.d.ts.map +1 -1
- package/dist/workspace/pin-integrity.js +3 -2
- package/dist/workspace/pr-report.schema.json +74 -7
- package/dist/workspace/reason-codes.d.ts +1 -1
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +2 -2
- package/dist/workspace/run-event.schema.json +3 -1
- package/dist/workspace/status.schema.json +3 -1
- package/dist/workspace/write-scope.d.ts +9 -0
- package/dist/workspace/write-scope.d.ts.map +1 -1
- package/dist/workspace/write-scope.js +11 -1
- package/package.json +1 -1
- package/src/__fixtures__/pr-loop/pr-apply-wave-waiting.note.golden.md +48 -0
- package/src/cli/commands/__fixtures__/init-lexicon-output/package.json +3 -3
- package/src/cli/commands/audit.test.ts +2 -2
- package/src/cli/commands/check-lexicon-plugin.test.ts +9 -0
- package/src/cli/commands/check-lexicon-plugin.ts +11 -8
- package/src/cli/commands/check-lexicon.test.ts +1 -1
- package/src/cli/commands/check-lexicon.ts +16 -11
- package/src/cli/commands/import.ts +40 -0
- package/src/cli/commands/init-lexicon/templates/project.ts +4 -3
- package/src/cli/commands/init-lexicon.test.ts +8 -5
- package/src/cli/commands/onboard.test.ts +45 -0
- package/src/cli/commands/onboard.ts +8 -4
- package/src/cli/commands/update.test.ts +6 -0
- package/src/cli/commands/update.ts +4 -1
- package/src/cli/compiled-cli.e2e.test.ts +76 -11
- package/src/cli/dependencies.e2e.test.ts +101 -0
- package/src/cli/dependencies.test.ts +93 -0
- package/src/cli/dependencies.ts +122 -0
- package/src/cli/handlers/build.test.ts +69 -0
- package/src/cli/handlers/build.ts +20 -4
- package/src/cli/handlers/fan-out.test.ts +73 -0
- package/src/cli/handlers/fan-out.ts +11 -4
- package/src/cli/handlers/graph.test.ts +76 -0
- package/src/cli/handlers/graph.ts +19 -12
- package/src/cli/handlers/lint.test.ts +42 -0
- package/src/cli/handlers/lint.ts +6 -0
- package/src/cli/handlers/operator.ts +3 -3
- package/src/cli/handlers/pr-waves.test.ts +449 -0
- package/src/cli/handlers/pr.test.ts +134 -0
- package/src/cli/handlers/pr.ts +523 -31
- package/src/cli/handlers/promote.test.ts +26 -1
- package/src/cli/handlers/promote.ts +3 -2
- package/src/cli/handlers/run-components-exit.test.ts +99 -0
- package/src/cli/handlers/run-signer.test.ts +79 -0
- package/src/cli/handlers/run.ts +34 -16
- package/src/cli/main.test.ts +18 -0
- package/src/cli/main.ts +43 -16
- package/src/cli/parse-args.ts +12 -0
- package/src/cli/registry.ts +19 -6
- package/src/codegen/generate-post-synth-barrel.ts +2 -2
- package/src/codegen/lexicon-regen.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -2
- package/src/codegen/post-synth-barrel-guards.test.ts +6 -11
- package/src/components/capability.ts +51 -3
- package/src/components/changed-files.test.ts +16 -1
- package/src/components/changed-files.ts +9 -1
- package/src/components/driver.test.ts +36 -1
- package/src/components/driver.ts +76 -4
- package/src/components/fan-out-record.ts +29 -1
- package/src/components/fan-out-run.test.ts +35 -0
- package/src/components/fan-out-run.ts +40 -1
- package/src/components/pr-pipeline.test.ts +100 -0
- package/src/components/pr-pipeline.ts +132 -17
- package/src/components/pr-run.test.ts +323 -18
- package/src/components/pr-run.ts +354 -75
- package/src/components/wave-plan.ts +16 -4
- package/src/discovery/fold-host-method.test.ts +87 -0
- package/src/discovery/fold-import.ts +15 -5
- package/src/discovery/fold-package-composite.test.ts +27 -0
- package/src/discovery/fold-specifiers.test.ts +8 -0
- package/src/discovery/sandbox/bundle.ts +6 -0
- package/src/discovery/specifier-resolve.ts +8 -2
- package/src/fold/fold.test.ts +72 -0
- package/src/fold/fold.ts +71 -0
- package/src/fold/subset.test.ts +31 -0
- package/src/fold/subset.ts +99 -0
- package/src/lexicon-dist.e2e.test.ts +254 -0
- package/src/lexicon-module.test.ts +47 -0
- package/src/lexicon-module.ts +49 -7
- package/src/lexicon-plugin-helpers.ts +6 -4
- package/src/lexicon.ts +2 -0
- package/src/lifecycle/affected.test.ts +7 -0
- package/src/lifecycle/affected.ts +6 -1
- package/src/lifecycle/release-ledger.ts +34 -0
- package/src/lifecycle/work-dir.test.ts +77 -0
- package/src/lifecycle/work-dir.ts +82 -0
- package/src/lint/discover.test.ts +46 -2
- package/src/lint/discover.ts +55 -49
- package/src/module-source.test.ts +85 -0
- package/src/module-source.ts +112 -0
- package/src/op/activities/factory.ts +1 -1
- package/src/op/discover-root.test.ts +31 -2
- package/src/op/discover.ts +14 -4
- package/src/op/gate.test.ts +30 -0
- package/src/op/gate.ts +3 -0
- package/src/op/op-waves-run.ts +20 -5
- package/src/op/op-waves.test.ts +49 -0
- package/src/op/operator.ts +2 -2
- package/src/op/steward.ts +6 -4
- package/src/op/work-lease-run.test.ts +88 -2
- package/src/op/work-lease-run.ts +52 -12
- package/src/pr-forge-bundle.test.ts +2 -2
- package/src/pr-forge.test.ts +42 -0
- package/src/pr-forge.ts +40 -0
- package/src/pr-loop-bundle.test.ts +2 -1
- package/src/pr-loop.test.ts +117 -1
- package/src/pr-loop.ts +252 -10
- package/src/pr-report-url.ts +5 -5
- package/src/terraform/__fixtures__/advise.test.ts +21 -2
- package/src/ts-loader.test.ts +89 -1
- package/src/ts-loader.ts +180 -13
- package/src/workspace/changes.test.ts +1 -1
- package/src/workspace/chant-migrations/fountain-retired-kinds.test.ts +33 -0
- package/src/workspace/chant-migrations/fountain-retired-kinds.ts +190 -0
- package/src/workspace/chant-migrations.e2e.test.ts +5 -0
- package/src/workspace/chant-migrations.ts +2 -0
- package/src/workspace/checks/boxes.ts +9 -9
- package/src/workspace/ci-green-forge.ts +6 -4
- package/src/workspace/ci-green-runs.test.ts +53 -11
- package/src/workspace/ci-green.test.ts +1 -1
- package/src/workspace/ci-green.ts +50 -22
- package/src/workspace/ci-list.schema.json +12 -6
- package/src/workspace/ci-report-url.test.ts +220 -0
- package/src/workspace/ci-report-url.ts +33 -0
- package/src/workspace/ci-run-index.schema.json +5 -3
- package/src/workspace/ci-run-index.test.ts +42 -3
- package/src/workspace/ci-run-index.ts +18 -4
- package/src/workspace/ci-run.test.ts +185 -7
- package/src/workspace/ci-run.ts +224 -54
- package/src/workspace/ci-runner-key.test.ts +55 -17
- package/src/workspace/ci-runner-key.ts +36 -11
- package/src/workspace/ci-serve.test.ts +150 -6
- package/src/workspace/ci-serve.ts +169 -25
- package/src/workspace/declaration.schema.json +7 -2
- package/src/workspace/declaration.test.ts +23 -0
- package/src/workspace/declaration.ts +19 -3
- package/src/workspace/export.ts +6 -3
- package/src/workspace/ls.schema.json +7 -1
- package/src/workspace/ls.ts +7 -2
- package/src/workspace/pin-integrity.test.ts +5 -0
- package/src/workspace/pin-integrity.ts +3 -2
- package/src/workspace/pr-report.schema.json +74 -7
- package/src/workspace/reason-codes.ts +2 -2
- package/src/workspace/run-event.schema.json +3 -1
- package/src/workspace/status.schema.json +3 -1
- package/src/workspace/write-scope.test.ts +29 -1
- package/src/workspace/write-scope.ts +12 -1
|
@@ -42,6 +42,25 @@
|
|
|
42
42
|
* build is `chant build --env <env>`, or `buildCommand` when the templates
|
|
43
43
|
* come from several builds (`npm run build`).
|
|
44
44
|
*
|
|
45
|
+
* With `waveGate` (#4003) the apply runs a wave at a time: `pr-apply
|
|
46
|
+
* --wave-gate <gate>`, each wave planned after the one before it applied. A
|
|
47
|
+
* generator writes one apply job per wave of the component graph
|
|
48
|
+
* (`prLoopWaveJobs`), job `apply-wave-<k>` passing `--wave <k>` and needing
|
|
49
|
+
* the job before it, and the attempt record carries the approved set from
|
|
50
|
+
* one job to the next. A wave whose plan the approved change set covers
|
|
51
|
+
* applies under the pull request's approval; one whose plan moved stops at
|
|
52
|
+
* `<gate>-wave-<k>` (exit 3), and re-running its job after the approval
|
|
53
|
+
* carries on. `chant ci serve` runs the one apply job, which runs the waves
|
|
54
|
+
* in order until one stops.
|
|
55
|
+
*
|
|
56
|
+
* Each generated job runs its command through `chant ci run plan|apply
|
|
57
|
+
* --in-place` (#4156, `PrLoopJob.run`), so a forge job writes the same run
|
|
58
|
+
* record the chant runner does: Op `pr-plan` or `pr-apply`, signed with
|
|
59
|
+
* the runner key a forge secret puts in `CHANT_RUNNER_KEY`, and naming the
|
|
60
|
+
* forge's run as its `runOrigin`. `ci run` runs `command` in the job's own
|
|
61
|
+
* checkout with the job's environment, less the key. The plan passes
|
|
62
|
+
* `--no-push`, so it still writes nothing to the remote `chant/lifecycle`.
|
|
63
|
+
*
|
|
45
64
|
* In a workspace member (#3465) both commands run in the member's directory
|
|
46
65
|
* and pass `--member <name>`, so the member's gate (`pr-<number>-<member>`),
|
|
47
66
|
* note and statuses stay apart from every other member's on the same pull
|
|
@@ -50,6 +69,10 @@
|
|
|
50
69
|
*/
|
|
51
70
|
import { PR_APPLY_GATE } from "../pr-loop.js";
|
|
52
71
|
import { CI_IMAGE, GITHUB_JOB_TOKEN } from "../ci-jobs.js";
|
|
72
|
+
import { EMPTY_TREE_SHA } from "./changed-files.js";
|
|
73
|
+
import { layerWaves } from "../gated-waves.js";
|
|
74
|
+
/** The variable `chant ci run` reads its runner key from (`RUNNER_KEY_ENV` in ../workspace/ci-green.ts). */
|
|
75
|
+
const RUNNER_KEY_ENV = "CHANT_RUNNER_KEY";
|
|
53
76
|
/** Where both jobs write their reports, kept as a CI artifact. */
|
|
54
77
|
export const PR_LOOP_REPORT_DIR = ".chant/pr";
|
|
55
78
|
/**
|
|
@@ -105,28 +128,81 @@ export function prLoopJobs(forge, env, options = {}, member) {
|
|
|
105
128
|
...(github ? { GITHUB_TOKEN: GITHUB_JOB_TOKEN } : {}),
|
|
106
129
|
...(options.events ? { CHANT_RUN_EVENTS_DIR: PR_LOOP_EVENTS_DIR } : {}),
|
|
107
130
|
};
|
|
131
|
+
// #4156: the flags `chant ci run` rebuilds `command` from. It finds the member from the directory it runs in.
|
|
132
|
+
const ciRun = (job) => [
|
|
133
|
+
"chant", "ci", "run", job, "--in-place", ...(job === "plan" ? ["--no-push"] : []),
|
|
134
|
+
"--base", '"$BASE_SHA"', ...(job === "plan" ? ["--pr", '"$PR_NUMBER"'] : []),
|
|
135
|
+
"--env", env, "--gate", gate, "--forge", forge,
|
|
136
|
+
...(options.waveGate ? ["--wave-gate", options.waveGate] : []),
|
|
137
|
+
...(job === "apply" && options.branch ? ["--branch", JSON.stringify(options.branch)] : []),
|
|
138
|
+
...(job === "apply" && options.requireReview === false ? ["--no-require-review"] : []),
|
|
139
|
+
...(options.events ? ["--events-json"] : []),
|
|
140
|
+
...(options.reportUrl ? ["--report-url", JSON.stringify(options.reportUrl)] : []),
|
|
141
|
+
];
|
|
142
|
+
const runEnv = (env) => (github ? { ...env, [RUNNER_KEY_ENV]: `\${{ secrets.${RUNNER_KEY_ENV} }}` } : env);
|
|
143
|
+
const planEnv = github
|
|
144
|
+
? { BASE_SHA: "${{ github.event.pull_request.base.sha }}", PR_NUMBER: "${{ github.event.pull_request.number }}", ...jobEnv }
|
|
145
|
+
: { BASE_SHA: "$CI_MERGE_REQUEST_DIFF_BASE_SHA", PR_NUMBER: "$CI_MERGE_REQUEST_IID", ...jobEnv };
|
|
146
|
+
const applyEnv = github ? { BASE_SHA: "${{ github.event.before }}", ...jobEnv } : { BASE_SHA: "$CI_COMMIT_BEFORE_SHA", ...jobEnv };
|
|
108
147
|
return [
|
|
109
148
|
{
|
|
110
149
|
jobName: "plan",
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
: { BASE_SHA: "$CI_MERGE_REQUEST_DIFF_BASE_SHA", PR_NUMBER: "$CI_MERGE_REQUEST_IID", ...jobEnv },
|
|
150
|
+
// With `waveGate` the plan's note says the later waves may stop at their own gates (#4003).
|
|
151
|
+
command: ["chant", "components", "pr-plan", "--base", '"$BASE_SHA"', "--pr", '"$PR_NUMBER"', ...common, ...(options.waveGate ? ["--wave-gate", options.waveGate] : [])].join(" "),
|
|
152
|
+
env: planEnv,
|
|
115
153
|
...build,
|
|
154
|
+
run: { command: ciRun("plan").join(" "), env: runEnv(planEnv) },
|
|
116
155
|
},
|
|
117
156
|
{
|
|
118
157
|
jobName: "apply",
|
|
119
158
|
command: [
|
|
120
159
|
"chant", "components", "pr-apply", "--base", '"$BASE_SHA"', ...common,
|
|
121
160
|
...(options.requireReview === false ? [] : ["--require-review"]),
|
|
161
|
+
...(options.waveGate ? ["--wave-gate", options.waveGate] : []),
|
|
122
162
|
"--resume", PR_APPLY_RECORD,
|
|
123
163
|
].join(" "),
|
|
124
|
-
env:
|
|
125
|
-
|
|
164
|
+
env: applyEnv,
|
|
165
|
+
setup: [github ? githubBaseFallback(options.branch) : gitlabBaseFallback(options.branch)],
|
|
126
166
|
...build,
|
|
167
|
+
run: { command: ciRun("apply").join(" "), env: runEnv(applyEnv) },
|
|
127
168
|
},
|
|
128
169
|
];
|
|
129
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* The pull-request options with `--wave-gate` beside `--pr-loop` (#4003):
|
|
173
|
+
* the apply gets a gate per wave. A canary or a fixed base is refused, since
|
|
174
|
+
* the pull request's waves are its derivation's and each push is measured
|
|
175
|
+
* from the commit before it.
|
|
176
|
+
*/
|
|
177
|
+
export function prLoopWithWaves(prLoop, gatedWaves) {
|
|
178
|
+
if (!gatedWaves)
|
|
179
|
+
return prLoop;
|
|
180
|
+
if (gatedWaves.canary?.length)
|
|
181
|
+
throw new Error("a pull-request pipeline's waves are the change's derivation, so it takes no --canary; drop --canary");
|
|
182
|
+
if (gatedWaves.base !== undefined)
|
|
183
|
+
throw new Error("a pull-request pipeline measures each push from the commit before it, so it takes no --base; drop --base");
|
|
184
|
+
return { ...prLoop, waveGate: gatedWaves.gate };
|
|
185
|
+
}
|
|
186
|
+
/** The name of the apply job for wave `wave` (#4003). */
|
|
187
|
+
export function prApplyWaveJobName(wave) {
|
|
188
|
+
return `apply-wave-${wave}`;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* One apply job per wave of the component graph (#4003), each `apply`'s
|
|
192
|
+
* command with `--wave <k>`. A change selects a subset, which never layers
|
|
193
|
+
* deeper than the graph, so a job past the change's last wave finds nothing
|
|
194
|
+
* left and exits 0.
|
|
195
|
+
*/
|
|
196
|
+
export function prLoopWaveJobs(components, apply) {
|
|
197
|
+
const count = Math.max(1, layerWaves(components.map((c) => ({ name: c.name, dependsOn: c.dependsOn ?? [] }))).length);
|
|
198
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
199
|
+
...apply,
|
|
200
|
+
command: `${apply.command} --wave ${i + 1}`,
|
|
201
|
+
wave: i + 1,
|
|
202
|
+
// #4156: the job runs it through chant ci run, which appends the same --wave to pr-apply.
|
|
203
|
+
run: { ...apply.run, command: `${apply.run.command} --wave ${i + 1}` },
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
130
206
|
/**
|
|
131
207
|
* The concurrency group (GitHub, Forgejo) or resource group (GitLab) that
|
|
132
208
|
* keeps one apply at a time per environment, and per member in a workspace.
|
|
@@ -152,18 +228,34 @@ export function prApplyGroup(env, member) {
|
|
|
152
228
|
export function prApplyRecordKey(env, commit, member) {
|
|
153
229
|
return `${prApplyGroup(env, member)}-${commit}`;
|
|
154
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* The shell that settles an unusable push base. `before` is empty or forty
|
|
233
|
+
* zeros on a branch's first push; then the base is `diffBase` when the forge
|
|
234
|
+
* gives one, else the merge base of `target` and `commit`, else `commit`'s
|
|
235
|
+
* parent when the merge base is `commit` itself, else, for a root commit, the
|
|
236
|
+
* empty tree.
|
|
237
|
+
*/
|
|
238
|
+
function pushBaseFallback(target, commit, diffBase) {
|
|
239
|
+
const fromBranch = `git fetch origin ${target} && BASE_SHA="$(git merge-base FETCH_HEAD "${commit}")"; ` +
|
|
240
|
+
`if [ "$BASE_SHA" = "${commit}" ]; then BASE_SHA="$(git rev-parse --verify --quiet "${commit}^" || echo ${EMPTY_TREE_SHA})"; fi; `;
|
|
241
|
+
return ('if [ -z "$BASE_SHA" ] || [ "$BASE_SHA" = "0000000000000000000000000000000000000000" ]; then ' +
|
|
242
|
+
(diffBase ? `BASE_SHA="\${${diffBase}:-}"; if [ -z "$BASE_SHA" ]; then ${fromBranch}fi; ` : fromBranch) +
|
|
243
|
+
"fi; export BASE_SHA");
|
|
244
|
+
}
|
|
155
245
|
/**
|
|
156
246
|
* GitLab sets `CI_COMMIT_BEFORE_SHA` to forty zeros on a branch's first push.
|
|
157
247
|
* The line replaces it with the merge request's diff base when the pipeline
|
|
158
|
-
* has one, and otherwise
|
|
159
|
-
* pushed commit, or the pushed commit's parent when that is the commit itself.
|
|
248
|
+
* has one, and otherwise as {@link pushBaseFallback} does.
|
|
160
249
|
*/
|
|
161
250
|
export function gitlabBaseFallback(branch) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
251
|
+
return pushBaseFallback(branch ? JSON.stringify(branch) : "$CI_DEFAULT_BRANCH", "$CI_COMMIT_SHA", "CI_MERGE_REQUEST_DIFF_BASE_SHA");
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* GitHub and Forgejo set `github.event.before` to forty zeros on a branch's
|
|
255
|
+
* first push (#4004). The line replaces it as {@link pushBaseFallback} does,
|
|
256
|
+
* with the target branch `main` unless the pipeline names another, the
|
|
257
|
+
* generators' default.
|
|
258
|
+
*/
|
|
259
|
+
export function githubBaseFallback(branch) {
|
|
260
|
+
return pushBaseFallback(JSON.stringify(branch ?? "main"), "$GITHUB_SHA");
|
|
169
261
|
}
|
|
@@ -8,26 +8,42 @@
|
|
|
8
8
|
* everything before applying anything is what makes the two digests
|
|
9
9
|
* comparable: each member is planned against the same state both times.
|
|
10
10
|
*
|
|
11
|
-
* ##
|
|
11
|
+
* ## What a dependent is planned against
|
|
12
12
|
*
|
|
13
13
|
* A member that reads another one's output through `stackOutput()` is
|
|
14
|
-
* planned with
|
|
15
|
-
* `outputs` (`readComponentOutputs`). When the change moves that output, the
|
|
16
|
-
* dependent's approved plan still carries the old value; the apply applies
|
|
17
|
-
* it as approved and marks the member `inputsMoved`, and the next run plans
|
|
18
|
-
* it against the new value. A change that must carry a moved output through
|
|
19
|
-
* its dependents in one rollout is what gated waves are for (#3049): each
|
|
20
|
-
* wave is planned after the one before it applied.
|
|
14
|
+
* planned with one of three values (#3999):
|
|
21
15
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
16
|
+
* - the upstream is in the change too: the value its plan says it will
|
|
17
|
+
* expose (`CapabilityPlan.outputs`). The report lists these under
|
|
18
|
+
* `plannedOutputs`.
|
|
19
|
+
* - the upstream is not in the change (#4104): the value it has now, read
|
|
20
|
+
* through its capability's `outputs` (`readComponentOutputs`). The report
|
|
21
|
+
* lists these under `deployedOutputs`. A change to one cluster is planned
|
|
22
|
+
* against the network it sits on, which is why `components` is every
|
|
23
|
+
* component in the project and not the selection.
|
|
24
|
+
* - the upstream is in the change and its plan cannot say, or says the value
|
|
25
|
+
* is known only after apply: no value. The dependent's members list the
|
|
26
|
+
* reference under `unknownInputs`, and the approval does not cover what
|
|
27
|
+
* it will do with it.
|
|
28
|
+
*
|
|
29
|
+
* `--seed-outputs` wins over both. The apply stage's plan reads the same
|
|
30
|
+
* values, so on the same estate it gets the digest the plan stage showed.
|
|
31
|
+
* A resume plans against the outputs the approved plans read, from the
|
|
32
|
+
* record (`planOutputs`), and reads nothing those cover.
|
|
33
|
+
*
|
|
34
|
+
* ## Planning again once an upstream applied
|
|
35
|
+
*
|
|
36
|
+
* The apply runs each member's approved plan, except a member whose plan
|
|
37
|
+
* read an upstream output that is not the value standing when its turn
|
|
38
|
+
* comes (`movedWiringReferences`): the upstream applied as another value
|
|
39
|
+
* than its plan said, or the value was unknown. That member, and what is
|
|
40
|
+
* downstream of it, is held back. Once the rest settled, the held members
|
|
41
|
+
* are planned again against the outputs the apply left, and that set's
|
|
42
|
+
* digest is decided at its own gate, `<gate>-round-<n>` (`prRoundGate`), as
|
|
43
|
+
* a gated wave decides each wave (#3049). Approved, it applies, and a member
|
|
44
|
+
* that is held again goes to the next round. Not approved, the apply stops
|
|
45
|
+
* `waiting` with the new digest named, and the same apply with its
|
|
46
|
+
* `--resume` record carries on from there.
|
|
31
47
|
*
|
|
32
48
|
* ## Finishing an apply that failed partway
|
|
33
49
|
*
|
|
@@ -41,10 +57,19 @@
|
|
|
41
57
|
* the rest applies. Planning everything again would give the applied members
|
|
42
58
|
* empty plans and the set a new digest, and so ask for a second approval of
|
|
43
59
|
* work already approved.
|
|
60
|
+
*
|
|
61
|
+
* ## A gate per wave on merge
|
|
62
|
+
*
|
|
63
|
+
* `pr-apply --wave-gate` (#4003) applies the approved set a wave at a time.
|
|
64
|
+
* {@link prWavePlan} narrows the derivation to one wave, which is planned
|
|
65
|
+
* against the outputs the waves before it left, and {@link waveNotCovered}
|
|
66
|
+
* says whether the approved change set covers what it planned, by the same
|
|
67
|
+
* test a resume uses ({@link planCoveredBy}). Covered, the wave applies under
|
|
68
|
+
* the pull request's approval; not covered, it needs its own.
|
|
44
69
|
*/
|
|
45
70
|
import { type ChangeSetDocument } from "../change-set.js";
|
|
46
71
|
import { type GateCheck, type GateLedgerPort } from "../op/gate.js";
|
|
47
|
-
import { type PrApproval, type PrMember, type PrRefusal, type PrReport, type PrStatus } from "../pr-loop.js";
|
|
72
|
+
import { type PrApproval, type PrMember, type PrRefusal, type PrRound, type PrReport, type PrStatus, type PrWave } from "../pr-loop.js";
|
|
48
73
|
import { type DriverComponent, type DriverComponentResult } from "./driver.js";
|
|
49
74
|
import { type FanOutRunResult } from "./fan-out-run.js";
|
|
50
75
|
import { type ComponentChangeSignal, type FanOutPlan } from "./fan-out.js";
|
|
@@ -86,17 +111,32 @@ export interface PrPlanSet {
|
|
|
86
111
|
* nothing was read. The report's `deployedOutputs`.
|
|
87
112
|
*/
|
|
88
113
|
deployedOutputs?: Record<string, string[]>;
|
|
114
|
+
/**
|
|
115
|
+
* Per dependency in the change that a member read (#3999), the names of
|
|
116
|
+
* the outputs its plan knows, sorted. Absent when there is none. The
|
|
117
|
+
* report's `plannedOutputs`.
|
|
118
|
+
*/
|
|
119
|
+
plannedOutputs?: Record<string, string[]>;
|
|
89
120
|
/** Whether any component failed to plan. */
|
|
90
121
|
failed: boolean;
|
|
91
122
|
}
|
|
92
123
|
/**
|
|
93
|
-
* Plan every component in `plan.order`, a wave at a time, each against
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
124
|
+
* Plan every component in `plan.order`, a wave at a time, each against its
|
|
125
|
+
* dependencies' planned outputs when the change plans them too, and against
|
|
126
|
+
* the outputs they have now otherwise. Never throws for a component that
|
|
127
|
+
* fails to plan: it becomes a failed member, and `failed` is set. Throws
|
|
128
|
+
* when a planned member's dependency is not among `components`, which means
|
|
129
|
+
* the caller passed the selection where the whole graph belongs.
|
|
98
130
|
*/
|
|
99
131
|
export declare function planPrSet(options: PrPlanSetOptions): Promise<PrPlanSet>;
|
|
132
|
+
/**
|
|
133
|
+
* Why `component` cannot apply the plan that read `read` now that `now`
|
|
134
|
+
* stands (#3999): each reference its steps make that resolves to another
|
|
135
|
+
* value, said once. `undefined` when every one resolves as it did. A
|
|
136
|
+
* published artifact's identity from a build in `inChange` never holds a
|
|
137
|
+
* member back: the build's provenance binds it, not this approval.
|
|
138
|
+
*/
|
|
139
|
+
export declare function heldReason(component: DriverComponent, read: Record<string, Record<string, unknown>>, now: Record<string, Record<string, unknown>>, inChange?: ReadonlySet<string>): string | undefined;
|
|
100
140
|
/**
|
|
101
141
|
* A ledger that reads the real one and records nothing. The plan stage
|
|
102
142
|
* decides the gate only to say where the approval stands; it runs the pull
|
|
@@ -119,6 +159,13 @@ export declare function decidePrGate(port: GateLedgerPort, input: {
|
|
|
119
159
|
* naming of each approver (#3163's form).
|
|
120
160
|
*/
|
|
121
161
|
export declare function approversWithoutReview(approvedBy: readonly string[], reviewers: readonly string[]): string[];
|
|
162
|
+
/**
|
|
163
|
+
* Who approved the gate but wrote the change (#4000): each approval's
|
|
164
|
+
* `resolvedBy` that names one of `authors`, the forge's naming of the pull
|
|
165
|
+
* request's author and of its commits' authors and committers. Their own
|
|
166
|
+
* approval never counts, whether a forge review or a ledger line backs it.
|
|
167
|
+
*/
|
|
168
|
+
export declare function approversWhoAuthored(approvedBy: readonly string[], authors: readonly string[]): string[];
|
|
122
169
|
export interface PrApplyOptions {
|
|
123
170
|
components: DriverComponent[];
|
|
124
171
|
plan: FanOutPlan;
|
|
@@ -141,16 +188,46 @@ export interface PrApplyOptions {
|
|
|
141
188
|
};
|
|
142
189
|
/** Called as each component settles, so an attempt record survives a kill (`runFanOut`). */
|
|
143
190
|
onComponentSettled?: (result: DriverComponentResult, outputs: Record<string, unknown> | undefined) => void;
|
|
191
|
+
/** The pull request's gate, which names each later round's gate ({@link prRoundGate}). Default `pr-apply`. */
|
|
192
|
+
gate?: string;
|
|
193
|
+
/**
|
|
194
|
+
* Decide the gate over the plans of a round after the first (#3999): the
|
|
195
|
+
* members held back because an upstream they read applied as another value
|
|
196
|
+
* than their plan read, planned again against the outputs the apply left.
|
|
197
|
+
* The gate is {@link prRoundGate}. Without it, held members are left
|
|
198
|
+
* `waiting` and nothing is planned again.
|
|
199
|
+
*/
|
|
200
|
+
decideRound?: (round: {
|
|
201
|
+
round: number;
|
|
202
|
+
gate: string;
|
|
203
|
+
set: PrPlanSet;
|
|
204
|
+
plan: FanOutPlan;
|
|
205
|
+
}) => Promise<PrRoundDecision>;
|
|
206
|
+
}
|
|
207
|
+
/** How a round's gate was decided: whether it applies, and where its approval stands. */
|
|
208
|
+
export interface PrRoundDecision {
|
|
209
|
+
satisfied: boolean;
|
|
210
|
+
approval: PrApproval;
|
|
211
|
+
/** Why it does not apply, when an approval stands but does not count (`--require-review`). */
|
|
212
|
+
message?: string;
|
|
213
|
+
}
|
|
214
|
+
export interface PrApplyResult {
|
|
215
|
+
members: PrMember[];
|
|
216
|
+
/** `waiting`: some members wait on an approval of the plan a later round made. */
|
|
217
|
+
status: "applied" | "failed" | "waiting";
|
|
218
|
+
/** Every round's runs together: their results, components and outputs. */
|
|
219
|
+
run: FanOutRunResult;
|
|
220
|
+
/** Each round after the first, in order. Absent when nothing was held back. */
|
|
221
|
+
rounds?: PrRound[];
|
|
144
222
|
}
|
|
145
223
|
/**
|
|
146
224
|
* Apply the approved plans in dependency order. A failed component blocks
|
|
147
|
-
* its dependents and nothing else (`runFanOut`).
|
|
225
|
+
* its dependents and nothing else (`runFanOut`). A member whose plan read an
|
|
226
|
+
* upstream output that is not the value standing when its turn comes is held
|
|
227
|
+
* back with what is downstream of it, planned again once the rest settled,
|
|
228
|
+
* and applied when `decideRound` approves that plan (#3999).
|
|
148
229
|
*/
|
|
149
|
-
export declare function applyPrSet(options: PrApplyOptions): Promise<
|
|
150
|
-
members: PrMember[];
|
|
151
|
-
status: "applied" | "failed";
|
|
152
|
-
run: FanOutRunResult;
|
|
153
|
-
}>;
|
|
230
|
+
export declare function applyPrSet(options: PrApplyOptions): Promise<PrApplyResult>;
|
|
154
231
|
/**
|
|
155
232
|
* Why `member`'s fresh plan is not covered by the approved change set, or
|
|
156
233
|
* `undefined` when it is. A member left over from a partial apply is covered
|
|
@@ -213,6 +290,22 @@ export type PrResume = {
|
|
|
213
290
|
* so a record cannot widen what a re-planned member may do.
|
|
214
291
|
*/
|
|
215
292
|
export declare function resumePrSet(options: PrResumeOptions): Promise<PrResume>;
|
|
293
|
+
/**
|
|
294
|
+
* The fan-out narrowed to wave `wave` of `plan` (1-based), less the
|
|
295
|
+
* components in `completed` (#4003). Its one wave is what is left of that
|
|
296
|
+
* wave; a dependency outside it, an earlier wave's component among them, is
|
|
297
|
+
* a seed. The digest is the derivation's, as {@link remainingFanOut} keeps it.
|
|
298
|
+
*/
|
|
299
|
+
export declare function prWavePlan(plan: FanOutPlan, components: DriverComponent[], wave: number, completed?: readonly string[]): FanOutPlan;
|
|
300
|
+
/**
|
|
301
|
+
* Why the approved change set does not cover a wave's new plan, one line per
|
|
302
|
+
* member, or `[]` when it covers every member (#4003). A member is covered
|
|
303
|
+
* as {@link planCoveredBy} says, with one rule more: a member whose planner
|
|
304
|
+
* describes no changes (chant's own empty part, for a capability that
|
|
305
|
+
* returns no change set) is covered only by the digest it was approved
|
|
306
|
+
* with, since with no entries there is nothing to compare a moved plan by.
|
|
307
|
+
*/
|
|
308
|
+
export declare function waveNotCovered(approved: ChangeSetDocument, fresh: ChangeSetDocument, approvedMembers?: readonly PrMember[]): string[];
|
|
216
309
|
export interface PrReportInput {
|
|
217
310
|
stage: "plan" | "apply";
|
|
218
311
|
pr: number | null;
|
|
@@ -233,6 +326,11 @@ export interface PrReportInput {
|
|
|
233
326
|
message?: string;
|
|
234
327
|
/** Components an earlier attempt at the approved set applied (#3464). */
|
|
235
328
|
resumed?: string[];
|
|
329
|
+
/** `--wave-gate` (#4003): the wave gate's base name, and each wave reached so far. */
|
|
330
|
+
waveGate?: string;
|
|
331
|
+
waves?: PrWave[];
|
|
332
|
+
/** The rounds the apply planned after an upstream applied (#3999). */
|
|
333
|
+
rounds?: PrRound[];
|
|
236
334
|
}
|
|
237
335
|
/** The report a stage writes. */
|
|
238
336
|
export declare function prReport(input: PrReportInput): PrReport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-run.d.ts","sourceRoot":"","sources":["../../src/components/pr-run.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pr-run.d.ts","sourceRoot":"","sources":["../../src/components/pr-run.ts"],"names":[],"mappings":"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"}
|