@empire-builder-kit/nx 1.0.0-rc.31 → 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.
Files changed (115) hide show
  1. package/package.json +7 -3
  2. package/src/aws/identity.js +1 -1
  3. package/src/aws/identity.js.map +1 -1
  4. package/src/aws-authority/stage-authority.d.ts +2 -0
  5. package/src/aws-authority/stage-authority.js +152 -20
  6. package/src/aws-authority/stage-authority.js.map +1 -1
  7. package/src/cli/main.d.ts +2 -0
  8. package/src/cli/main.js +11 -0
  9. package/src/cli/main.js.map +1 -1
  10. package/src/developer-agent/workspace-inspection.js +11 -2
  11. package/src/developer-agent/workspace-inspection.js.map +1 -1
  12. package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
  13. package/src/executors/github-bootstrap/github-bootstrap.js +1 -0
  14. package/src/executors/github-bootstrap/github-bootstrap.js.map +1 -1
  15. package/src/executors/github-bootstrap/schema.json +7 -1
  16. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +2 -0
  17. package/src/executors/infrastructure-plan/infrastructure-plan.js +18 -1
  18. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +1 -1
  19. package/src/executors/local-deploy/local-deploy.d.ts +2 -0
  20. package/src/executors/local-deploy/local-deploy.js +17 -0
  21. package/src/executors/local-deploy/local-deploy.js.map +1 -1
  22. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +2 -0
  23. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +2 -0
  24. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +1 -1
  25. package/src/executors/secret-initialize/secret-initialize.d.ts +2 -0
  26. package/src/executors/secret-initialize/secret-initialize.js +14 -0
  27. package/src/executors/secret-initialize/secret-initialize.js.map +1 -1
  28. package/src/executors/secret-metadata/secret-metadata.d.ts +2 -0
  29. package/src/executors/secret-metadata/secret-metadata.js +14 -0
  30. package/src/executors/secret-metadata/secret-metadata.js.map +1 -1
  31. package/src/executors/sst-lifecycle/run-sst-command.d.ts +2 -0
  32. package/src/executors/sst-lifecycle/run-sst-command.js +17 -2
  33. package/src/executors/sst-lifecycle/run-sst-command.js.map +1 -1
  34. package/src/foundation/provision-logical-database.js +2 -0
  35. package/src/foundation/provision-logical-database.js.map +1 -1
  36. package/src/generators/preset/generator.js +6 -1
  37. package/src/generators/preset/generator.js.map +1 -1
  38. package/src/generators/preset/schema.d.ts +3 -0
  39. package/src/generators/preset/schema.json +5 -5
  40. package/src/generators/preset/workspace-files-performance-load.js +21 -12
  41. package/src/generators/preset/workspace-files-performance-load.js.map +1 -1
  42. package/src/generators/preset/workspace-files-stage-authority.d.ts +2 -0
  43. package/src/generators/preset/workspace-files-stage-authority.js +264 -60
  44. package/src/generators/preset/workspace-files-stage-authority.js.map +1 -1
  45. package/src/generators/preset/workspace-files-thin-deploy.d.ts +6 -1
  46. package/src/generators/preset/workspace-files-thin-deploy.js +102 -36
  47. package/src/generators/preset/workspace-files-thin-deploy.js.map +1 -1
  48. package/src/generators/preset/workspace-files-thin-docs.js +26 -10
  49. package/src/generators/preset/workspace-files-thin-docs.js.map +1 -1
  50. package/src/generators/preset/workspace-files.d.ts +1 -0
  51. package/src/generators/preset/workspace-files.js +111 -493
  52. package/src/generators/preset/workspace-files.js.map +1 -1
  53. package/src/generators/repository-policy/repository-policy.js +149 -19
  54. package/src/generators/repository-policy/repository-policy.js.map +1 -1
  55. package/src/generators/repository-policy/schema.d.ts +2 -0
  56. package/src/generators/repository-policy/schema.json +11 -1
  57. package/src/generators/repository-policy/tree-policy.d.ts +3 -0
  58. package/src/generators/repository-policy/tree-policy.js +25 -0
  59. package/src/generators/repository-policy/tree-policy.js.map +1 -0
  60. package/src/generators/slice/built-in-plan-async-work-files.js +41 -0
  61. package/src/generators/slice/built-in-plan-async-work-files.js.map +1 -1
  62. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +2 -0
  63. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +1 -1
  64. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +19 -0
  65. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +1 -1
  66. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +21 -3
  67. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +1 -1
  68. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +20 -1
  69. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +1 -1
  70. package/src/generators/slice/built-in-plan-operations-files.js +22 -2
  71. package/src/generators/slice/built-in-plan-operations-files.js.map +1 -1
  72. package/src/generators/slice/built-in-plan-performance-files.js +60 -0
  73. package/src/generators/slice/built-in-plan-performance-files.js.map +1 -1
  74. package/src/generators/slice/built-in-plan-secret-runtime-files.js +13 -0
  75. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +1 -1
  76. package/src/generators/slice/built-in-plan-testing-files.js +20 -0
  77. package/src/generators/slice/built-in-plan-testing-files.js.map +1 -1
  78. package/src/generators/slice/slice.js +3 -3
  79. package/src/generators/slice/slice.js.map +1 -1
  80. package/src/generators/upgrade/upgrade.js +25 -28
  81. package/src/generators/upgrade/upgrade.js.map +1 -1
  82. package/src/generators/workload/performance-registration.js +4 -8
  83. package/src/generators/workload/performance-registration.js.map +1 -1
  84. package/src/git-policy/github-bootstrap.d.ts +10 -2
  85. package/src/git-policy/github-bootstrap.js +109 -13
  86. package/src/git-policy/github-bootstrap.js.map +1 -1
  87. package/src/index.d.ts +1 -0
  88. package/src/index.js +1 -0
  89. package/src/index.js.map +1 -1
  90. package/src/local-dev/tls.js +5 -1
  91. package/src/local-dev/tls.js.map +1 -1
  92. package/src/repository-policy/policy.d.ts +16 -1
  93. package/src/repository-policy/policy.js +226 -12
  94. package/src/repository-policy/policy.js.map +1 -1
  95. package/src/schemas/repository-policy-v1.json +46 -2
  96. package/src/secrets/adapters.d.ts +2 -1
  97. package/src/secrets/adapters.js +12 -2
  98. package/src/secrets/adapters.js.map +1 -1
  99. package/src/supply-chain/generated-container-release-command.js +41 -18
  100. package/src/supply-chain/generated-container-release-command.js.map +1 -1
  101. package/src/workspace-deployment/identity.d.ts +3 -0
  102. package/src/workspace-deployment/identity.js +22 -0
  103. package/src/workspace-deployment/identity.js.map +1 -0
  104. package/src/workspace-deployment/index.d.ts +3 -0
  105. package/src/workspace-deployment/index.js +7 -0
  106. package/src/workspace-deployment/index.js.map +1 -0
  107. package/src/workspace-deployment/migration-evidence.d.ts +29 -0
  108. package/src/workspace-deployment/migration-evidence.js +83 -0
  109. package/src/workspace-deployment/migration-evidence.js.map +1 -0
  110. package/src/workspace-deployment/migration.d.ts +27 -0
  111. package/src/workspace-deployment/migration.js +109 -0
  112. package/src/workspace-deployment/migration.js.map +1 -0
  113. package/src/workspace-deployment/ownership.d.ts +81 -0
  114. package/src/workspace-deployment/ownership.js +381 -0
  115. package/src/workspace-deployment/ownership.js.map +1 -0
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.THIN_DEPLOY_WORKFLOW_PATH = void 0;
4
4
  exports.renderThinDeployVerifyCaller = renderThinDeployVerifyCaller;
