@intentius/chant 0.124.31 → 0.124.33
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/ci-jobs.d.ts +4 -0
- package/dist/ci-jobs.d.ts.map +1 -1
- package/dist/ci-jobs.js +9 -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 +38 -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/lifecycle-health.d.ts +16 -0
- package/dist/cli/handlers/lifecycle-health.d.ts.map +1 -0
- package/dist/cli/handlers/lifecycle-health.js +150 -0
- package/dist/cli/handlers/lifecycle.d.ts +26 -0
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.js +1 -1
- 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 +16 -0
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +610 -32
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +19 -2
- package/dist/cli/handlers/release.d.ts +16 -1
- package/dist/cli/handlers/release.d.ts.map +1 -1
- package/dist/cli/handlers/release.js +83 -11
- 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 +121 -33
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +37 -0
- package/dist/cli/registry.d.ts +29 -6
- 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/deploy-inputs.d.ts +91 -0
- package/dist/components/deploy-inputs.d.ts.map +1 -0
- package/dist/components/deploy-inputs.js +184 -0
- package/dist/components/driver.d.ts +38 -0
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +56 -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/gate-plan.d.ts +8 -0
- package/dist/components/gate-plan.d.ts.map +1 -1
- package/dist/components/gate-plan.js +6 -0
- package/dist/components/pr-pipeline.d.ts +98 -12
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +146 -23
- package/dist/components/pr-run.d.ts +128 -30
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +290 -70
- package/dist/components/release-compile.d.ts +37 -2
- package/dist/components/release-compile.d.ts.map +1 -1
- package/dist/components/release-compile.js +64 -8
- package/dist/components/release-promote.d.ts +17 -3
- package/dist/components/release-promote.d.ts.map +1 -1
- package/dist/components/release-promote.js +79 -18
- package/dist/components/verbs/bom-writer.d.ts +1 -1
- package/dist/components/verbs/bom-writer.d.ts.map +1 -1
- package/dist/components/verbs/lockfile-sbom-generator.d.ts +20 -0
- package/dist/components/verbs/lockfile-sbom-generator.d.ts.map +1 -1
- package/dist/components/verbs/lockfile-sbom-generator.js +41 -4
- package/dist/components/wave-plan.d.ts +15 -2
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +44 -5
- 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/graph-detail.d.ts.map +1 -1
- package/dist/graph-detail.js +32 -7
- package/dist/health.d.ts +110 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +105 -0
- package/dist/health.schema.json +191 -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 +29 -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/merge-record.d.ts +104 -0
- package/dist/lifecycle/merge-record.d.ts.map +1 -0
- package/dist/lifecycle/merge-record.js +102 -0
- package/dist/lifecycle/publish-attachments.d.ts +8 -5
- package/dist/lifecycle/publish-attachments.d.ts.map +1 -1
- package/dist/lifecycle/publish-attachments.js +27 -13
- package/dist/lifecycle/publish-npm.d.ts +3 -2
- package/dist/lifecycle/publish-npm.d.ts.map +1 -1
- package/dist/lifecycle/publish-npm.js +4 -3
- package/dist/lifecycle/release-at.d.ts +40 -0
- package/dist/lifecycle/release-at.d.ts.map +1 -0
- package/dist/lifecycle/release-at.js +83 -0
- package/dist/lifecycle/release-cut.d.ts.map +1 -1
- package/dist/lifecycle/release-cut.js +23 -12
- 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/release-publish.d.ts +28 -12
- package/dist/lifecycle/release-publish.d.ts.map +1 -1
- package/dist/lifecycle/release-publish.js +29 -17
- package/dist/lifecycle/release-store.d.ts +25 -2
- package/dist/lifecycle/release-store.d.ts.map +1 -1
- package/dist/lifecycle/release-store.js +40 -13
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +1 -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/lint/rules/op/index.d.ts +2 -1
- package/dist/lint/rules/op/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.js +4 -2
- package/dist/lint/rules/op/ops018-shell-image-digest.d.ts +10 -0
- package/dist/lint/rules/op/ops018-shell-image-digest.d.ts.map +1 -0
- package/dist/lint/rules/op/ops018-shell-image-digest.js +38 -0
- 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/activity-contracts.d.ts +5 -0
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.js +3 -0
- package/dist/op/activities/factory.js +1 -1
- package/dist/op/activities/shell.d.ts +38 -0
- package/dist/op/activities/shell.d.ts.map +1 -1
- package/dist/op/activities/shell.js +89 -3
- package/dist/op/builders.d.ts +7 -0
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +7 -0
- 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/runtime.d.ts +2 -0
- package/dist/op/runtime.d.ts.map +1 -1
- 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 +155 -7
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +137 -11
- package/dist/pr-report-url.d.ts +4 -4
- package/dist/pr-report-url.d.ts.map +1 -1
- package/dist/pr-report-url.js +5 -5
- package/dist/runner-start.d.ts +179 -0
- package/dist/runner-start.d.ts.map +1 -0
- package/dist/runner-start.js +277 -0
- 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 +238 -231
- 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/check.schema.json +70 -2
- package/dist/workspace/checks/boxes.d.ts +6 -6
- package/dist/workspace/checks/boxes.js +9 -9
- package/dist/workspace/checks/security.d.ts +35 -0
- package/dist/workspace/checks/security.d.ts.map +1 -0
- package/dist/workspace/checks/security.js +305 -0
- package/dist/workspace/checks.d.ts +2 -0
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +5 -0
- package/dist/workspace/ci-builds.d.ts +163 -0
- package/dist/workspace/ci-builds.d.ts.map +1 -0
- package/dist/workspace/ci-builds.js +315 -0
- package/dist/workspace/ci-green-cli.d.ts +2 -1
- package/dist/workspace/ci-green-cli.d.ts.map +1 -1
- package/dist/workspace/ci-green-cli.js +25 -5
- package/dist/workspace/ci-green-forge.d.ts +18 -4
- package/dist/workspace/ci-green-forge.d.ts.map +1 -1
- package/dist/workspace/ci-green-forge.js +12 -0
- package/dist/workspace/ci-green-workflow.d.ts +55 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +128 -1
- package/dist/workspace/ci-green.d.ts +117 -16
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +358 -43
- package/dist/workspace/ci-last-green.schema.json +49 -0
- package/dist/workspace/ci-list.schema.json +47 -7
- 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 +13 -1
- 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 +6 -4
- package/dist/workspace/ci-run.d.ts +85 -6
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +262 -64
- 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-runner-start.d.ts +77 -0
- package/dist/workspace/ci-runner-start.d.ts.map +1 -0
- package/dist/workspace/ci-runner-start.js +185 -0
- package/dist/workspace/ci-serve.d.ts +130 -11
- package/dist/workspace/ci-serve.d.ts.map +1 -1
- package/dist/workspace/ci-serve.js +323 -40
- package/dist/workspace/declaration.d.ts +25 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +14 -2
- package/dist/workspace/declaration.schema.json +30 -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 +8 -1
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +2 -1
- package/dist/workspace/ls.schema.json +9 -2
- package/dist/workspace/member-pipeline.d.ts +1 -0
- package/dist/workspace/member-pipeline.d.ts.map +1 -1
- package/dist/workspace/member-pipeline.js +2 -0
- package/dist/workspace/merge-record.schema.json +49 -0
- 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 +75 -8
- package/dist/workspace/reason-codes.d.ts +18 -1
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +20 -2
- package/dist/workspace/release-candidates.d.ts +129 -0
- package/dist/workspace/release-candidates.d.ts.map +1 -0
- package/dist/workspace/release-candidates.js +233 -0
- package/dist/workspace/release-candidates.schema.json +353 -0
- package/dist/workspace/run-event.schema.json +3 -1
- package/dist/workspace/security.d.ts +40 -0
- package/dist/workspace/security.d.ts.map +1 -0
- package/dist/workspace/security.js +99 -0
- 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 +8 -1
- package/src/__fixtures__/pr-loop/pr-apply-wave-waiting.note.golden.md +48 -0
- package/src/__fixtures__/pr-loop/pr-plan.note.golden.md +1 -1
- package/src/ci-jobs.ts +11 -2
- 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 +105 -0
- package/src/cli/handlers/build.ts +35 -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/lifecycle-health.test.ts +123 -0
- package/src/cli/handlers/lifecycle-health.ts +157 -0
- package/src/cli/handlers/lifecycle.ts +1 -1
- 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-deploy-inputs.test.ts +209 -0
- package/src/cli/handlers/pr-record.test.ts +201 -0
- package/src/cli/handlers/pr-waves.test.ts +449 -0
- package/src/cli/handlers/pr.test.ts +156 -0
- package/src/cli/handlers/pr.ts +648 -33
- package/src/cli/handlers/promote.test.ts +43 -1
- package/src/cli/handlers/promote.ts +19 -3
- package/src/cli/handlers/release-cut-at.e2e.test.ts +115 -0
- package/src/cli/handlers/release-publish-targets.e2e.test.ts +2 -2
- package/src/cli/handlers/release-verify.e2e.test.ts +12 -10
- package/src/cli/handlers/release.e2e.test.ts +19 -28
- package/src/cli/handlers/release.ts +81 -11
- 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 +120 -33
- package/src/cli/parse-args.ts +28 -0
- package/src/cli/registry.ts +35 -8
- 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/deploy-inputs.test.ts +108 -0
- package/src/components/deploy-inputs.ts +225 -0
- package/src/components/driver.test.ts +36 -1
- package/src/components/driver.ts +87 -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/gate-plan.ts +9 -0
- package/src/components/pr-pipeline.test.ts +100 -0
- package/src/components/pr-pipeline.ts +184 -28
- package/src/components/pr-run.test.ts +323 -18
- package/src/components/pr-run.ts +355 -76
- package/src/components/release-compile.test.ts +34 -0
- package/src/components/release-compile.ts +89 -8
- package/src/components/release-promote.test.ts +55 -2
- package/src/components/release-promote.ts +93 -23
- package/src/components/verbs/bom-writer.ts +1 -1
- package/src/components/verbs/lockfile-sbom-generator.test.ts +36 -0
- package/src/components/verbs/lockfile-sbom-generator.ts +43 -5
- package/src/components/wave-plan.ts +48 -8
- 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/graph-detail.test.ts +57 -0
- package/src/graph-detail.ts +33 -7
- package/src/health.schema.json +191 -0
- package/src/health.test.ts +62 -0
- package/src/health.ts +178 -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 +43 -1
- package/src/lifecycle/affected.test.ts +7 -0
- package/src/lifecycle/affected.ts +6 -1
- package/src/lifecycle/merge-record.test.ts +111 -0
- package/src/lifecycle/merge-record.ts +154 -0
- package/src/lifecycle/publish-attachments.ts +25 -13
- package/src/lifecycle/publish-npm.ts +4 -3
- package/src/lifecycle/publish-targets.test.ts +34 -4
- package/src/lifecycle/release-at.test.ts +48 -0
- package/src/lifecycle/release-at.ts +100 -0
- package/src/lifecycle/release-cut.test.ts +41 -0
- package/src/lifecycle/release-cut.ts +22 -11
- package/src/lifecycle/release-ledger.ts +34 -0
- package/src/lifecycle/release-publish.test.ts +43 -13
- package/src/lifecycle/release-publish.ts +38 -18
- package/src/lifecycle/release-store.ts +57 -13
- package/src/lifecycle/run-ledger.test.ts +13 -0
- package/src/lifecycle/run-ledger.ts +1 -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/lint/rules/op/index.ts +4 -2
- package/src/lint/rules/op/ops018-shell-image-digest.test.ts +60 -0
- package/src/lint/rules/op/ops018-shell-image-digest.ts +48 -0
- package/src/module-source.test.ts +85 -0
- package/src/module-source.ts +112 -0
- package/src/op/activities/activity-contracts.ts +3 -0
- package/src/op/activities/factory.ts +1 -1
- package/src/op/activities/shell-container.e2e.test.ts +67 -0
- package/src/op/activities/shell.test.ts +44 -1
- package/src/op/activities/shell.ts +110 -3
- package/src/op/builders.ts +7 -0
- 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/runtime.ts +2 -0
- package/src/op/step-console.test.ts +4 -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 +146 -1
- package/src/pr-loop.ts +278 -17
- package/src/pr-report-url.ts +7 -7
- package/src/runner-start-bundle.test.ts +29 -0
- package/src/runner-start.test.ts +179 -0
- package/src/runner-start.ts +329 -0
- 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/check-contract.test.ts +3 -2
- package/src/workspace/check.schema.json +70 -2
- package/src/workspace/checks/boxes.ts +9 -9
- package/src/workspace/checks/security.test.ts +138 -0
- package/src/workspace/checks/security.ts +305 -0
- package/src/workspace/checks.ts +5 -0
- package/src/workspace/ci-builds.e2e.test.ts +208 -0
- package/src/workspace/ci-builds.test.ts +174 -0
- package/src/workspace/ci-builds.ts +385 -0
- package/src/workspace/ci-green-builds.test.ts +180 -0
- package/src/workspace/ci-green-cli.test.ts +54 -0
- package/src/workspace/ci-green-cli.ts +26 -5
- package/src/workspace/ci-green-forge.ts +30 -4
- package/src/workspace/ci-green-runs.test.ts +53 -11
- package/src/workspace/ci-green-workflow.test.ts +84 -1
- package/src/workspace/ci-green-workflow.ts +139 -2
- package/src/workspace/ci-green.test.ts +6 -3
- package/src/workspace/ci-green.ts +408 -48
- package/src/workspace/ci-last-green.schema.json +49 -0
- package/src/workspace/ci-list.schema.json +47 -7
- 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 +6 -4
- package/src/workspace/ci-run-index.test.ts +42 -3
- package/src/workspace/ci-run-index.ts +19 -5
- package/src/workspace/ci-run.test.ts +203 -8
- package/src/workspace/ci-run.ts +295 -63
- package/src/workspace/ci-runner-key.test.ts +55 -17
- package/src/workspace/ci-runner-key.ts +36 -11
- package/src/workspace/ci-runner-start.test.ts +151 -0
- package/src/workspace/ci-runner-start.ts +193 -0
- package/src/workspace/ci-serve-builds.test.ts +86 -0
- package/src/workspace/ci-serve.test.ts +209 -6
- package/src/workspace/ci-serve.ts +341 -42
- package/src/workspace/declaration.schema.json +30 -2
- package/src/workspace/declaration.test.ts +40 -0
- package/src/workspace/declaration.ts +40 -3
- package/src/workspace/export.ts +6 -3
- package/src/workspace/ls.schema.json +9 -2
- package/src/workspace/ls.ts +10 -4
- package/src/workspace/member-pipeline.ts +2 -1
- package/src/workspace/merge-record.schema.json +49 -0
- package/src/workspace/pin-integrity.test.ts +5 -0
- package/src/workspace/pin-integrity.ts +3 -2
- package/src/workspace/pr-report.schema.json +75 -8
- package/src/workspace/reason-codes.test.ts +2 -0
- package/src/workspace/reason-codes.ts +20 -2
- package/src/workspace/release-candidates.schema.json +353 -0
- package/src/workspace/release-candidates.test.ts +106 -0
- package/src/workspace/release-candidates.ts +315 -0
- package/src/workspace/run-event.schema.json +3 -1
- package/src/workspace/security.test.ts +70 -0
- package/src/workspace/security.ts +118 -0
- 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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The jobs of a generated pull-request pipeline (#3183): a plan job on every
|
|
3
|
-
* pull request and
|
|
3
|
+
* pull request and, on every push to the target branch, a record job, or an
|
|
4
|
+
* apply job when the pipeline opts into apply on merge (#4168).
|
|
4
5
|
*
|
|
5
6
|
* Each forge's generator (the github, gitlab and forgejo lexicons) adds its
|
|
6
7
|
* own triggers, permissions and artifact handling; the commands and the
|
|
@@ -9,11 +10,19 @@
|
|
|
9
10
|
* - The plan job runs `chant components pr-plan` against the pull request's
|
|
10
11
|
* target commit. It posts the note and the `chant/plan` status and writes
|
|
11
12
|
* nothing to `chant/lifecycle`, since it runs the pull request's code.
|
|
12
|
-
* - The
|
|
13
|
+
* - The record job (#4168 step 1, the default) runs `chant components
|
|
14
|
+
* pr-record` against the commit the push replaced. It plans the same
|
|
15
|
+
* members on the merged commit, stores the change set and writes the merge
|
|
16
|
+
* record, `_merges/<commit>.json` on `chant/lifecycle`. It applies nothing:
|
|
17
|
+
* a release that carries the commit deploys it. It needs write access to
|
|
18
|
+
* `chant/lifecycle`. One record runs at a time per environment.
|
|
19
|
+
* - With `applyOnMerge` the apply job takes the record job's place. It runs
|
|
20
|
+
* `chant components pr-apply` against the commit the
|
|
13
21
|
* push replaced, finds the pull request that merged the pushed commit
|
|
14
22
|
* through the forge, and applies only when an approval stands for the
|
|
15
|
-
* digest it plans. With `requireReview` (
|
|
16
|
-
*
|
|
23
|
+
* digest it plans. With `requireReview` (off by default since #4168, on
|
|
24
|
+
* under the `review-rules` security group) the approver must also have
|
|
25
|
+
* approved the pull request on the forge. It needs write access
|
|
17
26
|
* to `chant/lifecycle`, to record the pending fact when the gate stops it.
|
|
18
27
|
* One apply runs at a time per environment.
|
|
19
28
|
*
|
|
@@ -35,6 +44,7 @@
|
|
|
35
44
|
* it too. With `reportUrl` both pass `--report-url`, which copies the report,
|
|
36
45
|
* the change set and the events where a reader outside CI can fetch them;
|
|
37
46
|
* the job's own environment brings the credentials an `s3://` URL needs.
|
|
47
|
+
* The record job passes the same flags as the apply.
|
|
38
48
|
*
|
|
39
49
|
* With `build` (#4088) both jobs run the project's build and `chant lint`
|
|
40
50
|
* before their command, and fail on an error. A `cfn-deploy` member's plan
|
|
@@ -42,6 +52,25 @@
|
|
|
42
52
|
* build is `chant build --env <env>`, or `buildCommand` when the templates
|
|
43
53
|
* come from several builds (`npm run build`).
|
|
44
54
|
*
|
|
55
|
+
* With `waveGate` (#4003) the apply runs a wave at a time: `pr-apply
|
|
56
|
+
* --wave-gate <gate>`, each wave planned after the one before it applied. A
|
|
57
|
+
* generator writes one apply job per wave of the component graph
|
|
58
|
+
* (`prLoopWaveJobs`), job `apply-wave-<k>` passing `--wave <k>` and needing
|
|
59
|
+
* the job before it, and the attempt record carries the approved set from
|
|
60
|
+
* one job to the next. A wave whose plan the approved change set covers
|
|
61
|
+
* applies under the pull request's approval; one whose plan moved stops at
|
|
62
|
+
* `<gate>-wave-<k>` (exit 3), and re-running its job after the approval
|
|
63
|
+
* carries on. `chant ci serve` runs the one apply job, which runs the waves
|
|
64
|
+
* in order until one stops.
|
|
65
|
+
*
|
|
66
|
+
* Each generated job runs its command through `chant ci run plan|apply
|
|
67
|
+
* --in-place` (#4156, `PrLoopJob.run`), so a forge job writes the same run
|
|
68
|
+
* record the chant runner does: Op `pr-plan` or `pr-apply`, signed with
|
|
69
|
+
* the runner key a forge secret puts in `CHANT_RUNNER_KEY`, and naming the
|
|
70
|
+
* forge's run as its `runOrigin`. `ci run` runs `command` in the job's own
|
|
71
|
+
* checkout with the job's environment, less the key. The plan passes
|
|
72
|
+
* `--no-push`, so it still writes nothing to the remote `chant/lifecycle`.
|
|
73
|
+
*
|
|
45
74
|
* In a workspace member (#3465) both commands run in the member's directory
|
|
46
75
|
* and pass `--member <name>`, so the member's gate (`pr-<number>-<member>`),
|
|
47
76
|
* note and statuses stay apart from every other member's on the same pull
|
|
@@ -50,6 +79,10 @@
|
|
|
50
79
|
*/
|
|
51
80
|
import { PR_APPLY_GATE } from "../pr-loop.js";
|
|
52
81
|
import { CI_IMAGE, GITHUB_JOB_TOKEN } from "../ci-jobs.js";
|
|
82
|
+
import { EMPTY_TREE_SHA } from "./changed-files.js";
|
|
83
|
+
import { layerWaves } from "../gated-waves.js";
|
|
84
|
+
/** The variable `chant ci run` reads its runner key from (`RUNNER_KEY_ENV` in ../workspace/ci-green.ts). */
|
|
85
|
+
const RUNNER_KEY_ENV = "CHANT_RUNNER_KEY";
|
|
53
86
|
/** Where both jobs write their reports, kept as a CI artifact. */
|
|
54
87
|
export const PR_LOOP_REPORT_DIR = ".chant/pr";
|
|
55
88
|
/**
|
|
@@ -86,9 +119,10 @@ export function prLoopBuildLines(env, options = {}) {
|
|
|
86
119
|
return [options.buildCommand ?? `chant build --env ${env}`, "chant lint"];
|
|
87
120
|
}
|
|
88
121
|
/**
|
|
89
|
-
* The
|
|
90
|
-
*
|
|
91
|
-
*
|
|
122
|
+
* The jobs for `forge`: plan, apply and record, in that order. A generator
|
|
123
|
+
* writes the plan and, on merge, {@link prLoopMergeJob}'s choice of the
|
|
124
|
+
* other two. `member` is the workspace member the pipeline is generated for;
|
|
125
|
+
* the commands then run in its directory, so `--output` is relative to it.
|
|
92
126
|
*/
|
|
93
127
|
export function prLoopJobs(forge, env, options = {}, member) {
|
|
94
128
|
const gate = options.gate ?? PR_APPLY_GATE;
|
|
@@ -105,28 +139,97 @@ export function prLoopJobs(forge, env, options = {}, member) {
|
|
|
105
139
|
...(github ? { GITHUB_TOKEN: GITHUB_JOB_TOKEN } : {}),
|
|
106
140
|
...(options.events ? { CHANT_RUN_EVENTS_DIR: PR_LOOP_EVENTS_DIR } : {}),
|
|
107
141
|
};
|
|
142
|
+
// #4156: the flags `chant ci run` rebuilds `command` from. It finds the member from the directory it runs in.
|
|
143
|
+
const ciRun = (job) => [
|
|
144
|
+
"chant", "ci", "run", job, "--in-place", ...(job === "plan" ? ["--no-push"] : []),
|
|
145
|
+
"--base", '"$BASE_SHA"', ...(job === "plan" ? ["--pr", '"$PR_NUMBER"'] : []),
|
|
146
|
+
"--env", env, "--gate", gate, "--forge", forge,
|
|
147
|
+
...(job !== "record" && options.waveGate ? ["--wave-gate", options.waveGate] : []),
|
|
148
|
+
...(job !== "plan" && options.branch ? ["--branch", JSON.stringify(options.branch)] : []),
|
|
149
|
+
...(job === "apply" && options.requireReview === true ? ["--require-review"] : []),
|
|
150
|
+
...(job !== "plan" && options.requireRunnerStart === true ? ["--require-runner-start"] : []),
|
|
151
|
+
...(options.events ? ["--events-json"] : []),
|
|
152
|
+
...(options.reportUrl ? ["--report-url", JSON.stringify(options.reportUrl)] : []),
|
|
153
|
+
];
|
|
154
|
+
const runEnv = (env) => (github ? { ...env, [RUNNER_KEY_ENV]: `\${{ secrets.${RUNNER_KEY_ENV} }}` } : env);
|
|
155
|
+
const planEnv = github
|
|
156
|
+
? { BASE_SHA: "${{ github.event.pull_request.base.sha }}", PR_NUMBER: "${{ github.event.pull_request.number }}", ...jobEnv }
|
|
157
|
+
: { BASE_SHA: "$CI_MERGE_REQUEST_DIFF_BASE_SHA", PR_NUMBER: "$CI_MERGE_REQUEST_IID", ...jobEnv };
|
|
158
|
+
const applyEnv = github ? { BASE_SHA: "${{ github.event.before }}", ...jobEnv } : { BASE_SHA: "$CI_COMMIT_BEFORE_SHA", ...jobEnv };
|
|
108
159
|
return [
|
|
109
160
|
{
|
|
110
161
|
jobName: "plan",
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
: { BASE_SHA: "$CI_MERGE_REQUEST_DIFF_BASE_SHA", PR_NUMBER: "$CI_MERGE_REQUEST_IID", ...jobEnv },
|
|
162
|
+
// With `waveGate` the plan's note says the later waves may stop at their own gates (#4003).
|
|
163
|
+
command: ["chant", "components", "pr-plan", "--base", '"$BASE_SHA"', "--pr", '"$PR_NUMBER"', ...common, ...(options.waveGate ? ["--wave-gate", options.waveGate] : [])].join(" "),
|
|
164
|
+
env: planEnv,
|
|
115
165
|
...build,
|
|
166
|
+
run: { command: ciRun("plan").join(" "), env: runEnv(planEnv) },
|
|
116
167
|
},
|
|
117
168
|
{
|
|
118
169
|
jobName: "apply",
|
|
119
170
|
command: [
|
|
120
171
|
"chant", "components", "pr-apply", "--base", '"$BASE_SHA"', ...common,
|
|
121
|
-
...(options.requireReview ===
|
|
172
|
+
...(options.requireReview === true ? ["--require-review"] : []),
|
|
173
|
+
...(options.waveGate ? ["--wave-gate", options.waveGate] : []),
|
|
122
174
|
"--resume", PR_APPLY_RECORD,
|
|
123
175
|
].join(" "),
|
|
124
|
-
env:
|
|
125
|
-
|
|
176
|
+
env: applyEnv,
|
|
177
|
+
setup: [github ? githubBaseFallback(options.branch) : gitlabBaseFallback(options.branch)],
|
|
126
178
|
...build,
|
|
179
|
+
run: { command: ciRun("apply").join(" "), env: runEnv(applyEnv) },
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
jobName: "record",
|
|
183
|
+
command: ["chant", "components", "pr-record", "--base", '"$BASE_SHA"', ...common].join(" "),
|
|
184
|
+
env: applyEnv,
|
|
185
|
+
setup: [github ? githubBaseFallback(options.branch) : gitlabBaseFallback(options.branch)],
|
|
186
|
+
...build,
|
|
187
|
+
run: { command: ciRun("record").join(" "), env: runEnv(applyEnv) },
|
|
127
188
|
},
|
|
128
189
|
];
|
|
129
190
|
}
|
|
191
|
+
/** The job a push to the target branch runs (#4168): `record`, or `apply` when the pipeline opts into apply on merge. */
|
|
192
|
+
export function prLoopMergeJob(jobs, options = {}) {
|
|
193
|
+
return jobs.find((j) => j.jobName === (options.applyOnMerge ? "apply" : "record"));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* The pull-request options with `--wave-gate` beside `--pr-loop` (#4003):
|
|
197
|
+
* the apply gets a gate per wave. A canary or a fixed base is refused, since
|
|
198
|
+
* the pull request's waves are its derivation's and each push is measured
|
|
199
|
+
* from the commit before it.
|
|
200
|
+
*/
|
|
201
|
+
export function prLoopWithWaves(prLoop, gatedWaves) {
|
|
202
|
+
if (!gatedWaves)
|
|
203
|
+
return prLoop;
|
|
204
|
+
if (!prLoop.applyOnMerge) {
|
|
205
|
+
throw new Error("--wave-gate beside --pr-loop gates the apply on merge, so it needs --apply-on-merge (#4168); without it a merge records the plan and a release deploys it");
|
|
206
|
+
}
|
|
207
|
+
if (gatedWaves.canary?.length)
|
|
208
|
+
throw new Error("a pull-request pipeline's waves are the change's derivation, so it takes no --canary; drop --canary");
|
|
209
|
+
if (gatedWaves.base !== undefined)
|
|
210
|
+
throw new Error("a pull-request pipeline measures each push from the commit before it, so it takes no --base; drop --base");
|
|
211
|
+
return { ...prLoop, waveGate: gatedWaves.gate };
|
|
212
|
+
}
|
|
213
|
+
/** The name of the apply job for wave `wave` (#4003). */
|
|
214
|
+
export function prApplyWaveJobName(wave) {
|
|
215
|
+
return `apply-wave-${wave}`;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* One apply job per wave of the component graph (#4003), each `apply`'s
|
|
219
|
+
* command with `--wave <k>`. A change selects a subset, which never layers
|
|
220
|
+
* deeper than the graph, so a job past the change's last wave finds nothing
|
|
221
|
+
* left and exits 0.
|
|
222
|
+
*/
|
|
223
|
+
export function prLoopWaveJobs(components, apply) {
|
|
224
|
+
const count = Math.max(1, layerWaves(components.map((c) => ({ name: c.name, dependsOn: c.dependsOn ?? [] }))).length);
|
|
225
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
226
|
+
...apply,
|
|
227
|
+
command: `${apply.command} --wave ${i + 1}`,
|
|
228
|
+
wave: i + 1,
|
|
229
|
+
// #4156: the job runs it through chant ci run, which appends the same --wave to pr-apply.
|
|
230
|
+
run: { ...apply.run, command: `${apply.run.command} --wave ${i + 1}` },
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
130
233
|
/**
|
|
131
234
|
* The concurrency group (GitHub, Forgejo) or resource group (GitLab) that
|
|
132
235
|
* keeps one apply at a time per environment, and per member in a workspace.
|
|
@@ -141,6 +244,10 @@ export function prLoopJobs(forge, env, options = {}, member) {
|
|
|
141
244
|
export function prApplyGroup(env, member) {
|
|
142
245
|
return member ? `chant-apply.${member}.${env}` : `chant-apply-${env}`;
|
|
143
246
|
}
|
|
247
|
+
/** The group that keeps one record job at a time per environment and member (#4168), named as {@link prApplyGroup} names the apply's. */
|
|
248
|
+
export function prRecordGroup(env, member) {
|
|
249
|
+
return member ? `chant-record.${member}.${env}` : `chant-record-${env}`;
|
|
250
|
+
}
|
|
144
251
|
/**
|
|
145
252
|
* The cache key the apply job keeps its attempt record under (#3543), with
|
|
146
253
|
* `commit` the forge's expression for the pushed commit. A push of another
|
|
@@ -152,18 +259,34 @@ export function prApplyGroup(env, member) {
|
|
|
152
259
|
export function prApplyRecordKey(env, commit, member) {
|
|
153
260
|
return `${prApplyGroup(env, member)}-${commit}`;
|
|
154
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* The shell that settles an unusable push base. `before` is empty or forty
|
|
264
|
+
* zeros on a branch's first push; then the base is `diffBase` when the forge
|
|
265
|
+
* gives one, else the merge base of `target` and `commit`, else `commit`'s
|
|
266
|
+
* parent when the merge base is `commit` itself, else, for a root commit, the
|
|
267
|
+
* empty tree.
|
|
268
|
+
*/
|
|
269
|
+
function pushBaseFallback(target, commit, diffBase) {
|
|
270
|
+
const fromBranch = `git fetch origin ${target} && BASE_SHA="$(git merge-base FETCH_HEAD "${commit}")"; ` +
|
|
271
|
+
`if [ "$BASE_SHA" = "${commit}" ]; then BASE_SHA="$(git rev-parse --verify --quiet "${commit}^" || echo ${EMPTY_TREE_SHA})"; fi; `;
|
|
272
|
+
return ('if [ -z "$BASE_SHA" ] || [ "$BASE_SHA" = "0000000000000000000000000000000000000000" ]; then ' +
|
|
273
|
+
(diffBase ? `BASE_SHA="\${${diffBase}:-}"; if [ -z "$BASE_SHA" ]; then ${fromBranch}fi; ` : fromBranch) +
|
|
274
|
+
"fi; export BASE_SHA");
|
|
275
|
+
}
|
|
155
276
|
/**
|
|
156
277
|
* GitLab sets `CI_COMMIT_BEFORE_SHA` to forty zeros on a branch's first push.
|
|
157
278
|
* 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.
|
|
279
|
+
* has one, and otherwise as {@link pushBaseFallback} does.
|
|
160
280
|
*/
|
|
161
281
|
export function gitlabBaseFallback(branch) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
282
|
+
return pushBaseFallback(branch ? JSON.stringify(branch) : "$CI_DEFAULT_BRANCH", "$CI_COMMIT_SHA", "CI_MERGE_REQUEST_DIFF_BASE_SHA");
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* GitHub and Forgejo set `github.event.before` to forty zeros on a branch's
|
|
286
|
+
* first push (#4004). The line replaces it as {@link pushBaseFallback} does,
|
|
287
|
+
* with the target branch `main` unless the pipeline names another, the
|
|
288
|
+
* generators' default.
|
|
289
|
+
*/
|
|
290
|
+
export function githubBaseFallback(branch) {
|
|
291
|
+
return pushBaseFallback(JSON.stringify(branch ?? "main"), "$GITHUB_SHA");
|
|
169
292
|
}
|
|
@@ -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,8 +290,24 @@ 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
|
-
stage: "plan" | "apply";
|
|
310
|
+
stage: "plan" | "apply" | "record";
|
|
218
311
|
pr: number | null;
|
|
219
312
|
env: string;
|
|
220
313
|
/** The workspace member whose pipeline runs the stage (#3465). */
|
|
@@ -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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"}
|