@empire-builder-kit/nx 1.0.0-rc.38 → 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 +3 -1
- package/src/generators/slice/built-in-plan-shared.js +40 -18
- 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 +191 -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
|
@@ -2,36 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.renderProductTestingFiles = renderProductTestingFiles;
|
|
4
4
|
const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
|
|
5
|
+
const local_source_identity_js_1 = require("./local-source-identity.js");
|
|
6
|
+
const built_in_plan_testing_persistence_files_js_1 = require("./built-in-plan-testing-persistence-files.js");
|
|
7
|
+
const deployed_smoke_readiness_js_1 = require("./deployed-smoke-readiness.js");
|
|
5
8
|
/** @internal */
|
|
6
|
-
function renderProductTestingFiles(name, pascalName) {
|
|
9
|
+
function renderProductTestingFiles(name, pascalName, sql = false) {
|
|
7
10
|
return {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
image: postgres:17-alpine
|
|
11
|
-
environment:
|
|
12
|
-
POSTGRES_DB: postgres
|
|
13
|
-
POSTGRES_PASSWORD: ebk_test
|
|
14
|
-
POSTGRES_USER: ebk_test
|
|
15
|
-
healthcheck:
|
|
16
|
-
test: [CMD-SHELL, "pg_isready -U ebk_test -d postgres"]
|
|
17
|
-
interval: 1s
|
|
18
|
-
timeout: 3s
|
|
19
|
-
retries: 30
|
|
20
|
-
labels:
|
|
21
|
-
dev.empirebuilderkit.owner: test-integration
|
|
22
|
-
dev.empirebuilderkit.run: \${EBK_TEST_RUN_ID}
|
|
23
|
-
dev.empirebuilderkit.slice: ${name}
|
|
24
|
-
ports:
|
|
25
|
-
- '127.0.0.1::5432'
|
|
26
|
-
tmpfs:
|
|
27
|
-
- /var/lib/postgresql/data
|
|
28
|
-
`,
|
|
11
|
+
...(0, built_in_plan_testing_persistence_files_js_1.renderTestingPersistenceFiles)(name, pascalName, sql),
|
|
12
|
+
'scripts/deployed-smoke-readiness.mjs': deployed_smoke_readiness_js_1.deployedSmokeReadinessScript,
|
|
29
13
|
'docs/testing.md': `# ${name} testing
|
|
30
14
|
|
|
31
15
|
Use the narrowest proof layer that can establish the behavior. Source tests are
|
|
32
16
|
hermetic and credential-free. The \`test-integration\` target owns a disposable
|
|
33
|
-
|
|
34
|
-
|
|
17
|
+
DynamoDB Local container and one isolated table per worker. Declared SQL adds
|
|
18
|
+
a PostgreSQL container and one migrated database per worker. It runs deterministic
|
|
19
|
+
fixtures and removes every resource it creates.
|
|
35
20
|
It never uses the persistent database started by \`ebk dev\`.
|
|
36
21
|
|
|
37
22
|
Every fixture run records its seed and run scope. Keep fixture data synthetic.
|
|
@@ -51,11 +36,38 @@ deployment and migration. Local and GitHub execution use the same stage
|
|
|
51
36
|
deployment role and exact deployed outputs; no separate smoke role, workflow,
|
|
52
37
|
target registry, or staging-evidence reconciliation graph exists.
|
|
53
38
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
39
|
+
The generated Next.js component selects native SST invalidation completion
|
|
40
|
+
before deployment returns. This is not a readiness or application guarantee;
|
|
41
|
+
the subsequent readiness and browser gates still apply.
|
|
42
|
+
|
|
43
|
+
Before synthetic users or browser assertions, a read-only prerequisite checks
|
|
44
|
+
the exact API and web service, stage and deployed build. Transient gateway or
|
|
45
|
+
network unavailability has one fixed thirty-second readiness bound. The one
|
|
46
|
+
exception is the Router's own CloudFront error page for the web route: the
|
|
47
|
+
pinned SST Router reads routing from an eventually consistent CloudFront
|
|
48
|
+
KeyValueStore, so a newly deployed route can briefly reach the placeholder
|
|
49
|
+
origin at an edge. Only that classified page may extend readiness, to at most
|
|
50
|
+
three hundred seconds; any other failure ends the extension. Readiness then
|
|
51
|
+
requires consecutive healthy rounds on fresh connections spanning thirty
|
|
52
|
+
seconds; any fallthrough restarts that window. Wrong build
|
|
53
|
+
identity, malformed responses, certificate errors, redirects and access denials
|
|
54
|
+
fail immediately. Bounded status, request-start time, duration, valid
|
|
55
|
+
CloudFront request-ID/POP/cache-result observations and the edge-routing
|
|
56
|
+
classification are retained in \`deployed-readiness.json\`; no URLs, response
|
|
57
|
+
bodies, cookies, arbitrary headers or credentials are retained. Duration
|
|
58
|
+
measures the request through response headers (or transport failure), not
|
|
59
|
+
response-body processing.
|
|
60
|
+
This prerequisite is not application acceptance and does not change browser or
|
|
61
|
+
event deadlines. Subsequent failed-then-passed assertions remain flaky/failing.
|
|
62
|
+
|
|
63
|
+
Development and staging smoke observe the exact event for at most sixteen
|
|
64
|
+
minutes; production observes it for at most ninety seconds. Ordinary delivery
|
|
65
|
+
uses DynamoDB Streams or SQL post-commit publication/notification, not a wait
|
|
66
|
+
for the recovery schedule. New SQL recovery defaults to hourly; a missed
|
|
67
|
+
notification may therefore leave a bounded smoke unsuccessful while its durable
|
|
68
|
+
intent remains recoverable. These observation limits include CloudWatch Logs
|
|
69
|
+
request latency; the runner aborts an in-flight request when time runs out.
|
|
70
|
+
Do not change maintenance pauses or increase timeouts merely to claim success.
|
|
59
71
|
|
|
60
72
|
The runner creates one run-scoped synthetic customer in the Slice's narrow
|
|
61
73
|
\`<slice>-test-writer\` group and one distinct synthetic reviewer in
|
|
@@ -78,78 +90,6 @@ Local quarantine uses reviewed date expiry. A run-count record binds an
|
|
|
78
90
|
absolute \`.github/workflows/*.yml\` path and \`expiresAfterRun\`; it is accepted
|
|
79
91
|
only when GitHub supplies a matching \`GITHUB_WORKFLOW_REF\` and positive
|
|
80
92
|
\`GITHUB_RUN_NUMBER\`, and it must expire within 25 trusted workflow runs.
|
|
81
|
-
`,
|
|
82
|
-
'integration/record.spec.ts': `import { Client } from 'pg';
|
|
83
|
-
import { describe, expect, it } from 'vitest';
|
|
84
|
-
import { build${pascalName}RecordFixture } from '../testing/fixtures/records.js';
|
|
85
|
-
|
|
86
|
-
const databaseUrl = process.env.DATABASE_URL;
|
|
87
|
-
if (!databaseUrl) {
|
|
88
|
-
throw new Error('DATABASE_URL is required for ${name} local integration proof.');
|
|
89
|
-
}
|
|
90
|
-
const seed = process.env.EBK_TEST_SEED;
|
|
91
|
-
if (!seed) {
|
|
92
|
-
throw new Error('EBK_TEST_SEED is required for reproducible integration fixtures.');
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
describe('${name} database integration', () => {
|
|
96
|
-
it('writes and reads one deterministic record in its worker database', async () => {
|
|
97
|
-
const fixture = build${pascalName}RecordFixture(seed);
|
|
98
|
-
const client = new Client({ connectionString: databaseUrl });
|
|
99
|
-
await client.connect();
|
|
100
|
-
try {
|
|
101
|
-
await client.query(
|
|
102
|
-
\`INSERT INTO records
|
|
103
|
-
(id, name, owner_id, run_scope, test_expires_at)
|
|
104
|
-
VALUES ($1::uuid, $2, $3, $4, now() + INTERVAL '1 day')\`,
|
|
105
|
-
[fixture.id, fixture.name, 'synthetic-test-owner', seed],
|
|
106
|
-
);
|
|
107
|
-
const result = await client.query(
|
|
108
|
-
'SELECT id::text AS id, name FROM records WHERE id = $1::uuid',
|
|
109
|
-
[fixture.id],
|
|
110
|
-
);
|
|
111
|
-
expect(result.rows).toEqual([fixture]);
|
|
112
|
-
} finally {
|
|
113
|
-
await client.end();
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
`,
|
|
118
|
-
'integration/migrations.spec.ts': `import { Client } from 'pg';
|
|
119
|
-
import { describe, expect, it } from 'vitest';
|
|
120
|
-
|
|
121
|
-
const databaseUrl = process.env.DATABASE_URL;
|
|
122
|
-
if (!databaseUrl) {
|
|
123
|
-
throw new Error('DATABASE_URL is required for ${name} local integration proof.');
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
describe('${name} migration integration', () => {
|
|
127
|
-
it('exposes the committed records table contract', async () => {
|
|
128
|
-
const requiredColumns = [
|
|
129
|
-
{ column_name: 'id', data_type: 'uuid' },
|
|
130
|
-
{ column_name: 'name', data_type: 'text' },
|
|
131
|
-
{ column_name: 'owner_id', data_type: 'text' },
|
|
132
|
-
{ column_name: 'run_scope', data_type: 'text' },
|
|
133
|
-
{ column_name: 'created_at', data_type: 'timestamp with time zone' },
|
|
134
|
-
];
|
|
135
|
-
const client = new Client({ connectionString: databaseUrl });
|
|
136
|
-
await client.connect();
|
|
137
|
-
try {
|
|
138
|
-
const result = await client.query(
|
|
139
|
-
\`SELECT column_name, data_type
|
|
140
|
-
FROM information_schema.columns
|
|
141
|
-
WHERE table_schema = 'public'
|
|
142
|
-
AND table_name = 'records'
|
|
143
|
-
AND column_name = ANY($1::text[])
|
|
144
|
-
ORDER BY ordinal_position\`,
|
|
145
|
-
[requiredColumns.map(({ column_name }) => column_name)],
|
|
146
|
-
);
|
|
147
|
-
expect(result.rows).toEqual(requiredColumns);
|
|
148
|
-
} finally {
|
|
149
|
-
await client.end();
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
93
|
`,
|
|
154
94
|
'testing/fixtures/records.ts': `import { createTypedFixtureBuilder } from '@empire-builder-kit/nx/testing-evidence';
|
|
155
95
|
|
|
@@ -322,7 +262,7 @@ import {
|
|
|
322
262
|
mkdirSync,
|
|
323
263
|
readFileSync,
|
|
324
264
|
realpathSync,
|
|
325
|
-
readdirSync
|
|
265
|
+
${sql ? ' readdirSync,\n' : ''}\
|
|
326
266
|
rmSync,
|
|
327
267
|
statSync,
|
|
328
268
|
writeFileSync,
|
|
@@ -330,7 +270,9 @@ import {
|
|
|
330
270
|
import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
331
271
|
import { createRequire } from 'node:module';
|
|
332
272
|
import { TextDecoder } from 'node:util';
|
|
333
|
-
import pg from 'pg';
|
|
273
|
+
${sql ? "import pg from 'pg';" : ''}
|
|
274
|
+
import { CreateTableCommand, DynamoDBClient, ListTablesCommand } from '@aws-sdk/client-dynamodb';
|
|
275
|
+
import { DYNAMO_PENDING_INDEX } from '@empire-builder-kit/runtime/key-value';
|
|
334
276
|
import {
|
|
335
277
|
githubWorkflowRun,
|
|
336
278
|
reconcileRunnerQuarantine,
|
|
@@ -339,14 +281,14 @@ import {
|
|
|
339
281
|
|
|
340
282
|
const require = createRequire(import.meta.url);
|
|
341
283
|
const {
|
|
342
|
-
createLocalTestScope
|
|
284
|
+
${sql ? ' createLocalTestScope,\n' : ''}\
|
|
343
285
|
createTestingEvidenceFromRunnerAttempts,
|
|
344
286
|
inspectTestingEvidenceArtifact,
|
|
345
287
|
normalizeEbkIntegrationEvidenceAttempt,
|
|
346
288
|
sanitizeTestingEvidenceSummary,
|
|
347
289
|
validateTestingEvidenceQuarantine,
|
|
348
290
|
} = require('@empire-builder-kit/nx/testing-evidence');
|
|
349
|
-
const { Client } = pg;
|
|
291
|
+
${sql ? 'const { Client } = pg;' : ''}
|
|
350
292
|
const fatalUtf8Decoder = new TextDecoder('utf-8', { fatal: true });
|
|
351
293
|
const projectRoot = process.cwd();
|
|
352
294
|
const workspaceRoot = resolve(projectRoot, '../..');
|
|
@@ -382,9 +324,8 @@ const run = (command, args, options = {}) => {
|
|
|
382
324
|
}
|
|
383
325
|
return result.stdout.trim();
|
|
384
326
|
};
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
run('git', ['rev-parse', 'HEAD'], { cwd: workspaceRoot });
|
|
327
|
+
${local_source_identity_js_1.localSourceCommitFunction}
|
|
328
|
+
const gitCommit = localSourceCommit();
|
|
388
329
|
const workspacePackage = readJson(join(workspaceRoot, 'package.json'));
|
|
389
330
|
const ownership = readJson(join(projectRoot, '.ebk', 'ownership.json'));
|
|
390
331
|
const frameworkCandidate =
|
|
@@ -642,7 +583,8 @@ function pruneStaleTestProjects() {
|
|
|
642
583
|
}
|
|
643
584
|
}
|
|
644
585
|
|
|
645
|
-
|
|
586
|
+
${sql
|
|
587
|
+
? `async function prepareDatabase(adminUrl, databaseName) {
|
|
646
588
|
const admin = new Client({ connectionString: adminUrl });
|
|
647
589
|
await admin.connect();
|
|
648
590
|
try {
|
|
@@ -665,9 +607,54 @@ async function prepareDatabase(adminUrl, databaseName) {
|
|
|
665
607
|
await client.end();
|
|
666
608
|
}
|
|
667
609
|
return databaseUrl;
|
|
610
|
+
}`
|
|
611
|
+
: ''}
|
|
612
|
+
|
|
613
|
+
function localDynamoClient(endpoint) {
|
|
614
|
+
const url = new URL(endpoint);
|
|
615
|
+
if (url.protocol !== 'http:' || url.hostname !== '127.0.0.1' || !url.port ||
|
|
616
|
+
url.username || url.password || url.search || url.hash || url.pathname !== '/')
|
|
617
|
+
throw new Error('Integration DynamoDB must use its owned loopback endpoint.');
|
|
618
|
+
return new DynamoDBClient({ endpoint, region: 'us-east-1', maxAttempts: 1,
|
|
619
|
+
credentials: { accessKeyId: 'LOCALFIXTURE', secretAccessKey: 'local-fixture-not-an-aws-credential' } });
|
|
668
620
|
}
|
|
669
621
|
|
|
670
|
-
function
|
|
622
|
+
async function waitForLocalDynamo(endpoint) {
|
|
623
|
+
const client = localDynamoClient(endpoint);
|
|
624
|
+
const deadline = Date.now() + 30_000;
|
|
625
|
+
try {
|
|
626
|
+
for (;;) {
|
|
627
|
+
try { await client.send(new ListTablesCommand({ Limit: 1 })); return; }
|
|
628
|
+
catch (error) {
|
|
629
|
+
if (Date.now() >= deadline) throw error;
|
|
630
|
+
await new Promise((resolveWait) => setTimeout(resolveWait, 200));
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
} finally { client.destroy(); }
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
async function prepareKeyValue(endpoint, attempt, worker) {
|
|
637
|
+
if (!validRunId || ![1, 2].includes(attempt) || !Number.isInteger(worker) || worker < 0 || worker > 7)
|
|
638
|
+
throw new Error('Integration table identity is invalid.');
|
|
639
|
+
const tableName = 'ebk-test-${name}-' + runId + '-a' + attempt + '-w' + worker;
|
|
640
|
+
const client = localDynamoClient(endpoint);
|
|
641
|
+
try {
|
|
642
|
+
await client.send(new CreateTableCommand({ TableName: tableName, BillingMode: 'PAY_PER_REQUEST',
|
|
643
|
+
AttributeDefinitions: [
|
|
644
|
+
{ AttributeName: 'pk', AttributeType: 'S' }, { AttributeName: 'sk', AttributeType: 'S' },
|
|
645
|
+
{ AttributeName: 'pendingPk', AttributeType: 'S' }, { AttributeName: 'pendingAt', AttributeType: 'N' },
|
|
646
|
+
],
|
|
647
|
+
KeySchema: [{ AttributeName: 'pk', KeyType: 'HASH' }, { AttributeName: 'sk', KeyType: 'RANGE' }],
|
|
648
|
+
GlobalSecondaryIndexes: [{ IndexName: DYNAMO_PENDING_INDEX,
|
|
649
|
+
KeySchema: [{ AttributeName: 'pendingPk', KeyType: 'HASH' }, { AttributeName: 'pendingAt', KeyType: 'RANGE' }],
|
|
650
|
+
Projection: { ProjectionType: 'ALL' } }],
|
|
651
|
+
StreamSpecification: { StreamEnabled: true, StreamViewType: 'NEW_AND_OLD_IMAGES' },
|
|
652
|
+
}));
|
|
653
|
+
return tableName;
|
|
654
|
+
} finally { client.destroy(); }
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
function runWorker(worker, persistence, reportPath, attempt) {
|
|
671
658
|
const arguments_ = [
|
|
672
659
|
installedVitestCommand.entryPoint,
|
|
673
660
|
'run',
|
|
@@ -708,7 +695,11 @@ function runWorker(worker, databaseUrl, reportPath, attempt) {
|
|
|
708
695
|
cwd: projectRoot,
|
|
709
696
|
env: {
|
|
710
697
|
...childEnvironment,
|
|
711
|
-
DATABASE_URL: databaseUrl,
|
|
698
|
+
...(persistence.databaseUrl ? { DATABASE_URL: persistence.databaseUrl } : {}),
|
|
699
|
+
EBK_TEST_DYNAMODB_ENDPOINT: persistence.endpoint,
|
|
700
|
+
EBK_TEST_DYNAMODB_TABLE: persistence.tableName,
|
|
701
|
+
EBK_STAGE: 'development',
|
|
702
|
+
EVENT_BUS_NAME: 'local-integration-events',
|
|
712
703
|
EBK_TEST_ATTEMPT: String(attempt),
|
|
713
704
|
EBK_TEST_RUN_ID: runId,
|
|
714
705
|
EBK_TEST_SEED: seed,
|
|
@@ -893,16 +884,17 @@ function readBoundedVitestReport(reportPath) {
|
|
|
893
884
|
return { report };
|
|
894
885
|
}
|
|
895
886
|
|
|
896
|
-
async function runAttempt(attempt, adminUrl) {
|
|
887
|
+
async function runAttempt(attempt, endpoint${sql ? ', adminUrl' : ''}) {
|
|
897
888
|
const attemptStartedAt = new Date().toISOString();
|
|
898
889
|
const findings = [];
|
|
899
890
|
const reports = [];
|
|
900
891
|
const reportPaths = [];
|
|
901
892
|
let workerResults = [];
|
|
902
893
|
try {
|
|
903
|
-
const
|
|
894
|
+
const persistenceWorkers = [];
|
|
904
895
|
for (let worker = 0; worker < workers; worker += 1) {
|
|
905
|
-
|
|
896
|
+
${sql
|
|
897
|
+
? `const scope = createLocalTestScope({
|
|
906
898
|
capabilities: {
|
|
907
899
|
canCreateDatabase: true,
|
|
908
900
|
canForceDropDatabase: true,
|
|
@@ -919,18 +911,18 @@ async function runAttempt(attempt, adminUrl) {
|
|
|
919
911
|
},
|
|
920
912
|
sharedDatabaseName: 'postgres',
|
|
921
913
|
});
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
);
|
|
914
|
+
const databaseUrl = await prepareDatabase(adminUrl, scope.databaseName);`
|
|
915
|
+
: ''}
|
|
916
|
+
persistenceWorkers.push({ endpoint, tableName: await prepareKeyValue(endpoint, attempt, worker)${sql ? ', databaseUrl' : ''} });
|
|
925
917
|
}
|
|
926
918
|
workerResults = await Promise.all(
|
|
927
|
-
|
|
919
|
+
persistenceWorkers.map((persistence, worker) => {
|
|
928
920
|
const reportPath = join(
|
|
929
921
|
rawRoot,
|
|
930
922
|
'vitest-attempt-' + attempt + '-worker-' + worker + '.json',
|
|
931
923
|
);
|
|
932
924
|
reportPaths.push(reportPath);
|
|
933
|
-
return runWorker(worker,
|
|
925
|
+
return runWorker(worker, persistence, reportPath, attempt);
|
|
934
926
|
}),
|
|
935
927
|
);
|
|
936
928
|
const workerDiagnostics = [];
|
|
@@ -1148,11 +1140,18 @@ if (process.exitCode === undefined) {
|
|
|
1148
1140
|
const reports = [];
|
|
1149
1141
|
const reportPaths = [];
|
|
1150
1142
|
try {
|
|
1143
|
+
// Even a partially failed compose up can create owned resources.
|
|
1144
|
+
proofStarted = true;
|
|
1151
1145
|
run('docker', [...composeArgs, 'up', '--detach', '--wait'], {
|
|
1152
1146
|
env: { ...process.env, EBK_TEST_RUN_ID: runId },
|
|
1153
1147
|
});
|
|
1154
|
-
|
|
1155
|
-
const
|
|
1148
|
+
const keyValueAddress = run('docker', [...composeArgs, 'port', 'key-value', '8000']);
|
|
1149
|
+
const keyValuePort = /:(\\d+)\\s*$/.exec(keyValueAddress)?.[1];
|
|
1150
|
+
if (!keyValuePort) throw new Error('Docker did not report the integration DynamoDB port.');
|
|
1151
|
+
const endpoint = 'http://127.0.0.1:' + keyValuePort;
|
|
1152
|
+
await waitForLocalDynamo(endpoint);
|
|
1153
|
+
${sql
|
|
1154
|
+
? `const address = run('docker', [
|
|
1156
1155
|
...composeArgs,
|
|
1157
1156
|
'port',
|
|
1158
1157
|
'database',
|
|
@@ -1161,13 +1160,14 @@ if (process.exitCode === undefined) {
|
|
|
1161
1160
|
const port = /:(\\d+)\\s*$/.exec(address)?.[1];
|
|
1162
1161
|
if (!port) throw new Error('Docker did not report the integration port.');
|
|
1163
1162
|
const adminUrl =
|
|
1164
|
-
'postgresql://ebk_test:ebk_test@127.0.0.1:' + port + '/postgres'
|
|
1165
|
-
|
|
1163
|
+
'postgresql://ebk_test:ebk_test@127.0.0.1:' + port + '/postgres';`
|
|
1164
|
+
: ''}
|
|
1165
|
+
const first = await runAttempt(1, endpoint${sql ? ', adminUrl' : ''});
|
|
1166
1166
|
attempts.push(first.normalized);
|
|
1167
1167
|
reports.push(...first.reports);
|
|
1168
1168
|
reportPaths.push(...first.reportPaths);
|
|
1169
1169
|
if (first.normalized.failed > 0) {
|
|
1170
|
-
const second = await runAttempt(2, adminUrl);
|
|
1170
|
+
const second = await runAttempt(2, endpoint${sql ? ', adminUrl' : ''});
|
|
1171
1171
|
attempts.push(second.normalized);
|
|
1172
1172
|
reports.push(...second.reports);
|
|
1173
1173
|
reportPaths.push(...second.reportPaths);
|
|
@@ -1294,7 +1294,9 @@ if (process.exitCode === undefined) {
|
|
|
1294
1294
|
}
|
|
1295
1295
|
}
|
|
1296
1296
|
`,
|
|
1297
|
-
'scripts/run-smoke-deployed.mjs': `import {
|
|
1297
|
+
'scripts/run-smoke-deployed.mjs': `import { sliceAuthorizationGroupNames } from '../authorization/groups.mjs';
|
|
1298
|
+
import { waitForDeployedSmokeReadiness } from './deployed-smoke-readiness.mjs';
|
|
1299
|
+
import {
|
|
1298
1300
|
AdminAddUserToGroupCommand,
|
|
1299
1301
|
AdminCreateUserCommand,
|
|
1300
1302
|
AdminDeleteUserCommand,
|
|
@@ -1409,8 +1411,10 @@ const evidenceRunId = validRunId ? runId : 'invalid-run-id';
|
|
|
1409
1411
|
const evidenceSeed = validSeed ? seed : 'invalid-seed';
|
|
1410
1412
|
const resultPath = join(evidenceRoot, 'smoke-deployed.json');
|
|
1411
1413
|
const sanitizedReportPath = join(evidenceRoot, 'playwright-smoke.json');
|
|
1414
|
+
const readinessPath = join(evidenceRoot, 'deployed-readiness.json');
|
|
1412
1415
|
rmSync(resultPath, { force: true });
|
|
1413
1416
|
rmSync(sanitizedReportPath, { force: true });
|
|
1417
|
+
rmSync(readinessPath, { force: true });
|
|
1414
1418
|
const rawPath = (attempt) =>
|
|
1415
1419
|
join(rawRoot, 'playwright-smoke-' + attempt + '.json');
|
|
1416
1420
|
const dataCleanupPath = (attempt) =>
|
|
@@ -1721,6 +1725,17 @@ function requiresScheduledDeliveryObservation(stage) {
|
|
|
1721
1725
|
return ['development', 'staging', 'production'].includes(stage);
|
|
1722
1726
|
}
|
|
1723
1727
|
|
|
1728
|
+
// A successful browser journey may have deleted its synthetic record, while
|
|
1729
|
+
// its mutation receipt remains. Replaying that same journey/run scope cannot
|
|
1730
|
+
// recreate the record, even when the first cleanup completed successfully.
|
|
1731
|
+
function shouldRetryDeployedSmoke(execution) {
|
|
1732
|
+
return (
|
|
1733
|
+
execution.failed > 0 &&
|
|
1734
|
+
execution.dataCleanup?.outcome === 'not-required' &&
|
|
1735
|
+
execution.observationFindings.length === 0
|
|
1736
|
+
);
|
|
1737
|
+
}
|
|
1738
|
+
|
|
1724
1739
|
function scheduledDeliveryDeadlineFinding() {
|
|
1725
1740
|
return {
|
|
1726
1741
|
classification: 'assertion-failed',
|
|
@@ -1752,6 +1767,7 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
|
|
|
1752
1767
|
const startTime = Math.max(0, Date.parse(attemptStartedAt) - 5_000);
|
|
1753
1768
|
const timeoutMilliseconds = stage === 'production' ? 90_000 : 960_000;
|
|
1754
1769
|
const deadline = performance.now() + timeoutMilliseconds;
|
|
1770
|
+
let consecutiveUnavailableReads = 0;
|
|
1755
1771
|
while (true) {
|
|
1756
1772
|
const remainingRequestMilliseconds = deadline - performance.now();
|
|
1757
1773
|
if (remainingRequestMilliseconds <= 0) break;
|
|
@@ -1771,10 +1787,28 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
|
|
|
1771
1787
|
},
|
|
1772
1788
|
);
|
|
1773
1789
|
} catch (error) {
|
|
1774
|
-
if (
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1790
|
+
if (error?.name === 'ServiceUnavailableException') {
|
|
1791
|
+
consecutiveUnavailableReads += 1;
|
|
1792
|
+
// Retry the read, not the already-mutating browser journey. Keep this
|
|
1793
|
+
// much shorter than the delivery deadline when Logs is unavailable.
|
|
1794
|
+
const remainingDelayMilliseconds = deadline - performance.now();
|
|
1795
|
+
const retryDelayMilliseconds = 1_000 * consecutiveUnavailableReads;
|
|
1796
|
+
if (
|
|
1797
|
+
consecutiveUnavailableReads >= 3 ||
|
|
1798
|
+
remainingDelayMilliseconds <= retryDelayMilliseconds
|
|
1799
|
+
) {
|
|
1800
|
+
return permissionFailure(
|
|
1801
|
+
error,
|
|
1802
|
+
'event-consumer observation',
|
|
1803
|
+
'CloudWatch Logs',
|
|
1804
|
+
);
|
|
1805
|
+
}
|
|
1806
|
+
await new Promise((resolveDelay) =>
|
|
1807
|
+
setTimeout(resolveDelay, retryDelayMilliseconds),
|
|
1808
|
+
);
|
|
1809
|
+
continue;
|
|
1810
|
+
}
|
|
1811
|
+
if (['AbortError', 'TimeoutError'].includes(error?.name)) {
|
|
1778
1812
|
return scheduledDeliveryDeadlineFinding();
|
|
1779
1813
|
}
|
|
1780
1814
|
return permissionFailure(
|
|
@@ -1783,6 +1817,7 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
|
|
|
1783
1817
|
'CloudWatch Logs',
|
|
1784
1818
|
);
|
|
1785
1819
|
}
|
|
1820
|
+
consecutiveUnavailableReads = 0;
|
|
1786
1821
|
if (performance.now() > deadline) {
|
|
1787
1822
|
return scheduledDeliveryDeadlineFinding();
|
|
1788
1823
|
}
|
|
@@ -1885,6 +1920,23 @@ if (process.exitCode === undefined) {
|
|
|
1885
1920
|
}
|
|
1886
1921
|
}
|
|
1887
1922
|
|
|
1923
|
+
if (process.exitCode === undefined) {
|
|
1924
|
+
const readiness = await waitForDeployedSmokeReadiness({
|
|
1925
|
+
apiUrl: smokeApiUrl,
|
|
1926
|
+
webUrl: smokeUrl,
|
|
1927
|
+
service: '${name}',
|
|
1928
|
+
stage,
|
|
1929
|
+
sourceCommit: deployedSourceCommit,
|
|
1930
|
+
});
|
|
1931
|
+
writeFileSync(readinessPath, JSON.stringify({
|
|
1932
|
+
schemaVersion: 1, source, deployedSourceCommit, stage, slice: '${name}',
|
|
1933
|
+
result: readiness,
|
|
1934
|
+
}, null, 2) + '\\n', { encoding: 'utf8', mode: 0o600 });
|
|
1935
|
+
if (readiness.outcome !== 'ready') {
|
|
1936
|
+
failPreflight(readiness.classification, readiness.summary);
|
|
1937
|
+
}
|
|
1938
|
+
}
|
|
1939
|
+
|
|
1888
1940
|
if (process.exitCode === undefined) {
|
|
1889
1941
|
const cognito = new CognitoIdentityProviderClient({
|
|
1890
1942
|
region: process.env.AWS_REGION,
|
|
@@ -1933,7 +1985,7 @@ if (process.exitCode === undefined) {
|
|
|
1933
1985
|
);
|
|
1934
1986
|
await cognito.send(
|
|
1935
1987
|
new AdminAddUserToGroupCommand({
|
|
1936
|
-
GroupName:
|
|
1988
|
+
GroupName: sliceAuthorizationGroupNames(stage).testWriter,
|
|
1937
1989
|
Username: principalEmail,
|
|
1938
1990
|
UserPoolId: userPoolId,
|
|
1939
1991
|
}),
|
|
@@ -1960,7 +2012,7 @@ if (process.exitCode === undefined) {
|
|
|
1960
2012
|
);
|
|
1961
2013
|
await cognito.send(
|
|
1962
2014
|
new AdminAddUserToGroupCommand({
|
|
1963
|
-
GroupName:
|
|
2015
|
+
GroupName: sliceAuthorizationGroupNames(stage).admin,
|
|
1964
2016
|
Username: reviewerEmail,
|
|
1965
2017
|
UserPoolId: userPoolId,
|
|
1966
2018
|
}),
|
|
@@ -2258,7 +2310,7 @@ if (process.exitCode === undefined) {
|
|
|
2258
2310
|
let cleanup = { outcome: 'passed' };
|
|
2259
2311
|
try {
|
|
2260
2312
|
executions.push(await executeAttempt(1));
|
|
2261
|
-
if (executions[0]
|
|
2313
|
+
if (shouldRetryDeployedSmoke(executions[0])) {
|
|
2262
2314
|
executions.push(await executeAttempt(2));
|
|
2263
2315
|
}
|
|
2264
2316
|
const reports = executions
|