5
+ exports.exactStageDeployerGuardScript = exactStageDeployerGuardScript;
6
+ exports.canonicalStageAuthorityDerivationScript = canonicalStageAuthorityDerivationScript;
7
+ exports.exactStagingPromotionPullGuardScript = exactStagingPromotionPullGuardScript;
5
8
  exports.stagingPromotionReceiptValidationScript = stagingPromotionReceiptValidationScript;
6
9
  exports.restoredCandidateValidationScript = restoredCandidateValidationScript;
7
10
  exports.stagingPromotionSealScript = stagingPromotionSealScript;
@@ -51,9 +54,7 @@ function workflowCallTrigger(profile) {
51
54
  function renderThinDeployVerifyCaller(profile) {
52
55
  if (profile === 'starter')
53
56
  return '';
54
- const protectedBranchCondition = profile === 'production-isolated'
55
- ? "github.ref == 'refs/heads/main'"
56
- : "(github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/main')";
57
+ const protectedBranchCondition = "(github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/main')";
57
58
  return `
58
59
 
59
60
  deploy:
@@ -86,6 +87,73 @@ function indentedScript(source, spaces) {
86
87
  .map((line) => `${prefix}${line}`)
87
88
  .join('\n');
88
89
  }
90
+ /** @internal Exported for executable source-contract tests. */
91
+ function exactStageDeployerGuardScript(operation, accountVariable) {
92
+ return `read -r caller_account caller_arn <<< "$(aws sts get-caller-identity --query '[Account,Arn]' --output text)"
93
+ [ "$caller_account" = "${accountVariable}" ] || {
94
+ echo '${operation} caller account differs from committed policy'; exit 1;
95
+ }
96
+ caller_partition="\${caller_arn#arn:}"
97
+ caller_partition="\${caller_partition%%:*}"
98
+ [ "$caller_partition" = "$AWS_PARTITION" ] || {
99
+ echo '${operation} caller partition differs from committed policy'; exit 1;
100
+ }
101
+ expected_role_arn="arn:$AWS_PARTITION:iam::${accountVariable}:role/ebk/$EBK_STAGE/deployment/ebk-$EBK_STAGE-deploy"
102
+ [ "$AWS_DEPLOY_ROLE_ARN" = "$expected_role_arn" ] || {
103
+ echo '${operation} configured role is not the canonical stage deployer'; exit 1;
104
+ }
105
+ expected_caller_prefix="arn:$AWS_PARTITION:sts::${accountVariable}:assumed-role/ebk-$EBK_STAGE-deploy/"
106
+ case "$caller_arn" in
107
+ "$expected_caller_prefix"?*) ;;
108
+ *) echo '${operation} caller is not the exact stage deployer'; exit 1 ;;
109
+ esac`;
110
+ }
111
+ /** @internal Shared verbatim by every generated protected workflow. */
112
+ function canonicalStageAuthorityDerivationScript() {
113
+ return `case "$EBK_STAGE" in
114
+ development) account_id="$EBK_DEVELOPMENT_ACCOUNT" ;;
115
+ staging) account_id="$EBK_STAGING_ACCOUNT" ;;
116
+ production) account_id="$EBK_PRODUCTION_ACCOUNT" ;;
117
+ *) exit 1 ;;
118
+ esac
119
+ case "$account_id" in *[!0-9]*|'') exit 1 ;; esac
120
+ [ "\${#account_id}" -eq 12 ]
121
+ case "$EBK_REGION" in
122
+ cn-*) partition=aws-cn; audience=sts.amazonaws.com.cn ;;
123
+ us-gov-*) partition=aws-us-gov; audience=sts.amazonaws.com ;;
124
+ us-iso-*|us-isob-*|eu-isoe-*|us-isof-*)
125
+ echo 'The committed Region belongs to an unsupported AWS partition.' >&2
126
+ exit 1
127
+ ;;
128
+ *) partition=aws; audience=sts.amazonaws.com ;;
129
+ esac
130
+ role_arn="arn:$partition:iam::$account_id:role/ebk/$EBK_STAGE/deployment/ebk-$EBK_STAGE-deploy"
131
+ echo "account_id=$account_id" >> "$GITHUB_OUTPUT"
132
+ echo "audience=$audience" >> "$GITHUB_OUTPUT"
133
+ echo "partition=$partition" >> "$GITHUB_OUTPUT"
134
+ echo "role_arn=$role_arn" >> "$GITHUB_OUTPUT"`;
135
+ }
136
+ /** @internal Exported for executable source-contract tests. */
137
+ function exactStagingPromotionPullGuardScript() {
138
+ return `read -r caller_account caller_arn <<< "$(aws sts get-caller-identity --query '[Account,Arn]' --output text)"
139
+ [ "$caller_account" = "$EBK_STAGING_ACCOUNT_ID" ] || {
140
+ echo 'Staging registry caller account differs from committed policy'; exit 1;
141
+ }
142
+ caller_partition="\${caller_arn#arn:}"
143
+ caller_partition="\${caller_partition%%:*}"
144
+ [ "$caller_partition" = "$AWS_PARTITION" ] || {
145
+ echo 'Staging registry caller partition differs from committed policy'; exit 1;
146
+ }
147
+ expected_role_arn="arn:$AWS_PARTITION:iam::$EBK_STAGING_ACCOUNT_ID:role/ebk/promotion/ebk-staging-promotion-pull"
148
+ [ "$AWS_STAGING_PROMOTION_PULL_ROLE_ARN" = "$expected_role_arn" ] || {
149
+ echo 'Staging registry configured role is not the canonical promotion pull role'; exit 1;
150
+ }
151
+ expected_caller_prefix="arn:$AWS_PARTITION:sts::$EBK_STAGING_ACCOUNT_ID:assumed-role/ebk-staging-promotion-pull/"
152
+ case "$caller_arn" in
153
+ "$expected_caller_prefix"?*) ;;
154
+ *) echo 'Staging registry caller is not the exact promotion pull role'; exit 1 ;;
155
+ esac`;
156
+ }
89
157
  /** @internal Shared verbatim with the generated workflow and executable tests. */
90
158
  function stagingPromotionReceiptValidationScript() {
91
159
  return `import { createHash } from 'node:crypto';
