@empire-builder-kit/nx 1.0.0-rc.37 → 1.0.0-rc.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/executors.json +5 -0
- package/generators.json +10 -0
- package/package.json +20 -3
- package/src/aws-authority/index.d.ts +1 -0
- package/src/aws-authority/index.js +1 -0
- package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
- package/src/aws-authority/lambda-policy-ordering.js +56 -0
- package/src/aws-authority/stage-authority.d.ts +11 -3
- package/src/aws-authority/stage-authority.js +615 -29
- package/src/blueprints/external-sandbox.js +21 -9
- package/src/blueprints/manifest.d.ts +1 -1
- package/src/blueprints/resolver.js +28 -15
- package/src/cli/bootstrap.d.ts +1 -1
- package/src/cli/deploy-runtime.d.ts +6 -0
- package/src/cli/deploy-runtime.js +58 -0
- package/src/cli/dev-command.d.ts +16 -4
- package/src/cli/dev-command.js +63 -0
- package/src/cli/main.d.ts +7 -1
- package/src/cli/main.js +128 -20
- package/src/cli/output.d.ts +1 -1
- package/src/developer-agent/context.js +41 -9
- package/src/developer-agent/generator-planning.js +16 -2
- package/src/developer-agent/git-inspection.d.ts +6 -2
- package/src/developer-agent/git-inspection.js +78 -6
- package/src/developer-agent/model.d.ts +4 -2
- package/src/developer-agent/operation-registry.d.ts +5 -0
- package/src/developer-agent/operation-registry.js +179 -23
- package/src/developer-agent/preview-changes.d.ts +2 -0
- package/src/developer-agent/preview-changes.js +14 -2
- package/src/developer-agent/preview-source.js +3 -0
- package/src/developer-agent/validation.js +20 -8
- package/src/developer-agent/workspace-inspection.js +37 -3
- package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
- package/src/executors/deployment-plan/deployment-plan.js +51 -4
- package/src/executors/dev-doctor/dev-doctor.js +13 -6
- package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
- package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
- package/src/executors/dev-task-cleanup/schema.json +9 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
- package/src/executors/fleet/fleet.js +1 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +28 -1
- package/src/executors/local-deploy/local-deploy.d.ts +8 -1
- package/src/executors/local-deploy/local-deploy.js +97 -24
- package/src/executors/local-deploy/schema.json +8 -0
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +30 -18
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +2 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +9 -0
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +5 -0
- package/src/executors/sst-lifecycle/run-sst-command.js +220 -32
- package/src/executors/sst-lifecycle/sst-environment-source.d.ts +8 -0
- package/src/executors/sst-lifecycle/sst-environment-source.js +54 -0
- package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
- package/src/executors/sst-lifecycle/task-unlock.js +126 -0
- package/src/foundation/capability-plan.d.ts +43 -0
- package/src/foundation/capability-plan.js +168 -0
- package/src/foundation/discovery.d.ts +14 -11
- package/src/foundation/discovery.js +32 -6
- package/src/foundation/index.d.ts +1 -0
- package/src/foundation/index.js +1 -0
- package/src/foundation/local-database-contract.d.ts +20 -0
- package/src/foundation/local-database-contract.js +262 -13
- package/src/foundation/local-private-smoke-access.d.ts +20 -0
- package/src/foundation/local-private-smoke-access.js +197 -0
- package/src/foundation/preflight.js +37 -18
- package/src/foundation/private-smoke-access.js +10 -2
- package/src/foundation/private-smoke-admission.d.ts +3 -1
- package/src/foundation/private-smoke-admission.js +29 -8
- package/src/foundation/private-smoke-control-plane.js +17 -6
- package/src/foundation/provision-database-bindings.d.ts +5 -0
- package/src/foundation/provision-database-bindings.js +41 -8
- package/src/foundation/provision-logical-database.js +13 -8
- package/src/foundation/requirements.d.ts +3 -3
- package/src/foundation/requirements.js +24 -12
- package/src/foundation/router-waf.d.ts +1 -0
- package/src/foundation/router-waf.js +14 -1
- package/src/generators/blueprint/blueprint.d.ts +5 -0
- package/src/generators/blueprint/blueprint.js +102 -0
- package/src/generators/blueprint/files.d.ts +6 -0
- package/src/generators/blueprint/files.js +217 -0
- package/src/generators/blueprint/schema.d.ts +4 -0
- package/src/generators/blueprint/schema.json +18 -0
- package/src/generators/formatting.js +24 -1
- package/src/generators/logging-registry.d.ts +2 -0
- package/src/generators/logging-registry.js +22 -0
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +301 -0
- package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
- package/src/generators/preset/workspace-files-ci-install.js +196 -0
- package/src/generators/preset/workspace-files-developer-agent.js +40 -13
- package/src/generators/preset/workspace-files-performance-load.js +8 -0
- package/src/generators/preset/workspace-files-stage-authority.js +40 -1
- package/src/generators/preset/workspace-files-thin-deploy.js +66 -34
- package/src/generators/preset/workspace-files-thin-docs.js +64 -18
- package/src/generators/preset/workspace-files.d.ts +4 -0
- package/src/generators/preset/workspace-files.js +159 -91
- package/src/generators/repository-policy/repository-policy.js +37 -0
- package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
- package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-api-files.js +47 -389
- package/src/generators/slice/built-in-plan-async-work-files.js +19 -1912
- package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +36 -2
- package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
- package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
- package/src/generators/slice/built-in-plan-background-work-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-background-work-files.js +15 -5
- package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +61 -1164
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +18 -2
- package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2446
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +30 -6
- package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js +4 -15
- package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +34 -10
- package/src/generators/slice/built-in-plan-frontend-files.js +2 -2
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +180 -522
- package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.js +120 -0
- package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
- package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
- package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
- package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
- package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
- package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
- package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
- package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
- package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
- package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-metadata-files.js +140 -28
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +36 -19
- package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-operations-files.js +89 -50
- package/src/generators/slice/built-in-plan-performance-files.js +84 -1010
- package/src/generators/slice/built-in-plan-project-files.js +116 -67
- package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-release-files.js +64 -15
- package/src/generators/slice/built-in-plan-reliability-files.js +54 -28
- package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
- package/src/generators/slice/built-in-plan-shared.js +41 -19
- package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
- package/src/generators/slice/built-in-plan-sql-events.js +257 -0
- package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +184 -132
- package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
- package/src/generators/slice/built-in-plan-thin-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-thin-release-files.js +35 -2
- package/src/generators/slice/built-in-plan-verification-files.js +70 -0
- package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +206 -14
- package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js +113 -274
- package/src/generators/slice/built-in-plan.d.ts +9 -1
- package/src/generators/slice/built-in-plan.js +49 -21
- package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
- package/src/generators/slice/data-policy-review-seed.js +22 -0
- package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
- package/src/generators/slice/deployed-smoke-readiness.js +214 -0
- package/src/generators/slice/local-source-identity.d.ts +2 -0
- package/src/generators/slice/local-source-identity.js +31 -0
- package/src/generators/slice/persistence-contract.d.ts +14 -0
- package/src/generators/slice/persistence-contract.js +32 -0
- package/src/generators/slice/slice.js +29 -24
- package/src/generators/sql/schema.d.ts +7 -0
- package/src/generators/sql/schema.json +38 -0
- package/src/generators/sql/sql.d.ts +6 -0
- package/src/generators/sql/sql.js +53 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
- package/src/generators/upgrade/upgrade.d.ts +2 -0
- package/src/generators/upgrade/upgrade.js +136 -9
- package/src/generators/workload/workload.js +51 -2
- package/src/local-dev/browser-verification.d.ts +37 -0
- package/src/local-dev/browser-verification.js +281 -0
- package/src/local-dev/contracts.d.ts +10 -1
- package/src/local-dev/contracts.js +114 -13
- package/src/local-dev/dev-command-core.js +24 -5
- package/src/local-dev/docker-credential-health.d.ts +14 -0
- package/src/local-dev/docker-credential-health.js +94 -0
- package/src/local-dev/environment-inspector.d.ts +7 -0
- package/src/local-dev/environment-inspector.js +42 -15
- package/src/local-dev/environment-state.js +2 -2
- package/src/local-dev/errors.d.ts +1 -1
- package/src/local-dev/errors.js +2 -0
- package/src/local-dev/fleet-client.js +2 -2
- package/src/local-dev/fleet-configuration.js +57 -25
- package/src/local-dev/fleet-inventory.js +46 -18
- package/src/local-dev/fleet-ipc.d.ts +7 -0
- package/src/local-dev/fleet-ipc.js +14 -2
- package/src/local-dev/fleet-launcher.d.ts +6 -0
- package/src/local-dev/fleet-launcher.js +14 -2
- package/src/local-dev/fleet-logs.js +50 -22
- package/src/local-dev/fleet-process.d.ts +20 -1
- package/src/local-dev/fleet-process.js +197 -41
- package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
- package/src/local-dev/fleet-runner-evidence.js +56 -0
- package/src/local-dev/fleet-runtime.js +268 -229
- package/src/local-dev/fleet-session.d.ts +2 -0
- package/src/local-dev/fleet-session.js +28 -11
- package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
- package/src/local-dev/fleet-state.d.ts +5 -2
- package/src/local-dev/fleet-state.js +25 -4
- package/src/local-dev/fleet-supervisor.d.ts +3 -0
- package/src/local-dev/fleet-supervisor.js +66 -11
- package/src/local-dev/fleet-web-start.d.ts +12 -0
- package/src/local-dev/fleet-web-start.js +48 -0
- package/src/local-dev/identity.js +3 -14
- package/src/local-dev/index.d.ts +1 -0
- package/src/local-dev/index.js +1 -0
- package/src/local-dev/native-completion.d.ts +9 -0
- package/src/local-dev/native-completion.js +130 -0
- package/src/local-dev/nx-workspace.d.ts +4 -2
- package/src/local-dev/nx-workspace.js +11 -6
- package/src/local-dev/personal-stage.d.ts +4 -5
- package/src/local-dev/personal-stage.js +6 -54
- package/src/local-dev/port-claims.d.ts +13 -0
- package/src/local-dev/port-claims.js +46 -0
- package/src/local-dev/ports.d.ts +14 -2
- package/src/local-dev/ports.js +78 -3
- package/src/local-dev/private-state.d.ts +6 -0
- package/src/local-dev/private-state.js +126 -34
- package/src/local-dev/process-group.d.ts +4 -0
- package/src/local-dev/process-group.js +29 -0
- package/src/local-dev/process-identity.d.ts +8 -0
- package/src/local-dev/process-identity.js +31 -1
- package/src/local-dev/proxy.js +11 -12
- package/src/local-dev/runtime-paths.js +1 -1
- package/src/local-dev/slice-claim.js +1 -1
- package/src/local-dev/slice-runner.d.ts +15 -6
- package/src/local-dev/slice-runner.js +189 -54
- package/src/local-dev/task-attachment.d.ts +17 -0
- package/src/local-dev/task-attachment.js +73 -0
- package/src/local-dev/task-authority.d.ts +10 -0
- package/src/local-dev/task-authority.js +27 -0
- package/src/local-dev/task-identity.d.ts +33 -0
- package/src/local-dev/task-identity.js +418 -0
- package/src/local-dev/task-native-writer.d.ts +18 -0
- package/src/local-dev/task-native-writer.js +329 -0
- package/src/local-dev/tls.js +3 -1
- package/src/local-dev/web-launch.d.ts +9 -0
- package/src/local-dev/web-launch.js +130 -0
- package/src/ownership/composition.d.ts +2 -1
- package/src/ownership/composition.js +1 -0
- package/src/performance/scenario.d.ts +22 -0
- package/src/performance/scenario.js +100 -92
- package/src/repository-policy/deployment-plan.d.ts +2 -2
- package/src/repository-policy/deployment-plan.js +2 -1
- package/src/repository-policy/policy.js +38 -3
- package/src/schemas/blueprint-v1.json +5 -4
- package/src/schemas/foundation-requirement-v1.json +5 -4
- package/src/schemas/testing-evidence-result-v1.json +1 -1
- package/src/secrets/operator.d.ts +3 -1
- package/src/secrets/operator.js +22 -3
- package/src/sst-environment-source-format.d.ts +3 -0
- package/src/sst-environment-source-format.js +20 -0
- package/src/supply-chain/blueprint-trust-git.js +13 -3
- package/src/supply-chain/build-output.js +15 -0
- package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
- package/src/testing-evidence/fixture-scope.d.ts +2 -1
- package/src/testing-evidence/fixture-scope.js +4 -2
- package/src/testing-evidence/result.d.ts +2 -1
- package/src/testing-evidence/result.js +18 -4
- package/src/workload-roles/standard-slice.js +2 -3
- package/src/api-contract/baseline-update.js.map +0 -1
- package/src/api-contract/compatibility.js.map +0 -1
- package/src/api-contract/contract-graph.js.map +0 -1
- package/src/api-contract/evidence.js.map +0 -1
- package/src/api-contract/index.js.map +0 -1
- package/src/api-contract/model.fixtures.d.ts +0 -2
- package/src/api-contract/model.fixtures.js +0 -81
- package/src/api-contract/model.fixtures.js.map +0 -1
- package/src/api-contract/model.js.map +0 -1
- package/src/api-contract/rollout.js.map +0 -1
- package/src/authorization/compatibility.js.map +0 -1
- package/src/authorization/index.js.map +0 -1
- package/src/aws/child-environment.js.map +0 -1
- package/src/aws/identity.js.map +0 -1
- package/src/aws-authority/index.js.map +0 -1
- package/src/aws-authority/stage-authority.js.map +0 -1
- package/src/blueprints/execution.js.map +0 -1
- package/src/blueprints/external-sandbox.js.map +0 -1
- package/src/blueprints/index.js.map +0 -1
- package/src/blueprints/inputs.js.map +0 -1
- package/src/blueprints/manifest.js.map +0 -1
- package/src/blueprints/resolver.js.map +0 -1
- package/src/blueprints/transitions.js.map +0 -1
- package/src/cli/agent-command.js.map +0 -1
- package/src/cli/agent-runtime.js.map +0 -1
- package/src/cli/blueprint-authority.js.map +0 -1
- package/src/cli/blueprint-command.js.map +0 -1
- package/src/cli/bootstrap.js.map +0 -1
- package/src/cli/dev-command.js.map +0 -1
- package/src/cli/main.js.map +0 -1
- package/src/cli/output.js.map +0 -1
- package/src/cli/personal-secret-runtime.js.map +0 -1
- package/src/cli/secret-terminal.js.map +0 -1
- package/src/container-images.js.map +0 -1
- package/src/data-lifecycle/index.js.map +0 -1
- package/src/data-lifecycle/model.fixtures.d.ts +0 -2
- package/src/data-lifecycle/model.fixtures.js +0 -244
- package/src/data-lifecycle/model.fixtures.js.map +0 -1
- package/src/data-lifecycle/model.js.map +0 -1
- package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
- package/src/data-lifecycle/validation.js.map +0 -1
- package/src/database-retirement/contract.js.map +0 -1
- package/src/database-retirement/index.js.map +0 -1
- package/src/deterministic-order.js.map +0 -1
- package/src/developer-agent/context.js.map +0 -1
- package/src/developer-agent/generator-planning.js.map +0 -1
- package/src/developer-agent/generator-preview.js.map +0 -1
- package/src/developer-agent/git-inspection.js.map +0 -1
- package/src/developer-agent/handoff.js.map +0 -1
- package/src/developer-agent/index.js.map +0 -1
- package/src/developer-agent/model.js.map +0 -1
- package/src/developer-agent/operation-registry.js.map +0 -1
- package/src/developer-agent/ordering.js.map +0 -1
- package/src/developer-agent/planning.js.map +0 -1
- package/src/developer-agent/preview-changes.js.map +0 -1
- package/src/developer-agent/preview-source.js.map +0 -1
- package/src/developer-agent/validation.js.map +0 -1
- package/src/developer-agent/workspace-inspection.js.map +0 -1
- package/src/developer-agent/workspace-path.js.map +0 -1
- package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
- package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
- package/src/executors/deploy/deploy.js.map +0 -1
- package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
- package/src/executors/dev/dev.js.map +0 -1
- package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
- package/src/executors/dev-setup/dev-setup.js.map +0 -1
- package/src/executors/developer-context/developer-context.js.map +0 -1
- package/src/executors/fleet/fleet.js.map +0 -1
- package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
- package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +0 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
- package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
- package/src/executors/local-deploy/federated-credential-transport.js.map +0 -1
- package/src/executors/local-deploy/fixtures/local-deploy-state-machine.mjs +0 -53
- package/src/executors/local-deploy/local-approval.js.map +0 -1
- package/src/executors/local-deploy/local-deploy.js.map +0 -1
- package/src/executors/refresh/refresh.js.map +0 -1
- package/src/executors/remove/remove.js.map +0 -1
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +0 -1
- package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
- package/src/executors/secret-initialize/secret-initialize.js.map +0 -1
- package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
- package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +0 -1
- package/src/executors/sst-lifecycle/governed-native-operation.js.map +0 -1
- package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
- package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
- package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
- package/src/executors/sst-lifecycle/sst-environment-source.js.map +0 -1
- package/src/executors/unlock/unlock.js.map +0 -1
- package/src/executors/work-markers/work-markers.js.map +0 -1
- package/src/foundation/discovery.js.map +0 -1
- package/src/foundation/index.js.map +0 -1
- package/src/foundation/local-database-contract.js.map +0 -1
- package/src/foundation/logging-preflight.js.map +0 -1
- package/src/foundation/logging.js.map +0 -1
- package/src/foundation/partial-state.js.map +0 -1
- package/src/foundation/preflight.js.map +0 -1
- package/src/foundation/private-smoke-access.js.map +0 -1
- package/src/foundation/private-smoke-admission.js.map +0 -1
- package/src/foundation/private-smoke-control-plane.js.map +0 -1
- package/src/foundation/provision-database-bindings.js.map +0 -1
- package/src/foundation/provision-logical-database.js.map +0 -1
- package/src/foundation/requirements.js.map +0 -1
- package/src/foundation/router-origin-proof.js.map +0 -1
- package/src/foundation/router-waf-rate-rehearsal.js.map +0 -1
- package/src/foundation/router-waf.js.map +0 -1
- package/src/foundation/stages.js.map +0 -1
- package/src/frontend-security/index.js.map +0 -1
- package/src/frontend-security/security-headers.js.map +0 -1
- package/src/generators/feature-registry.js.map +0 -1
- package/src/generators/formatting.js.map +0 -1
- package/src/generators/function/function.js.map +0 -1
- package/src/generators/job/job.js.map +0 -1
- package/src/generators/logging-registry.js.map +0 -1
- package/src/generators/post-generation-install.js.map +0 -1
- package/src/generators/preset/dependency-overrides.js.map +0 -1
- package/src/generators/preset/generator.js.map +0 -1
- package/src/generators/preset/tool-versions.js.map +0 -1
- package/src/generators/preset/workspace-files-ci-acceptance.js.map +0 -1
- package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
- package/src/generators/preset/workspace-files-ecr-inspector.js.map +0 -1
- package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
- package/src/generators/preset/workspace-files-stage-authority.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-deploy.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-docs.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-release.js.map +0 -1
- package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
- package/src/generators/preset/workspace-files.js.map +0 -1
- package/src/generators/repository-policy/repository-policy.js.map +0 -1
- package/src/generators/repository-policy/tree-policy.js.map +0 -1
- package/src/generators/service/service.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-background-work-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-shared.js.map +0 -1
- package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-thin-release-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
- package/src/generators/slice/built-in-plan.js.map +0 -1
- package/src/generators/slice/slice.js.map +0 -1
- package/src/generators/upgrade/upgrade.js.map +0 -1
- package/src/generators/workload/frozen-container.js.map +0 -1
- package/src/generators/workload/performance-registration.js.map +0 -1
- package/src/generators/workload/reliability-registration.js.map +0 -1
- package/src/generators/workload/service-performance-files.js.map +0 -1
- package/src/generators/workload/workload.js.map +0 -1
- package/src/git-policy/action-pins.js.map +0 -1
- package/src/git-policy/github-bootstrap.js.map +0 -1
- package/src/git-policy/index.js.map +0 -1
- package/src/git-policy/routing.js.map +0 -1
- package/src/index.js.map +0 -1
- package/src/infrastructure-change/convergence.js.map +0 -1
- package/src/infrastructure-change/drift.js.map +0 -1
- package/src/infrastructure-change/index.js.map +0 -1
- package/src/infrastructure-change/local-capability.js.map +0 -1
- package/src/infrastructure-change/model.js.map +0 -1
- package/src/infrastructure-change/normalize.js.map +0 -1
- package/src/infrastructure-change/plan.js.map +0 -1
- package/src/infrastructure-change/risk.js.map +0 -1
- package/src/infrastructure-change/summary.js.map +0 -1
- package/src/local-dev/context-discovery.js.map +0 -1
- package/src/local-dev/contract-validation.js.map +0 -1
- package/src/local-dev/contracts.js.map +0 -1
- package/src/local-dev/control-contract.js.map +0 -1
- package/src/local-dev/dev-command-core.js.map +0 -1
- package/src/local-dev/effects.js.map +0 -1
- package/src/local-dev/environment-inspector.js.map +0 -1
- package/src/local-dev/environment-state.js.map +0 -1
- package/src/local-dev/errors.js.map +0 -1
- package/src/local-dev/fleet-client.js.map +0 -1
- package/src/local-dev/fleet-configuration.js.map +0 -1
- package/src/local-dev/fleet-inventory.js.map +0 -1
- package/src/local-dev/fleet-ipc.js.map +0 -1
- package/src/local-dev/fleet-launcher.js.map +0 -1
- package/src/local-dev/fleet-lock.js.map +0 -1
- package/src/local-dev/fleet-logs.js.map +0 -1
- package/src/local-dev/fleet-process.js.map +0 -1
- package/src/local-dev/fleet-runtime.js.map +0 -1
- package/src/local-dev/fleet-session.js.map +0 -1
- package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
- package/src/local-dev/fleet-startup.js.map +0 -1
- package/src/local-dev/fleet-state.js.map +0 -1
- package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
- package/src/local-dev/fleet-supervisor.js.map +0 -1
- package/src/local-dev/gateway-daemon.js.map +0 -1
- package/src/local-dev/gateway.js.map +0 -1
- package/src/local-dev/identity.js.map +0 -1
- package/src/local-dev/index.js.map +0 -1
- package/src/local-dev/local-context.js.map +0 -1
- package/src/local-dev/nx-workspace.js.map +0 -1
- package/src/local-dev/personal-secret-ledger.js.map +0 -1
- package/src/local-dev/personal-stage.js.map +0 -1
- package/src/local-dev/portless.js.map +0 -1
- package/src/local-dev/ports.js.map +0 -1
- package/src/local-dev/private-state.js.map +0 -1
- package/src/local-dev/process-identity.js.map +0 -1
- package/src/local-dev/proxy.js.map +0 -1
- package/src/local-dev/runtime-paths.js.map +0 -1
- package/src/local-dev/secret-slice-claim.js.map +0 -1
- package/src/local-dev/slice-claim.js.map +0 -1
- package/src/local-dev/slice-runner.js.map +0 -1
- package/src/local-dev/tls.js.map +0 -1
- package/src/ownership/composition.js.map +0 -1
- package/src/ownership/foundation-record.js.map +0 -1
- package/src/ownership/hash.js.map +0 -1
- package/src/ownership/index.js.map +0 -1
- package/src/ownership/json-ownership.js.map +0 -1
- package/src/ownership/record.js.map +0 -1
- package/src/ownership/workspace-record.js.map +0 -1
- package/src/performance/cost-collection.js.map +0 -1
- package/src/performance/cost-controls.js.map +0 -1
- package/src/performance/evidence.js.map +0 -1
- package/src/performance/index.js.map +0 -1
- package/src/performance/load-safety.js.map +0 -1
- package/src/performance/model.js.map +0 -1
- package/src/performance/pr-artifact-budget.js.map +0 -1
- package/src/performance/runner.js.map +0 -1
- package/src/performance/scenario-endpoint.js.map +0 -1
- package/src/performance/scenario.js.map +0 -1
- package/src/performance/test-fixtures.d.ts +0 -7
- package/src/performance/test-fixtures.js +0 -167
- package/src/performance/test-fixtures.js.map +0 -1
- package/src/performance/unit-cost.js.map +0 -1
- package/src/release/index.js.map +0 -1
- package/src/release/lifecycle.js.map +0 -1
- package/src/release/manifest.js.map +0 -1
- package/src/release/rollout.js.map +0 -1
- package/src/release/source-authority.js.map +0 -1
- package/src/repository-policy/aurora-preflight.js.map +0 -1
- package/src/repository-policy/capacity-migration.js.map +0 -1
- package/src/repository-policy/deployment-plan.js.map +0 -1
- package/src/repository-policy/foundation-profile.js.map +0 -1
- package/src/repository-policy/index.js.map +0 -1
- package/src/repository-policy/policy.js.map +0 -1
- package/src/secrets/adapters.js.map +0 -1
- package/src/secrets/aws-control-plane.js.map +0 -1
- package/src/secrets/declaration-verification.js.map +0 -1
- package/src/secrets/generated-aws-control-plane.js.map +0 -1
- package/src/secrets/guardrails.js.map +0 -1
- package/src/secrets/index.js.map +0 -1
- package/src/secrets/metadata.js.map +0 -1
- package/src/secrets/model.js.map +0 -1
- package/src/secrets/operator.js.map +0 -1
- package/src/secrets/permissions.js.map +0 -1
- package/src/secrets/personal-command.js.map +0 -1
- package/src/secrets/personal-ledger.js.map +0 -1
- package/src/secrets/registry.js.map +0 -1
- package/src/secrets/verification.js.map +0 -1
- package/src/secrets/workload-access.js.map +0 -1
- package/src/sst-environment-source-format.js.map +0 -1
- package/src/supply-chain/action-pins.js.map +0 -1
- package/src/supply-chain/blueprint-trust-git.js.map +0 -1
- package/src/supply-chain/blueprint-trust-process.js.map +0 -1
- package/src/supply-chain/blueprint-trust.js.map +0 -1
- package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
- package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
- package/src/supply-chain/build-output-bounds.js.map +0 -1
- package/src/supply-chain/build-output.js.map +0 -1
- package/src/supply-chain/common.js.map +0 -1
- package/src/supply-chain/container-artifact-contract.js.map +0 -1
- package/src/supply-chain/container-release.js.map +0 -1
- package/src/supply-chain/ecr-applicability.js.map +0 -1
- package/src/supply-chain/ecr-scanning.js.map +0 -1
- package/src/supply-chain/ecs-deployed-image.js.map +0 -1
- package/src/supply-chain/errors.js.map +0 -1
- package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
- package/src/supply-chain/generated-command.js.map +0 -1
- package/src/supply-chain/generated-container-release-command.js.map +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
- package/src/supply-chain/generated-files.js.map +0 -1
- package/src/supply-chain/generated-scanner-command.js.map +0 -1
- package/src/supply-chain/index.js.map +0 -1
- package/src/supply-chain/inventory.js.map +0 -1
- package/src/supply-chain/license-expression.js.map +0 -1
- package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
- package/src/supply-chain/policy.js.map +0 -1
- package/src/supply-chain/publication.js.map +0 -1
- package/src/supply-chain/sbom.js.map +0 -1
- package/src/supply-chain/scanner.js.map +0 -1
- package/src/supply-chain/vendored-source.js.map +0 -1
- package/src/testing-evidence/fixture-scope.js.map +0 -1
- package/src/testing-evidence/index.js.map +0 -1
- package/src/testing-evidence/quarantine.js.map +0 -1
- package/src/testing-evidence/result.js.map +0 -1
- package/src/testing-evidence/runner-adapter.js.map +0 -1
- package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
- package/src/validation.js.map +0 -1
- package/src/work-markers/index.js.map +0 -1
- package/src/work-markers/work-markers.js.map +0 -1
- package/src/workload-roles/account-baseline.js.map +0 -1
- package/src/workload-roles/authority.js.map +0 -1
- package/src/workload-roles/aws-adapter.js.map +0 -1
- package/src/workload-roles/aws-internal-handler.js.map +0 -1
- package/src/workload-roles/aws-s3-state.js.map +0 -1
- package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
- package/src/workload-roles/boundary.js.map +0 -1
- package/src/workload-roles/convergence.js.map +0 -1
- package/src/workload-roles/effective-policy.js.map +0 -1
- package/src/workload-roles/handler.js.map +0 -1
- package/src/workload-roles/history.js.map +0 -1
- package/src/workload-roles/index.js.map +0 -1
- package/src/workload-roles/injection.js.map +0 -1
- package/src/workload-roles/manifest.js.map +0 -1
- package/src/workload-roles/provisioner.js.map +0 -1
- package/src/workload-roles/registration.js.map +0 -1
- package/src/workload-roles/stage-boundary.js.map +0 -1
- package/src/workload-roles/standard-slice.js.map +0 -1
- package/src/workspace-deployment/affected-lifecycle.js.map +0 -1
- package/src/workspace-deployment/identity.js.map +0 -1
- package/src/workspace-deployment/index.js.map +0 -1
- package/src/workspace-deployment/migration-evidence.js.map +0 -1
- package/src/workspace-deployment/migration.js.map +0 -1
- package/src/workspace-deployment/ownership.js.map +0 -1
|
@@ -217,6 +217,8 @@ const required = (name, pattern) => {
|
|
|
217
217
|
const root = process.env.EBK_STAGING_RECEIPT_ROOT?.trim() ?? '';
|
|
218
218
|
if (!root) throw new Error('Staging deployment receipt root is absent.');
|
|
219
219
|
const expectedHasSlices = required('EBK_EXPECTED_HAS_SLICES', /^(?:true|false)$/) === 'true';
|
|
220
|
+
const expectedHasContainers = required('EBK_EXPECTED_HAS_CONTAINERS', /^(?:true|false)$/) === 'true';
|
|
221
|
+
if (expectedHasContainers && !expectedHasSlices) throw new Error('Container work requires a selected Slice.');
|
|
220
222
|
const sourceCommit = required('EBK_STAGING_SOURCE_COMMIT', commit);
|
|
221
223
|
const expectedAccount = required('EBK_EXPECTED_STAGING_ACCOUNT_ID', /^[0-9]{12}$/);
|
|
222
224
|
const expectedProfile = required('EBK_EXPECTED_DEPLOYMENT_PROFILE', /^(?:production-isolated|fully-isolated)$/);
|
|
@@ -244,6 +246,9 @@ if (
|
|
|
244
246
|
promotion?.kind !== 'ebk-staging-deployment-promotion' ||
|
|
245
247
|
promotion.schemaVersion !== 1 ||
|
|
246
248
|
promotion.hasSlices !== expectedHasSlices ||
|
|
249
|
+
typeof promotion.hasContainers !== 'boolean' ||
|
|
250
|
+
(promotion.hasContainers && !promotion.hasSlices) ||
|
|
251
|
+
(expectedHasContainers && !promotion.hasContainers) ||
|
|
247
252
|
promotion.stage !== 'staging' ||
|
|
248
253
|
promotion.account !== expectedAccount ||
|
|
249
254
|
promotion.deploymentProfile !== expectedProfile ||
|
|
@@ -258,10 +263,12 @@ if (
|
|
|
258
263
|
!integer.test(promotion.candidate?.producerRunId ?? '') ||
|
|
259
264
|
!integer.test(promotion.candidate?.producerRunAttempt ?? '') ||
|
|
260
265
|
promotion.candidate?.sourceCommit !== sourceCommit ||
|
|
261
|
-
!/^[a-f0-9]{64}$/.test(promotion.candidate?.materialDigest ?? '')
|
|
262
|
-
|
|
266
|
+
!/^[a-f0-9]{64}$/.test(promotion.candidate?.materialDigest ?? '')
|
|
267
|
+
: promotion.candidate !== null) ||
|
|
268
|
+
(promotion.hasContainers
|
|
269
|
+
? !integer.test(promotion.container?.artifactId ?? '') ||
|
|
263
270
|
!digest.test(promotion.container?.artifactDigest ?? '')
|
|
264
|
-
: promotion.
|
|
271
|
+
: promotion.container !== null)
|
|
265
272
|
) {
|
|
266
273
|
throw new Error('Staging deployment receipt and candidate promotion binding disagree.');
|
|
267
274
|
}
|
|
@@ -276,11 +283,13 @@ if (expectedHasSlices) Object.assign(outputs, {
|
|
|
276
283
|
artifact_digest: promotion.candidate.artifactDigest,
|
|
277
284
|
artifact_id: promotion.candidate.artifactId,
|
|
278
285
|
candidate_material_digest: promotion.candidate.materialDigest,
|
|
279
|
-
container_artifact_digest: promotion.container.artifactDigest,
|
|
280
|
-
container_artifact_id: promotion.container.artifactId,
|
|
281
286
|
producer_run_attempt: promotion.candidate.producerRunAttempt,
|
|
282
287
|
producer_run_id: promotion.candidate.producerRunId,
|
|
283
288
|
});
|
|
289
|
+
if (expectedHasContainers) Object.assign(outputs, {
|
|
290
|
+
container_artifact_digest: promotion.container.artifactDigest,
|
|
291
|
+
container_artifact_id: promotion.container.artifactId,
|
|
292
|
+
});
|
|
284
293
|
for (const [name, value] of Object.entries(outputs)) appendFileSync(process.env.GITHUB_OUTPUT, name + '=' + value + '\\n');`;
|
|
285
294
|
}
|
|
286
295
|
/** @internal Shared verbatim with the generated workflow and executable tests. */
|
|
@@ -333,6 +342,8 @@ const required = (name, pattern) => {
|
|
|
333
342
|
};
|
|
334
343
|
const sourceCommit = required('EBK_RELEASE_SOURCE_COMMIT', /^[a-f0-9]{40,64}$/);
|
|
335
344
|
const hasSlices = required('EBK_HAS_SLICES', /^(?:true|false)$/) === 'true';
|
|
345
|
+
const hasContainers = required('EBK_HAS_CONTAINERS', /^(?:true|false)$/) === 'true';
|
|
346
|
+
if (hasContainers && !hasSlices) throw new Error('Container work requires a selected Slice.');
|
|
336
347
|
const account = required('EBK_POLICY_ACCOUNT_ID', /^[0-9]{12}$/);
|
|
337
348
|
const deploymentProfile = required('EBK_DEPLOYMENT_PROFILE', /^(?:production-isolated|fully-isolated)$/);
|
|
338
349
|
const region = required('EBK_POLICY_REGION', /^[a-z]{2}(?:-gov)?-[a-z]+(?:-[a-z]+)*-[0-9]$/);
|
|
@@ -361,15 +372,6 @@ if (hasSlices) {
|
|
|
361
372
|
const producerRunAttempt = required('EBK_CANDIDATE_PRODUCER_RUN_ATTEMPT', /^[1-9][0-9]*$/);
|
|
362
373
|
const artifactId = required('EBK_CANDIDATE_ARTIFACT_ID', /^[1-9][0-9]*$/);
|
|
363
374
|
const artifactDigest = required('EBK_CANDIDATE_ARTIFACT_DIGEST', /^sha256:[a-f0-9]{64}$/);
|
|
364
|
-
const containerArtifactId = required('EBK_CONTAINER_ARTIFACT_ID', /^[1-9][0-9]*$/);
|
|
365
|
-
// actions/upload-artifact emits the bare SHA-256 hex in artifact-digest while
|
|
366
|
-
// the artifacts API and the promotion compare the sha256:<hex> registry form
|
|
367
|
-
// (EBK-INT-2026-073). Normalize before the exact validation.
|
|
368
|
-
const containerArtifactDigestRaw = process.env.EBK_CONTAINER_ARTIFACT_DIGEST?.trim() ?? '';
|
|
369
|
-
process.env.EBK_CONTAINER_ARTIFACT_DIGEST = /^[a-f0-9]{64}$/.test(containerArtifactDigestRaw)
|
|
370
|
-
? 'sha256:' + containerArtifactDigestRaw
|
|
371
|
-
: containerArtifactDigestRaw;
|
|
372
|
-
const containerArtifactDigest = required('EBK_CONTAINER_ARTIFACT_DIGEST', /^sha256:[a-f0-9]{64}$/);
|
|
373
375
|
const root = '.ebk/evidence/release-candidate/packages';
|
|
374
376
|
const projects = readdirSync(root, { withFileTypes: true })
|
|
375
377
|
.filter((entry) => entry.isDirectory())
|
|
@@ -385,10 +387,19 @@ if (hasSlices) {
|
|
|
385
387
|
return { manifestDigest: createHash('sha256').update(bytes).digest('hex'), project };
|
|
386
388
|
});
|
|
387
389
|
candidate = { artifactDigest, artifactId, materialDigest: createHash('sha256').update(JSON.stringify(entries)).digest('hex'), producerRunAttempt, producerRunId, sourceCommit };
|
|
388
|
-
|
|
389
|
-
} else if (Object.values(candidateEnvironment).some(Boolean) || Object.values(containerEnvironment).some(Boolean)) {
|
|
390
|
+
} else if (Object.values(candidateEnvironment).some(Boolean)) {
|
|
390
391
|
throw new Error('A staging promotion without Slices must not carry Slice release material.');
|
|
391
392
|
}
|
|
393
|
+
if (hasContainers) {
|
|
394
|
+
const artifactId = required('EBK_CONTAINER_ARTIFACT_ID', /^[1-9][0-9]*$/);
|
|
395
|
+
// The upload action returns bare hex; the artifacts API uses sha256:<hex>.
|
|
396
|
+
const raw = containerEnvironment.artifactDigest;
|
|
397
|
+
process.env.EBK_CONTAINER_ARTIFACT_DIGEST = /^[a-f0-9]{64}$/.test(raw) ? 'sha256:' + raw : raw;
|
|
398
|
+
const artifactDigest = required('EBK_CONTAINER_ARTIFACT_DIGEST', /^sha256:[a-f0-9]{64}$/);
|
|
399
|
+
container = { artifactDigest, artifactId };
|
|
400
|
+
} else if (Object.values(containerEnvironment).some(Boolean)) {
|
|
401
|
+
throw new Error('A staging promotion without OCI artifacts must not carry container material.');
|
|
402
|
+
}
|
|
392
403
|
const promotion = {
|
|
393
404
|
account,
|
|
394
405
|
candidate,
|
|
@@ -396,6 +407,7 @@ const promotion = {
|
|
|
396
407
|
deploymentProfile,
|
|
397
408
|
deployment: { receiptDigest: createHash('sha256').update(receiptBytes).digest('hex'), runAttempt: deploymentRunAttempt, runId: deploymentRunId },
|
|
398
409
|
hasSlices,
|
|
410
|
+
hasContainers,
|
|
399
411
|
kind: 'ebk-staging-deployment-promotion',
|
|
400
412
|
region,
|
|
401
413
|
schemaVersion: 1,
|
|
@@ -529,6 +541,9 @@ jobs:
|
|
|
529
541
|
probe_url: \${{ steps.route.outputs.probe_url }}
|
|
530
542
|
account_id: \${{ steps.account.outputs.account_id }}
|
|
531
543
|
has_slices: \${{ steps.policy.outputs.has_slices }}
|
|
544
|
+
has_containers: \${{ steps.policy.outputs.has_containers }}
|
|
545
|
+
container_projects: \${{ steps.policy.outputs.container_projects }}
|
|
546
|
+
container_matrix: \${{ steps.policy.outputs.container_matrix }}
|
|
532
547
|
ordered_projects: \${{ steps.policy.outputs.ordered_projects }}
|
|
533
548
|
oidc_audience: \${{ steps.account.outputs.audience }}
|
|
534
549
|
partition: \${{ steps.account.outputs.partition }}
|
|
@@ -879,6 +894,7 @@ ${indentedScript(`set -euo pipefail\n${canonicalStageAuthorityDerivationScript()
|
|
|
879
894
|
EBK_STAGING_DEPLOYMENT_RUN_ATTEMPT: \${{ steps.staging-receipt.outputs.run_attempt }}
|
|
880
895
|
EBK_STAGING_DEPLOYMENT_RUN_ID: \${{ steps.staging-receipt.outputs.run_id }}
|
|
881
896
|
EBK_EXPECTED_HAS_SLICES: \${{ needs.prepare.outputs.has_slices }}
|
|
897
|
+
EBK_EXPECTED_HAS_CONTAINERS: \${{ needs.prepare.outputs.has_containers }}
|
|
882
898
|
EBK_EXPECTED_DEPLOYMENT_PROFILE: \${{ needs.prepare.outputs.profile }}
|
|
883
899
|
EBK_EXPECTED_DEPLOYMENT_REGION: \${{ needs.prepare.outputs.region }}
|
|
884
900
|
EBK_EXPECTED_STAGING_ACCOUNT_ID: \${{ needs.prepare.outputs.staging_account_id }}
|
|
@@ -900,8 +916,6 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
|
|
|
900
916
|
candidate_run_attempt="$(jq -r '.candidate.producerRunAttempt' "$promotion")"
|
|
901
917
|
candidate_artifact_id="$(jq -r '.candidate.artifactId' "$promotion")"
|
|
902
918
|
candidate_artifact_digest="$(jq -r '.candidate.artifactDigest' "$promotion")"
|
|
903
|
-
container_artifact_id="$(jq -r '.container.artifactId' "$promotion")"
|
|
904
|
-
container_artifact_digest="$(jq -r '.container.artifactDigest' "$promotion")"
|
|
905
919
|
candidate_run="$(gh api "/repos/$GH_REPO/actions/runs/$candidate_run_id")"
|
|
906
920
|
printf '%s' "$candidate_run" | jq -e \
|
|
907
921
|
--arg source "$EBK_STAGING_SOURCE_COMMIT" \
|
|
@@ -913,6 +927,10 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
|
|
|
913
927
|
--arg digest "$candidate_artifact_digest" \
|
|
914
928
|
--arg name "release-candidate-$EBK_STAGING_SOURCE_COMMIT" \
|
|
915
929
|
'[.artifacts[] | select((.id | tostring) == $id and .name == $name and .digest == $digest and .expired == false)] | length == 1' >/dev/null
|
|
930
|
+
fi
|
|
931
|
+
if [ "$EBK_EXPECTED_HAS_CONTAINERS" = true ]; then
|
|
932
|
+
container_artifact_id="$(jq -r '.container.artifactId' "$promotion")"
|
|
933
|
+
container_artifact_digest="$(jq -r '.container.artifactDigest' "$promotion")"
|
|
916
934
|
staging_artifacts="$(gh api "/repos/$GH_REPO/actions/runs/$EBK_STAGING_DEPLOYMENT_RUN_ID/artifacts?per_page=100")"
|
|
917
935
|
printf '%s' "$staging_artifacts" | jq -e \
|
|
918
936
|
--arg id "$container_artifact_id" \
|
|
@@ -929,7 +947,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
|
|
|
929
947
|
needs.prepare.result == 'success' &&
|
|
930
948
|
needs.immutable-artifacts.result == 'success' &&
|
|
931
949
|
needs.prepare.outputs.action == 'deploy' &&
|
|
932
|
-
needs.prepare.outputs.
|
|
950
|
+
needs.prepare.outputs.has_containers == 'true' &&
|
|
933
951
|
(
|
|
934
952
|
needs.prepare.outputs.stage == 'staging' ||
|
|
935
953
|
(needs.prepare.outputs.stage == 'production' && needs.prepare.outputs.profile == 'starter')
|
|
@@ -939,7 +957,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
|
|
|
939
957
|
# One job per Slice and architecture: Slices build in parallel instead of
|
|
940
958
|
# looping on one runner per architecture.
|
|
941
959
|
matrix:
|
|
942
|
-
project: \${{ fromJson(needs.prepare.outputs.
|
|
960
|
+
project: \${{ fromJson(needs.prepare.outputs.container_matrix) }}
|
|
943
961
|
# architecture is an original axis: include entries only decorate the
|
|
944
962
|
# matching combination. Include-only keys would be merged into every
|
|
945
963
|
# project and the later entry would overwrite the earlier one, so every
|
|
@@ -972,8 +990,9 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
|
|
|
972
990
|
EBK_RELEASE_SOURCE_COMMIT: \${{ needs.immutable-artifacts.outputs.source_commit }}
|
|
973
991
|
EBK_SOURCE_COMMIT: \${{ inputs.source_commit || github.sha }}
|
|
974
992
|
EBK_STAGE: \${{ needs.prepare.outputs.stage }}
|
|
975
|
-
EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.
|
|
993
|
+
EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.container_projects }}
|
|
976
994
|
EBK_SLICE_PROJECT: \${{ matrix.project.project }}
|
|
995
|
+
EBK_CONTAINER_PROJECTS: \${{ needs.prepare.outputs.container_projects }}
|
|
977
996
|
steps:
|
|
978
997
|
- name: Check out immutable container source
|
|
979
998
|
uses: ${actionPins.checkout}
|
|
@@ -1080,7 +1099,7 @@ ${indentedScript(exactStageDeployerGuardScript('Container build', '$EBK_POLICY_A
|
|
|
1080
1099
|
case "$EBK_SLICE_PROJECT" in
|
|
1081
1100
|
''|-*|*-|*[!a-z0-9-]*) echo 'Container build Slice project must be an exact normalized Slice name'; exit 1 ;;
|
|
1082
1101
|
esac
|
|
1083
|
-
case ",$
|
|
1102
|
+
case ",$EBK_CONTAINER_PROJECTS," in
|
|
1084
1103
|
*",$EBK_SLICE_PROJECT,"*) ;;
|
|
1085
1104
|
*) echo 'Container build Slice project is not in the committed deployment plan'; exit 1 ;;
|
|
1086
1105
|
esac
|
|
@@ -1108,7 +1127,7 @@ ${indentedScript(exactStageDeployerGuardScript('Container build', '$EBK_POLICY_A
|
|
|
1108
1127
|
needs.immutable-artifacts.result == 'success' &&
|
|
1109
1128
|
needs.container-platform.result == 'success' &&
|
|
1110
1129
|
needs.prepare.outputs.action == 'deploy' &&
|
|
1111
|
-
needs.prepare.outputs.
|
|
1130
|
+
needs.prepare.outputs.has_containers == 'true'
|
|
1112
1131
|
runs-on: ubuntu-latest
|
|
1113
1132
|
environment: \${{ needs.prepare.outputs.stage }}
|
|
1114
1133
|
permissions:
|
|
@@ -1130,7 +1149,7 @@ ${indentedScript(exactStageDeployerGuardScript('Container build', '$EBK_POLICY_A
|
|
|
1130
1149
|
EBK_RELEASE_SOURCE_COMMIT: \${{ needs.immutable-artifacts.outputs.source_commit }}
|
|
1131
1150
|
EBK_SOURCE_COMMIT: \${{ inputs.source_commit || github.sha }}
|
|
1132
1151
|
EBK_STAGE: \${{ needs.prepare.outputs.stage }}
|
|
1133
|
-
EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.
|
|
1152
|
+
EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.container_projects }}
|
|
1134
1153
|
steps:
|
|
1135
1154
|
- name: Check out immutable container source
|
|
1136
1155
|
uses: ${actionPins.checkout}
|
|
@@ -1244,7 +1263,7 @@ ${indentedScript(exactStageDeployerGuardScript('Container assembly', '$EBK_POLIC
|
|
|
1244
1263
|
needs.prepare.outputs.action == 'deploy' &&
|
|
1245
1264
|
needs.prepare.outputs.stage == 'production' &&
|
|
1246
1265
|
needs.prepare.outputs.profile != 'starter' &&
|
|
1247
|
-
needs.prepare.outputs.
|
|
1266
|
+
needs.prepare.outputs.has_containers == 'true'
|
|
1248
1267
|
runs-on: ubuntu-latest
|
|
1249
1268
|
environment: production
|
|
1250
1269
|
permissions:
|
|
@@ -1267,7 +1286,7 @@ ${indentedScript(exactStageDeployerGuardScript('Container assembly', '$EBK_POLIC
|
|
|
1267
1286
|
EBK_RELEASE_SOURCE_COMMIT: \${{ needs.immutable-artifacts.outputs.source_commit }}
|
|
1268
1287
|
EBK_SOURCE_COMMIT: \${{ inputs.source_commit || github.sha }}
|
|
1269
1288
|
EBK_STAGE: production
|
|
1270
|
-
EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.
|
|
1289
|
+
EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.container_projects }}
|
|
1271
1290
|
steps:
|
|
1272
1291
|
- name: Check out immutable production source
|
|
1273
1292
|
uses: ${actionPins.checkout}
|
|
@@ -1425,7 +1444,7 @@ ${indentedScript(exactStageDeployerGuardScript('Container promotion', '$AWS_EXPE
|
|
|
1425
1444
|
) || (
|
|
1426
1445
|
needs.immutable-artifacts.result == 'success' &&
|
|
1427
1446
|
(
|
|
1428
|
-
needs.prepare.outputs.
|
|
1447
|
+
needs.prepare.outputs.has_containers != 'true' ||
|
|
1429
1448
|
needs.prepare.outputs.stage == 'development' ||
|
|
1430
1449
|
(
|
|
1431
1450
|
(
|
|
@@ -1526,7 +1545,7 @@ ${indentedScript(exactStageDeployerGuardScript('Container promotion', '$AWS_EXPE
|
|
|
1526
1545
|
- name: Restore exact current-stage container binding
|
|
1527
1546
|
if: >-
|
|
1528
1547
|
needs.prepare.outputs.action == 'deploy' &&
|
|
1529
|
-
needs.prepare.outputs.
|
|
1548
|
+
needs.prepare.outputs.has_containers == 'true' &&
|
|
1530
1549
|
(
|
|
1531
1550
|
needs.prepare.outputs.stage == 'staging' ||
|
|
1532
1551
|
(needs.prepare.outputs.stage == 'production' && needs.prepare.outputs.profile == 'starter')
|
|
@@ -1541,7 +1560,7 @@ ${indentedScript(exactStageDeployerGuardScript('Container promotion', '$AWS_EXPE
|
|
|
1541
1560
|
- name: Restore exact promoted production container binding
|
|
1542
1561
|
if: >-
|
|
1543
1562
|
needs.prepare.outputs.action == 'deploy' &&
|
|
1544
|
-
needs.prepare.outputs.
|
|
1563
|
+
needs.prepare.outputs.has_containers == 'true' &&
|
|
1545
1564
|
needs.prepare.outputs.stage == 'production' &&
|
|
1546
1565
|
needs.prepare.outputs.profile != 'starter'
|
|
1547
1566
|
uses: ${actionPins.downloadArtifact}
|
|
@@ -1554,14 +1573,15 @@ ${indentedScript(exactStageDeployerGuardScript('Container promotion', '$AWS_EXPE
|
|
|
1554
1573
|
- name: Verify exact predeploy container binding inventory
|
|
1555
1574
|
if: >-
|
|
1556
1575
|
needs.prepare.outputs.action == 'deploy' &&
|
|
1557
|
-
needs.prepare.outputs.
|
|
1576
|
+
needs.prepare.outputs.has_containers == 'true' &&
|
|
1558
1577
|
needs.prepare.outputs.stage != 'development'
|
|
1559
1578
|
env:
|
|
1560
1579
|
ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
|
|
1561
1580
|
ACTIONS_ID_TOKEN_REQUEST_URL: ''
|
|
1581
|
+
EBK_CONTAINER_PROJECTS: \${{ needs.prepare.outputs.container_projects }}
|
|
1562
1582
|
run: |
|
|
1563
1583
|
set -euo pipefail
|
|
1564
|
-
IFS=',' read -r -a projects <<< "$
|
|
1584
|
+
IFS=',' read -r -a projects <<< "$EBK_CONTAINER_PROJECTS"
|
|
1565
1585
|
for project in "\${projects[@]}"; do
|
|
1566
1586
|
test -n "$project" || continue
|
|
1567
1587
|
test -f ".ebk/evidence/container-release/$EBK_STAGE/packages/$project/binding.json" || {
|
|
@@ -1731,6 +1751,7 @@ ${indentedScript(exactStageDeployerGuardScript('Smoke access cleanup', '$EBK_POL
|
|
|
1731
1751
|
EBK_CONTAINER_ARTIFACT_DIGEST: \${{ needs.container-assemble.outputs.artifact_digest }}
|
|
1732
1752
|
EBK_CONTAINER_ARTIFACT_ID: \${{ needs.container-assemble.outputs.artifact_id }}
|
|
1733
1753
|
EBK_HAS_SLICES: \${{ needs.prepare.outputs.has_slices }}
|
|
1754
|
+
EBK_HAS_CONTAINERS: \${{ needs.prepare.outputs.has_containers }}
|
|
1734
1755
|
run: |
|
|
1735
1756
|
node --input-type=module <<'NODE'
|
|
1736
1757
|
${indentedScript(stagingPromotionSealScript(), 10)}
|
|
@@ -2008,7 +2029,7 @@ function renderTrunkPromotionJobs(options) {
|
|
|
2008
2029
|
always() &&
|
|
2009
2030
|
needs.prepare.result == 'success' &&
|
|
2010
2031
|
needs.immutable-artifacts.result == 'success' &&
|
|
2011
|
-
needs.container-assemble.result == 'success' &&
|
|
2032
|
+
(needs.prepare.outputs.has_containers != 'true' || needs.container-assemble.result == 'success') &&
|
|
2012
2033
|
needs.execute.result == 'success' &&
|
|
2013
2034
|
${trunkPromotionGate}
|
|
2014
2035
|
runs-on: ubuntu-latest
|
|
@@ -2039,6 +2060,7 @@ ${trunkPromotionGate}
|
|
|
2039
2060
|
EBK_SOURCE_COMMIT: \${{ inputs.source_commit || github.sha }}
|
|
2040
2061
|
EBK_STAGE: production
|
|
2041
2062
|
EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.slice_projects }}
|
|
2063
|
+
EBK_CONTAINER_PROJECTS: \${{ needs.prepare.outputs.container_projects }}
|
|
2042
2064
|
steps:
|
|
2043
2065
|
${checkoutAndInstall('Verify managed workspace integrity before container authority')}
|
|
2044
2066
|
- id: staging-receipt
|
|
@@ -2081,6 +2103,7 @@ ${checkoutAndInstall('Verify managed workspace integrity before container author
|
|
|
2081
2103
|
EBK_STAGING_DEPLOYMENT_RUN_ATTEMPT: \${{ github.run_attempt }}
|
|
2082
2104
|
EBK_STAGING_DEPLOYMENT_RUN_ID: \${{ github.run_id }}
|
|
2083
2105
|
EBK_EXPECTED_HAS_SLICES: \${{ needs.prepare.outputs.has_slices }}
|
|
2106
|
+
EBK_EXPECTED_HAS_CONTAINERS: \${{ needs.prepare.outputs.has_containers }}
|
|
2084
2107
|
EBK_EXPECTED_DEPLOYMENT_PROFILE: \${{ needs.prepare.outputs.profile }}
|
|
2085
2108
|
EBK_EXPECTED_DEPLOYMENT_REGION: \${{ needs.prepare.outputs.region }}
|
|
2086
2109
|
EBK_EXPECTED_STAGING_ACCOUNT_ID: \${{ needs.prepare.outputs.staging_account_id }}
|
|
@@ -2122,6 +2145,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
|
|
|
2122
2145
|
path: .ebk/evidence/release-candidate
|
|
2123
2146
|
run-id: \${{ steps.staging.outputs.producer_run_id }}
|
|
2124
2147
|
- name: Restore this run's staging container bundle
|
|
2148
|
+
if: needs.prepare.outputs.has_containers == 'true'
|
|
2125
2149
|
uses: ${actionPins.downloadArtifact}
|
|
2126
2150
|
env:
|
|
2127
2151
|
ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
|
|
@@ -2132,6 +2156,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
|
|
|
2132
2156
|
path: .ebk/evidence/container-release
|
|
2133
2157
|
${revalidateTip}
|
|
2134
2158
|
- name: Assume exact staging registry pull role
|
|
2159
|
+
if: needs.prepare.outputs.has_containers == 'true'
|
|
2135
2160
|
uses: ${actionPins.configureAwsCredentials}
|
|
2136
2161
|
with:
|
|
2137
2162
|
audience: \${{ needs.prepare.outputs.oidc_audience }}
|
|
@@ -2139,6 +2164,7 @@ ${revalidateTip}
|
|
|
2139
2164
|
role-session-name: ebk-staging-container-pull-\${{ github.run_id }}-\${{ github.run_attempt }}
|
|
2140
2165
|
role-to-assume: \${{ secrets.AWS_STAGING_PROMOTION_PULL_ROLE_ARN }}
|
|
2141
2166
|
- name: Authenticate exact staging source registry
|
|
2167
|
+
if: needs.prepare.outputs.has_containers == 'true'
|
|
2142
2168
|
env:
|
|
2143
2169
|
AWS_STAGING_PROMOTION_PULL_ROLE_ARN: \${{ secrets.AWS_STAGING_PROMOTION_PULL_ROLE_ARN }}
|
|
2144
2170
|
EBK_STAGING_ACCOUNT_ID: \${{ vars.AWS_STAGING_PROMOTION_EXPECTED_ACCOUNT_ID }}
|
|
@@ -2156,6 +2182,7 @@ ${indentedScript(exactStagingPromotionPullGuardScript(), 10)}
|
|
|
2156
2182
|
"$EBK_STAGING_ACCOUNT_ID.dkr.ecr.$EBK_STAGING_REGION.amazonaws$registry_suffix"
|
|
2157
2183
|
${revalidateTip}
|
|
2158
2184
|
- name: Assume the production deployment role for container promotion
|
|
2185
|
+
if: needs.prepare.outputs.has_containers == 'true'
|
|
2159
2186
|
uses: ${actionPins.configureAwsCredentials}
|
|
2160
2187
|
with:
|
|
2161
2188
|
audience: \${{ needs.prepare.outputs.oidc_audience }}
|
|
@@ -2163,6 +2190,7 @@ ${revalidateTip}
|
|
|
2163
2190
|
role-session-name: ebk-production-container-push-\${{ github.run_id }}-\${{ github.run_attempt }}
|
|
2164
2191
|
role-to-assume: \${{ env.AWS_DEPLOY_ROLE_ARN }}
|
|
2165
2192
|
- name: Promote exact staging indexes without rebuilding
|
|
2193
|
+
if: needs.prepare.outputs.has_containers == 'true'
|
|
2166
2194
|
env:
|
|
2167
2195
|
EBK_STAGING_PROMOTION_EXPECTED_ACCOUNT_ID: \${{ vars.AWS_STAGING_PROMOTION_EXPECTED_ACCOUNT_ID }}
|
|
2168
2196
|
EBK_STAGING_PROMOTION_REGION: \${{ vars.AWS_STAGING_PROMOTION_REGION }}
|
|
@@ -2171,7 +2199,7 @@ ${revalidateTip}
|
|
|
2171
2199
|
[ "$AWS_EXPECTED_ACCOUNT_ID" = "$EBK_POLICY_PRODUCTION_ACCOUNT_ID" ]
|
|
2172
2200
|
[ "$AWS_REGION" = "$EBK_POLICY_REGION" ]
|
|
2173
2201
|
${indentedScript(exactStageDeployerGuardScript('Container promotion', '$AWS_EXPECTED_ACCOUNT_ID'), 10)}
|
|
2174
|
-
IFS=',' read -r -a projects <<< "$
|
|
2202
|
+
IFS=',' read -r -a projects <<< "$EBK_CONTAINER_PROJECTS"
|
|
2175
2203
|
for project in "\${projects[@]}"; do
|
|
2176
2204
|
test -n "$project" || continue
|
|
2177
2205
|
# Repository-relative for the container release tool (EBK-INT-2026-077).
|
|
@@ -2181,6 +2209,7 @@ ${indentedScript(exactStageDeployerGuardScript('Container promotion', '$AWS_EXPE
|
|
|
2181
2209
|
done
|
|
2182
2210
|
- id: retain
|
|
2183
2211
|
name: Retain production target container binding
|
|
2212
|
+
if: needs.prepare.outputs.has_containers == 'true'
|
|
2184
2213
|
uses: ${actionPins.uploadArtifact}
|
|
2185
2214
|
with:
|
|
2186
2215
|
name: container-release-production-\${{ github.run_id }}-\${{ github.run_attempt }}
|
|
@@ -2242,6 +2271,7 @@ ${checkoutAndInstall('Verify managed workspace integrity before AWS authority')}
|
|
|
2242
2271
|
path: .ebk/evidence/release-candidate
|
|
2243
2272
|
run-id: \${{ needs.promote-production.outputs.candidate_producer_run_id }}
|
|
2244
2273
|
- name: Restore exact promoted production container binding
|
|
2274
|
+
if: needs.prepare.outputs.has_containers == 'true'
|
|
2245
2275
|
uses: ${actionPins.downloadArtifact}
|
|
2246
2276
|
env:
|
|
2247
2277
|
ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
|
|
@@ -2250,12 +2280,14 @@ ${checkoutAndInstall('Verify managed workspace integrity before AWS authority')}
|
|
|
2250
2280
|
name: container-release-production-\${{ github.run_id }}-\${{ github.run_attempt }}
|
|
2251
2281
|
path: .ebk/evidence/container-release
|
|
2252
2282
|
- name: Verify exact predeploy container binding inventory
|
|
2283
|
+
if: needs.prepare.outputs.has_containers == 'true'
|
|
2253
2284
|
env:
|
|
2254
2285
|
ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
|
|
2255
2286
|
ACTIONS_ID_TOKEN_REQUEST_URL: ''
|
|
2287
|
+
EBK_CONTAINER_PROJECTS: \${{ needs.prepare.outputs.container_projects }}
|
|
2256
2288
|
run: |
|
|
2257
2289
|
set -euo pipefail
|
|
2258
|
-
IFS=',' read -r -a projects <<< "$
|
|
2290
|
+
IFS=',' read -r -a projects <<< "$EBK_CONTAINER_PROJECTS"
|
|
2259
2291
|
for project in "\${projects[@]}"; do
|
|
2260
2292
|
test -n "$project" || continue
|
|
2261
2293
|
test -f ".ebk/evidence/container-release/$EBK_STAGE/packages/$project/binding.json" || {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.renderThinLifecycleDocumentation = renderThinLifecycleDocumentation;
|
|
4
4
|
const index_js_1 = require("../../repository-policy/index.js");
|
|
5
|
+
const tool_versions_js_1 = require("./tool-versions.js");
|
|
5
6
|
function renderThinLifecycleDocumentation(options) {
|
|
6
7
|
const stages = (0, index_js_1.activeDeploymentStages)(options.deploymentProfile);
|
|
7
8
|
const stageList = stages.join(', ');
|
|
@@ -16,9 +17,19 @@ refresh, removal, and provider diagnostics.
|
|
|
16
17
|
|
|
17
18
|
The committed \`${options.deploymentProfile}\` profile activates: ${stageList}.
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
For ordinary feature work, run affected tests, typecheck, lint, and ownership
|
|
21
|
+
checks. Run \`pnpm verify\` at a milestone, not before each development edit.
|
|
22
|
+
Configure the exact temporary AWS profile and stage deployment role described
|
|
23
|
+
in \`docs/stage-deployment-authority.md\` before deploying development through
|
|
24
|
+
\`ebk deploy development --profile=<profile> --expectedRoleArn=<role-arn>\`
|
|
25
|
+
(the root \`deploy-local\` target). Do not invoke SST directly.
|
|
26
|
+
|
|
27
|
+
Standard Slices include a Python infrastructure provisioner: install \`uv\`
|
|
28
|
+
${tool_versions_js_1.WORKSPACE_UV_VERSION} (Python 3.12 or newer) on PATH before \`ebk dev up\` or
|
|
29
|
+
\`ebk deploy\`. Each Standard Slice stops before its SST child starts when
|
|
30
|
+
\`uv --version\` fails; a full \`ebk deploy\` may already have deployed
|
|
31
|
+
Foundation.
|
|
32
|
+
Source-only feature checks do not require it.
|
|
22
33
|
`,
|
|
23
34
|
'docs/git-workflow.md': `# Protected Git workflow
|
|
24
35
|
|
|
@@ -99,15 +110,21 @@ secret; do not add repository-scope fallbacks.
|
|
|
99
110
|
|
|
100
111
|
## Production capacity
|
|
101
112
|
|
|
102
|
-
|
|
103
|
-
|
|
113
|
+
Foundation provisions Aurora only when SQL is declared. DynamoDB remains the framework core.
|
|
114
|
+
Aurora has three capacity profiles, independent of deployment topology:
|
|
115
|
+
- \`cost-optimized\`: 0–2 ACUs, five-minute idle auto-pause; default for all new deployment profiles.
|
|
104
116
|
- \`balanced\`: 0.5–4 ACUs, always warm.
|
|
105
|
-
- \`standard\`: 2–16 ACUs, always warm
|
|
117
|
+
- \`standard\`: 2–16 ACUs, always warm.
|
|
106
118
|
|
|
107
|
-
|
|
119
|
+
Existing explicit capacity choices survive upgrades. Provisioned production Aurora
|
|
120
|
+
retains 30-day backups, deletion protection and encryption in all three profiles.
|
|
121
|
+
Undeclared SQL does not provision Aurora or SQL-only networking.
|
|
108
122
|
Pause can delay first requests (typically 15 seconds, sometimes 30 seconds or
|
|
109
123
|
longer); open connections or polling can prevent it. Storage/NAT still cost money.
|
|
110
124
|
Validate cold-resume retries, migration timeouts, and the shared capacity ceiling.
|
|
125
|
+
Choose balanced when measured cold-resume latency is unacceptable; choose standard
|
|
126
|
+
when measured capacity and concurrency justify the larger warm range. Capacity
|
|
127
|
+
selection never changes background-work cadence or an explicit maintenance pause.
|
|
111
128
|
|
|
112
129
|
Existing warm \`cost-optimized\` users must use the new generator to report
|
|
113
130
|
\`pnpm nx g @empire-builder-kit/nx:repository-policy --profile=balanced\`, then
|
|
@@ -122,6 +139,15 @@ removal, unlock, discovery, and secret resolution.
|
|
|
122
139
|
|
|
123
140
|
## Native lifecycle
|
|
124
141
|
|
|
142
|
+
Use \`ebk deploy development --profile=<profile> --expectedRoleArn=<role-arn>\`.
|
|
143
|
+
Add Slice names, for example \`ebk deploy development billing\` with the same
|
|
144
|
+
authority options, for focused deployment after Foundation. Other Slices are
|
|
145
|
+
not redeployed; required peers must already exist. Omit Slice names for the
|
|
146
|
+
complete stage. Explicit selection is local-only and its \`selectedSlices\`
|
|
147
|
+
receipt is not full-stage acceptance or a protected affected-deployment baseline.
|
|
148
|
+
\`ebk deploy --help\` lists options; it preserves native TTY/output and does not
|
|
149
|
+
accept arbitrary Nx/SST flags or a noninteractive confirmation.
|
|
150
|
+
|
|
125
151
|
The root \`${options.name}:deploy-local\` target orders Foundation before every
|
|
126
152
|
eligible Product Slice. Each project runs its public Nx \`deploy\` target, which
|
|
127
153
|
uses pinned native \`sst deploy\`; successful Slice infrastructure is followed
|
|
@@ -169,7 +195,7 @@ mutation remains denied. EBK does not claim a postdeployment trust attestor. In
|
|
|
169
195
|
commercial AWS, CloudFront, CloudFront-scope WAF, edge WAF log delivery, and
|
|
170
196
|
edge ACM use the us-east-1 control plane. CloudWatch Logs cannot scope the
|
|
171
197
|
generated WAF \`PutResourcePolicy\` payload through IAM; reviewed generated
|
|
172
|
-
source and the edge Region are its controls.
|
|
198
|
+
source and the edge Region are its controls. This prerelease does not claim Router edge support in noncommercial
|
|
173
199
|
partitions: CloudFront is unavailable in GovCloud, and the China-partition edge
|
|
174
200
|
control plane is not yet proven.
|
|
175
201
|
|
|
@@ -186,9 +212,10 @@ it. Post-deployment evidence may attest the native bootstrap resources.
|
|
|
186
212
|
`,
|
|
187
213
|
'packages/foundation/README.md': `# Standard Foundation
|
|
188
214
|
|
|
189
|
-
Foundation owns
|
|
190
|
-
|
|
191
|
-
|
|
215
|
+
Foundation owns shared Router/WAF, Cognito, events, observability, and
|
|
216
|
+
configuration resources for each active canonical stage. It provisions Aurora
|
|
217
|
+
only when SQL is declared; network and container-compute resources depend on
|
|
218
|
+
declared workloads. The \`${options.deploymentProfile}\` profile activates:
|
|
192
219
|
${stageList}.
|
|
193
220
|
|
|
194
221
|
Deploy it through the workspace root \`deploy-local\` target or the protected
|
|
@@ -209,7 +236,7 @@ The resolved ${rehearsalStage} stage is rehearsed with
|
|
|
209
236
|
Use temporary IAM Identity Center credentials and the stable stage deployment
|
|
210
237
|
role. Development accepts a dirty tree and requires no acknowledgement:
|
|
211
238
|
|
|
212
|
-
\`
|
|
239
|
+
\`ebk deploy development --profile=<profile> --expectedRoleArn=<role-arn>\`
|
|
213
240
|
|
|
214
241
|
Local staging, when active, requires a clean commit and an interactive
|
|
215
242
|
\`approve:deploy:staging:<source-commit>\` response. Starter production requires
|
|
@@ -233,6 +260,24 @@ committed stage role, refreshes its invocation-private temporary credentials
|
|
|
233
260
|
immediately before SST, and removes them on every exit. A failed child stops
|
|
234
261
|
immediately.
|
|
235
262
|
|
|
263
|
+
After all Slice registrations are absent, \`foundation:remove\` runs native
|
|
264
|
+
SST removal directly, without a separate refresh or local retry checkpoint.
|
|
265
|
+
Temporary smoke admission uses a separate, normally empty Cloud Control IP set;
|
|
266
|
+
the baseline allowlist identities and addresses remain untouched. Its AWS service
|
|
267
|
+
handler resolves the current WAF lock token during deletion. A failed or
|
|
268
|
+
interrupted removal remains failed. Resolve its native diagnostic and any lock
|
|
269
|
+
through the governed unlock target, then retry the same remove target, including
|
|
270
|
+
from a fresh checkout. Ownership, caller and production removal safeguards run
|
|
271
|
+
on every invocation. Refresh stays separate and never continues into removal or
|
|
272
|
+
deployment; do not bypass its diagnostics, edit state, or use deprecated SST
|
|
273
|
+
components.
|
|
274
|
+
|
|
275
|
+
For an older deployment whose smoke helper edited the baseline IP set, reconcile
|
|
276
|
+
that existing provider state with an explicit governed refresh while Foundation
|
|
277
|
+
is intact. The new smoke set does not retroactively repair old lock tokens.
|
|
278
|
+
Partially removed old stacks require an evidence-backed recovery assessment;
|
|
279
|
+
do not redeploy a maintenance-held stage merely to apply this upgrade.
|
|
280
|
+
|
|
236
281
|
## Router WAF rehearsal
|
|
237
282
|
|
|
238
283
|
${options.deploymentProfile === 'starter'
|
|
@@ -285,12 +330,13 @@ receipt binds the derived account and Region.
|
|
|
285
330
|
|
|
286
331
|
## Production safeguards
|
|
287
332
|
|
|
288
|
-
Production keeps
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
guardrails. AWS exposes SNS topic
|
|
293
|
-
|
|
333
|
+
Production keeps WAF blocking rehearsal and application smoke checks. When SQL
|
|
334
|
+
is declared, production also keeps the committed Aurora capacity profile,
|
|
335
|
+
30-day backup retention, deletion protection, and migration preflight. Any
|
|
336
|
+
change to these controls must be a committed policy change and must remain
|
|
337
|
+
permitted by the stage authority's explicit guardrails. AWS exposes SNS topic
|
|
338
|
+
and SQS queue policy updates through the same Set*Attributes actions required
|
|
339
|
+
during native creation and provides no
|
|
294
340
|
attribute-name IAM condition. The stable stage role therefore contains those
|
|
295
341
|
calls by exact account, Region, and generated stage-name pattern; hard stage
|
|
296
342
|
separation requires an isolated profile. CloudFront KeyValueStore data-plane
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type FoundationOwnershipRecord, type WorkspaceOwnershipRecord } from '../../ownership/index.js';
|
|
2
2
|
import { type DeliveryLane, type ProductionApprovalMode, type ConfiguredDeploymentAccounts, type DeploymentProfile } from '../../repository-policy/index.js';
|
|
3
3
|
export interface WorkspaceFileOptions {
|
|
4
|
+
/** Prior managed declaration: upgrades retain every already-declared resource. */
|
|
5
|
+
foundationDescriptor?: unknown;
|
|
6
|
+
/** Validated requirements are unioned before any generated file is written. */
|
|
7
|
+
foundationRequirements?: readonly unknown[];
|
|
4
8
|
/** trunk (starter only) protects main alone and delivers production from
|
|
5
9
|
* every merged main push; protected-pair keeps develop and main. */
|
|
6
10
|
deliveryLane?: DeliveryLane;
|