@empire-builder-kit/nx 1.0.0-rc.30 → 1.0.0-rc.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/executors.json +8 -3
- package/package.json +14 -7
- package/src/aws/child-environment.d.ts +10 -0
- package/src/aws/child-environment.js +77 -0
- package/src/aws/child-environment.js.map +1 -0
- package/src/aws/identity.d.ts +13 -0
- package/src/aws/identity.js +41 -0
- package/src/aws/identity.js.map +1 -0
- package/src/aws-authority/index.d.ts +1 -0
- package/src/aws-authority/index.js +5 -0
- package/src/aws-authority/index.js.map +1 -0
- package/src/aws-authority/stage-authority.d.ts +240 -0
- package/src/aws-authority/stage-authority.js +2968 -0
- package/src/aws-authority/stage-authority.js.map +1 -0
- package/src/cli/main.d.ts +2 -0
- package/src/cli/main.js +11 -0
- package/src/cli/main.js.map +1 -1
- package/src/developer-agent/generator-planning.js +4 -4
- package/src/developer-agent/generator-planning.js.map +1 -1
- package/src/developer-agent/operation-registry.js +14 -6
- package/src/developer-agent/operation-registry.js.map +1 -1
- package/src/developer-agent/workspace-inspection.js +11 -2
- package/src/developer-agent/workspace-inspection.js.map +1 -1
- package/src/executors/deployment-plan/deployment-plan.js +1 -1
- package/src/executors/deployment-plan/deployment-plan.js.map +1 -1
- package/src/executors/foundation-preflight/foundation-preflight.d.ts +0 -1
- package/src/executors/foundation-preflight/foundation-preflight.js.map +1 -1
- package/src/executors/foundation-preflight/schema.json +0 -5
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +12 -3
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -32
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +1 -1
- package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +64 -0
- package/src/executors/foundation-profile-preflight/production-database-safeguard.js +221 -0
- package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +1 -0
- package/src/executors/foundation-profile-preflight/schema.json +1 -6
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +44 -21
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +1 -1
- package/src/executors/foundation-remove-preflight/schema.json +6 -1
- package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
- package/src/executors/github-bootstrap/github-bootstrap.js +1 -0
- package/src/executors/github-bootstrap/github-bootstrap.js.map +1 -1
- package/src/executors/github-bootstrap/schema.json +7 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +27 -369
- package/src/executors/infrastructure-plan/infrastructure-plan.js +237 -5470
- package/src/executors/infrastructure-plan/infrastructure-plan.js.map +1 -1
- package/src/executors/infrastructure-plan/schema.json +8 -64
- package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
- package/src/executors/local-deploy/federated-credential-transport.js +252 -0
- package/src/executors/local-deploy/federated-credential-transport.js.map +1 -0
- package/src/executors/local-deploy/local-approval.d.ts +4 -9
- package/src/executors/local-deploy/local-approval.js +3 -7
- package/src/executors/local-deploy/local-approval.js.map +1 -1
- package/src/executors/local-deploy/local-deploy.d.ts +60 -43
- package/src/executors/local-deploy/local-deploy.js +955 -804
- package/src/executors/local-deploy/local-deploy.js.map +1 -1
- package/src/executors/local-deploy/schema.json +3 -20
- package/src/executors/refresh/refresh.js +2 -2
- package/src/executors/refresh/refresh.js.map +1 -1
- package/src/executors/remove/remove.js +2 -2
- package/src/executors/remove/remove.js.map +1 -1
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +27 -1
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +907 -22
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +1 -1
- package/src/executors/router-waf-rehearsal/schema.json +17 -2
- package/src/executors/secret-initialize/schema.json +42 -0
- package/src/executors/secret-initialize/secret-initialize.d.ts +32 -0
- package/src/executors/secret-initialize/secret-initialize.js +243 -0
- package/src/executors/secret-initialize/secret-initialize.js.map +1 -0
- package/src/executors/secret-metadata/secret-metadata.d.ts +4 -1
- package/src/executors/secret-metadata/secret-metadata.js +76 -29
- package/src/executors/secret-metadata/secret-metadata.js.map +1 -1
- package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
- package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
- package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +1 -0
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +46 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +153 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js.map +1 -0
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +27 -7
- package/src/executors/sst-lifecycle/run-sst-command.js +474 -89
- package/src/executors/sst-lifecycle/run-sst-command.js.map +1 -1
- package/src/executors/sst-lifecycle/schema.json +0 -5
- package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
- package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
- package/src/executors/sst-lifecycle/secret-preflight.js.map +1 -1
- package/src/executors/unlock/unlock.js +2 -2
- package/src/executors/unlock/unlock.js.map +1 -1
- package/src/foundation/provision-logical-database.js +2 -0
- package/src/foundation/provision-logical-database.js.map +1 -1
- package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
- package/src/foundation/router-waf-rate-rehearsal.js +210 -0
- package/src/foundation/router-waf-rate-rehearsal.js.map +1 -0
- package/src/foundation/router-waf.d.ts +59 -9
- package/src/foundation/router-waf.js +427 -32
- package/src/foundation/router-waf.js.map +1 -1
- package/src/foundation/stages.d.ts +1 -0
- package/src/foundation/stages.js +11 -0
- package/src/foundation/stages.js.map +1 -1
- package/src/generators/formatting.d.ts +8 -0
- package/src/generators/formatting.js +118 -0
- package/src/generators/formatting.js.map +1 -0
- package/src/generators/function/function.js +37 -17
- package/src/generators/function/function.js.map +1 -1
- package/src/generators/post-generation-install.js +2 -2
- package/src/generators/post-generation-install.js.map +1 -1
- package/src/generators/preset/generator.js +28 -8
- package/src/generators/preset/generator.js.map +1 -1
- package/src/generators/preset/schema.d.ts +3 -0
- package/src/generators/preset/schema.json +5 -5
- package/src/generators/preset/workspace-files-developer-agent.js +15 -7
- package/src/generators/preset/workspace-files-developer-agent.js.map +1 -1
- package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
- package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
- package/src/generators/preset/workspace-files-ecr-inspector.js.map +1 -0
- package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
- package/src/generators/preset/workspace-files-performance-cost.js +8 -8
- package/src/generators/preset/workspace-files-performance-cost.js.map +1 -1
- package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
- package/src/generators/preset/workspace-files-performance-load.js +29 -24
- package/src/generators/preset/workspace-files-performance-load.js.map +1 -1
- package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
- package/src/generators/preset/workspace-files-stage-authority.js +479 -0
- package/src/generators/preset/workspace-files-stage-authority.js.map +1 -0
- package/src/generators/preset/workspace-files-thin-deploy.d.ts +40 -0
- package/src/generators/preset/workspace-files-thin-deploy.js +1500 -0
- package/src/generators/preset/workspace-files-thin-deploy.js.map +1 -0
- package/src/generators/preset/workspace-files-thin-docs.d.ts +5 -0
- package/src/generators/preset/workspace-files-thin-docs.js +240 -0
- package/src/generators/preset/workspace-files-thin-docs.js.map +1 -0
- package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
- package/src/generators/preset/workspace-files-thin-release.js +26 -0
- package/src/generators/preset/workspace-files-thin-release.js.map +1 -0
- package/src/generators/preset/workspace-files.d.ts +2 -1
- package/src/generators/preset/workspace-files.js +448 -680
- package/src/generators/preset/workspace-files.js.map +1 -1
- package/src/generators/repository-policy/repository-policy.js +149 -19
- package/src/generators/repository-policy/repository-policy.js.map +1 -1
- package/src/generators/repository-policy/schema.d.ts +2 -0
- package/src/generators/repository-policy/schema.json +11 -1
- package/src/generators/repository-policy/tree-policy.d.ts +3 -0
- package/src/generators/repository-policy/tree-policy.js +25 -0
- package/src/generators/repository-policy/tree-policy.js.map +1 -0
- package/src/generators/slice/built-in-plan-api-files.js +1 -0
- package/src/generators/slice/built-in-plan-api-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-async-work-files.js +41 -0
- package/src/generators/slice/built-in-plan-async-work-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +6 -0
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +89 -30
- package/src/generators/slice/built-in-plan-data-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +19 -0
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +21 -3
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +20 -1
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +3 -5
- package/src/generators/slice/built-in-plan-foundation-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-frontend-files.js +5 -1
- package/src/generators/slice/built-in-plan-frontend-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +199 -188
- package/src/generators/slice/built-in-plan-infrastructure-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-metadata-files.js +13 -0
- package/src/generators/slice/built-in-plan-metadata-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +307 -0
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +1 -0
- package/src/generators/slice/built-in-plan-operations-files.js +65 -51
- package/src/generators/slice/built-in-plan-operations-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-performance-files.js +97 -19
- package/src/generators/slice/built-in-plan-performance-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-project-files.js +9 -68
- package/src/generators/slice/built-in-plan-project-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
- package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +94 -47
- package/src/generators/slice/built-in-plan-testing-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
- package/src/generators/slice/built-in-plan-thin-release-files.js +129 -0
- package/src/generators/slice/built-in-plan-thin-release-files.js.map +1 -0
- package/src/generators/slice/built-in-plan-verification-files.js +6 -2
- package/src/generators/slice/built-in-plan-verification-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +4 -2
- package/src/generators/slice/built-in-plan-web-files.js.map +1 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js +26 -4
- package/src/generators/slice/built-in-plan-workload-role-files.js.map +1 -1
- package/src/generators/slice/built-in-plan.d.ts +1 -0
- package/src/generators/slice/built-in-plan.js +28 -11
- package/src/generators/slice/built-in-plan.js.map +1 -1
- package/src/generators/slice/slice.js +30 -32
- package/src/generators/slice/slice.js.map +1 -1
- package/src/generators/upgrade/upgrade.d.ts +1 -1
- package/src/generators/upgrade/upgrade.js +200 -48
- package/src/generators/upgrade/upgrade.js.map +1 -1
- package/src/generators/workload/performance-registration.d.ts +1 -0
- package/src/generators/workload/performance-registration.js +9 -11
- package/src/generators/workload/performance-registration.js.map +1 -1
- package/src/generators/workload/service-performance-files.d.ts +1 -0
- package/src/generators/workload/service-performance-files.js +27 -7
- package/src/generators/workload/service-performance-files.js.map +1 -1
- package/src/generators/workload/workload.d.ts +1 -1
- package/src/generators/workload/workload.js +55 -28
- package/src/generators/workload/workload.js.map +1 -1
- package/src/git-policy/github-bootstrap.d.ts +28 -7
- package/src/git-policy/github-bootstrap.js +205 -163
- package/src/git-policy/github-bootstrap.js.map +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/local-dev/private-state.d.ts +3 -0
- package/src/local-dev/private-state.js +17 -5
- package/src/local-dev/private-state.js.map +1 -1
- package/src/local-dev/tls.js +5 -1
- package/src/local-dev/tls.js.map +1 -1
- package/src/performance/cost-collection.d.ts +1 -1
- package/src/performance/cost-collection.js +4 -2
- package/src/performance/cost-collection.js.map +1 -1
- package/src/performance/cost-controls.d.ts +3 -1
- package/src/performance/cost-controls.js +9 -4
- package/src/performance/cost-controls.js.map +1 -1
- package/src/performance/evidence.d.ts +1 -1
- package/src/performance/evidence.js +5 -3
- package/src/performance/evidence.js.map +1 -1
- package/src/performance/load-safety.js +5 -3
- package/src/performance/load-safety.js.map +1 -1
- package/src/performance/model.d.ts +2 -2
- package/src/performance/model.js +4 -3
- package/src/performance/model.js.map +1 -1
- package/src/release/index.d.ts +0 -2
- package/src/release/index.js +0 -2
- package/src/release/index.js.map +1 -1
- package/src/release/source-authority.d.ts +4 -5
- package/src/release/source-authority.js +13 -123
- package/src/release/source-authority.js.map +1 -1
- package/src/repository-policy/aurora-preflight.d.ts +1 -1
- package/src/repository-policy/aurora-preflight.js +4 -1
- package/src/repository-policy/aurora-preflight.js.map +1 -1
- package/src/repository-policy/policy.d.ts +21 -2
- package/src/repository-policy/policy.js +290 -25
- package/src/repository-policy/policy.js.map +1 -1
- package/src/schemas/performance-policy-v1.json +3 -1
- package/src/schemas/repository-policy-v1.json +46 -2
- package/src/secrets/adapters.d.ts +7 -2
- package/src/secrets/adapters.js +34 -3
- package/src/secrets/adapters.js.map +1 -1
- package/src/secrets/aws-control-plane.d.ts +10 -1
- package/src/secrets/aws-control-plane.js +67 -0
- package/src/secrets/aws-control-plane.js.map +1 -1
- package/src/secrets/generated-aws-control-plane.d.ts +23 -0
- package/src/secrets/generated-aws-control-plane.js +259 -0
- package/src/secrets/generated-aws-control-plane.js.map +1 -0
- package/src/secrets/metadata.js +38 -10
- package/src/secrets/metadata.js.map +1 -1
- package/src/secrets/model.d.ts +8 -1
- package/src/secrets/model.js +24 -3
- package/src/secrets/model.js.map +1 -1
- package/src/secrets/operator.d.ts +89 -3
- package/src/secrets/operator.js +422 -9
- package/src/secrets/operator.js.map +1 -1
- package/src/secrets/registry.d.ts +2 -1
- package/src/secrets/registry.js +18 -1
- package/src/secrets/registry.js.map +1 -1
- package/src/secrets/workload-access.js +10 -2
- package/src/secrets/workload-access.js.map +1 -1
- package/src/supply-chain/action-pins.js +61 -7
- package/src/supply-chain/action-pins.js.map +1 -1
- package/src/supply-chain/build-output-bounds.d.ts +2 -0
- package/src/supply-chain/build-output-bounds.js +12 -0
- package/src/supply-chain/build-output-bounds.js.map +1 -0
- package/src/supply-chain/build-output.js +2 -4
- package/src/supply-chain/build-output.js.map +1 -1
- package/src/supply-chain/ecr-scanning.d.ts +5 -3
- package/src/supply-chain/ecr-scanning.js +11 -7
- package/src/supply-chain/ecr-scanning.js.map +1 -1
- package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
- package/src/supply-chain/ecs-deployed-image.js +6 -4
- package/src/supply-chain/ecs-deployed-image.js.map +1 -1
- package/src/supply-chain/generated-container-release-command.js +849 -44
- package/src/supply-chain/generated-container-release-command.js.map +1 -1
- package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js +188 -91
- package/src/supply-chain/generated-ecr-collector-command.js.map +1 -1
- package/src/supply-chain/generated-files.js +4 -3
- package/src/supply-chain/generated-files.js.map +1 -1
- package/src/supply-chain/index.d.ts +1 -1
- package/src/supply-chain/index.js +2 -1
- package/src/supply-chain/index.js.map +1 -1
- package/src/workload-roles/index.d.ts +10 -17
- package/src/workload-roles/index.js +5 -18
- package/src/workload-roles/index.js.map +1 -1
- package/src/workspace-deployment/identity.d.ts +3 -0
- package/src/workspace-deployment/identity.js +22 -0
- package/src/workspace-deployment/identity.js.map +1 -0
- package/src/workspace-deployment/index.d.ts +3 -0
- package/src/workspace-deployment/index.js +7 -0
- package/src/workspace-deployment/index.js.map +1 -0
- package/src/workspace-deployment/migration-evidence.d.ts +29 -0
- package/src/workspace-deployment/migration-evidence.js +83 -0
- package/src/workspace-deployment/migration-evidence.js.map +1 -0
- package/src/workspace-deployment/migration.d.ts +27 -0
- package/src/workspace-deployment/migration.js +109 -0
- package/src/workspace-deployment/migration.js.map +1 -0
- package/src/workspace-deployment/ownership.d.ts +81 -0
- package/src/workspace-deployment/ownership.js +381 -0
- package/src/workspace-deployment/ownership.js.map +1 -0
|
@@ -6,6 +6,8 @@ const prettier_1 = require("prettier");
|
|
|
6
6
|
const index_js_1 = require("../../repository-policy/index.js");
|
|
7
7
|
const index_js_2 = require("../../ownership/index.js");
|
|
8
8
|
const workspace_files_1 = require("./workspace-files");
|
|
9
|
+
const formatting_js_1 = require("../formatting.js");
|
|
10
|
+
const index_js_3 = require("../../workspace-deployment/index.js");
|
|
9
11
|
function frameworkPackageVersion() {
|
|
10
12
|
const manifest = require('../../../package.json');
|
|
11
13
|
if (typeof manifest.version !== 'string') {
|
|
@@ -14,28 +16,44 @@ function frameworkPackageVersion() {
|
|
|
14
16
|
return manifest.version;
|
|
15
17
|
}
|
|
16
18
|
async function presetGenerator(tree, options) {
|
|
19
|
+
const deploymentProfile = options.deploymentProfile ?? 'starter';
|
|
17
20
|
const suppliedAccounts = [
|
|
18
21
|
options.developmentAccountId,
|
|
19
22
|
options.stagingAccountId,
|
|
20
23
|
options.productionAccountId,
|
|
21
24
|
];
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
throw new Error('
|
|
25
|
+
if (deploymentProfile === 'starter' &&
|
|
26
|
+
options.stagingAccountId !== undefined) {
|
|
27
|
+
throw new Error('The starter deployment profile has no staging stage; omit --stagingAccountId.');
|
|
25
28
|
}
|
|
26
|
-
const
|
|
27
|
-
?
|
|
29
|
+
const requiredAccounts = deploymentProfile === 'starter'
|
|
30
|
+
? [options.developmentAccountId, options.productionAccountId]
|
|
31
|
+
: suppliedAccounts;
|
|
32
|
+
if (requiredAccounts.some((value) => value !== undefined) &&
|
|
33
|
+
requiredAccounts.some((value) => value === undefined)) {
|
|
34
|
+
throw new Error(deploymentProfile === 'starter'
|
|
35
|
+
? 'Starter preset deployment topology requires development and production account IDs together.'
|
|
36
|
+
: 'Isolated preset deployment topology requires all three exact stage account IDs together.');
|
|
37
|
+
}
|
|
38
|
+
const deploymentAccounts = requiredAccounts.every((value) => value !== undefined)
|
|
39
|
+
? (0, index_js_1.validateDeploymentAccountTopology)(deploymentProfile, {
|
|
28
40
|
development: (0, index_js_1.normalizeDeploymentAccountId)(options.developmentAccountId, 'Development deployment account'),
|
|
29
41
|
production: (0, index_js_1.normalizeDeploymentAccountId)(options.productionAccountId, 'Production deployment account'),
|
|
30
|
-
staging:
|
|
42
|
+
staging: deploymentProfile === 'starter'
|
|
43
|
+
? null
|
|
44
|
+
: (0, index_js_1.normalizeDeploymentAccountId)(options.stagingAccountId, 'Staging deployment account'),
|
|
31
45
|
})
|
|
32
46
|
: { development: null, production: null, staging: null };
|
|
47
|
+
const deploymentRegion = options.deploymentRegion === undefined
|
|
48
|
+
? null
|
|
49
|
+
: (0, index_js_1.configuredDeploymentRegion)(options.deploymentRegion);
|
|
33
50
|
const renderedFiles = (0, workspace_files_1.renderWorkspaceFiles)({
|
|
34
51
|
deploymentAccounts,
|
|
35
|
-
deploymentProfile
|
|
36
|
-
deploymentRegion
|
|
52
|
+
deploymentProfile,
|
|
53
|
+
deploymentRegion,
|
|
37
54
|
frameworkVersion: options.frameworkVersion ?? frameworkPackageVersion(),
|
|
38
55
|
name: options.name,
|
|
56
|
+
workspaceDeploymentId: options.workspaceDeploymentId ?? (0, index_js_3.createWorkspaceDeploymentId)(),
|
|
39
57
|
});
|
|
40
58
|
const files = Object.fromEntries(await Promise.all(Object.entries(renderedFiles).map(async ([path, contents]) => {
|
|
41
59
|
if ((0, workspace_files_1.isRawWorkspaceAuthorityPath)(path)) {
|
|
@@ -59,6 +77,8 @@ async function presetGenerator(tree, options) {
|
|
|
59
77
|
}
|
|
60
78
|
(0, index_js_2.restampFoundationOwnership)(tree);
|
|
61
79
|
(0, index_js_2.restampWorkspaceOwnership)(tree);
|
|
80
|
+
await (0, formatting_js_1.formatTreeFileToFixedPoint)(tree, 'packages/foundation/.ebk/ownership.json');
|
|
81
|
+
await (0, formatting_js_1.formatTreeFileToFixedPoint)(tree, '.ebk/ownership.json');
|
|
62
82
|
}
|
|
63
83
|
exports.default = presetGenerator;
|
|
64
84
|
//# sourceMappingURL=generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/generator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,7 @@ export interface PresetGeneratorSchema {
|
|
|
8
8
|
name: string;
|
|
9
9
|
productionAccountId?: string | number;
|
|
10
10
|
stagingAccountId?: string | number;
|
|
11
|
+
/** Internal deterministic-test hook. Public generation always creates a new
|
|
12
|
+
* workspace deployment identity. */
|
|
13
|
+
workspaceDeploymentId?: string;
|
|
11
14
|
}
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
},
|
|
13
13
|
"deploymentRegion": {
|
|
14
14
|
"type": "string",
|
|
15
|
-
"pattern": "^[a-z]{2}(-gov)?-[a-z]+(-[a-z]+)*-[0-9]$",
|
|
16
|
-
"description": "Optional exact shared AWS Region for
|
|
15
|
+
"pattern": "^(?!(us-iso-|us-isob-|eu-isoe-|us-isof-))[a-z]{2}(-gov)?-[a-z]+(-[a-z]+)*-[0-9]$",
|
|
16
|
+
"description": "Optional exact shared AWS Region for every stage active under the selected deployment profile."
|
|
17
17
|
},
|
|
18
18
|
"developmentAccountId": {
|
|
19
19
|
"anyOf": [
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"multipleOf": 1
|
|
26
26
|
}
|
|
27
27
|
],
|
|
28
|
-
"description": "Optional exact development AWS account ID. Supply all three stage accounts
|
|
28
|
+
"description": "Optional exact development AWS account ID. Supply development and production together for starter; supply all three stage accounts for an isolated profile."
|
|
29
29
|
},
|
|
30
30
|
"name": {
|
|
31
31
|
"type": "string",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"multipleOf": 1
|
|
51
51
|
}
|
|
52
52
|
],
|
|
53
|
-
"description": "Optional exact staging AWS account ID.
|
|
53
|
+
"description": "Optional exact staging AWS account ID. Omit for starter; supply all three stage accounts together for an isolated profile."
|
|
54
54
|
},
|
|
55
55
|
"productionAccountId": {
|
|
56
56
|
"anyOf": [
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"multipleOf": 1
|
|
63
63
|
}
|
|
64
64
|
],
|
|
65
|
-
"description": "Optional exact production AWS account ID. Supply all three stage accounts
|
|
65
|
+
"description": "Optional exact production AWS account ID. Supply development and production together for starter; supply all three stage accounts for an isolated profile."
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
68
|
"required": ["name"]
|
|
@@ -22,9 +22,9 @@ const HANDOFF_STATE_DESCRIPTIONS = {
|
|
|
22
22
|
function deploymentAuthorityGuidance(deploymentProfile) {
|
|
23
23
|
switch (deploymentProfile) {
|
|
24
24
|
case 'starter':
|
|
25
|
-
return `Development and
|
|
26
|
-
authenticated Nx lifecycle and committed Repository Operating Policy.
|
|
27
|
-
|
|
25
|
+
return `Development and production mutation may run locally only through the matching
|
|
26
|
+
authenticated Nx lifecycle and committed Repository Operating Policy. GitHub deployment
|
|
27
|
+
remains optional. Never invoke SST directly.`;
|
|
28
28
|
case 'production-isolated':
|
|
29
29
|
return `Development and staging mutation may run locally only through the matching
|
|
30
30
|
authenticated Nx lifecycle and committed Repository Operating Policy. Production mutation
|
|
@@ -61,13 +61,20 @@ Begin and hand off implementation work with
|
|
|
61
61
|
\`pnpm nx run ${name}:verify\` and the workspace \`pnpm verify\` barrier before claiming
|
|
62
62
|
implemented-and-verified.
|
|
63
63
|
|
|
64
|
+
If a Slice, Service, or Job generator reports a retained post-generation install, rerun
|
|
65
|
+
that same generator with the exact scoped prefix
|
|
66
|
+
\`pnpm --config.verify-deps-before-run=warn nx generate\`. This is the sole exception to
|
|
67
|
+
the workspace's fail-closed dependency-state check: it lets Nx reach EBK's bound recovery
|
|
68
|
+
callback, which owns the install. Never run \`pnpm install\` while the retained marker exists.
|
|
69
|
+
|
|
64
70
|
Use one topic branch and linked worktree per independent change. Stop on stale base,
|
|
65
71
|
overlapping paths or shared external state, ownership or generated drift, invalid policy,
|
|
66
72
|
blocking markers, missing prerequisites, or unknown authority; never merge, rebase, discard,
|
|
67
73
|
or overwrite another worktree automatically.
|
|
68
74
|
|
|
69
|
-
${deploymentAuthorityGuidance(deploymentProfile)}
|
|
70
|
-
|
|
75
|
+
${deploymentAuthorityGuidance(deploymentProfile)} Human-supplied secret values remain a
|
|
76
|
+
human-only TTY ceremony. Agents may use value-blind metadata, status, verification, and the
|
|
77
|
+
exact generated-secret initializer; the initializer accepts and returns no plaintext value.
|
|
71
78
|
|
|
72
79
|
Read \`docs/developer-agent.md\`, \`docs/developer-agent-handoff.template.json\`,
|
|
73
80
|
\`docs/developer-agent-adapters.md\`, \`docs/git-workflow.md\`, and
|
|
@@ -236,8 +243,9 @@ For every mutation, name the cleanup and recovery owner before execution.
|
|
|
236
243
|
${deploymentAuthorityGuidance(deploymentProfile)} Destructive work additionally requires an
|
|
237
244
|
exact target, explicit approval, retained recovery proof, and completed cleanup.
|
|
238
245
|
|
|
239
|
-
|
|
240
|
-
value-blind
|
|
246
|
+
Human-supplied secret values are entered only through the human TTY ceremony. Agents and CI
|
|
247
|
+
may use value-blind metadata, status, verification, and the exact generated-secret initializer;
|
|
248
|
+
the initializer accepts and returns no plaintext value.
|
|
241
249
|
|
|
242
250
|
## Handoff and resumption
|
|
243
251
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-files-developer-agent.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-developer-agent.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"workspace-files-developer-agent.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-developer-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DeploymentProfile } from '../../repository-policy/index.js';
|
|
2
|
+
export declare const THIN_ECR_INSPECTOR_WORKFLOW_PATH: ".github/workflows/ecr-inspector-evidence.yml";
|
|
3
|
+
interface EcrInspectorWorkflowOptions {
|
|
4
|
+
actionPins: {
|
|
5
|
+
checkout: string;
|
|
6
|
+
configureAwsCredentials: string;
|
|
7
|
+
downloadArtifact: string;
|
|
8
|
+
pnpmSetup: string;
|
|
9
|
+
setupNode: string;
|
|
10
|
+
uploadArtifact: string;
|
|
11
|
+
};
|
|
12
|
+
deploymentProfile: DeploymentProfile;
|
|
13
|
+
name: string;
|
|
14
|
+
nodeVersion: string;
|
|
15
|
+
}
|
|
16
|
+
/** Render the postdeploy scanner against the thin lifecycle receipt artifact. */
|
|
17
|
+
export declare function renderThinEcrInspectorWorkflow(options: EcrInspectorWorkflowOptions): Readonly<Record<typeof THIN_ECR_INSPECTOR_WORKFLOW_PATH, string>>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.THIN_ECR_INSPECTOR_WORKFLOW_PATH = void 0;
|
|
4
|
+
exports.renderThinEcrInspectorWorkflow = renderThinEcrInspectorWorkflow;
|
|
5
|
+
exports.THIN_ECR_INSPECTOR_WORKFLOW_PATH = '.github/workflows/ecr-inspector-evidence.yml';
|
|
6
|
+
/** Render the postdeploy scanner against the thin lifecycle receipt artifact. */
|
|
7
|
+
function renderThinEcrInspectorWorkflow(options) {
|
|
8
|
+
const { actionPins, deploymentProfile, name, nodeVersion } = options;
|
|
9
|
+
const stageChoices = deploymentProfile === 'starter' ? 'production' : 'staging, production';
|
|
10
|
+
const stageBranchCases = deploymentProfile === 'starter'
|
|
11
|
+
? 'production:main'
|
|
12
|
+
: 'staging:develop|production:main';
|
|
13
|
+
return {
|
|
14
|
+
[exports.THIN_ECR_INSPECTOR_WORKFLOW_PATH]: `name: ECR Inspector evidence
|
|
15
|
+
|
|
16
|
+
on:
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
inputs:
|
|
19
|
+
stage:
|
|
20
|
+
description: Exact deployed container stage
|
|
21
|
+
required: true
|
|
22
|
+
type: choice
|
|
23
|
+
options: [${stageChoices}]
|
|
24
|
+
deployment_commit:
|
|
25
|
+
description: Exact successful Deploy workflow commit
|
|
26
|
+
required: true
|
|
27
|
+
type: string
|
|
28
|
+
deploy_run_id:
|
|
29
|
+
description: Exact successful Deploy workflow run ID
|
|
30
|
+
required: true
|
|
31
|
+
type: string
|
|
32
|
+
deployment_receipt_artifact_name:
|
|
33
|
+
description: Exact deployment-receipt artifact from that run
|
|
34
|
+
required: true
|
|
35
|
+
type: string
|
|
36
|
+
slice:
|
|
37
|
+
description: Exact registered Product Slice
|
|
38
|
+
required: true
|
|
39
|
+
type: string
|
|
40
|
+
artifact_id:
|
|
41
|
+
description: Exact OCI artifact ID from operations/release.json
|
|
42
|
+
required: true
|
|
43
|
+
type: string
|
|
44
|
+
task_definition_family:
|
|
45
|
+
description: Exact deployed ECS task-definition family
|
|
46
|
+
required: true
|
|
47
|
+
type: string
|
|
48
|
+
deployment_kind:
|
|
49
|
+
description: Exact deployed ECS authority kind
|
|
50
|
+
required: true
|
|
51
|
+
type: choice
|
|
52
|
+
options: [service, task]
|
|
53
|
+
cluster_arn:
|
|
54
|
+
description: Exact ECS cluster ARN
|
|
55
|
+
required: true
|
|
56
|
+
type: string
|
|
57
|
+
deployment_arn:
|
|
58
|
+
description: Exact ECS service ARN or task ARN
|
|
59
|
+
required: true
|
|
60
|
+
type: string
|
|
61
|
+
|
|
62
|
+
concurrency:
|
|
63
|
+
group: ecr-inspector-\${{ inputs.stage }}-\${{ inputs.slice }}-\${{ inputs.artifact_id }}
|
|
64
|
+
cancel-in-progress: false
|
|
65
|
+
|
|
66
|
+
permissions:
|
|
67
|
+
contents: read
|
|
68
|
+
|
|
69
|
+
jobs:
|
|
70
|
+
collect:
|
|
71
|
+
name: exact deployed OCI and Inspector evidence
|
|
72
|
+
runs-on: ubuntu-latest
|
|
73
|
+
environment: ecr-inspector-\${{ inputs.stage }}
|
|
74
|
+
permissions:
|
|
75
|
+
actions: read
|
|
76
|
+
contents: read
|
|
77
|
+
id-token: write
|
|
78
|
+
env:
|
|
79
|
+
AWS_EVIDENCE_ROLE_ARN: \${{ secrets.AWS_ECR_INSPECTOR_EVIDENCE_ROLE_ARN }}
|
|
80
|
+
AWS_EXPECTED_ACCOUNT_ID: \${{ vars.AWS_EXPECTED_ACCOUNT_ID }}
|
|
81
|
+
AWS_REGION: \${{ vars.AWS_REGION }}
|
|
82
|
+
EBK_ARTIFACT_ID: \${{ inputs.artifact_id }}
|
|
83
|
+
EBK_CLUSTER_ARN: \${{ inputs.cluster_arn }}
|
|
84
|
+
EBK_DEPLOYMENT_ARN: \${{ inputs.deployment_arn }}
|
|
85
|
+
EBK_DEPLOYMENT_COMMIT: \${{ inputs.deployment_commit }}
|
|
86
|
+
EBK_DEPLOYMENT_KIND: \${{ inputs.deployment_kind }}
|
|
87
|
+
EBK_DEPLOYMENT_RECEIPT_ARTIFACT_NAME: \${{ inputs.deployment_receipt_artifact_name }}
|
|
88
|
+
EBK_DEPLOY_RUN_ID: \${{ inputs.deploy_run_id }}
|
|
89
|
+
EBK_SLICE: \${{ inputs.slice }}
|
|
90
|
+
EBK_STAGE: \${{ inputs.stage }}
|
|
91
|
+
EBK_TASK_DEFINITION_FAMILY: \${{ inputs.task_definition_family }}
|
|
92
|
+
GH_REPO: \${{ github.repository }}
|
|
93
|
+
GH_TOKEN: \${{ github.token }}
|
|
94
|
+
steps:
|
|
95
|
+
- name: Validate exact postdeploy evidence authority
|
|
96
|
+
run: |
|
|
97
|
+
set -euo pipefail
|
|
98
|
+
case "$EBK_DEPLOYMENT_COMMIT" in ''|*[!0-9a-f]*) exit 1 ;; esac
|
|
99
|
+
{ [ "\${#EBK_DEPLOYMENT_COMMIT}" -eq 40 ] || [ "\${#EBK_DEPLOYMENT_COMMIT}" -eq 64 ]; } || exit 1
|
|
100
|
+
case "$EBK_DEPLOY_RUN_ID" in ''|0|*[!0-9]*) exit 1 ;; esac
|
|
101
|
+
case "$EBK_SLICE" in ''|-*|*-|*[!a-z0-9-]*) exit 1 ;; esac
|
|
102
|
+
expected_branch=develop
|
|
103
|
+
if [ "$EBK_STAGE" = production ]; then expected_branch=main; fi
|
|
104
|
+
case "$EBK_STAGE:$expected_branch" in ${stageBranchCases}) ;;
|
|
105
|
+
*) echo 'ECR evidence stage is inactive for this deployment profile'; exit 1 ;;
|
|
106
|
+
esac
|
|
107
|
+
prefix="deployment-receipt-$EBK_STAGE-$EBK_DEPLOY_RUN_ID-"
|
|
108
|
+
case "$EBK_DEPLOYMENT_RECEIPT_ARTIFACT_NAME" in
|
|
109
|
+
"$prefix"*) attempt="\${EBK_DEPLOYMENT_RECEIPT_ARTIFACT_NAME#"$prefix"}" ;;
|
|
110
|
+
*) echo 'Deployment receipt artifact does not bind the exact Deploy run'; exit 1 ;;
|
|
111
|
+
esac
|
|
112
|
+
case "$attempt" in ''|0*|*[!0-9]*) exit 1 ;; esac
|
|
113
|
+
echo "EBK_DEPLOY_RUN_ATTEMPT=$attempt" >> "$GITHUB_ENV"
|
|
114
|
+
run="$(gh api "/repos/$GH_REPO/actions/runs/$EBK_DEPLOY_RUN_ID")"
|
|
115
|
+
[ "$(printf '%s' "$run" | jq -r .conclusion)" = success ] &&
|
|
116
|
+
[ "$(printf '%s' "$run" | jq -r .run_attempt)" = "$attempt" ] &&
|
|
117
|
+
[ "$(printf '%s' "$run" | jq -r .head_sha)" = "$EBK_DEPLOYMENT_COMMIT" ] &&
|
|
118
|
+
[ "$(printf '%s' "$run" | jq -r .head_branch)" = "$expected_branch" ] &&
|
|
119
|
+
[ "$(printf '%s' "$run" | jq -r .path)" = .github/workflows/deploy.yml ] || {
|
|
120
|
+
echo 'Deploy run is not the exact successful protected source authority'; exit 1;
|
|
121
|
+
}
|
|
122
|
+
artifacts="$(gh api "/repos/$GH_REPO/actions/runs/$EBK_DEPLOY_RUN_ID/artifacts?per_page=100")"
|
|
123
|
+
count="$(printf '%s' "$artifacts" | jq --arg name "$EBK_DEPLOYMENT_RECEIPT_ARTIFACT_NAME" \
|
|
124
|
+
'[.artifacts[] | select(.name == $name and .expired == false)] | length')"
|
|
125
|
+
[ "$count" = 1 ] || { echo 'Exact unexpired deployment receipt is absent or ambiguous'; exit 1; }
|
|
126
|
+
- uses: ${actionPins.checkout}
|
|
127
|
+
with:
|
|
128
|
+
fetch-depth: 0
|
|
129
|
+
persist-credentials: false
|
|
130
|
+
ref: \${{ inputs.deployment_commit }}
|
|
131
|
+
- name: Restore exact deployment receipt and release binding
|
|
132
|
+
uses: ${actionPins.downloadArtifact}
|
|
133
|
+
with:
|
|
134
|
+
github-token: \${{ github.token }}
|
|
135
|
+
name: \${{ inputs.deployment_receipt_artifact_name }}
|
|
136
|
+
path: .
|
|
137
|
+
run-id: \${{ inputs.deploy_run_id }}
|
|
138
|
+
- id: candidate
|
|
139
|
+
name: Verify exact release-candidate artifact provenance
|
|
140
|
+
run: |
|
|
141
|
+
set -euo pipefail
|
|
142
|
+
binding=.ebk/evidence/deployment/postdeploy-supply-chain.json
|
|
143
|
+
test -f "$binding" || { echo 'Postdeploy release-candidate binding is absent'; exit 1; }
|
|
144
|
+
artifact_id="$(jq -r '.releaseCandidateArtifactId // empty' "$binding")"
|
|
145
|
+
artifact_digest="$(jq -r '.releaseCandidateArtifactDigest // empty' "$binding")"
|
|
146
|
+
candidate_source="$(jq -r '.releaseSourceCommit // empty' "$binding")"
|
|
147
|
+
producer_attempt="$(jq -r '.releaseCandidateProducerRunAttempt // empty' "$binding")"
|
|
148
|
+
producer_run_id="$(jq -r '.releaseCandidateProducerRunId // empty' "$binding")"
|
|
149
|
+
profile="$(jq -r '.profile // empty' "$binding")"
|
|
150
|
+
case "$artifact_id:$producer_attempt:$producer_run_id" in
|
|
151
|
+
*[!0-9:]*|:*|*:|*::*|0*:*|*:0*:*|*:0*) echo 'Candidate artifact provenance is malformed'; exit 1 ;;
|
|
152
|
+
esac
|
|
153
|
+
printf '%s' "$artifact_digest" | grep -Eq '^sha256:[0-9a-f]{64}$' || {
|
|
154
|
+
echo 'Candidate artifact digest is malformed'; exit 1;
|
|
155
|
+
}
|
|
156
|
+
case "$candidate_source" in ''|*[!0-9a-f]*) exit 1 ;; esac
|
|
157
|
+
{ [ "\${#candidate_source}" -eq 40 ] || [ "\${#candidate_source}" -eq 64 ]; } || exit 1
|
|
158
|
+
expected_candidate_branch=develop
|
|
159
|
+
case "$profile:$EBK_STAGE" in
|
|
160
|
+
starter:production) expected_candidate_branch=main ;;
|
|
161
|
+
production-isolated:staging|production-isolated:production|fully-isolated:staging|fully-isolated:production) ;;
|
|
162
|
+
*) echo 'Candidate profile and protected ECR stage disagree'; exit 1 ;;
|
|
163
|
+
esac
|
|
164
|
+
artifact="$(gh api "/repos/$GH_REPO/actions/artifacts/$artifact_id")"
|
|
165
|
+
printf '%s' "$artifact" | jq -e \
|
|
166
|
+
--arg digest "$artifact_digest" \
|
|
167
|
+
--arg id "$artifact_id" \
|
|
168
|
+
--arg name "release-candidate-$candidate_source" \
|
|
169
|
+
--arg run "$producer_run_id" \
|
|
170
|
+
'(.id | tostring) == $id and .name == $name and .expired == false and .digest == $digest and (.workflow_run.id | tostring) == $run' \
|
|
171
|
+
>/dev/null || { echo 'Candidate artifact differs from the exact producer'; exit 1; }
|
|
172
|
+
producer="$(gh api "/repos/$GH_REPO/actions/runs/$producer_run_id")"
|
|
173
|
+
printf '%s' "$producer" | jq -e \
|
|
174
|
+
--arg attempt "$producer_attempt" \
|
|
175
|
+
--arg branch "$expected_candidate_branch" \
|
|
176
|
+
--arg run "$producer_run_id" \
|
|
177
|
+
--arg source "$candidate_source" \
|
|
178
|
+
'(.id | tostring) == $run and (.run_attempt | tostring) == $attempt and .head_sha == $source and .head_branch == $branch and .conclusion == "success" and .event == "push" and .path == ".github/workflows/ci.yml"' \
|
|
179
|
+
>/dev/null || { echo 'Candidate producer is not the exact successful protected CI run'; exit 1; }
|
|
180
|
+
echo "artifact_id=$artifact_id" >> "$GITHUB_OUTPUT"
|
|
181
|
+
echo "producer_run_id=$producer_run_id" >> "$GITHUB_OUTPUT"
|
|
182
|
+
echo "candidate_source=$candidate_source" >> "$GITHUB_OUTPUT"
|
|
183
|
+
- name: Require fresh original candidate destination
|
|
184
|
+
run: |
|
|
185
|
+
set -euo pipefail
|
|
186
|
+
test ! -e .ebk/evidence/ecr-original-release-candidate || {
|
|
187
|
+
echo 'Original candidate destination already exists'; exit 1;
|
|
188
|
+
}
|
|
189
|
+
- name: Download exact original release candidate
|
|
190
|
+
uses: ${actionPins.downloadArtifact}
|
|
191
|
+
with:
|
|
192
|
+
artifact-ids: \${{ steps.candidate.outputs.artifact_id }}
|
|
193
|
+
github-token: \${{ github.token }}
|
|
194
|
+
path: .ebk/evidence/ecr-original-release-candidate
|
|
195
|
+
run-id: \${{ steps.candidate.outputs.producer_run_id }}
|
|
196
|
+
- name: Verify downloaded release candidate identity
|
|
197
|
+
env:
|
|
198
|
+
EBK_CANDIDATE_SOURCE: \${{ steps.candidate.outputs.candidate_source }}
|
|
199
|
+
EBK_PRODUCER_RUN_ID: \${{ steps.candidate.outputs.producer_run_id }}
|
|
200
|
+
run: |
|
|
201
|
+
set -euo pipefail
|
|
202
|
+
candidate=.ebk/evidence/ecr-original-release-candidate/packages/$EBK_SLICE/candidate.json
|
|
203
|
+
test -f "$candidate" || { echo 'Exact Slice candidate is absent'; exit 1; }
|
|
204
|
+
jq -e \
|
|
205
|
+
--arg slice "$EBK_SLICE" \
|
|
206
|
+
--arg source "$EBK_CANDIDATE_SOURCE" \
|
|
207
|
+
--arg run "$EBK_PRODUCER_RUN_ID" \
|
|
208
|
+
'.kind == "ebk-release-candidate" and .schemaVersion == 1 and .slice == $slice and .sourceCommit == $source and (.provenance.runId | tostring) == $run' \
|
|
209
|
+
"$candidate" >/dev/null || { echo 'Downloaded candidate identity disagrees with its immutable artifact'; exit 1; }
|
|
210
|
+
- uses: ${actionPins.pnpmSetup}
|
|
211
|
+
- uses: ${actionPins.setupNode}
|
|
212
|
+
with:
|
|
213
|
+
node-version: ${nodeVersion}
|
|
214
|
+
cache: pnpm
|
|
215
|
+
- run: pnpm install --frozen-lockfile --ignore-scripts --ignore-pnpmfile
|
|
216
|
+
- name: Verify managed workspace integrity before AWS authority
|
|
217
|
+
run: pnpm nx run ${name}:workspace-health
|
|
218
|
+
- name: Validate read-only evidence role configuration
|
|
219
|
+
run: |
|
|
220
|
+
set -euo pipefail
|
|
221
|
+
test -n "$AWS_EVIDENCE_ROLE_ARN" && test -n "$AWS_EXPECTED_ACCOUNT_ID" && test -n "$AWS_REGION"
|
|
222
|
+
case "$AWS_EVIDENCE_ROLE_ARN" in
|
|
223
|
+
arn:aws:iam::$AWS_EXPECTED_ACCOUNT_ID:role/*) ;;
|
|
224
|
+
*) echo 'ECR evidence role does not belong to the expected account'; exit 1 ;;
|
|
225
|
+
esac
|
|
226
|
+
- uses: ${actionPins.configureAwsCredentials}
|
|
227
|
+
with:
|
|
228
|
+
role-to-assume: \${{ secrets.AWS_ECR_INSPECTOR_EVIDENCE_ROLE_ARN }}
|
|
229
|
+
role-session-name: ebk-ecr-inspector-\${{ github.run_id }}-\${{ github.run_attempt }}
|
|
230
|
+
aws-region: \${{ vars.AWS_REGION }}
|
|
231
|
+
- name: Collect exact deployed OCI and Inspector evidence
|
|
232
|
+
env:
|
|
233
|
+
ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
|
|
234
|
+
ACTIONS_ID_TOKEN_REQUEST_URL: ''
|
|
235
|
+
run: |
|
|
236
|
+
set -euo pipefail
|
|
237
|
+
[ "$(aws sts get-caller-identity --query Account --output text)" = "$AWS_EXPECTED_ACCOUNT_ID" ]
|
|
238
|
+
slice_root="packages/$EBK_SLICE"
|
|
239
|
+
test -d "$slice_root" || { echo 'Requested Product Slice is absent'; exit 1; }
|
|
240
|
+
input="$slice_root/.ebk/evidence/ecr-inspector-input.json"
|
|
241
|
+
EBK_COLLECTOR_INPUT="$input" node -e '
|
|
242
|
+
const { mkdirSync, writeFileSync } = require("node:fs");
|
|
243
|
+
const { dirname } = require("node:path");
|
|
244
|
+
const deployment = process.env.EBK_DEPLOYMENT_KIND === "service"
|
|
245
|
+
? { clusterArn: process.env.EBK_CLUSTER_ARN, kind: "service", serviceArn: process.env.EBK_DEPLOYMENT_ARN }
|
|
246
|
+
: { clusterArn: process.env.EBK_CLUSTER_ARN, kind: "task", taskArn: process.env.EBK_DEPLOYMENT_ARN };
|
|
247
|
+
const record = {
|
|
248
|
+
accountId: process.env.AWS_EXPECTED_ACCOUNT_ID,
|
|
249
|
+
artifactId: process.env.EBK_ARTIFACT_ID,
|
|
250
|
+
deployment,
|
|
251
|
+
deployRunAttempt: process.env.EBK_DEPLOY_RUN_ATTEMPT,
|
|
252
|
+
deployRunId: process.env.EBK_DEPLOY_RUN_ID,
|
|
253
|
+
deploymentReceiptPath: "../../.ebk/evidence/deployment/latest.json",
|
|
254
|
+
outputDirectory: ".ebk/evidence/supply-chain/ecr-scans",
|
|
255
|
+
postdeployBindingPath: "../../.ebk/evidence/deployment/postdeploy-supply-chain.json",
|
|
256
|
+
region: process.env.AWS_REGION,
|
|
257
|
+
releaseCandidatePath: "../../.ebk/evidence/ecr-original-release-candidate/packages/" + process.env.EBK_SLICE + "/candidate.json",
|
|
258
|
+
schemaVersion: 1,
|
|
259
|
+
stage: process.env.EBK_STAGE,
|
|
260
|
+
taskDefinitionFamily: process.env.EBK_TASK_DEFINITION_FAMILY,
|
|
261
|
+
};
|
|
262
|
+
mkdirSync(dirname(process.env.EBK_COLLECTOR_INPUT), { recursive: true, mode: 0o700 });
|
|
263
|
+
writeFileSync(process.env.EBK_COLLECTOR_INPUT, JSON.stringify(record, null, 2) + "\\n", { flag: "wx", mode: 0o600 });
|
|
264
|
+
'
|
|
265
|
+
export EBK_ECR_SCAN_INPUT_PATH=.ebk/evidence/ecr-inspector-input.json
|
|
266
|
+
pnpm nx run "$EBK_SLICE:ecr-inspector-collect"
|
|
267
|
+
- name: Clear current ECR evidence authority
|
|
268
|
+
if: always()
|
|
269
|
+
env:
|
|
270
|
+
ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
|
|
271
|
+
ACTIONS_ID_TOKEN_REQUEST_URL: ''
|
|
272
|
+
run: |
|
|
273
|
+
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_SECURITY_TOKEN
|
|
274
|
+
echo 'AWS_ACCESS_KEY_ID=' >> "$GITHUB_ENV"
|
|
275
|
+
echo 'AWS_SECRET_ACCESS_KEY=' >> "$GITHUB_ENV"
|
|
276
|
+
echo 'AWS_SESSION_TOKEN=' >> "$GITHUB_ENV"
|
|
277
|
+
echo 'AWS_SECURITY_TOKEN=' >> "$GITHUB_ENV"
|
|
278
|
+
- name: Retain exact deployed OCI and Inspector evidence
|
|
279
|
+
if: always()
|
|
280
|
+
uses: ${actionPins.uploadArtifact}
|
|
281
|
+
env:
|
|
282
|
+
ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
|
|
283
|
+
ACTIONS_ID_TOKEN_REQUEST_URL: ''
|
|
284
|
+
AWS_ACCESS_KEY_ID: ''
|
|
285
|
+
AWS_SECRET_ACCESS_KEY: ''
|
|
286
|
+
AWS_SESSION_TOKEN: ''
|
|
287
|
+
with:
|
|
288
|
+
name: ecr-inspector-\${{ inputs.stage }}-\${{ inputs.slice }}-\${{ github.run_id }}-\${{ github.run_attempt }}
|
|
289
|
+
if-no-files-found: error
|
|
290
|
+
include-hidden-files: true
|
|
291
|
+
retention-days: 90
|
|
292
|
+
path: |
|
|
293
|
+
packages/\${{ inputs.slice }}/.ebk/evidence/ecr-inspector-input.json
|
|
294
|
+
packages/\${{ inputs.slice }}/.ebk/evidence/supply-chain/ecr-scans/**
|
|
295
|
+
`,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=workspace-files-ecr-inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-files-ecr-inspector.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-ecr-inspector.ts"],"names":[],"mappings":";;;AAoBA,wEAsSC;AAxTY,QAAA,gCAAgC,GAC3C,8CAAuD,CAAC;AAgB1D,iFAAiF;AACjF,SAAgB,8BAA8B,CAC5C,OAAoC;IAEpC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IACrE,MAAM,YAAY,GAChB,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACzE,MAAM,gBAAgB,GACpB,iBAAiB,KAAK,SAAS;QAC7B,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,iCAAiC,CAAC;IACxC,OAAO;QACL,CAAC,wCAAgC,CAAC,EAAE;;;;;;;;;oBASpB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDAiFkB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;gBAsBlD,UAAU,CAAC,QAAQ;;;;;;gBAMnB,UAAU,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA0D3B,UAAU,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;gBAoB3B,UAAU,CAAC,SAAS;gBACpB,UAAU,CAAC,SAAS;;0BAEV,WAAW;;;;2BAIV,IAAI;;;;;;;;;gBASf,UAAU,CAAC,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAsDlC,UAAU,CAAC,cAAc;;;;;;;;;;;;;;;CAexC;KACE,CAAC;AACJ,CAAC"}
|
|
@@ -55,12 +55,12 @@ export declare function validateProtectedAggregateCountSourceAuthority(input: Pr
|
|
|
55
55
|
artifactName: string;
|
|
56
56
|
runAttempt: string;
|
|
57
57
|
}>;
|
|
58
|
-
export declare function renderProtectedAggregateCountWorkflow(): Readonly<Record<typeof PROTECTED_AGGREGATE_COUNT_WORKFLOW_PATH, string>>;
|
|
58
|
+
export declare function renderProtectedAggregateCountWorkflow(rehearsalStage?: 'development' | 'staging'): Readonly<Record<typeof PROTECTED_AGGREGATE_COUNT_WORKFLOW_PATH, string>>;
|
|
59
59
|
/**
|
|
60
60
|
* Treats caller-supplied run IDs and artifact names only as selectors. The
|
|
61
61
|
* selected producer runs and artifacts must independently match the fixed
|
|
62
62
|
* protected workflow contracts before AWS authority is introduced.
|
|
63
63
|
*/
|
|
64
64
|
export declare function validateProtectedPerformanceCostSourceAuthority(input: ProtectedPerformanceCostSourceAuthority): void;
|
|
65
|
-
export declare function renderProtectedPerformanceCostWorkflow(): Readonly<Record<typeof PROTECTED_PERFORMANCE_COST_WORKFLOW_PATH, string>>;
|
|
65
|
+
export declare function renderProtectedPerformanceCostWorkflow(rehearsalStage?: 'development' | 'staging'): Readonly<Record<typeof PROTECTED_PERFORMANCE_COST_WORKFLOW_PATH, string>>;
|
|
66
66
|
export {};
|
|
@@ -20,7 +20,7 @@ function validateProtectedAggregateCountSourceAuthority(input) {
|
|
|
20
20
|
const refuse = (detail) => {
|
|
21
21
|
throw new Error(`Protected aggregate-count source authority is invalid: ${detail}.`);
|
|
22
22
|
};
|
|
23
|
-
const branch = input.stage === 'staging'
|
|
23
|
+
const branch = input.stage === 'development' || input.stage === 'staging'
|
|
24
24
|
? 'develop'
|
|
25
25
|
: input.stage === 'production'
|
|
26
26
|
? 'main'
|
|
@@ -61,7 +61,7 @@ function validateProtectedAggregateCountSourceAuthority(input) {
|
|
|
61
61
|
}
|
|
62
62
|
return Object.freeze({ artifactName, runAttempt });
|
|
63
63
|
}
|
|
64
|
-
function renderProtectedAggregateCountWorkflow() {
|
|
64
|
+
function renderProtectedAggregateCountWorkflow(rehearsalStage = 'staging') {
|
|
65
65
|
const checkout = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.checkout);
|
|
66
66
|
const configureAws = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.configureAwsCredentials);
|
|
67
67
|
const downloadArtifact = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.downloadArtifact);
|
|
@@ -79,7 +79,7 @@ on:
|
|
|
79
79
|
description: Exact protected aggregate cohort stage
|
|
80
80
|
required: true
|
|
81
81
|
type: choice
|
|
82
|
-
options: [
|
|
82
|
+
options: [${rehearsalStage}, production]
|
|
83
83
|
project:
|
|
84
84
|
description: Exact Product Slice project
|
|
85
85
|
required: true
|
|
@@ -137,7 +137,7 @@ jobs:
|
|
|
137
137
|
run: |
|
|
138
138
|
set -euo pipefail
|
|
139
139
|
case "$EBK_STAGE:$EBK_PROTECTED_REF" in
|
|
140
|
-
|
|
140
|
+
${rehearsalStage}:refs/heads/develop|production:refs/heads/main) ;;
|
|
141
141
|
*) echo 'Aggregate stage does not match its protected branch'; exit 1 ;;
|
|
142
142
|
esac
|
|
143
143
|
case "$EBK_PROJECT" in
|
|
@@ -334,7 +334,7 @@ function validateProtectedPerformanceCostSourceAuthority(input) {
|
|
|
334
334
|
const refuse = (detail) => {
|
|
335
335
|
throw new Error(`Protected cost source authority is invalid: ${detail}.`);
|
|
336
336
|
};
|
|
337
|
-
const branch = input.stage === 'staging'
|
|
337
|
+
const branch = input.stage === 'development' || input.stage === 'staging'
|
|
338
338
|
? 'develop'
|
|
339
339
|
: input.stage === 'production'
|
|
340
340
|
? 'main'
|
|
@@ -399,7 +399,7 @@ function validateProtectedPerformanceCostSourceAuthority(input) {
|
|
|
399
399
|
validateArtifact(input.aggregateArtifacts, input.aggregateArtifactTotal, input.aggregateArtifactName, expectedAggregateName, 'aggregate-count');
|
|
400
400
|
validateArtifact(input.releaseArtifacts, input.releaseArtifactTotal, input.releaseArtifactName, expectedReleaseName, 'release');
|
|
401
401
|
}
|
|
402
|
-
function renderProtectedPerformanceCostWorkflow() {
|
|
402
|
+
function renderProtectedPerformanceCostWorkflow(rehearsalStage = 'staging') {
|
|
403
403
|
const checkout = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.checkout);
|
|
404
404
|
const configureAws = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.configureAwsCredentials);
|
|
405
405
|
const downloadArtifact = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.downloadArtifact);
|
|
@@ -417,7 +417,7 @@ on:
|
|
|
417
417
|
description: Exact protected billing cohort stage
|
|
418
418
|
required: true
|
|
419
419
|
type: choice
|
|
420
|
-
options: [
|
|
420
|
+
options: [${rehearsalStage}, production]
|
|
421
421
|
project:
|
|
422
422
|
description: Exact Product Slice project
|
|
423
423
|
required: true
|
|
@@ -511,7 +511,7 @@ jobs:
|
|
|
511
511
|
run: |
|
|
512
512
|
set -euo pipefail
|
|
513
513
|
case "$EBK_STAGE:$EBK_PROTECTED_REF" in
|
|
514
|
-
|
|
514
|
+
${rehearsalStage}:refs/heads/develop|production:refs/heads/main) ;;
|
|
515
515
|
*) echo 'Cost collection stage does not match its protected branch'; exit 1 ;;
|
|
516
516
|
esac
|
|
517
517
|
case "$EBK_PROJECT" in
|