@@ -395,12 +463,15 @@ jobs:
395
463
  account_id: \${{ steps.account.outputs.account_id }}
396
464
  has_slices: \${{ steps.policy.outputs.has_slices }}
397
465
  ordered_projects: \${{ steps.policy.outputs.ordered_projects }}
466
+ oidc_audience: \${{ steps.account.outputs.audience }}
467
+ partition: \${{ steps.account.outputs.partition }}
398
468
  profile: \${{ steps.policy.outputs.deployment_profile }}
399
469
  project: \${{ steps.route.outputs.project }}
400
470
  region: \${{ steps.policy.outputs.deployment_region }}
401
471
  slice_projects: \${{ steps.policy.outputs.slice_projects }}
402
472
  staging_account_id: \${{ steps.policy.outputs.staging_account_id }}
403
473
  stage: \${{ steps.route.outputs.stage }}
474
+ stage_deploy_role_arn: \${{ steps.account.outputs.role_arn }}
404
475
  steps:
405
476
  - name: Verify exact protected branch tip before setup
406
477
  env:
@@ -453,8 +524,6 @@ jobs:
453
524
  persist-credentials: false
454
525
  ref: \${{ env.EBK_DEPLOYMENT_SOURCE_COMMIT }}
455
526
  - uses: ${actionPins.pnpmSetup}
456
- with:
457
- version: ${toolVersions.pnpm}
458
527
  - uses: ${actionPins.setupNode}
459
528
  with:
460
529
  node-version: ${toolVersions.node}
@@ -516,23 +585,15 @@ jobs:
516
585
  EBK_REPOSITORY_PROFILE: \${{ steps.policy.outputs.deployment_profile }}
517
586
  run: test "$EBK_RENDERED_PROFILE" = "$EBK_REPOSITORY_PROFILE"
518
587
  - id: account
519
- name: Select committed stage account
588
+ name: Derive canonical committed stage authority
520
589
  env:
521
590
  EBK_DEVELOPMENT_ACCOUNT: \${{ steps.policy.outputs.development_account_id }}
522
591
  EBK_PRODUCTION_ACCOUNT: \${{ steps.policy.outputs.production_account_id }}
592
+ EBK_REGION: \${{ steps.policy.outputs.deployment_region }}
523
593
  EBK_STAGE: \${{ steps.route.outputs.stage }}
524
594
  EBK_STAGING_ACCOUNT: \${{ steps.policy.outputs.staging_account_id }}
525
595
  run: |
526
- set -euo pipefail
527
- case "$EBK_STAGE" in
528
- development) account_id="$EBK_DEVELOPMENT_ACCOUNT" ;;
529
- staging) account_id="$EBK_STAGING_ACCOUNT" ;;
530
- production) account_id="$EBK_PRODUCTION_ACCOUNT" ;;
531
- *) exit 1 ;;
532
- esac
533
- case "$account_id" in *[!0-9]*|'') exit 1 ;; esac
534
- [ "\${#account_id}" -eq 12 ]
535
- echo "account_id=$account_id" >> "$GITHUB_OUTPUT"
596
+ ${indentedScript(`set -euo pipefail\n${canonicalStageAuthorityDerivationScript()}`, 10)}
536
597
 
537
598
  immutable-artifacts:
538
599
  name: prepare exact immutable release artifacts
@@ -739,15 +800,16 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
739
800
  contents: read
740
801
  id-token: write
741
802
  env:
742
- AWS_DEPLOY_ROLE_ARN: \${{ secrets.AWS_DEPLOY_ROLE_ARN }}
803
+ AWS_DEPLOY_ROLE_ARN: \${{ needs.prepare.outputs.stage_deploy_role_arn }}
743
804
  AWS_EXPECTED_ACCOUNT_ID: \${{ vars.AWS_EXPECTED_ACCOUNT_ID }}
805
+ AWS_PARTITION: \${{ needs.prepare.outputs.partition }}
744
806
  AWS_REGION: \${{ vars.AWS_REGION }}
745
807
  EBK_ACTION: deploy
746
808
  EBK_DEPLOYMENT_PROFILE: \${{ needs.prepare.outputs.profile }}
747
809
  EBK_POLICY_ACCOUNT_ID: \${{ needs.prepare.outputs.account_id }}
748
810
  EBK_POLICY_REGION: \${{ needs.prepare.outputs.region }}
749
811
  EBK_RELEASE_SOURCE_COMMIT: \${{ needs.immutable-artifacts.outputs.source_commit }}
750
- EBK_SOURCE_COMMIT: \${{ env.EBK_DEPLOYMENT_SOURCE_COMMIT }}
812
+ EBK_SOURCE_COMMIT: \${{ inputs.source_commit || github.sha }}
751
813
  EBK_STAGE: \${{ needs.prepare.outputs.stage }}
752
814
  EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.slice_projects }}
753
815
  steps:
@@ -764,8 +826,6 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
764
826
  env:
765
827
  ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
766
828
  ACTIONS_ID_TOKEN_REQUEST_URL: ''
767
- with:
768
- version: ${toolVersions.pnpm}
769
829
  - uses: ${actionPins.setupNode}
770
830
  env:
771
831
  ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
@@ -812,6 +872,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
812
872
  - name: Assume the current stage deployment role for container build
813
873
  uses: ${actionPins.configureAwsCredentials}
814
874
  with:
875
+ audience: \${{ needs.prepare.outputs.oidc_audience }}
815
876
  aws-region: \${{ vars.AWS_REGION }}
816
877
  role-session-name: ebk-container-\${{ matrix.architecture }}-\${{ github.run_id }}-\${{ github.run_attempt }}
817
878
  role-to-assume: \${{ env.AWS_DEPLOY_ROLE_ARN }}
@@ -824,6 +885,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
824
885
  - name: Build and run exact native OCI artifacts
825
886
  run: |
826
887
  set -euo pipefail
888
+ ${indentedScript(exactStageDeployerGuardScript('Container build', '$EBK_POLICY_ACCOUNT_ID'), 10)}
827
889
  IFS=',' read -r -a projects <<< "$EBK_SLICE_PROJECTS"
828
890
  for project in "\${projects[@]}"; do
829
891
  test -n "$project" || continue
@@ -858,15 +920,16 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
858
920
  artifact_digest: \${{ steps.retain.outputs.artifact-digest }}
859
921
  artifact_id: \${{ steps.retain.outputs.artifact-id }}
860
922
  env:
861
- AWS_DEPLOY_ROLE_ARN: \${{ secrets.AWS_DEPLOY_ROLE_ARN }}
923
+ AWS_DEPLOY_ROLE_ARN: \${{ needs.prepare.outputs.stage_deploy_role_arn }}
862
924
  AWS_EXPECTED_ACCOUNT_ID: \${{ vars.AWS_EXPECTED_ACCOUNT_ID }}
925
+ AWS_PARTITION: \${{ needs.prepare.outputs.partition }}
863
926
  AWS_REGION: \${{ vars.AWS_REGION }}
864
927
  EBK_ACTION: deploy
865
928
  EBK_DEPLOYMENT_PROFILE: \${{ needs.prepare.outputs.profile }}
866
929
  EBK_POLICY_ACCOUNT_ID: \${{ needs.prepare.outputs.account_id }}
867
930
  EBK_POLICY_REGION: \${{ needs.prepare.outputs.region }}
868
931
  EBK_RELEASE_SOURCE_COMMIT: \${{ needs.immutable-artifacts.outputs.source_commit }}
869
- EBK_SOURCE_COMMIT: \${{ env.EBK_DEPLOYMENT_SOURCE_COMMIT }}
932
+ EBK_SOURCE_COMMIT: \${{ inputs.source_commit || github.sha }}
870
933
  EBK_STAGE: \${{ needs.prepare.outputs.stage }}
871
934
  EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.slice_projects }}
872
935
  steps:
@@ -883,8 +946,6 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
883
946
  env:
884
947
  ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
885
948
  ACTIONS_ID_TOKEN_REQUEST_URL: ''
886
- with:
887
- version: ${toolVersions.pnpm}
888
949
  - uses: ${actionPins.setupNode}
889
950
  env:
890
951
  ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
@@ -940,6 +1001,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
940
1001
  - name: Assume the current stage deployment role for container assembly
941
1002
  uses: ${actionPins.configureAwsCredentials}
942
1003
  with:
1004
+ audience: \${{ needs.prepare.outputs.oidc_audience }}
943
1005
  aws-region: \${{ vars.AWS_REGION }}
944
1006
  role-session-name: ebk-container-assemble-\${{ github.run_id }}-\${{ github.run_attempt }}
945
1007
  role-to-assume: \${{ env.AWS_DEPLOY_ROLE_ARN }}
@@ -952,6 +1014,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
952
1014
  - name: Assemble exact dual-architecture indexes
953
1015
  run: |
954
1016
  set -euo pipefail
1017
+ ${indentedScript(exactStageDeployerGuardScript('Container assembly', '$EBK_POLICY_ACCOUNT_ID'), 10)}
955
1018
  IFS=',' read -r -a projects <<< "$EBK_SLICE_PROJECTS"
956
1019
  for project in "\${projects[@]}"; do
957
1020
  test -n "$project" || continue
@@ -993,8 +1056,9 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
993
1056
  artifact_digest: \${{ steps.retain.outputs.artifact-digest }}
994
1057
  artifact_id: \${{ steps.retain.outputs.artifact-id }}
995
1058
  env:
996
- AWS_DEPLOY_ROLE_ARN: \${{ secrets.AWS_DEPLOY_ROLE_ARN }}
1059
+ AWS_DEPLOY_ROLE_ARN: \${{ needs.prepare.outputs.stage_deploy_role_arn }}
997
1060
  AWS_EXPECTED_ACCOUNT_ID: \${{ vars.AWS_EXPECTED_ACCOUNT_ID }}
1061
+ AWS_PARTITION: \${{ needs.prepare.outputs.partition }}
998
1062
  AWS_REGION: \${{ vars.AWS_REGION }}
999
1063
  EBK_ACTION: deploy
1000
1064
  EBK_DEPLOYMENT_PROFILE: \${{ needs.prepare.outputs.profile }}
@@ -1002,7 +1066,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
1002
1066
  EBK_POLICY_REGION: \${{ needs.prepare.outputs.region }}
1003
1067
  EBK_POLICY_STAGING_ACCOUNT_ID: \${{ needs.prepare.outputs.staging_account_id }}
1004
1068
  EBK_RELEASE_SOURCE_COMMIT: \${{ needs.immutable-artifacts.outputs.source_commit }}
1005
- EBK_SOURCE_COMMIT: \${{ env.EBK_DEPLOYMENT_SOURCE_COMMIT }}
1069
+ EBK_SOURCE_COMMIT: \${{ inputs.source_commit || github.sha }}
1006
1070
  EBK_STAGE: production
1007
1071
  EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.slice_projects }}
1008
1072
  steps:
@@ -1019,8 +1083,6 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
1019
1083
  env:
1020
1084
  ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
1021
1085
  ACTIONS_ID_TOKEN_REQUEST_URL: ''
1022
- with:
1023
- version: ${toolVersions.pnpm}
1024
1086
  - uses: ${actionPins.setupNode}
1025
1087
  env:
1026
1088
  ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
@@ -1077,17 +1139,20 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
1077
1139
  - name: Assume exact staging registry pull role
1078
1140
  uses: ${actionPins.configureAwsCredentials}
1079
1141
  with:
1142
+ audience: \${{ needs.prepare.outputs.oidc_audience }}
1080
1143
  aws-region: \${{ vars.AWS_STAGING_PROMOTION_REGION }}
1081
1144
  role-session-name: ebk-staging-container-pull-\${{ github.run_id }}-\${{ github.run_attempt }}
1082
1145
  role-to-assume: \${{ secrets.AWS_STAGING_PROMOTION_PULL_ROLE_ARN }}
1083
1146
  - name: Authenticate exact staging source registry
1084
1147
  env:
1148
+ AWS_STAGING_PROMOTION_PULL_ROLE_ARN: \${{ secrets.AWS_STAGING_PROMOTION_PULL_ROLE_ARN }}
1085
1149
  EBK_STAGING_ACCOUNT_ID: \${{ vars.AWS_STAGING_PROMOTION_EXPECTED_ACCOUNT_ID }}
1086
1150
  EBK_STAGING_REGION: \${{ vars.AWS_STAGING_PROMOTION_REGION }}
1087
1151
  run: |
1088
1152
  set -euo pipefail
1089
1153
  [ "$EBK_STAGING_ACCOUNT_ID" = "$EBK_POLICY_STAGING_ACCOUNT_ID" ]
1090
- [ "$(aws sts get-caller-identity --query Account --output text)" = "$EBK_STAGING_ACCOUNT_ID" ]
1154
+ [ "$EBK_STAGING_REGION" = "$EBK_POLICY_REGION" ]
1155
+ ${indentedScript(exactStagingPromotionPullGuardScript(), 10)}
1091
1156
  [ "$EBK_STAGING_ACCOUNT_ID" != "$AWS_EXPECTED_ACCOUNT_ID" ]
1092
1157
  registry_suffix=.com
1093
1158
  case "$EBK_STAGING_REGION" in cn-*) registry_suffix=.com.cn ;; esac
@@ -1114,6 +1179,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
1114
1179
  - name: Assume the production deployment role for container promotion
1115
1180
  uses: ${actionPins.configureAwsCredentials}
1116
1181
  with:
1182
+ audience: \${{ needs.prepare.outputs.oidc_audience }}
1117
1183
  aws-region: \${{ vars.AWS_REGION }}
1118
1184
  role-session-name: ebk-production-container-push-\${{ github.run_id }}-\${{ github.run_attempt }}
1119
1185
  role-to-assume: \${{ env.AWS_DEPLOY_ROLE_ARN }}
@@ -1125,7 +1191,7 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
1125
1191
  set -euo pipefail
1126
1192
  [ "$AWS_EXPECTED_ACCOUNT_ID" = "$EBK_POLICY_PRODUCTION_ACCOUNT_ID" ]
1127
1193
  [ "$AWS_REGION" = "$EBK_POLICY_REGION" ]
1128
- [ "$(aws sts get-caller-identity --query Account --output text)" = "$AWS_EXPECTED_ACCOUNT_ID" ]
1194
+ ${indentedScript(exactStageDeployerGuardScript('Container promotion', '$AWS_EXPECTED_ACCOUNT_ID'), 10)}
1129
1195
  IFS=',' read -r -a projects <<< "$EBK_SLICE_PROJECTS"
1130
1196
  for project in "\${projects[@]}"; do
1131
1197
  test -n "$project" || continue
@@ -1181,8 +1247,9 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
1181
1247
  contents: read
1182
1248
  id-token: write
1183
1249
  env:
1184
- AWS_DEPLOY_ROLE_ARN: \${{ secrets.AWS_DEPLOY_ROLE_ARN }}
1250
+ AWS_DEPLOY_ROLE_ARN: \${{ needs.prepare.outputs.stage_deploy_role_arn }}
1185
1251
  AWS_EXPECTED_ACCOUNT_ID: \${{ vars.AWS_EXPECTED_ACCOUNT_ID }}
1252
+ AWS_PARTITION: \${{ needs.prepare.outputs.partition }}
1186
1253
  AWS_REGION: \${{ vars.AWS_REGION }}
1187
1254
  EBK_ACTION: \${{ needs.prepare.outputs.action }}
1188
1255
  EBK_ALLOW_PRODUCTION_REMOVE: \${{ vars.EBK_ALLOW_PRODUCTION_REMOVE }}
@@ -1195,9 +1262,9 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
1195
1262
  EBK_ORDERED_PROJECTS: \${{ needs.prepare.outputs.ordered_projects }}
1196
1263
  EBK_POLICY_ACCOUNT_ID: \${{ needs.prepare.outputs.account_id }}
1197
1264
  EBK_POLICY_REGION: \${{ needs.prepare.outputs.region }}
1198
- EBK_RELEASE_SOURCE_COMMIT: \${{ needs.immutable-artifacts.outputs.source_commit || env.EBK_DEPLOYMENT_SOURCE_COMMIT }}
1265
+ EBK_RELEASE_SOURCE_COMMIT: \${{ needs.immutable-artifacts.outputs.source_commit || inputs.source_commit || github.sha }}
1199
1266
  EBK_SLICE_PROJECTS: \${{ needs.prepare.outputs.slice_projects }}
1200
- EBK_SOURCE_COMMIT: \${{ env.EBK_DEPLOYMENT_SOURCE_COMMIT }}
1267
+ EBK_SOURCE_COMMIT: \${{ inputs.source_commit || github.sha }}
1201
1268
  EBK_STAGE: \${{ needs.prepare.outputs.stage }}
1202
1269
  steps:
1203
1270
  - name: Check out immutable deployment source
@@ -1213,8 +1280,6 @@ ${indentedScript(stagingPromotionReceiptValidationScript(), 10)}
1213
1280
  env:
1214
1281
  ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
1215
1282
  ACTIONS_ID_TOKEN_REQUEST_URL: ''
1216
- with:
1217
- version: ${toolVersions.pnpm}
1218
1283
  - uses: ${actionPins.setupNode}
1219
1284
  env:
1220
1285
  ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
@@ -1355,6 +1420,7 @@ ${indentedScript(restoredCandidateValidationScript(), 10)}
1355
1420
  - name: Assume the one stage deployment role
1356
1421
  uses: ${actionPins.configureAwsCredentials}
1357
1422
  with:
1423
+ audience: \${{ needs.prepare.outputs.oidc_audience }}
1358
1424
  aws-region: \${{ vars.AWS_REGION }}
1359
1425
  role-session-name: ebk-native-\${{ github.run_id }}-\${{ github.run_attempt }}
1360
1426
  role-to-assume: \${{ env.AWS_DEPLOY_ROLE_ARN }}
@@ -1363,7 +1429,7 @@ ${indentedScript(restoredCandidateValidationScript(), 10)}
1363
1429
  set -euo pipefail
1364
1430
  [ "$AWS_EXPECTED_ACCOUNT_ID" = "$EBK_POLICY_ACCOUNT_ID" ]
1365
1431
  [ "$AWS_REGION" = "$EBK_POLICY_REGION" ]
1366
- [ "$(aws sts get-caller-identity --query Account --output text)" = "$EBK_POLICY_ACCOUNT_ID" ]
1432
+ ${indentedScript(exactStageDeployerGuardScript('Native lifecycle', '$EBK_POLICY_ACCOUNT_ID'), 10)}
1367
1433
  - name: Run ordered native lifecycle targets
1368
1434
  env:
1369
1435
  ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-files-thin-deploy.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-thin-deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-files-thin-deploy.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-thin-deploy.ts"],"names":[],"mappings":"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"}
@@ -28,9 +28,11 @@ generated branch rules, CODEOWNER review, resolved-conversation requirement,
28
28
  merge-only history, and read-only default workflow permissions.
29
29
 
30
30
  The managed \`Deploy\` workflow is the single protected infrastructure path.
31
- It assumes one environment-scoped \`AWS_DEPLOY_ROLE_ARN\`, invokes the same root
32
- Nx lifecycle used locally, runs migrations and Slice smoke checks after each
33
- successful native SST deployment, and retains one bounded deployment receipt.
31
+ It derives the canonical stage deployment-role ARN from committed account,
32
+ stage, Region-partition, and naming policy; the GitHub environment supplies no
33
+ deployment-role secret. It invokes the same root Nx lifecycle used locally,
34
+ runs migrations and Slice smoke checks after each successful native SST
35
+ deployment, and retains one bounded deployment receipt.
34
36
  For isolated profiles, the protected-branch \`Verify\` run calls the reusable
35
37
  \`Deploy\` workflow only after acceptance and its immutable candidate succeed.
36
38
  The call binds the exact source commit, branch ref, run, and attempt, consumes
@@ -48,12 +50,25 @@ candidate recorded by the successful staging deployment.
48
50
  When \`starter\` uses its optional manual workflow, \`develop\` routes to
49
51
  development and \`main\` routes to production; starter has no automatic caller.
50
52
  Every protected job checks out an immutable commit, validates managed source,
51
- and assumes the committed stage role through the matching GitHub environment.
52
-
53
- Run GitHub bootstrap in report mode before apply. It configures repository and
54
- environment policy but never creates AWS credentials, secrets, or roles. Place
55
- the exact deployment role ARN, account, and Region only in their protected
56
- stage environment; do not add repository-scope fallbacks.
53
+ and assumes the derived stage role through the matching GitHub environment.
54
+ The reusable Verify caller delegates job-scoped \`id-token: write\`; each
55
+ credential-bearing job proves both the configured canonical ARN and terminal
56
+ STS assumed-role caller immediately before OCI or lifecycle mutation.
57
+
58
+ Run GitHub bootstrap in report mode first to obtain the repository's canonical
59
+ slug and immutable owner/repository IDs. It configures repository and environment
60
+ policy but never creates AWS credentials, secrets, or roles. For an existing
61
+ repository, keep its current OIDC subject active while you render and apply the
62
+ stage AWS trust for the reported immutable subject, then read back and simulate
63
+ that effective trust. Only after AWS accepts the immutable subject should you
64
+ rerun GitHub bootstrap with \`--apply\` and the exact
65
+ \`--immutableOidcTrustAcknowledgement=aws-trust-ready:<repositoryIdentity.subjectPrefix>\`
66
+ reported by the same inspection. A missing, wrong, or stale acknowledgement
67
+ blocks the subject cutover before any GitHub setting is changed.
68
+ This AWS-trust-first order prevents protected deployment from being stranded.
69
+ Place the exact account and Region in their protected stage environment.
70
+ Isolated production additionally keeps its exact staging promotion-pull role
71
+ secret; do not add repository-scope fallbacks.
57
72
  `,
58
73
  'docs/repository-operating-policy.md': `# Repository Operating Policy
59
74
 
@@ -91,7 +106,8 @@ and the exact TTY acknowledgement
91
106
  commit, a real TTY, and
92
107
  \`deploy:production:<account>:<region>:<source-commit>\`.
93
108
 
94
- GitHub deploys immutable commits through one environment-scoped OIDC role. The
109
+ GitHub deploys immutable commits through one canonical stage-scoped OIDC role
110
+ whose ARN is derived from committed policy. The
95
111
  starter workflow is optional; isolated profiles require GitHub for the stages
96
112
  declared by their profile. Direct user SST invocation is outside the supported
97
113
  paved road.
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-files-thin-docs.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-thin-docs.ts"],"names":[],"mappings":";;AAMA,4EA6NC;AAnOD,+DAI0C;AAE1C,SAAgB,gCAAgC,CAAC,OAGhD;IACC,MAAM,MAAM,GAAG,IAAA,iCAAsB,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,cAAc,GAAG,IAAA,mCAAwB,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3E,OAAO;QACL,WAAW,EAAE,KAAK,OAAO,CAAC,IAAI;;;;;;;kBAOhB,OAAO,CAAC,iBAAiB,yBAAyB,SAAS;;;;;CAK5E;QACG,sBAAsB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC3B;QACG,qCAAqC,EAAE;;;IAGvC,OAAO,CAAC,iBAAiB;EAC3B,SAAS;;;;;aAKE,OAAO,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DxB;QACG,+BAA+B,EAAE;;;;yBAIZ,OAAO,CAAC,iBAAiB;EAChD,SAAS;;;;;;;;;;eAUI,cAAc;;CAE5B;QACG,sCAAsC,EAAE;;;;;;;gBAO5B,OAAO,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;yCA0Ba,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CtD;KACE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"workspace-files-thin-docs.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-thin-docs.ts"],"names":[],"mappings":";;AAMA,4EA6OC;AAnPD,+DAI0C;AAE1C,SAAgB,gCAAgC,CAAC,OAGhD;IACC,MAAM,MAAM,GAAG,IAAA,iCAAsB,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,cAAc,GAAG,IAAA,mCAAwB,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3E,OAAO;QACL,WAAW,EAAE,KAAK,OAAO,CAAC,IAAI;;;;;;;kBAOhB,OAAO,CAAC,iBAAiB,yBAAyB,SAAS;;;;;CAK5E;QACG,sBAAsB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiD3B;QACG,qCAAqC,EAAE;;;IAGvC,OAAO,CAAC,iBAAiB;EAC3B,SAAS;;;;;aAKE,OAAO,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DxB;QACG,+BAA+B,EAAE;;;;yBAIZ,OAAO,CAAC,iBAAiB;EAChD,SAAS;;;;;;;;;;eAUI,cAAc;;CAE5B;QACG,sCAAsC,EAAE;;;;;;;gBAO5B,OAAO,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;yCA0Ba,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CtD;KACE,CAAC;AACJ,CAAC"}
@@ -6,6 +6,7 @@ export interface WorkspaceFileOptions {
6
6
  deploymentRegion?: string | null;
7
7
  frameworkVersion: string;
8
8
  name: string;
9
+ workspaceDeploymentId?: string;
9
10
  }
10
11
  export declare const BLUEPRINT_TRUST_AUTHORITY_PATH: "tools/blueprint-trust-check.mjs";
11
12
  export declare function isRawWorkspaceAuthorityPath(path: string): boolean;