diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.assets.json new file mode 100644 index 0000000000000..9e7065c2b0432 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "IntegDefaultTestDeployAssert4E6713E1.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/PipelineWithAllPrepareNodesFirstStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/PipelineWithAllPrepareNodesFirstStack.assets.json new file mode 100644 index 0000000000000..f06801e71e87e --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/PipelineWithAllPrepareNodesFirstStack.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "be9df4dcffefcb8e70c71f3bec3119eea791f1918059542aca090253d2272a19": { + "source": { + "path": "PipelineWithAllPrepareNodesFirstStack.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "be9df4dcffefcb8e70c71f3bec3119eea791f1918059542aca090253d2272a19.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/PipelineWithAllPrepareNodesFirstStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/PipelineWithAllPrepareNodesFirstStack.template.json new file mode 100644 index 0000000000000..c58d2137f8838 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/PipelineWithAllPrepareNodesFirstStack.template.json @@ -0,0 +1,1754 @@ +{ + "Resources": { + "PipelineArtifactsBucketAEA9A052": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "aws:kms" + } + } + ] + }, + "PublicAccessBlockConfiguration": { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "PipelineArtifactsBucketPolicyF53CCC52": { + "Type": "AWS::S3::BucketPolicy", + "Properties": { + "Bucket": { + "Ref": "PipelineArtifactsBucketAEA9A052" + }, + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Condition": { + "Bool": { + "aws:SecureTransport": "false" + } + }, + "Effect": "Deny", + "Principal": { + "AWS": "*" + }, + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineRoleB27FAA37": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codepipeline.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineRoleDefaultPolicy7BDC1ABB": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineCodeBuildActionRole226DB0CB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "PipelineRoleDefaultPolicy7BDC1ABB", + "Roles": [ + { + "Ref": "PipelineRoleB27FAA37" + } + ] + } + }, + "Pipeline9850B417": { + "Type": "AWS::CodePipeline::Pipeline", + "Properties": { + "RoleArn": { + "Fn::GetAtt": [ + "PipelineRoleB27FAA37", + "Arn" + ] + }, + "Stages": [ + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Source", + "Owner": "ThirdParty", + "Provider": "GitHub", + "Version": "1" + }, + "Configuration": { + "Owner": "Nico-DB", + "Repo": "aws-cdk", + "Branch": "main", + "OAuthToken": "{{resolve:secretsmanager:github-token:SecretString:::}}", + "PollForSourceChanges": false + }, + "Name": "Nico-DB_aws-cdk", + "OutputArtifacts": [ + { + "Name": "Nico_DB_aws_cdk_Source" + } + ], + "RunOrder": 1 + } + ], + "Name": "Source" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Build", + "Owner": "AWS", + "Provider": "CodeBuild", + "Version": "1" + }, + "Configuration": { + "ProjectName": { + "Ref": "PipelineBuildSynthCdkBuildProject6BEFA8E6" + }, + "EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"09deb76d97fe89f2ccd364ad1eedc7ebc7c010be6bf79da68c34f358446cd134\"}]" + }, + "InputArtifacts": [ + { + "Name": "Nico_DB_aws_cdk_Source" + } + ], + "Name": "Synth", + "OutputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "RoleArn": { + "Fn::GetAtt": [ + "PipelineCodeBuildActionRole226DB0CB", + "Arn" + ] + }, + "RunOrder": 1 + } + ], + "Name": "Build" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Build", + "Owner": "AWS", + "Provider": "CodeBuild", + "Version": "1" + }, + "Configuration": { + "ProjectName": { + "Ref": "PipelineUpdatePipelineSelfMutationDAA41400" + }, + "EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"7d1ff87f89f43d74cb5c6007476960a738ebca1a257e02a4e24dbc7ac33d3f97\"}]" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "SelfMutate", + "RoleArn": { + "Fn::GetAtt": [ + "PipelineCodeBuildActionRole226DB0CB", + "Arn" + ] + }, + "RunOrder": 1 + } + ], + "Name": "UpdatePipeline" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Beta-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prepare-Beta-Stack1", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Beta-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prepare-Beta-Stack2", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Beta-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Stack1.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 2 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Beta-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Stack2.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 3 + } + ], + "Name": "Beta" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod1-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod1.Prepare-Prod1-Stack1", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod1-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod1.Prepare-Prod1-Stack2", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod2-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod2.Prepare-Prod2-Stack1", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod2-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod2.Prepare-Prod2-Stack2", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod1-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod1.Stack1.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 2 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod2-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod2.Stack1.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 2 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod1-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod1.Stack2.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 3 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod2-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod2.Stack2.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 3 + } + ], + "Name": "Wave1" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod3-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod3.Prepare-Prod3-Stack1", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod4-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod4.Prepare-Prod4-Stack2", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod3-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod3.Stack1.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 2 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod4-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod4.Stack2.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 2 + } + ], + "Name": "Wave2" + } + ], + "ArtifactStore": { + "Location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + }, + "Type": "S3" + }, + "RestartExecutionOnUpdate": true + }, + "DependsOn": [ + "PipelineRoleDefaultPolicy7BDC1ABB", + "PipelineRoleB27FAA37" + ] + }, + "PipelineSourceNicoDBawscdkWebhookResource5DAA82C4": { + "Type": "AWS::CodePipeline::Webhook", + "Properties": { + "Authentication": "GITHUB_HMAC", + "AuthenticationConfiguration": { + "SecretToken": "{{resolve:secretsmanager:github-token:SecretString:::}}" + }, + "Filters": [ + { + "JsonPath": "$.ref", + "MatchEquals": "refs/heads/{Branch}" + } + ], + "TargetAction": "Nico-DB_aws-cdk", + "TargetPipeline": { + "Ref": "Pipeline9850B417" + }, + "TargetPipelineVersion": 1, + "RegisterWithThirdParty": true + } + }, + "PipelineBuildSynthCdkBuildProjectRole231EEA2A": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineBuildSynthCdkBuildProjectRoleDefaultPolicyFB6C941C": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineBuildSynthCdkBuildProject6BEFA8E6" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineBuildSynthCdkBuildProject6BEFA8E6" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "PipelineBuildSynthCdkBuildProject6BEFA8E6" + }, + "-*" + ] + ] + } + }, + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "PipelineBuildSynthCdkBuildProjectRoleDefaultPolicyFB6C941C", + "Roles": [ + { + "Ref": "PipelineBuildSynthCdkBuildProjectRole231EEA2A" + } + ] + } + }, + "PipelineBuildSynthCdkBuildProject6BEFA8E6": { + "Type": "AWS::CodeBuild::Project", + "Properties": { + "Artifacts": { + "Type": "CODEPIPELINE" + }, + "Environment": { + "ComputeType": "BUILD_GENERAL1_SMALL", + "Image": "aws/codebuild/standard:6.0", + "ImagePullCredentialsType": "CODEBUILD", + "PrivilegedMode": false, + "Type": "LINUX_CONTAINER" + }, + "ServiceRole": { + "Fn::GetAtt": [ + "PipelineBuildSynthCdkBuildProjectRole231EEA2A", + "Arn" + ] + }, + "Source": { + "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}", + "Type": "CODEPIPELINE" + }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineWithAllPrepareNodesFirstStack/Pipeline/Build/Synth", + "EncryptionKey": "alias/aws/s3" + } + }, + "PipelineCodeBuildActionRole226DB0CB": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Condition": { + "Bool": { + "aws:ViaAWSService": "codepipeline.amazonaws.com" + } + }, + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineCodeBuildActionRoleDefaultPolicy1D62A6FE": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "codebuild:BatchGetBuilds", + "codebuild:StartBuild", + "codebuild:StopBuild" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineBuildSynthCdkBuildProject6BEFA8E6", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineUpdatePipelineSelfMutationDAA41400", + "Arn" + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "PipelineCodeBuildActionRoleDefaultPolicy1D62A6FE", + "Roles": [ + { + "Ref": "PipelineCodeBuildActionRole226DB0CB" + } + ] + } + }, + "PipelineUpdatePipelineSelfMutationRole57E559E8": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineUpdatePipelineSelfMutationRoleDefaultPolicyA225DA4E": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineUpdatePipelineSelfMutationDAA41400" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineUpdatePipelineSelfMutationDAA41400" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "PipelineUpdatePipelineSelfMutationDAA41400" + }, + "-*" + ] + ] + } + }, + { + "Action": "sts:AssumeRole", + "Condition": { + "ForAnyValue:StringEquals": { + "iam:ResourceTag/aws-cdk:bootstrap-role": [ + "image-publishing", + "file-publishing", + "deploy" + ] + } + }, + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:*:iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/*" + ] + ] + } + }, + { + "Action": [ + "cloudformation:DescribeStacks", + "s3:ListBucket" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "PipelineUpdatePipelineSelfMutationRoleDefaultPolicyA225DA4E", + "Roles": [ + { + "Ref": "PipelineUpdatePipelineSelfMutationRole57E559E8" + } + ] + } + }, + "PipelineUpdatePipelineSelfMutationDAA41400": { + "Type": "AWS::CodeBuild::Project", + "Properties": { + "Artifacts": { + "Type": "CODEPIPELINE" + }, + "Environment": { + "ComputeType": "BUILD_GENERAL1_SMALL", + "Image": "aws/codebuild/standard:6.0", + "ImagePullCredentialsType": "CODEBUILD", + "PrivilegedMode": false, + "Type": "LINUX_CONTAINER" + }, + "ServiceRole": { + "Fn::GetAtt": [ + "PipelineUpdatePipelineSelfMutationRole57E559E8", + "Arn" + ] + }, + "Source": { + "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineWithAllPrepareNodesFirstStack --require-approval=never --verbose\"\n ]\n }\n }\n}", + "Type": "CODEPIPELINE" + }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutate", + "EncryptionKey": "alias/aws/s3" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/PipelineWithAllPrepareNodesFirstStackPipeline7347DBA1.dot b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/PipelineWithAllPrepareNodesFirstStackPipeline7347DBA1.dot new file mode 100644 index 0000000000000..f93b066a21db3 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/PipelineWithAllPrepareNodesFirstStackPipeline7347DBA1.dot @@ -0,0 +1,139 @@ +digraph G { + # Arrows represent an "unlocks" relationship (opposite of dependency). So chosen + # because the layout looks more natural that way. + # To represent subgraph dependencies, subgraphs are represented by BEGIN/END nodes. + # To render: `dot -Tsvg PipelineWithAllPrepareNodesFirstStackPipeline7347DBA1.dot > graph.svg`, open in a browser. + node [shape="box"]; +"BEGIN Build" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Build" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Build.Synth"; +"Source.Nico-DB/aws-cdk" -> "Build.Synth"; +"BEGIN Build" -> "Build.Synth"; +"Build.Synth" -> "END Build"; +"BEGIN UpdatePipeline" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END UpdatePipeline" [shape="cds", style="filled", fillcolor="#b7deff"]; +"UpdatePipeline.SelfMutate"; +"Build.Synth" -> "UpdatePipeline.SelfMutate"; +"BEGIN UpdatePipeline" -> "UpdatePipeline.SelfMutate"; +"UpdatePipeline.SelfMutate" -> "END UpdatePipeline"; +"BEGIN Beta" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Beta" [shape="cds", style="filled", fillcolor="#b7deff"]; +"UpdatePipeline.SelfMutate" -> "BEGIN Beta"; +"BEGIN Beta.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Beta.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Beta.Stack1.Deploy"; +"Beta.Prepare-Beta-Stack1" -> "Beta.Stack1.Deploy"; +"Beta.Prepare-Beta-Stack1" -> "Beta.Stack1.Deploy"; +"BEGIN Beta.Stack1" -> "Beta.Stack1.Deploy"; +"Beta.Stack1.Deploy" -> "END Beta.Stack1"; +"Beta.Prepare-Beta-Stack1"; +"Build.Synth" -> "Beta.Prepare-Beta-Stack1"; +"BEGIN Beta.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Beta.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Beta.Stack1" -> "BEGIN Beta.Stack2"; +"Beta.Stack2.Deploy"; +"Beta.Prepare-Beta-Stack2" -> "Beta.Stack2.Deploy"; +"Beta.Prepare-Beta-Stack2" -> "Beta.Stack2.Deploy"; +"BEGIN Beta.Stack2" -> "Beta.Stack2.Deploy"; +"Beta.Stack2.Deploy" -> "END Beta.Stack2"; +"Beta.Prepare-Beta-Stack2"; +"Build.Synth" -> "Beta.Prepare-Beta-Stack2"; +"BEGIN Beta" -> "Beta.Prepare-Beta-Stack1"; +"BEGIN Beta" -> "Beta.Prepare-Beta-Stack2"; +"END Beta.Stack2" -> "END Beta"; +"BEGIN Wave1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"UpdatePipeline.SelfMutate" -> "BEGIN Wave1"; +"END Beta" -> "BEGIN Wave1"; +"BEGIN Wave1.Prod1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"BEGIN Wave1.Prod1.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod1.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Prepare-Prod1-Stack1" -> "Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Prepare-Prod1-Stack1" -> "Wave1.Prod1.Stack1.Deploy"; +"BEGIN Wave1.Prod1.Stack1" -> "Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Stack1.Deploy" -> "END Wave1.Prod1.Stack1"; +"Wave1.Prod1.Prepare-Prod1-Stack1"; +"Build.Synth" -> "Wave1.Prod1.Prepare-Prod1-Stack1"; +"BEGIN Wave1.Prod1.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod1.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod1.Stack1" -> "BEGIN Wave1.Prod1.Stack2"; +"Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Prepare-Prod1-Stack2" -> "Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Prepare-Prod1-Stack2" -> "Wave1.Prod1.Stack2.Deploy"; +"BEGIN Wave1.Prod1.Stack2" -> "Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Stack2.Deploy" -> "END Wave1.Prod1.Stack2"; +"Wave1.Prod1.Prepare-Prod1-Stack2"; +"Build.Synth" -> "Wave1.Prod1.Prepare-Prod1-Stack2"; +"BEGIN Wave1.Prod1" -> "Wave1.Prod1.Prepare-Prod1-Stack1"; +"BEGIN Wave1.Prod1" -> "Wave1.Prod1.Prepare-Prod1-Stack2"; +"END Wave1.Prod1.Stack2" -> "END Wave1.Prod1"; +"BEGIN Wave1.Prod2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"BEGIN Wave1.Prod2.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod2.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod2.Prepare-Prod2-Stack1" -> "Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod2.Prepare-Prod2-Stack1" -> "Wave1.Prod2.Stack1.Deploy"; +"BEGIN Wave1.Prod2.Stack1" -> "Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod2.Stack1.Deploy" -> "END Wave1.Prod2.Stack1"; +"Wave1.Prod2.Prepare-Prod2-Stack1"; +"Build.Synth" -> "Wave1.Prod2.Prepare-Prod2-Stack1"; +"BEGIN Wave1.Prod2.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod2.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod2.Stack1" -> "BEGIN Wave1.Prod2.Stack2"; +"Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod2.Prepare-Prod2-Stack2" -> "Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod2.Prepare-Prod2-Stack2" -> "Wave1.Prod2.Stack2.Deploy"; +"BEGIN Wave1.Prod2.Stack2" -> "Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod2.Stack2.Deploy" -> "END Wave1.Prod2.Stack2"; +"Wave1.Prod2.Prepare-Prod2-Stack2"; +"Build.Synth" -> "Wave1.Prod2.Prepare-Prod2-Stack2"; +"BEGIN Wave1.Prod2" -> "Wave1.Prod2.Prepare-Prod2-Stack1"; +"BEGIN Wave1.Prod2" -> "Wave1.Prod2.Prepare-Prod2-Stack2"; +"END Wave1.Prod2.Stack2" -> "END Wave1.Prod2"; +"BEGIN Wave1" -> "BEGIN Wave1.Prod1"; +"BEGIN Wave1" -> "BEGIN Wave1.Prod2"; +"END Wave1.Prod1" -> "END Wave1"; +"END Wave1.Prod2" -> "END Wave1"; +"BEGIN Wave2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"UpdatePipeline.SelfMutate" -> "BEGIN Wave2"; +"END Wave1" -> "BEGIN Wave2"; +"BEGIN Wave2.Prod3" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2.Prod3" [shape="cds", style="filled", fillcolor="#b7deff"]; +"BEGIN Wave2.Prod3.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2.Prod3.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Prepare-Prod3-Stack1" -> "Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Prepare-Prod3-Stack1" -> "Wave2.Prod3.Stack1.Deploy"; +"BEGIN Wave2.Prod3.Stack1" -> "Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Stack1.Deploy" -> "END Wave2.Prod3.Stack1"; +"Wave2.Prod3.Prepare-Prod3-Stack1"; +"Build.Synth" -> "Wave2.Prod3.Prepare-Prod3-Stack1"; +"BEGIN Wave2.Prod3" -> "Wave2.Prod3.Prepare-Prod3-Stack1"; +"END Wave2.Prod3.Stack1" -> "END Wave2.Prod3"; +"BEGIN Wave2.Prod4" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2.Prod4" [shape="cds", style="filled", fillcolor="#b7deff"]; +"BEGIN Wave2.Prod4.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2.Prod4.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod4.Prepare-Prod4-Stack2" -> "Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod4.Prepare-Prod4-Stack2" -> "Wave2.Prod4.Stack2.Deploy"; +"BEGIN Wave2.Prod4.Stack2" -> "Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod4.Stack2.Deploy" -> "END Wave2.Prod4.Stack2"; +"Wave2.Prod4.Prepare-Prod4-Stack2"; +"Build.Synth" -> "Wave2.Prod4.Prepare-Prod4-Stack2"; +"BEGIN Wave2.Prod4" -> "Wave2.Prod4.Prepare-Prod4-Stack2"; +"END Wave2.Prod4.Stack2" -> "END Wave2.Prod4"; +"BEGIN Wave2" -> "BEGIN Wave2.Prod3"; +"BEGIN Wave2" -> "BEGIN Wave2.Prod4"; +"END Wave2.Prod3" -> "END Wave2"; +"END Wave2.Prod4" -> "END Wave2"; +"BEGIN Source" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Source" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Source.Nico-DB/aws-cdk"; +"BEGIN Source" -> "Source.Nico-DB/aws-cdk"; +"Source.Nico-DB/aws-cdk" -> "END Source"; +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.assets.json new file mode 100644 index 0000000000000..d2bed4279bf1a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "91031b26c04588c38a59e3481d308182b5244c5f5a3af3ee05566e2f4f70ce65": { + "source": { + "path": "PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "91031b26c04588c38a59e3481d308182b5244c5f5a3af3ee05566e2f4f70ce65.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.template.json new file mode 100644 index 0000000000000..c1339d0126ee2 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.template.json @@ -0,0 +1,56 @@ +{ + "Resources": { + "Queue4A7E3555": { + "Type": "AWS::SQS::Queue", + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Outputs": { + "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E": { + "Value": { + "Fn::GetAtt": [ + "Queue4A7E3555", + "Arn" + ] + }, + "Export": { + "Name": "Beta-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.assets.json new file mode 100644 index 0000000000000..8781293a6ca72 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "e3aa38ca82b00b776ad3834e9ee862d2e529d91c0f0b12fad846884e1e600326": { + "source": { + "path": "PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "e3aa38ca82b00b776ad3834e9ee862d2e529d91c0f0b12fad846884e1e600326.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.template.json new file mode 100644 index 0000000000000..f7390e702aa6d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.template.json @@ -0,0 +1,51 @@ +{ + "Resources": { + "OtherQueue60B686DC": { + "Type": "AWS::SQS::Queue", + "Properties": { + "RedrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Beta-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/manifest.json new file mode 100644 index 0000000000000..f8864281575dc --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Beta/manifest.json @@ -0,0 +1,120 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/91031b26c04588c38a59e3481d308182b5244c5f5a3af3ee05566e2f4f70ce65.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Beta-Stack1" + }, + "dependencies": [ + "PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.assets" + ], + "metadata": { + "/PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/Queue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Queue4A7E3555" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack1" + }, + "PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/e3aa38ca82b00b776ad3834e9ee862d2e529d91c0f0b12fad846884e1e600326.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Beta-Stack2" + }, + "dependencies": [ + "PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75", + "PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.assets" + ], + "metadata": { + "/PipelineWithAllPrepareNodesFirstStack/Beta/Stack2/OtherQueue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OtherQueue60B686DC" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Beta/Stack2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Beta/Stack2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack2" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.assets.json new file mode 100644 index 0000000000000..2ccf5e430e674 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "774f0c3cec814003a4da7d6cab73aec82952a0cb52a221b3f94fae483d9922a3": { + "source": { + "path": "PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "774f0c3cec814003a4da7d6cab73aec82952a0cb52a221b3f94fae483d9922a3.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.template.json new file mode 100644 index 0000000000000..b46a5cc4fbb7d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.template.json @@ -0,0 +1,56 @@ +{ + "Resources": { + "Queue4A7E3555": { + "Type": "AWS::SQS::Queue", + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Outputs": { + "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E": { + "Value": { + "Fn::GetAtt": [ + "Queue4A7E3555", + "Arn" + ] + }, + "Export": { + "Name": "Prod1-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.assets.json new file mode 100644 index 0000000000000..b08445bac3b62 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "c1cb4eebe68ea920a89e618efa29c36ecc1aa0c6f6ef6b65559efe9c0bba4059": { + "source": { + "path": "PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "c1cb4eebe68ea920a89e618efa29c36ecc1aa0c6f6ef6b65559efe9c0bba4059.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.template.json new file mode 100644 index 0000000000000..fcabd32211080 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.template.json @@ -0,0 +1,51 @@ +{ + "Resources": { + "OtherQueue60B686DC": { + "Type": "AWS::SQS::Queue", + "Properties": { + "RedrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Prod1-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/manifest.json new file mode 100644 index 0000000000000..221fc8d3b63ed --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/manifest.json @@ -0,0 +1,120 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/774f0c3cec814003a4da7d6cab73aec82952a0cb52a221b3f94fae483d9922a3.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod1-Stack1" + }, + "dependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.assets" + ], + "metadata": { + "/PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/Queue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Queue4A7E3555" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1" + }, + "PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/c1cb4eebe68ea920a89e618efa29c36ecc1aa0c6f6ef6b65559efe9c0bba4059.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod1-Stack2" + }, + "dependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4", + "PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.assets" + ], + "metadata": { + "/PipelineWithAllPrepareNodesFirstStack/Prod1/Stack2/OtherQueue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OtherQueue60B686DC" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod1/Stack2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod1/Stack2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack2" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.assets.json new file mode 100644 index 0000000000000..fb367a2b44c31 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "a595899a57366f015e986ac46c3da09fac75670ea0f4719de8defc67d731fa68": { + "source": { + "path": "PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "a595899a57366f015e986ac46c3da09fac75670ea0f4719de8defc67d731fa68.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.template.json new file mode 100644 index 0000000000000..302ccbd07207e --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.template.json @@ -0,0 +1,56 @@ +{ + "Resources": { + "Queue4A7E3555": { + "Type": "AWS::SQS::Queue", + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Outputs": { + "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E": { + "Value": { + "Fn::GetAtt": [ + "Queue4A7E3555", + "Arn" + ] + }, + "Export": { + "Name": "Prod2-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.assets.json new file mode 100644 index 0000000000000..f764f0f8415ac --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "364ee9a72c6c371a00c6e41438695af070848a2d625a4c953bfc4666e7ad5ae9": { + "source": { + "path": "PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "364ee9a72c6c371a00c6e41438695af070848a2d625a4c953bfc4666e7ad5ae9.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.template.json new file mode 100644 index 0000000000000..933decc98d696 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.template.json @@ -0,0 +1,51 @@ +{ + "Resources": { + "OtherQueue60B686DC": { + "Type": "AWS::SQS::Queue", + "Properties": { + "RedrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Prod2-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/manifest.json new file mode 100644 index 0000000000000..f10bde05fbe9e --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/manifest.json @@ -0,0 +1,120 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/a595899a57366f015e986ac46c3da09fac75670ea0f4719de8defc67d731fa68.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod2-Stack1" + }, + "dependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.assets" + ], + "metadata": { + "/PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/Queue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Queue4A7E3555" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1" + }, + "PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/364ee9a72c6c371a00c6e41438695af070848a2d625a4c953bfc4666e7ad5ae9.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod2-Stack2" + }, + "dependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E", + "PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.assets" + ], + "metadata": { + "/PipelineWithAllPrepareNodesFirstStack/Prod2/Stack2/OtherQueue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OtherQueue60B686DC" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod2/Stack2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod2/Stack2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack2" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.assets.json new file mode 100644 index 0000000000000..302b51e0ed7a9 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/manifest.json new file mode 100644 index 0000000000000..f2381af1776ec --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/manifest.json @@ -0,0 +1,53 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod3-Stack1" + }, + "dependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.assets" + ], + "metadata": { + "/PipelineWithAllPrepareNodesFirstStack/Prod3/Stack1/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod3/Stack1/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod3/Stack1" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.assets.json new file mode 100644 index 0000000000000..18db4455e1b4e --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/manifest.json new file mode 100644 index 0000000000000..b1a98e27ad3cd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/manifest.json @@ -0,0 +1,53 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod4-Stack2" + }, + "dependencies": [ + "PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.assets" + ], + "metadata": { + "/PipelineWithAllPrepareNodesFirstStack/Prod4/Stack2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Prod4/Stack2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod4/Stack2" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/integ.json new file mode 100644 index 0000000000000..e521b8f2d47cd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "31.0.0", + "testCases": { + "Integ/DefaultTest": { + "stacks": [ + "PipelineWithAllPrepareNodesFirstStack" + ], + "assertionStack": "Integ/DefaultTest/DeployAssert", + "assertionStackName": "IntegDefaultTestDeployAssert4E6713E1" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/manifest.json new file mode 100644 index 0000000000000..747d15570c922 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/manifest.json @@ -0,0 +1,224 @@ +{ + "version": "31.0.0", + "artifacts": { + "assembly-PipelineWithAllPrepareNodesFirstStack-Beta": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithAllPrepareNodesFirstStack-Beta", + "displayName": "PipelineWithAllPrepareNodesFirstStack/Beta" + } + }, + "assembly-PipelineWithAllPrepareNodesFirstStack-Prod1": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithAllPrepareNodesFirstStack-Prod1", + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod1" + } + }, + "assembly-PipelineWithAllPrepareNodesFirstStack-Prod2": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithAllPrepareNodesFirstStack-Prod2", + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod2" + } + }, + "assembly-PipelineWithAllPrepareNodesFirstStack-Prod3": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithAllPrepareNodesFirstStack-Prod3", + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod3" + } + }, + "assembly-PipelineWithAllPrepareNodesFirstStack-Prod4": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithAllPrepareNodesFirstStack-Prod4", + "displayName": "PipelineWithAllPrepareNodesFirstStack/Prod4" + } + }, + "PipelineWithAllPrepareNodesFirstStack.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithAllPrepareNodesFirstStack.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithAllPrepareNodesFirstStack": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithAllPrepareNodesFirstStack.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/be9df4dcffefcb8e70c71f3bec3119eea791f1918059542aca090253d2272a19.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithAllPrepareNodesFirstStack.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "PipelineWithAllPrepareNodesFirstStack.assets" + ], + "metadata": { + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/ArtifactsBucket/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineArtifactsBucketAEA9A052" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/ArtifactsBucket/Policy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineArtifactsBucketPolicyF53CCC52" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineRoleB27FAA37" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Role/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineRoleDefaultPolicy7BDC1ABB" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Pipeline9850B417" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Source/Nico-DB_aws-cdk/WebhookResource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineSourceNicoDBawscdkWebhookResource5DAA82C4" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineBuildSynthCdkBuildProjectRole231EEA2A" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Role/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineBuildSynthCdkBuildProjectRoleDefaultPolicyFB6C941C" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineBuildSynthCdkBuildProject6BEFA8E6" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/CodeBuildActionRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineCodeBuildActionRole226DB0CB" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/CodeBuildActionRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineCodeBuildActionRoleDefaultPolicy1D62A6FE" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineUpdatePipelineSelfMutationRole57E559E8" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation/Role/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineUpdatePipelineSelfMutationRoleDefaultPolicyA225DA4E" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineUpdatePipelineSelfMutationDAA41400" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithAllPrepareNodesFirstStack/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithAllPrepareNodesFirstStack" + }, + "IntegDefaultTestDeployAssert4E6713E1.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "IntegDefaultTestDeployAssert4E6713E1.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "IntegDefaultTestDeployAssert4E6713E1": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "IntegDefaultTestDeployAssert4E6713E1.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "IntegDefaultTestDeployAssert4E6713E1.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "IntegDefaultTestDeployAssert4E6713E1.assets" + ], + "metadata": { + "/Integ/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "Integ/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/tree.json new file mode 100644 index 0000000000000..b3031c0df919d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.js.snapshot/tree.json @@ -0,0 +1,2828 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "PipelineWithAllPrepareNodesFirstStack": { + "id": "PipelineWithAllPrepareNodesFirstStack", + "path": "PipelineWithAllPrepareNodesFirstStack", + "children": { + "Pipeline": { + "id": "Pipeline", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline", + "children": { + "Pipeline": { + "id": "Pipeline", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline", + "children": { + "ArtifactsBucket": { + "id": "ArtifactsBucket", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/ArtifactsBucket", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/ArtifactsBucket/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::Bucket", + "aws:cdk:cloudformation:props": { + "bucketEncryption": { + "serverSideEncryptionConfiguration": [ + { + "serverSideEncryptionByDefault": { + "sseAlgorithm": "aws:kms" + } + } + ] + }, + "publicAccessBlockConfiguration": { + "blockPublicAcls": true, + "blockPublicPolicy": true, + "ignorePublicAcls": true, + "restrictPublicBuckets": true + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.CfnBucket", + "version": "0.0.0" + } + }, + "Policy": { + "id": "Policy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/ArtifactsBucket/Policy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/ArtifactsBucket/Policy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::BucketPolicy", + "aws:cdk:cloudformation:props": { + "bucket": { + "Ref": "PipelineArtifactsBucketAEA9A052" + }, + "policyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Condition": { + "Bool": { + "aws:SecureTransport": "false" + } + }, + "Effect": "Deny", + "Principal": { + "AWS": "*" + }, + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.CfnBucketPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.BucketPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.Bucket", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codepipeline.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Role/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Role/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineCodeBuildActionRole226DB0CB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "PipelineRoleDefaultPolicy7BDC1ABB", + "roles": [ + { + "Ref": "PipelineRoleB27FAA37" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodePipeline::Pipeline", + "aws:cdk:cloudformation:props": { + "roleArn": { + "Fn::GetAtt": [ + "PipelineRoleB27FAA37", + "Arn" + ] + }, + "stages": [ + { + "name": "Source", + "actions": [ + { + "name": "Nico-DB_aws-cdk", + "outputArtifacts": [ + { + "name": "Nico_DB_aws_cdk_Source" + } + ], + "actionTypeId": { + "category": "Source", + "version": "1", + "owner": "ThirdParty", + "provider": "GitHub" + }, + "configuration": { + "Owner": "Nico-DB", + "Repo": "aws-cdk", + "Branch": "main", + "OAuthToken": "{{resolve:secretsmanager:github-token:SecretString:::}}", + "PollForSourceChanges": false + }, + "runOrder": 1 + } + ] + }, + { + "name": "Build", + "actions": [ + { + "name": "Synth", + "inputArtifacts": [ + { + "name": "Nico_DB_aws_cdk_Source" + } + ], + "outputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Build", + "version": "1", + "owner": "AWS", + "provider": "CodeBuild" + }, + "configuration": { + "ProjectName": { + "Ref": "PipelineBuildSynthCdkBuildProject6BEFA8E6" + }, + "EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"09deb76d97fe89f2ccd364ad1eedc7ebc7c010be6bf79da68c34f358446cd134\"}]" + }, + "runOrder": 1, + "roleArn": { + "Fn::GetAtt": [ + "PipelineCodeBuildActionRole226DB0CB", + "Arn" + ] + } + } + ] + }, + { + "name": "UpdatePipeline", + "actions": [ + { + "name": "SelfMutate", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Build", + "version": "1", + "owner": "AWS", + "provider": "CodeBuild" + }, + "configuration": { + "ProjectName": { + "Ref": "PipelineUpdatePipelineSelfMutationDAA41400" + }, + "EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"7d1ff87f89f43d74cb5c6007476960a738ebca1a257e02a4e24dbc7ac33d3f97\"}]" + }, + "runOrder": 1, + "roleArn": { + "Fn::GetAtt": [ + "PipelineCodeBuildActionRole226DB0CB", + "Arn" + ] + } + } + ] + }, + { + "name": "Beta", + "actions": [ + { + "name": "Prepare-Beta-Stack1", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Beta-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack10B353F75.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prepare-Beta-Stack2", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Beta-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Beta/PipelineWithAllPrepareNodesFirstStackBetaStack29591E1BE.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Stack1.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Beta-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 2, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Stack2.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Beta-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 3, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + } + ] + }, + { + "name": "Wave1", + "actions": [ + { + "name": "Prod1.Prepare-Prod1-Stack1", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod1-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack100E227D4.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod1.Prepare-Prod1-Stack2", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod1-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod1/PipelineWithAllPrepareNodesFirstStackProd1Stack25EFAE655.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod2.Prepare-Prod2-Stack1", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod2-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack1C128D28E.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod2.Prepare-Prod2-Stack2", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod2-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod2/PipelineWithAllPrepareNodesFirstStackProd2Stack2D0D755B0.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod1.Stack1.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod1-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 2, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod2.Stack1.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod2-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 2, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod1.Stack2.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod1-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 3, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod2.Stack2.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod2-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 3, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + } + ] + }, + { + "name": "Wave2", + "actions": [ + { + "name": "Prod3.Prepare-Prod3-Stack1", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod3-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod3/PipelineWithAllPrepareNodesFirstStackProd3Stack195649ECA.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod4.Prepare-Prod4-Stack2", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod4-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithAllPrepareNodesFirstStack-Prod4/PipelineWithAllPrepareNodesFirstStackProd4Stack2CBC2D372.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod3.Stack1.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod3-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 2, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod4.Stack2.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod4-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 2, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + } + ] + } + ], + "artifactStore": { + "type": "S3", + "location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + } + }, + "restartExecutionOnUpdate": true + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codepipeline.CfnPipeline", + "version": "0.0.0" + } + }, + "Source": { + "id": "Source", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Source", + "children": { + "Nico-DB_aws-cdk": { + "id": "Nico-DB_aws-cdk", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Source/Nico-DB_aws-cdk", + "children": { + "WebhookResource": { + "id": "WebhookResource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Source/Nico-DB_aws-cdk/WebhookResource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodePipeline::Webhook", + "aws:cdk:cloudformation:props": { + "authentication": "GITHUB_HMAC", + "authenticationConfiguration": { + "secretToken": "{{resolve:secretsmanager:github-token:SecretString:::}}" + }, + "filters": [ + { + "jsonPath": "$.ref", + "matchEquals": "refs/heads/{Branch}" + } + ], + "targetAction": "Nico-DB_aws-cdk", + "targetPipeline": { + "Ref": "Pipeline9850B417" + }, + "targetPipelineVersion": 1, + "registerWithThirdParty": true + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codepipeline.CfnWebhook", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Build": { + "id": "Build", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build", + "children": { + "Synth": { + "id": "Synth", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth", + "children": { + "CdkBuildProject": { + "id": "CdkBuildProject", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject", + "children": { + "Role": { + "id": "Role", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Role/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Role/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineBuildSynthCdkBuildProject6BEFA8E6" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineBuildSynthCdkBuildProject6BEFA8E6" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "PipelineBuildSynthCdkBuildProject6BEFA8E6" + }, + "-*" + ] + ] + } + }, + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "PipelineBuildSynthCdkBuildProjectRoleDefaultPolicyFB6C941C", + "roles": [ + { + "Ref": "PipelineBuildSynthCdkBuildProjectRole231EEA2A" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodeBuild::Project", + "aws:cdk:cloudformation:props": { + "artifacts": { + "type": "CODEPIPELINE" + }, + "environment": { + "type": "LINUX_CONTAINER", + "image": "aws/codebuild/standard:6.0", + "imagePullCredentialsType": "CODEBUILD", + "privilegedMode": false, + "computeType": "BUILD_GENERAL1_SMALL" + }, + "serviceRole": { + "Fn::GetAtt": [ + "PipelineBuildSynthCdkBuildProjectRole231EEA2A", + "Arn" + ] + }, + "source": { + "type": "CODEPIPELINE", + "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}" + }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineWithAllPrepareNodesFirstStack/Pipeline/Build/Synth", + "encryptionKey": "alias/aws/s3" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.CfnProject", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.PipelineProject", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "UpdatePipeline": { + "id": "UpdatePipeline", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/UpdatePipeline", + "children": { + "SelfMutate": { + "id": "SelfMutate", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/UpdatePipeline/SelfMutate", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Beta": { + "id": "Beta", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Beta", + "children": { + "Prepare-Beta-Stack1": { + "id": "Prepare-Beta-Stack1", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Beta/Prepare-Beta-Stack1", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prepare-Beta-Stack2": { + "id": "Prepare-Beta-Stack2", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Beta/Prepare-Beta-Stack2", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Stack1.Deploy": { + "id": "Stack1.Deploy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Beta/Stack1.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Stack2.Deploy": { + "id": "Stack2.Deploy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Beta/Stack2.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { + "id": "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { + "id": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "children": { + "8389e75f-0810-4838-bf64-d6f85a95cf83": { + "id": "8389e75f-0810-4838-bf64-d6f85a95cf83", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}/8389e75f-0810-4838-bf64-d6f85a95cf83", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}": { + "id": "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}": { + "id": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Wave1": { + "id": "Wave1", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave1", + "children": { + "Prod1.Prepare-Prod1-Stack1": { + "id": "Prod1.Prepare-Prod1-Stack1", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave1/Prod1.Prepare-Prod1-Stack1", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod1.Prepare-Prod1-Stack2": { + "id": "Prod1.Prepare-Prod1-Stack2", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave1/Prod1.Prepare-Prod1-Stack2", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod2.Prepare-Prod2-Stack1": { + "id": "Prod2.Prepare-Prod2-Stack1", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave1/Prod2.Prepare-Prod2-Stack1", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod2.Prepare-Prod2-Stack2": { + "id": "Prod2.Prepare-Prod2-Stack2", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave1/Prod2.Prepare-Prod2-Stack2", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod1.Stack1.Deploy": { + "id": "Prod1.Stack1.Deploy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod2.Stack1.Deploy": { + "id": "Prod2.Stack1.Deploy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod1.Stack2.Deploy": { + "id": "Prod1.Stack2.Deploy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod2.Stack2.Deploy": { + "id": "Prod2.Stack2.Deploy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Wave2": { + "id": "Wave2", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave2", + "children": { + "Prod3.Prepare-Prod3-Stack1": { + "id": "Prod3.Prepare-Prod3-Stack1", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave2/Prod3.Prepare-Prod3-Stack1", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod4.Prepare-Prod4-Stack2": { + "id": "Prod4.Prepare-Prod4-Stack2", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave2/Prod4.Prepare-Prod4-Stack2", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod3.Stack1.Deploy": { + "id": "Prod3.Stack1.Deploy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod4.Stack2.Deploy": { + "id": "Prod4.Stack2.Deploy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codepipeline.Pipeline", + "version": "0.0.0" + } + }, + "CodeBuildActionRole": { + "id": "CodeBuildActionRole", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/CodeBuildActionRole", + "children": { + "ImportCodeBuildActionRole": { + "id": "ImportCodeBuildActionRole", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/CodeBuildActionRole/ImportCodeBuildActionRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/CodeBuildActionRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Condition": { + "Bool": { + "aws:ViaAWSService": "codepipeline.amazonaws.com" + } + }, + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/CodeBuildActionRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/CodeBuildActionRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "codebuild:BatchGetBuilds", + "codebuild:StartBuild", + "codebuild:StopBuild" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineBuildSynthCdkBuildProject6BEFA8E6", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineUpdatePipelineSelfMutationDAA41400", + "Arn" + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "PipelineCodeBuildActionRoleDefaultPolicy1D62A6FE", + "roles": [ + { + "Ref": "PipelineCodeBuildActionRole226DB0CB" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "UpdatePipeline": { + "id": "UpdatePipeline", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline", + "children": { + "SelfMutation": { + "id": "SelfMutation", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation", + "children": { + "Role": { + "id": "Role", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation/Role/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation/Role/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineUpdatePipelineSelfMutationDAA41400" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineUpdatePipelineSelfMutationDAA41400" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "PipelineUpdatePipelineSelfMutationDAA41400" + }, + "-*" + ] + ] + } + }, + { + "Action": "sts:AssumeRole", + "Condition": { + "ForAnyValue:StringEquals": { + "iam:ResourceTag/aws-cdk:bootstrap-role": [ + "image-publishing", + "file-publishing", + "deploy" + ] + } + }, + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:*:iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/*" + ] + ] + } + }, + { + "Action": [ + "cloudformation:DescribeStacks", + "s3:ListBucket" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineArtifactsBucketAEA9A052", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "PipelineUpdatePipelineSelfMutationRoleDefaultPolicyA225DA4E", + "roles": [ + { + "Ref": "PipelineUpdatePipelineSelfMutationRole57E559E8" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutation/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodeBuild::Project", + "aws:cdk:cloudformation:props": { + "artifacts": { + "type": "CODEPIPELINE" + }, + "environment": { + "type": "LINUX_CONTAINER", + "image": "aws/codebuild/standard:6.0", + "imagePullCredentialsType": "CODEBUILD", + "privilegedMode": false, + "computeType": "BUILD_GENERAL1_SMALL" + }, + "serviceRole": { + "Fn::GetAtt": [ + "PipelineUpdatePipelineSelfMutationRole57E559E8", + "Arn" + ] + }, + "source": { + "type": "CODEPIPELINE", + "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineWithAllPrepareNodesFirstStack --require-approval=never --verbose\"\n ]\n }\n }\n}" + }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineWithAllPrepareNodesFirstStack/Pipeline/UpdatePipeline/SelfMutate", + "encryptionKey": "alias/aws/s3" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.CfnProject", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.PipelineProject", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.pipelines.CodePipeline", + "version": "0.0.0" + } + }, + "Beta": { + "id": "Beta", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta", + "children": { + "Stack1": { + "id": "Stack1", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack1", + "children": { + "Queue": { + "id": "Queue", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/Queue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/Queue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "Exports": { + "id": "Exports", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/Exports", + "children": { + "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": { + "id": "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnOutput", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack1/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "Stack2": { + "id": "Stack2", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack2", + "children": { + "OtherQueue": { + "id": "OtherQueue", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack2/OtherQueue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack2/OtherQueue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": { + "redrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Beta-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Beta/Stack2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "Prod1": { + "id": "Prod1", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1", + "children": { + "Stack1": { + "id": "Stack1", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1", + "children": { + "Queue": { + "id": "Queue", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/Queue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/Queue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "Exports": { + "id": "Exports", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/Exports", + "children": { + "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": { + "id": "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnOutput", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack1/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "Stack2": { + "id": "Stack2", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack2", + "children": { + "OtherQueue": { + "id": "OtherQueue", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack2/OtherQueue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack2/OtherQueue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": { + "redrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Prod1-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod1/Stack2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "Prod2": { + "id": "Prod2", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2", + "children": { + "Stack1": { + "id": "Stack1", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1", + "children": { + "Queue": { + "id": "Queue", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/Queue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/Queue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "Exports": { + "id": "Exports", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/Exports", + "children": { + "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": { + "id": "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnOutput", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack1/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "Stack2": { + "id": "Stack2", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack2", + "children": { + "OtherQueue": { + "id": "OtherQueue", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack2/OtherQueue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack2/OtherQueue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": { + "redrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Prod2-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod2/Stack2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "Prod3": { + "id": "Prod3", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod3", + "children": { + "Stack1": { + "id": "Stack1", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod3/Stack1", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod3/Stack1/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod3/Stack1/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "Prod4": { + "id": "Prod4", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod4", + "children": { + "Stack2": { + "id": "Stack2", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod4/Stack2", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod4/Stack2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/Prod4/Stack2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithAllPrepareNodesFirstStack/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "Integ": { + "id": "Integ", + "path": "Integ", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "Integ/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "Integ/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "Integ/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "Integ/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "Integ/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.App", + "version": "0.0.0" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.ts b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.ts new file mode 100644 index 0000000000000..dbd134b075dcf --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-allPrepareNodesFirst.ts @@ -0,0 +1,81 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +/// !cdk-integ PipelineStack pragma:set-context:@aws-cdk/core:newStyleStackSynthesis=true +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { App, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; +import * as sqs from 'aws-cdk-lib/aws-sqs'; +import * as pipelines from 'aws-cdk-lib/pipelines'; +import { Construct } from 'constructs'; + +class PipelineStack extends Stack { + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const pipeline = new pipelines.CodePipeline(this, 'Pipeline', { + synth: new pipelines.ShellStep('Synth', { + input: pipelines.CodePipelineSource.gitHub('Nico-DB/aws-cdk', 'main'), + commands: ['npm ci', 'npm run build', 'npx cdk synth'], + }), + allPrepareNodesFirst: true, + }); + + + pipeline.addStage(new AppStage(this, 'Beta'), { + }); + + const group = pipeline.addWave('Wave1'); + group.addStage(new AppStage(this, 'Prod1')); + group.addStage(new AppStage(this, 'Prod2')); + + const group2 = pipeline.addWave('Wave2'); + group2.addStage(new AppStage2(this, 'Prod3')); + group2.addStage(new AppStage3(this, 'Prod4')); + + } +} + +class AppStage extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + const stack1 = new Stack(this, 'Stack1'); + const queue1 = new sqs.Queue(stack1, 'Queue'); + + const stack2 = new Stack(this, 'Stack2'); + new sqs.Queue(stack2, 'OtherQueue', { + deadLetterQueue: { + queue: queue1, + maxReceiveCount: 5, + }, + }); + } +} + +class AppStage2 extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + new Stack(this, 'Stack1'); + } +} + +class AppStage3 extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + new Stack(this, 'Stack2'); + } +} + +const app = new App({ + context: { + '@aws-cdk/core:newStyleStackSynthesis': '1', + }, +}); + +const pipeStack = new PipelineStack(app, 'PipelineWithAllPrepareNodesFirstStack'); + +new IntegTest(app, 'Integ', { + testCases: [pipeStack], +}); + +app.synth(); diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.assets.json index 5e7b6613e6930..f976d3df336db 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.assets.json @@ -1,7 +1,9 @@ { "version": "36.0.0", "files": { - "8f9101a3927b11ab3c14d96dc01f1fc449edb65eea469ea3b54483806c4633dc": { + + "d37e10348f6474aa9131d38ccd04bccbe7753b2458bdd2bf7175b29ecc6c8d06": { + "source": { "path": "PipelineStack.template.json", "packaging": "file" @@ -9,7 +11,9 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "8f9101a3927b11ab3c14d96dc01f1fc449edb65eea469ea3b54483806c4633dc.json", + + "objectKey": "d37e10348f6474aa9131d38ccd04bccbe7753b2458bdd2bf7175b29ecc6c8d06.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.template.json index a6b70e66103e4..aee03a35ff1db 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.template.json @@ -371,16 +371,16 @@ "Version": "1" }, "Configuration": { - "Owner": "tkglaser", - "Repo": "cdk-pipelines-demo", + "Owner": "Nico-DB", + "Repo": "aws-cdk", "Branch": "main", "OAuthToken": "{{resolve:secretsmanager:github-token:SecretString:::}}", "PollForSourceChanges": false }, - "Name": "tkglaser_cdk-pipelines-demo", + "Name": "Nico-DB_aws-cdk", "OutputArtifacts": [ { - "Name": "tkglaser_cdk_pipelines_demo_Source" + "Name": "Nico_DB_aws_cdk_Source" } ], "RunOrder": 1 @@ -405,7 +405,7 @@ }, "InputArtifacts": [ { - "Name": "tkglaser_cdk_pipelines_demo_Source" + "Name": "Nico_DB_aws_cdk_Source" } ], "Name": "Synth", @@ -501,7 +501,7 @@ "Name": "Synth_Output" } ], - "Name": "Stack1.Prepare", + "Name": "Stack1.Prepare-Beta-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -607,7 +607,7 @@ "Name": "Synth_Output" } ], - "Name": "Stack2.Prepare", + "Name": "Stack2.Prepare-Beta-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -718,7 +718,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod1.Stack1.Prepare", + "Name": "Prod1.Stack1.Prepare-Prod1-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -786,7 +786,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod2.Stack1.Prepare", + "Name": "Prod2.Stack1.Prepare-Prod2-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -930,7 +930,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod1.Stack2.Prepare", + "Name": "Prod1.Stack2.Prepare-Prod1-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -998,7 +998,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod2.Stack2.Prepare", + "Name": "Prod2.Stack2.Prepare-Prod2-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1147,7 +1147,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod3.Stack1.Prepare", + "Name": "Prod3.Stack1.Prepare-Prod3-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -1215,7 +1215,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod4.Stack1.Prepare", + "Name": "Prod4.Stack1.Prepare-Prod4-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -1283,7 +1283,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod5.Stack1.Prepare", + "Name": "Prod5.Stack1.Prepare-Prod5-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -1351,7 +1351,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod6.Stack1.Prepare", + "Name": "Prod6.Stack1.Prepare-Prod6-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -1571,7 +1571,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod3.Stack2.Prepare", + "Name": "Prod3.Stack2.Prepare-Prod3-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1639,7 +1639,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod4.Stack2.Prepare", + "Name": "Prod4.Stack2.Prepare-Prod4-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1707,7 +1707,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod5.Stack2.Prepare", + "Name": "Prod5.Stack2.Prepare-Prod5-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1775,7 +1775,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod6.Stack2.Prepare", + "Name": "Prod6.Stack2.Prepare-Prod6-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1963,7 +1963,7 @@ "PipelineRoleB27FAA37" ] }, - "PipelineSourcetkglasercdkpipelinesdemoWebhookResource54EE51BE": { + "PipelineSourceNicoDBawscdkWebhookResource5DAA82C4": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "Authentication": "GITHUB_HMAC", @@ -1976,8 +1976,9 @@ "MatchEquals": "refs/heads/{Branch}" } ], - "RegisterWithThirdParty": true, - "TargetAction": "tkglaser_cdk-pipelines-demo", + + "TargetAction": "Nico-DB_aws-cdk", + "TargetPipeline": { "Ref": "Pipeline9850B417" }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStackPipeline9DB740AF.dot b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStackPipeline9DB740AF.dot index 8785f22f4345e..71cb12528429e 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStackPipeline9DB740AF.dot +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStackPipeline9DB740AF.dot @@ -7,7 +7,7 @@ digraph G { "BEGIN Build" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Build" [shape="cds", style="filled", fillcolor="#b7deff"]; "Build.Synth"; -"Source.tkglaser/cdk-pipelines-demo" -> "Build.Synth"; +"Source.Nico-DB/aws-cdk" -> "Build.Synth"; "BEGIN Build" -> "Build.Synth"; "Build.Synth" -> "END Build"; "BEGIN UpdatePipeline" [shape="cds", style="filled", fillcolor="#b7deff"]; @@ -22,19 +22,21 @@ digraph G { "BEGIN Beta.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Beta.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Beta.Stack1.Deploy"; -"Beta.Stack1.Prepare" -> "Beta.Stack1.Deploy"; -"Beta.Stack1.Prepare"; -"Build.Synth" -> "Beta.Stack1.Prepare"; -"BEGIN Beta.Stack1" -> "Beta.Stack1.Prepare"; +"Beta.Stack1.Prepare-Beta-Stack1" -> "Beta.Stack1.Deploy"; +"Beta.Stack1.Prepare-Beta-Stack1" -> "Beta.Stack1.Deploy"; +"Beta.Stack1.Prepare-Beta-Stack1"; +"Build.Synth" -> "Beta.Stack1.Prepare-Beta-Stack1"; +"BEGIN Beta.Stack1" -> "Beta.Stack1.Prepare-Beta-Stack1"; "Beta.Stack1.Deploy" -> "END Beta.Stack1"; "BEGIN Beta.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Beta.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Beta.Stack1" -> "BEGIN Beta.Stack2"; "Beta.Stack2.Deploy"; -"Beta.Stack2.Prepare" -> "Beta.Stack2.Deploy"; -"Beta.Stack2.Prepare"; -"Build.Synth" -> "Beta.Stack2.Prepare"; -"BEGIN Beta.Stack2" -> "Beta.Stack2.Prepare"; +"Beta.Stack2.Prepare-Beta-Stack2" -> "Beta.Stack2.Deploy"; +"Beta.Stack2.Prepare-Beta-Stack2" -> "Beta.Stack2.Deploy"; +"Beta.Stack2.Prepare-Beta-Stack2"; +"Build.Synth" -> "Beta.Stack2.Prepare-Beta-Stack2"; +"BEGIN Beta.Stack2" -> "Beta.Stack2.Prepare-Beta-Stack2"; "Beta.Stack2.Deploy" -> "END Beta.Stack2"; "BEGIN Beta" -> "BEGIN Beta.Stack1"; "END Beta.Stack2" -> "END Beta"; @@ -47,19 +49,21 @@ digraph G { "BEGIN Wave1.Prod1.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod1.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave1.Prod1.Stack1.Deploy"; -"Wave1.Prod1.Stack1.Prepare" -> "Wave1.Prod1.Stack1.Deploy"; -"Wave1.Prod1.Stack1.Prepare"; -"Build.Synth" -> "Wave1.Prod1.Stack1.Prepare"; -"BEGIN Wave1.Prod1.Stack1" -> "Wave1.Prod1.Stack1.Prepare"; +"Wave1.Prod1.Stack1.Prepare-Prod1-Stack1" -> "Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Stack1.Prepare-Prod1-Stack1" -> "Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Stack1.Prepare-Prod1-Stack1"; +"Build.Synth" -> "Wave1.Prod1.Stack1.Prepare-Prod1-Stack1"; +"BEGIN Wave1.Prod1.Stack1" -> "Wave1.Prod1.Stack1.Prepare-Prod1-Stack1"; "Wave1.Prod1.Stack1.Deploy" -> "END Wave1.Prod1.Stack1"; "BEGIN Wave1.Prod1.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod1.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod1.Stack1" -> "BEGIN Wave1.Prod1.Stack2"; "Wave1.Prod1.Stack2.Deploy"; -"Wave1.Prod1.Stack2.Prepare" -> "Wave1.Prod1.Stack2.Deploy"; -"Wave1.Prod1.Stack2.Prepare"; -"Build.Synth" -> "Wave1.Prod1.Stack2.Prepare"; -"BEGIN Wave1.Prod1.Stack2" -> "Wave1.Prod1.Stack2.Prepare"; +"Wave1.Prod1.Stack2.Prepare-Prod1-Stack2" -> "Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Stack2.Prepare-Prod1-Stack2" -> "Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Stack2.Prepare-Prod1-Stack2"; +"Build.Synth" -> "Wave1.Prod1.Stack2.Prepare-Prod1-Stack2"; +"BEGIN Wave1.Prod1.Stack2" -> "Wave1.Prod1.Stack2.Prepare-Prod1-Stack2"; "Wave1.Prod1.Stack2.Deploy" -> "END Wave1.Prod1.Stack2"; "BEGIN Wave1.Prod1" -> "BEGIN Wave1.Prod1.Stack1"; "END Wave1.Prod1.Stack2" -> "END Wave1.Prod1"; @@ -68,19 +72,21 @@ digraph G { "BEGIN Wave1.Prod2.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod2.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave1.Prod2.Stack1.Deploy"; -"Wave1.Prod2.Stack1.Prepare" -> "Wave1.Prod2.Stack1.Deploy"; -"Wave1.Prod2.Stack1.Prepare"; -"Build.Synth" -> "Wave1.Prod2.Stack1.Prepare"; -"BEGIN Wave1.Prod2.Stack1" -> "Wave1.Prod2.Stack1.Prepare"; +"Wave1.Prod2.Stack1.Prepare-Prod2-Stack1" -> "Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod2.Stack1.Prepare-Prod2-Stack1" -> "Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod2.Stack1.Prepare-Prod2-Stack1"; +"Build.Synth" -> "Wave1.Prod2.Stack1.Prepare-Prod2-Stack1"; +"BEGIN Wave1.Prod2.Stack1" -> "Wave1.Prod2.Stack1.Prepare-Prod2-Stack1"; "Wave1.Prod2.Stack1.Deploy" -> "END Wave1.Prod2.Stack1"; "BEGIN Wave1.Prod2.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod2.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod2.Stack1" -> "BEGIN Wave1.Prod2.Stack2"; "Wave1.Prod2.Stack2.Deploy"; -"Wave1.Prod2.Stack2.Prepare" -> "Wave1.Prod2.Stack2.Deploy"; -"Wave1.Prod2.Stack2.Prepare"; -"Build.Synth" -> "Wave1.Prod2.Stack2.Prepare"; -"BEGIN Wave1.Prod2.Stack2" -> "Wave1.Prod2.Stack2.Prepare"; +"Wave1.Prod2.Stack2.Prepare-Prod2-Stack2" -> "Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod2.Stack2.Prepare-Prod2-Stack2" -> "Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod2.Stack2.Prepare-Prod2-Stack2"; +"Build.Synth" -> "Wave1.Prod2.Stack2.Prepare-Prod2-Stack2"; +"BEGIN Wave1.Prod2.Stack2" -> "Wave1.Prod2.Stack2.Prepare-Prod2-Stack2"; "Wave1.Prod2.Stack2.Deploy" -> "END Wave1.Prod2.Stack2"; "BEGIN Wave1.Prod2" -> "BEGIN Wave1.Prod2.Stack1"; "END Wave1.Prod2.Stack2" -> "END Wave1.Prod2"; @@ -97,19 +103,21 @@ digraph G { "BEGIN Wave2.Prod3.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod3.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave2.Prod3.Stack1.Deploy"; -"Wave2.Prod3.Stack1.Prepare" -> "Wave2.Prod3.Stack1.Deploy"; -"Wave2.Prod3.Stack1.Prepare"; -"Build.Synth" -> "Wave2.Prod3.Stack1.Prepare"; -"BEGIN Wave2.Prod3.Stack1" -> "Wave2.Prod3.Stack1.Prepare"; +"Wave2.Prod3.Stack1.Prepare-Prod3-Stack1" -> "Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Stack1.Prepare-Prod3-Stack1" -> "Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Stack1.Prepare-Prod3-Stack1"; +"Build.Synth" -> "Wave2.Prod3.Stack1.Prepare-Prod3-Stack1"; +"BEGIN Wave2.Prod3.Stack1" -> "Wave2.Prod3.Stack1.Prepare-Prod3-Stack1"; "Wave2.Prod3.Stack1.Deploy" -> "END Wave2.Prod3.Stack1"; "BEGIN Wave2.Prod3.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod3.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod3.Stack1" -> "BEGIN Wave2.Prod3.Stack2"; "Wave2.Prod3.Stack2.Deploy"; -"Wave2.Prod3.Stack2.Prepare" -> "Wave2.Prod3.Stack2.Deploy"; -"Wave2.Prod3.Stack2.Prepare"; -"Build.Synth" -> "Wave2.Prod3.Stack2.Prepare"; -"BEGIN Wave2.Prod3.Stack2" -> "Wave2.Prod3.Stack2.Prepare"; +"Wave2.Prod3.Stack2.Prepare-Prod3-Stack2" -> "Wave2.Prod3.Stack2.Deploy"; +"Wave2.Prod3.Stack2.Prepare-Prod3-Stack2" -> "Wave2.Prod3.Stack2.Deploy"; +"Wave2.Prod3.Stack2.Prepare-Prod3-Stack2"; +"Build.Synth" -> "Wave2.Prod3.Stack2.Prepare-Prod3-Stack2"; +"BEGIN Wave2.Prod3.Stack2" -> "Wave2.Prod3.Stack2.Prepare-Prod3-Stack2"; "Wave2.Prod3.Stack2.Deploy" -> "END Wave2.Prod3.Stack2"; "BEGIN Wave2.Prod3" -> "BEGIN Wave2.Prod3.Stack1"; "END Wave2.Prod3.Stack2" -> "END Wave2.Prod3"; @@ -118,19 +126,21 @@ digraph G { "BEGIN Wave2.Prod4.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod4.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave2.Prod4.Stack1.Deploy"; -"Wave2.Prod4.Stack1.Prepare" -> "Wave2.Prod4.Stack1.Deploy"; -"Wave2.Prod4.Stack1.Prepare"; -"Build.Synth" -> "Wave2.Prod4.Stack1.Prepare"; -"BEGIN Wave2.Prod4.Stack1" -> "Wave2.Prod4.Stack1.Prepare"; +"Wave2.Prod4.Stack1.Prepare-Prod4-Stack1" -> "Wave2.Prod4.Stack1.Deploy"; +"Wave2.Prod4.Stack1.Prepare-Prod4-Stack1" -> "Wave2.Prod4.Stack1.Deploy"; +"Wave2.Prod4.Stack1.Prepare-Prod4-Stack1"; +"Build.Synth" -> "Wave2.Prod4.Stack1.Prepare-Prod4-Stack1"; +"BEGIN Wave2.Prod4.Stack1" -> "Wave2.Prod4.Stack1.Prepare-Prod4-Stack1"; "Wave2.Prod4.Stack1.Deploy" -> "END Wave2.Prod4.Stack1"; "BEGIN Wave2.Prod4.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod4.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod4.Stack1" -> "BEGIN Wave2.Prod4.Stack2"; "Wave2.Prod4.Stack2.Deploy"; -"Wave2.Prod4.Stack2.Prepare" -> "Wave2.Prod4.Stack2.Deploy"; -"Wave2.Prod4.Stack2.Prepare"; -"Build.Synth" -> "Wave2.Prod4.Stack2.Prepare"; -"BEGIN Wave2.Prod4.Stack2" -> "Wave2.Prod4.Stack2.Prepare"; +"Wave2.Prod4.Stack2.Prepare-Prod4-Stack2" -> "Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod4.Stack2.Prepare-Prod4-Stack2" -> "Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod4.Stack2.Prepare-Prod4-Stack2"; +"Build.Synth" -> "Wave2.Prod4.Stack2.Prepare-Prod4-Stack2"; +"BEGIN Wave2.Prod4.Stack2" -> "Wave2.Prod4.Stack2.Prepare-Prod4-Stack2"; "Wave2.Prod4.Stack2.Deploy" -> "END Wave2.Prod4.Stack2"; "BEGIN Wave2.Prod4" -> "BEGIN Wave2.Prod4.Stack1"; "END Wave2.Prod4.Stack2" -> "END Wave2.Prod4"; @@ -139,19 +149,21 @@ digraph G { "BEGIN Wave2.Prod5.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod5.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave2.Prod5.Stack1.Deploy"; -"Wave2.Prod5.Stack1.Prepare" -> "Wave2.Prod5.Stack1.Deploy"; -"Wave2.Prod5.Stack1.Prepare"; -"Build.Synth" -> "Wave2.Prod5.Stack1.Prepare"; -"BEGIN Wave2.Prod5.Stack1" -> "Wave2.Prod5.Stack1.Prepare"; +"Wave2.Prod5.Stack1.Prepare-Prod5-Stack1" -> "Wave2.Prod5.Stack1.Deploy"; +"Wave2.Prod5.Stack1.Prepare-Prod5-Stack1" -> "Wave2.Prod5.Stack1.Deploy"; +"Wave2.Prod5.Stack1.Prepare-Prod5-Stack1"; +"Build.Synth" -> "Wave2.Prod5.Stack1.Prepare-Prod5-Stack1"; +"BEGIN Wave2.Prod5.Stack1" -> "Wave2.Prod5.Stack1.Prepare-Prod5-Stack1"; "Wave2.Prod5.Stack1.Deploy" -> "END Wave2.Prod5.Stack1"; "BEGIN Wave2.Prod5.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod5.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod5.Stack1" -> "BEGIN Wave2.Prod5.Stack2"; "Wave2.Prod5.Stack2.Deploy"; -"Wave2.Prod5.Stack2.Prepare" -> "Wave2.Prod5.Stack2.Deploy"; -"Wave2.Prod5.Stack2.Prepare"; -"Build.Synth" -> "Wave2.Prod5.Stack2.Prepare"; -"BEGIN Wave2.Prod5.Stack2" -> "Wave2.Prod5.Stack2.Prepare"; +"Wave2.Prod5.Stack2.Prepare-Prod5-Stack2" -> "Wave2.Prod5.Stack2.Deploy"; +"Wave2.Prod5.Stack2.Prepare-Prod5-Stack2" -> "Wave2.Prod5.Stack2.Deploy"; +"Wave2.Prod5.Stack2.Prepare-Prod5-Stack2"; +"Build.Synth" -> "Wave2.Prod5.Stack2.Prepare-Prod5-Stack2"; +"BEGIN Wave2.Prod5.Stack2" -> "Wave2.Prod5.Stack2.Prepare-Prod5-Stack2"; "Wave2.Prod5.Stack2.Deploy" -> "END Wave2.Prod5.Stack2"; "BEGIN Wave2.Prod5" -> "BEGIN Wave2.Prod5.Stack1"; "END Wave2.Prod5.Stack2" -> "END Wave2.Prod5"; @@ -160,19 +172,21 @@ digraph G { "BEGIN Wave2.Prod6.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod6.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave2.Prod6.Stack1.Deploy"; -"Wave2.Prod6.Stack1.Prepare" -> "Wave2.Prod6.Stack1.Deploy"; -"Wave2.Prod6.Stack1.Prepare"; -"Build.Synth" -> "Wave2.Prod6.Stack1.Prepare"; -"BEGIN Wave2.Prod6.Stack1" -> "Wave2.Prod6.Stack1.Prepare"; +"Wave2.Prod6.Stack1.Prepare-Prod6-Stack1" -> "Wave2.Prod6.Stack1.Deploy"; +"Wave2.Prod6.Stack1.Prepare-Prod6-Stack1" -> "Wave2.Prod6.Stack1.Deploy"; +"Wave2.Prod6.Stack1.Prepare-Prod6-Stack1"; +"Build.Synth" -> "Wave2.Prod6.Stack1.Prepare-Prod6-Stack1"; +"BEGIN Wave2.Prod6.Stack1" -> "Wave2.Prod6.Stack1.Prepare-Prod6-Stack1"; "Wave2.Prod6.Stack1.Deploy" -> "END Wave2.Prod6.Stack1"; "BEGIN Wave2.Prod6.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod6.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod6.Stack1" -> "BEGIN Wave2.Prod6.Stack2"; "Wave2.Prod6.Stack2.Deploy"; -"Wave2.Prod6.Stack2.Prepare" -> "Wave2.Prod6.Stack2.Deploy"; -"Wave2.Prod6.Stack2.Prepare"; -"Build.Synth" -> "Wave2.Prod6.Stack2.Prepare"; -"BEGIN Wave2.Prod6.Stack2" -> "Wave2.Prod6.Stack2.Prepare"; +"Wave2.Prod6.Stack2.Prepare-Prod6-Stack2" -> "Wave2.Prod6.Stack2.Deploy"; +"Wave2.Prod6.Stack2.Prepare-Prod6-Stack2" -> "Wave2.Prod6.Stack2.Deploy"; +"Wave2.Prod6.Stack2.Prepare-Prod6-Stack2"; +"Build.Synth" -> "Wave2.Prod6.Stack2.Prepare-Prod6-Stack2"; +"BEGIN Wave2.Prod6.Stack2" -> "Wave2.Prod6.Stack2.Prepare-Prod6-Stack2"; "Wave2.Prod6.Stack2.Deploy" -> "END Wave2.Prod6.Stack2"; "BEGIN Wave2.Prod6" -> "BEGIN Wave2.Prod6.Stack1"; "END Wave2.Prod6.Stack2" -> "END Wave2.Prod6"; @@ -186,7 +200,7 @@ digraph G { "END Wave2.Prod6" -> "END Wave2"; "BEGIN Source" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Source" [shape="cds", style="filled", fillcolor="#b7deff"]; -"Source.tkglaser/cdk-pipelines-demo"; -"BEGIN Source" -> "Source.tkglaser/cdk-pipelines-demo"; -"Source.tkglaser/cdk-pipelines-demo" -> "END Source"; +"Source.Nico-DB/aws-cdk"; +"BEGIN Source" -> "Source.Nico-DB/aws-cdk"; +"Source.Nico-DB/aws-cdk" -> "END Source"; } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/manifest.json index 629271c9a6a2e..f8152fd6b7f71 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/manifest.json @@ -67,7 +67,9 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/8f9101a3927b11ab3c14d96dc01f1fc449edb65eea469ea3b54483806c4633dc.json", + + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d37e10348f6474aa9131d38ccd04bccbe7753b2458bdd2bf7175b29ecc6c8d06.json", + "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -125,10 +127,10 @@ "data": "Pipeline9850B417" } ], - "/PipelineStack/Pipeline/Pipeline/Source/tkglaser_cdk-pipelines-demo/WebhookResource": [ + "/PipelineStack/Pipeline/Pipeline/Source/Nico-DB_aws-cdk/WebhookResource": [ { "type": "aws:cdk:logicalId", - "data": "PipelineSourcetkglasercdkpipelinesdemoWebhookResource54EE51BE" + "data": "PipelineSourceNicoDBawscdkWebhookResource5DAA82C4" } ], "/PipelineStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Role/Resource": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/tree.json index 20458fc2ae952..2768a4f235102 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/tree.json @@ -494,10 +494,10 @@ "name": "Source", "actions": [ { - "name": "tkglaser_cdk-pipelines-demo", + "name": "Nico-DB_aws-cdk", "outputArtifacts": [ { - "name": "tkglaser_cdk_pipelines_demo_Source" + "name": "Nico_DB_aws_cdk_Source" } ], "actionTypeId": { @@ -507,8 +507,8 @@ "provider": "GitHub" }, "configuration": { - "Owner": "tkglaser", - "Repo": "cdk-pipelines-demo", + "Owner": "Nico-DB", + "Repo": "aws-cdk", "Branch": "main", "OAuthToken": "{{resolve:secretsmanager:github-token:SecretString:::}}", "PollForSourceChanges": false @@ -524,7 +524,7 @@ "name": "Synth", "inputArtifacts": [ { - "name": "tkglaser_cdk_pipelines_demo_Source" + "name": "Nico_DB_aws_cdk_Source" } ], "outputArtifacts": [ @@ -590,7 +590,7 @@ "name": "Beta", "actions": [ { - "name": "Stack1.Prepare", + "name": "Stack1.Prepare-Beta-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -696,7 +696,7 @@ } }, { - "name": "Stack2.Prepare", + "name": "Stack2.Prepare-Beta-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -807,7 +807,7 @@ "name": "Wave1", "actions": [ { - "name": "Prod1.Stack1.Prepare", + "name": "Prod1.Stack1.Prepare-Prod1-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -875,7 +875,7 @@ } }, { - "name": "Prod2.Stack1.Prepare", + "name": "Prod2.Stack1.Prepare-Prod2-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -1019,7 +1019,7 @@ } }, { - "name": "Prod1.Stack2.Prepare", + "name": "Prod1.Stack2.Prepare-Prod1-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1087,7 +1087,7 @@ } }, { - "name": "Prod2.Stack2.Prepare", + "name": "Prod2.Stack2.Prepare-Prod2-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1236,7 +1236,7 @@ "name": "Wave2", "actions": [ { - "name": "Prod3.Stack1.Prepare", + "name": "Prod3.Stack1.Prepare-Prod3-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -1304,7 +1304,7 @@ } }, { - "name": "Prod4.Stack1.Prepare", + "name": "Prod4.Stack1.Prepare-Prod4-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -1372,7 +1372,7 @@ } }, { - "name": "Prod5.Stack1.Prepare", + "name": "Prod5.Stack1.Prepare-Prod5-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -1440,7 +1440,7 @@ } }, { - "name": "Prod6.Stack1.Prepare", + "name": "Prod6.Stack1.Prepare-Prod6-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -1660,7 +1660,7 @@ } }, { - "name": "Prod3.Stack2.Prepare", + "name": "Prod3.Stack2.Prepare-Prod3-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1728,7 +1728,7 @@ } }, { - "name": "Prod4.Stack2.Prepare", + "name": "Prod4.Stack2.Prepare-Prod4-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1796,7 +1796,7 @@ } }, { - "name": "Prod5.Stack2.Prepare", + "name": "Prod5.Stack2.Prepare-Prod5-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1864,7 +1864,7 @@ } }, { - "name": "Prod6.Stack2.Prepare", + "name": "Prod6.Stack2.Prepare-Prod6-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -2097,13 +2097,13 @@ "id": "Source", "path": "PipelineStack/Pipeline/Pipeline/Source", "children": { - "tkglaser_cdk-pipelines-demo": { - "id": "tkglaser_cdk-pipelines-demo", - "path": "PipelineStack/Pipeline/Pipeline/Source/tkglaser_cdk-pipelines-demo", + "Nico-DB_aws-cdk": { + "id": "Nico-DB_aws-cdk", + "path": "PipelineStack/Pipeline/Pipeline/Source/Nico-DB_aws-cdk", "children": { "WebhookResource": { "id": "WebhookResource", - "path": "PipelineStack/Pipeline/Pipeline/Source/tkglaser_cdk-pipelines-demo/WebhookResource", + "path": "PipelineStack/Pipeline/Pipeline/Source/Nico-DB_aws-cdk/WebhookResource", "attributes": { "aws:cdk:cloudformation:type": "AWS::CodePipeline::Webhook", "aws:cdk:cloudformation:props": { @@ -2117,8 +2117,9 @@ "matchEquals": "refs/heads/{Branch}" } ], - "registerWithThirdParty": true, - "targetAction": "tkglaser_cdk-pipelines-demo", + + "targetAction": "Nico-DB_aws-cdk", + "targetPipeline": { "Ref": "Pipeline9850B417" }, @@ -2458,9 +2459,9 @@ "id": "Beta", "path": "PipelineStack/Pipeline/Pipeline/Beta", "children": { - "Stack1.Prepare": { - "id": "Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Prepare", + "Stack1.Prepare-Beta-Stack1": { + "id": "Stack1.Prepare-Beta-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Prepare-Beta-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2474,9 +2475,9 @@ "version": "10.3.0" } }, - "Stack2.Prepare": { - "id": "Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Prepare", + "Stack2.Prepare-Beta-Stack2": { + "id": "Stack2.Prepare-Beta-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Prepare-Beta-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2542,17 +2543,17 @@ "id": "Wave1", "path": "PipelineStack/Pipeline/Pipeline/Wave1", "children": { - "Prod1.Stack1.Prepare": { - "id": "Prod1.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Prepare", + "Prod1.Stack1.Prepare-Prod1-Stack1": { + "id": "Prod1.Stack1.Prepare-Prod1-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Prepare-Prod1-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod2.Stack1.Prepare": { - "id": "Prod2.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Prepare", + "Prod2.Stack1.Prepare-Prod2-Stack1": { + "id": "Prod2.Stack1.Prepare-Prod2-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Prepare-Prod2-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2574,17 +2575,17 @@ "version": "10.3.0" } }, - "Prod1.Stack2.Prepare": { - "id": "Prod1.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Prepare", + "Prod1.Stack2.Prepare-Prod1-Stack2": { + "id": "Prod1.Stack2.Prepare-Prod1-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Prepare-Prod1-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod2.Stack2.Prepare": { - "id": "Prod2.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Prepare", + "Prod2.Stack2.Prepare-Prod2-Stack2": { + "id": "Prod2.Stack2.Prepare-Prod2-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Prepare-Prod2-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2616,33 +2617,33 @@ "id": "Wave2", "path": "PipelineStack/Pipeline/Pipeline/Wave2", "children": { - "Prod3.Stack1.Prepare": { - "id": "Prod3.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Prepare", + "Prod3.Stack1.Prepare-Prod3-Stack1": { + "id": "Prod3.Stack1.Prepare-Prod3-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Prepare-Prod3-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod4.Stack1.Prepare": { - "id": "Prod4.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Prepare", + "Prod4.Stack1.Prepare-Prod4-Stack1": { + "id": "Prod4.Stack1.Prepare-Prod4-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Prepare-Prod4-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod5.Stack1.Prepare": { - "id": "Prod5.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Prepare", + "Prod5.Stack1.Prepare-Prod5-Stack1": { + "id": "Prod5.Stack1.Prepare-Prod5-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Prepare-Prod5-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod6.Stack1.Prepare": { - "id": "Prod6.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Prepare", + "Prod6.Stack1.Prepare-Prod6-Stack1": { + "id": "Prod6.Stack1.Prepare-Prod6-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Prepare-Prod6-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2680,33 +2681,33 @@ "version": "10.3.0" } }, - "Prod3.Stack2.Prepare": { - "id": "Prod3.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Prepare", + "Prod3.Stack2.Prepare-Prod3-Stack2": { + "id": "Prod3.Stack2.Prepare-Prod3-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Prepare-Prod3-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod4.Stack2.Prepare": { - "id": "Prod4.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Prepare", + "Prod4.Stack2.Prepare-Prod4-Stack2": { + "id": "Prod4.Stack2.Prepare-Prod4-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Prepare-Prod4-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod5.Stack2.Prepare": { - "id": "Prod5.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Prepare", + "Prod5.Stack2.Prepare-Prod5-Stack2": { + "id": "Prod5.Stack2.Prepare-Prod5-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Prepare-Prod5-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod6.Stack2.Prepare": { - "id": "Prod6.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Prepare", + "Prod6.Stack2.Prepare-Prod6-Stack2": { + "id": "Prod6.Stack2.Prepare-Prod6-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Prepare-Prod6-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.ts b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.ts index c2648fd90d748..39394a9b731df 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.ts @@ -1,6 +1,6 @@ -import * as sqs from 'aws-cdk-lib/aws-sqs'; -import { App, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; import * as integ from '@aws-cdk/integ-tests-alpha'; +import { App, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; +import * as sqs from 'aws-cdk-lib/aws-sqs'; import { Construct } from 'constructs'; import * as pipelines from 'aws-cdk-lib/pipelines'; @@ -13,12 +13,11 @@ class PipelineStack extends Stack { crossAccountKeys: true, enableKeyRotation: true, synth: new pipelines.ShellStep('Synth', { - input: pipelines.CodePipelineSource.gitHub('tkglaser/cdk-pipelines-demo', 'main'), - commands: [ - 'npm ci', - 'npm run build', - 'npx cdk synth', - ], + input: pipelines.CodePipelineSource.gitHub( + 'Nico-DB/aws-cdk', + 'main', + ), + commands: ['npm ci', 'npm run build', 'npx cdk synth'], }), }); diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.assets.json new file mode 100644 index 0000000000000..9e7065c2b0432 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "IntegDefaultTestDeployAssert4E6713E1.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/PipelineWithPostPrepareStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/PipelineWithPostPrepareStack.assets.json new file mode 100644 index 0000000000000..e44828a723ebe --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/PipelineWithPostPrepareStack.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "0b49d4ab5e39b8af3160f841b1cb57d051eeb3009e494aeb1069ddb2d38e7114": { + "source": { + "path": "PipelineWithPostPrepareStack.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "0b49d4ab5e39b8af3160f841b1cb57d051eeb3009e494aeb1069ddb2d38e7114.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/PipelineWithPostPrepareStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/PipelineWithPostPrepareStack.template.json new file mode 100644 index 0000000000000..37cd5bc2718d4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/PipelineWithPostPrepareStack.template.json @@ -0,0 +1,1916 @@ +{ + "Resources": { + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "aws:kms" + } + } + ] + }, + "PublicAccessBlockConfiguration": { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "PipelineWithPostPreparePipelineArtifactsBucketPolicy083A21B1": { + "Type": "AWS::S3::BucketPolicy", + "Properties": { + "Bucket": { + "Ref": "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB" + }, + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Condition": { + "Bool": { + "aws:SecureTransport": "false" + } + }, + "Effect": "Deny", + "Principal": { + "AWS": "*" + }, + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineWithPostPreparePipelineRole2917FC8F": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codepipeline.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineWithPostPreparePipelineRoleDefaultPolicy488B101C": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPrepareCodeBuildActionRole452BE06A", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineBetaApproval0CodePipelineActionRole4EC4A93A", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineWave1Prod1Approval1CodePipelineActionRole1E69C5CA", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineWave2Prod3Approval2CodePipelineActionRoleDC716EBC", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "PipelineWithPostPreparePipelineRoleDefaultPolicy488B101C", + "Roles": [ + { + "Ref": "PipelineWithPostPreparePipelineRole2917FC8F" + } + ] + } + }, + "PipelineWithPostPreparePipeline26230908": { + "Type": "AWS::CodePipeline::Pipeline", + "Properties": { + "RoleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineRole2917FC8F", + "Arn" + ] + }, + "Stages": [ + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Source", + "Owner": "ThirdParty", + "Provider": "GitHub", + "Version": "1" + }, + "Configuration": { + "Owner": "Nico-DB", + "Repo": "aws-cdk", + "Branch": "main", + "OAuthToken": "{{resolve:secretsmanager:github-token:SecretString:::}}", + "PollForSourceChanges": false + }, + "Name": "Nico-DB_aws-cdk", + "OutputArtifacts": [ + { + "Name": "Nico_DB_aws_cdk_Source" + } + ], + "RunOrder": 1 + } + ], + "Name": "Source" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Build", + "Owner": "AWS", + "Provider": "CodeBuild", + "Version": "1" + }, + "Configuration": { + "ProjectName": { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC" + }, + "EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"09deb76d97fe89f2ccd364ad1eedc7ebc7c010be6bf79da68c34f358446cd134\"}]" + }, + "InputArtifacts": [ + { + "Name": "Nico_DB_aws_cdk_Source" + } + ], + "Name": "Synth", + "OutputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "RoleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPrepareCodeBuildActionRole452BE06A", + "Arn" + ] + }, + "RunOrder": 1 + } + ], + "Name": "Build" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Build", + "Owner": "AWS", + "Provider": "CodeBuild", + "Version": "1" + }, + "Configuration": { + "ProjectName": { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6" + }, + "EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"3ddee2251fc74ec37387ef5b88ac1031be8e788fc79a287a0792aa9ee9134fe2\"}]" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "SelfMutate", + "RoleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPrepareCodeBuildActionRole452BE06A", + "Arn" + ] + }, + "RunOrder": 1 + } + ], + "Name": "UpdatePipeline" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Beta-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack1E900E8C2.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prepare-Beta-Stack1", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Beta-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack2A215C7AA.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prepare-Beta-Stack2", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Approval", + "Owner": "AWS", + "Provider": "Manual", + "Version": "1" + }, + "Name": "Approval0", + "RoleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineBetaApproval0CodePipelineActionRole4EC4A93A", + "Arn" + ] + }, + "RunOrder": 2 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Beta-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Stack1.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 3 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Beta-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Stack2.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 4 + } + ], + "Name": "Beta" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod1-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack18A6E05FD.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod1.Prepare-Prod1-Stack1", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod1-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack23830DAC4.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod1.Prepare-Prod1-Stack2", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod2-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack1AE394F2F.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod2.Prepare-Prod2-Stack1", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod2-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack2FE352778.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod2.Prepare-Prod2-Stack2", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Approval", + "Owner": "AWS", + "Provider": "Manual", + "Version": "1" + }, + "Name": "Prod1.Approval1", + "RoleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineWave1Prod1Approval1CodePipelineActionRole1E69C5CA", + "Arn" + ] + }, + "RunOrder": 2 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod1-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod1.Stack1.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 3 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod2-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod2.Stack1.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 3 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod1-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod1.Stack2.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 4 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod2-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod2.Stack2.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 4 + } + ], + "Name": "Wave1" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod3-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod3/PipelineWithPostPrepareStackProd3Stack1E9091829.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod3.Prepare-Prod3-Stack1", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod4-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod4/PipelineWithPostPrepareStackProd4Stack224266FA1.template.json" + }, + "InputArtifacts": [ + { + "Name": "Synth_Output" + } + ], + "Name": "Prod4.Prepare-Prod4-Stack2", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 1 + }, + { + "ActionTypeId": { + "Category": "Approval", + "Owner": "AWS", + "Provider": "Manual", + "Version": "1" + }, + "Name": "Prod3.Approval2", + "RoleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineWave2Prod3Approval2CodePipelineActionRoleDC716EBC", + "Arn" + ] + }, + "RunOrder": 2 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod3-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod3.Stack1.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 3 + }, + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "CloudFormation", + "Version": "1" + }, + "Configuration": { + "StackName": "Prod4-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "Name": "Prod4.Stack2.Deploy", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "RunOrder": 3 + } + ], + "Name": "Wave2" + } + ], + "ArtifactStore": { + "Location": { + "Ref": "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB" + }, + "Type": "S3" + }, + "RestartExecutionOnUpdate": true + }, + "DependsOn": [ + "PipelineWithPostPreparePipelineRoleDefaultPolicy488B101C", + "PipelineWithPostPreparePipelineRole2917FC8F" + ] + }, + "PipelineWithPostPreparePipelineSourceNicoDBawscdkWebhookResourceD40271CA": { + "Type": "AWS::CodePipeline::Webhook", + "Properties": { + "Authentication": "GITHUB_HMAC", + "AuthenticationConfiguration": { + "SecretToken": "{{resolve:secretsmanager:github-token:SecretString:::}}" + }, + "Filters": [ + { + "JsonPath": "$.ref", + "MatchEquals": "refs/heads/{Branch}" + } + ], + "TargetAction": "Nico-DB_aws-cdk", + "TargetPipeline": { + "Ref": "PipelineWithPostPreparePipeline26230908" + }, + "TargetPipelineVersion": 1, + "RegisterWithThirdParty": true + } + }, + "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRole50FA74A7": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRoleDefaultPolicy7BCFCA94": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC" + }, + "-*" + ] + ] + } + }, + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRoleDefaultPolicy7BCFCA94", + "Roles": [ + { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRole50FA74A7" + } + ] + } + }, + "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC": { + "Type": "AWS::CodeBuild::Project", + "Properties": { + "Artifacts": { + "Type": "CODEPIPELINE" + }, + "Environment": { + "ComputeType": "BUILD_GENERAL1_SMALL", + "Image": "aws/codebuild/standard:6.0", + "ImagePullCredentialsType": "CODEBUILD", + "PrivilegedMode": false, + "Type": "LINUX_CONTAINER" + }, + "ServiceRole": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRole50FA74A7", + "Arn" + ] + }, + "Source": { + "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}", + "Type": "CODEPIPELINE" + }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineWithPostPrepareStack/Pipeline/Build/Synth", + "EncryptionKey": "alias/aws/s3" + } + }, + "PipelineWithPostPreparePipelineBetaApproval0CodePipelineActionRole4EC4A93A": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineWithPostPreparePipelineWave1Prod1Approval1CodePipelineActionRole1E69C5CA": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineWithPostPreparePipelineWave2Prod3Approval2CodePipelineActionRoleDC716EBC": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineWithPostPrepareCodeBuildActionRole452BE06A": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Condition": { + "Bool": { + "aws:ViaAWSService": "codepipeline.amazonaws.com" + } + }, + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineWithPostPrepareCodeBuildActionRoleDefaultPolicy4B1A81F6": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "codebuild:BatchGetBuilds", + "codebuild:StartBuild", + "codebuild:StopBuild" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6", + "Arn" + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "PipelineWithPostPrepareCodeBuildActionRoleDefaultPolicy4B1A81F6", + "Roles": [ + { + "Ref": "PipelineWithPostPrepareCodeBuildActionRole452BE06A" + } + ] + } + }, + "PipelineWithPostPrepareUpdatePipelineSelfMutationRole0B5BA2AF": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "PipelineWithPostPrepareUpdatePipelineSelfMutationRoleDefaultPolicyF7AF6CE2": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6" + }, + "-*" + ] + ] + } + }, + { + "Action": "sts:AssumeRole", + "Condition": { + "ForAnyValue:StringEquals": { + "iam:ResourceTag/aws-cdk:bootstrap-role": [ + "image-publishing", + "file-publishing", + "deploy" + ] + } + }, + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:*:iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/*" + ] + ] + } + }, + { + "Action": [ + "cloudformation:DescribeStacks", + "s3:ListBucket" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "PipelineWithPostPrepareUpdatePipelineSelfMutationRoleDefaultPolicyF7AF6CE2", + "Roles": [ + { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutationRole0B5BA2AF" + } + ] + } + }, + "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6": { + "Type": "AWS::CodeBuild::Project", + "Properties": { + "Artifacts": { + "Type": "CODEPIPELINE" + }, + "Environment": { + "ComputeType": "BUILD_GENERAL1_SMALL", + "Image": "aws/codebuild/standard:6.0", + "ImagePullCredentialsType": "CODEBUILD", + "PrivilegedMode": false, + "Type": "LINUX_CONTAINER" + }, + "ServiceRole": { + "Fn::GetAtt": [ + "PipelineWithPostPrepareUpdatePipelineSelfMutationRole0B5BA2AF", + "Arn" + ] + }, + "Source": { + "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineWithPostPrepareStack --require-approval=never --verbose\"\n ]\n }\n }\n}", + "Type": "CODEPIPELINE" + }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineWithPostPrepareStack/Pipeline/UpdatePipeline/SelfMutate", + "EncryptionKey": "alias/aws/s3" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/PipelineWithPostPrepareStackPipelineWithPostPrepare9F1BC6DA.dot b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/PipelineWithPostPrepareStackPipelineWithPostPrepare9F1BC6DA.dot new file mode 100644 index 0000000000000..5f84bbc07fa83 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/PipelineWithPostPrepareStackPipelineWithPostPrepare9F1BC6DA.dot @@ -0,0 +1,146 @@ +digraph G { + # Arrows represent an "unlocks" relationship (opposite of dependency). So chosen + # because the layout looks more natural that way. + # To represent subgraph dependencies, subgraphs are represented by BEGIN/END nodes. + # To render: `dot -Tsvg PipelineWithPostPrepareStackPipelineWithPostPrepare9F1BC6DA.dot > graph.svg`, open in a browser. + node [shape="box"]; +"BEGIN Build" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Build" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Build.Synth"; +"Source.Nico-DB/aws-cdk" -> "Build.Synth"; +"BEGIN Build" -> "Build.Synth"; +"Build.Synth" -> "END Build"; +"BEGIN UpdatePipeline" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END UpdatePipeline" [shape="cds", style="filled", fillcolor="#b7deff"]; +"UpdatePipeline.SelfMutate"; +"Build.Synth" -> "UpdatePipeline.SelfMutate"; +"BEGIN UpdatePipeline" -> "UpdatePipeline.SelfMutate"; +"UpdatePipeline.SelfMutate" -> "END UpdatePipeline"; +"BEGIN Beta" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Beta" [shape="cds", style="filled", fillcolor="#b7deff"]; +"UpdatePipeline.SelfMutate" -> "BEGIN Beta"; +"BEGIN Beta.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Beta.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Beta.Stack1.Deploy"; +"Beta.Prepare-Beta-Stack1" -> "Beta.Stack1.Deploy"; +"Beta.Approval0" -> "Beta.Stack1.Deploy"; +"BEGIN Beta.Stack1" -> "Beta.Stack1.Deploy"; +"Beta.Stack1.Deploy" -> "END Beta.Stack1"; +"Beta.Prepare-Beta-Stack1"; +"Build.Synth" -> "Beta.Prepare-Beta-Stack1"; +"Beta.Approval0"; +"Beta.Prepare-Beta-Stack1" -> "Beta.Approval0"; +"Beta.Prepare-Beta-Stack2" -> "Beta.Approval0"; +"BEGIN Beta.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Beta.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Beta.Stack1" -> "BEGIN Beta.Stack2"; +"Beta.Stack2.Deploy"; +"Beta.Prepare-Beta-Stack2" -> "Beta.Stack2.Deploy"; +"Beta.Approval0" -> "Beta.Stack2.Deploy"; +"BEGIN Beta.Stack2" -> "Beta.Stack2.Deploy"; +"Beta.Stack2.Deploy" -> "END Beta.Stack2"; +"Beta.Prepare-Beta-Stack2"; +"Build.Synth" -> "Beta.Prepare-Beta-Stack2"; +"BEGIN Beta" -> "Beta.Prepare-Beta-Stack1"; +"BEGIN Beta" -> "Beta.Prepare-Beta-Stack2"; +"END Beta.Stack2" -> "END Beta"; +"BEGIN Wave1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"UpdatePipeline.SelfMutate" -> "BEGIN Wave1"; +"END Beta" -> "BEGIN Wave1"; +"BEGIN Wave1.Prod1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"BEGIN Wave1.Prod1.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod1.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Approval1" -> "Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Prepare-Prod1-Stack1" -> "Wave1.Prod1.Stack1.Deploy"; +"BEGIN Wave1.Prod1.Stack1" -> "Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Stack1.Deploy" -> "END Wave1.Prod1.Stack1"; +"Wave1.Prod1.Prepare-Prod1-Stack1"; +"Build.Synth" -> "Wave1.Prod1.Prepare-Prod1-Stack1"; +"Wave1.Prod1.Approval1"; +"Wave1.Prod1.Prepare-Prod1-Stack1" -> "Wave1.Prod1.Approval1"; +"Wave1.Prod1.Prepare-Prod1-Stack2" -> "Wave1.Prod1.Approval1"; +"Wave1.Prod2.Prepare-Prod2-Stack1" -> "Wave1.Prod1.Approval1"; +"Wave1.Prod2.Prepare-Prod2-Stack2" -> "Wave1.Prod1.Approval1"; +"BEGIN Wave1.Prod1.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod1.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod1.Stack1" -> "BEGIN Wave1.Prod1.Stack2"; +"Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Approval1" -> "Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Prepare-Prod1-Stack2" -> "Wave1.Prod1.Stack2.Deploy"; +"BEGIN Wave1.Prod1.Stack2" -> "Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Stack2.Deploy" -> "END Wave1.Prod1.Stack2"; +"Wave1.Prod1.Prepare-Prod1-Stack2"; +"Build.Synth" -> "Wave1.Prod1.Prepare-Prod1-Stack2"; +"BEGIN Wave1.Prod1" -> "Wave1.Prod1.Prepare-Prod1-Stack1"; +"BEGIN Wave1.Prod1" -> "Wave1.Prod1.Prepare-Prod1-Stack2"; +"END Wave1.Prod1.Stack2" -> "END Wave1.Prod1"; +"BEGIN Wave1.Prod2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"BEGIN Wave1.Prod2.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod2.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod1.Approval1" -> "Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod2.Prepare-Prod2-Stack1" -> "Wave1.Prod2.Stack1.Deploy"; +"BEGIN Wave1.Prod2.Stack1" -> "Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod2.Stack1.Deploy" -> "END Wave1.Prod2.Stack1"; +"Wave1.Prod2.Prepare-Prod2-Stack1"; +"Build.Synth" -> "Wave1.Prod2.Prepare-Prod2-Stack1"; +"BEGIN Wave1.Prod2.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod2.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave1.Prod2.Stack1" -> "BEGIN Wave1.Prod2.Stack2"; +"Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod1.Approval1" -> "Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod2.Prepare-Prod2-Stack2" -> "Wave1.Prod2.Stack2.Deploy"; +"BEGIN Wave1.Prod2.Stack2" -> "Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod2.Stack2.Deploy" -> "END Wave1.Prod2.Stack2"; +"Wave1.Prod2.Prepare-Prod2-Stack2"; +"Build.Synth" -> "Wave1.Prod2.Prepare-Prod2-Stack2"; +"BEGIN Wave1.Prod2" -> "Wave1.Prod2.Prepare-Prod2-Stack1"; +"BEGIN Wave1.Prod2" -> "Wave1.Prod2.Prepare-Prod2-Stack2"; +"END Wave1.Prod2.Stack2" -> "END Wave1.Prod2"; +"BEGIN Wave1" -> "BEGIN Wave1.Prod1"; +"END Wave1.Prod2" -> "END Wave1"; +"BEGIN Wave2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"UpdatePipeline.SelfMutate" -> "BEGIN Wave2"; +"END Wave1" -> "BEGIN Wave2"; +"BEGIN Wave2.Prod3" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2.Prod3" [shape="cds", style="filled", fillcolor="#b7deff"]; +"BEGIN Wave2.Prod3.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2.Prod3.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Approval2" -> "Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Prepare-Prod3-Stack1" -> "Wave2.Prod3.Stack1.Deploy"; +"BEGIN Wave2.Prod3.Stack1" -> "Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Stack1.Deploy" -> "END Wave2.Prod3.Stack1"; +"Wave2.Prod3.Prepare-Prod3-Stack1"; +"Build.Synth" -> "Wave2.Prod3.Prepare-Prod3-Stack1"; +"Wave2.Prod3.Approval2"; +"Wave2.Prod3.Prepare-Prod3-Stack1" -> "Wave2.Prod3.Approval2"; +"Wave2.Prod4.Prepare-Prod4-Stack2" -> "Wave2.Prod3.Approval2"; +"BEGIN Wave2.Prod3" -> "Wave2.Prod3.Prepare-Prod3-Stack1"; +"END Wave2.Prod3.Stack1" -> "END Wave2.Prod3"; +"BEGIN Wave2.Prod4" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2.Prod4" [shape="cds", style="filled", fillcolor="#b7deff"]; +"BEGIN Wave2.Prod4.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Wave2.Prod4.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod3.Approval2" -> "Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod4.Prepare-Prod4-Stack2" -> "Wave2.Prod4.Stack2.Deploy"; +"BEGIN Wave2.Prod4.Stack2" -> "Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod4.Stack2.Deploy" -> "END Wave2.Prod4.Stack2"; +"Wave2.Prod4.Prepare-Prod4-Stack2"; +"Build.Synth" -> "Wave2.Prod4.Prepare-Prod4-Stack2"; +"BEGIN Wave2.Prod4" -> "Wave2.Prod4.Prepare-Prod4-Stack2"; +"END Wave2.Prod4.Stack2" -> "END Wave2.Prod4"; +"BEGIN Wave2" -> "BEGIN Wave2.Prod3"; +"END Wave2.Prod4" -> "END Wave2"; +"BEGIN Source" [shape="cds", style="filled", fillcolor="#b7deff"]; +"END Source" [shape="cds", style="filled", fillcolor="#b7deff"]; +"Source.Nico-DB/aws-cdk"; +"BEGIN Source" -> "Source.Nico-DB/aws-cdk"; +"Source.Nico-DB/aws-cdk" -> "END Source"; +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack1E900E8C2.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack1E900E8C2.assets.json new file mode 100644 index 0000000000000..f48b2155e3bb7 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack1E900E8C2.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "91031b26c04588c38a59e3481d308182b5244c5f5a3af3ee05566e2f4f70ce65": { + "source": { + "path": "PipelineWithPostPrepareStackBetaStack1E900E8C2.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "91031b26c04588c38a59e3481d308182b5244c5f5a3af3ee05566e2f4f70ce65.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack1E900E8C2.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack1E900E8C2.template.json new file mode 100644 index 0000000000000..c1339d0126ee2 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack1E900E8C2.template.json @@ -0,0 +1,56 @@ +{ + "Resources": { + "Queue4A7E3555": { + "Type": "AWS::SQS::Queue", + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Outputs": { + "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E": { + "Value": { + "Fn::GetAtt": [ + "Queue4A7E3555", + "Arn" + ] + }, + "Export": { + "Name": "Beta-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack2A215C7AA.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack2A215C7AA.assets.json new file mode 100644 index 0000000000000..9c897f7110973 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack2A215C7AA.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "e3aa38ca82b00b776ad3834e9ee862d2e529d91c0f0b12fad846884e1e600326": { + "source": { + "path": "PipelineWithPostPrepareStackBetaStack2A215C7AA.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "e3aa38ca82b00b776ad3834e9ee862d2e529d91c0f0b12fad846884e1e600326.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack2A215C7AA.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack2A215C7AA.template.json new file mode 100644 index 0000000000000..f7390e702aa6d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack2A215C7AA.template.json @@ -0,0 +1,51 @@ +{ + "Resources": { + "OtherQueue60B686DC": { + "Type": "AWS::SQS::Queue", + "Properties": { + "RedrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Beta-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/manifest.json new file mode 100644 index 0000000000000..1eb311e9e40b6 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Beta/manifest.json @@ -0,0 +1,120 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithPostPrepareStackBetaStack1E900E8C2.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithPostPrepareStackBetaStack1E900E8C2.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithPostPrepareStackBetaStack1E900E8C2": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithPostPrepareStackBetaStack1E900E8C2.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/91031b26c04588c38a59e3481d308182b5244c5f5a3af3ee05566e2f4f70ce65.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithPostPrepareStackBetaStack1E900E8C2.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Beta-Stack1" + }, + "dependencies": [ + "PipelineWithPostPrepareStackBetaStack1E900E8C2.assets" + ], + "metadata": { + "/PipelineWithPostPrepareStack/Beta/Stack1/Queue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Queue4A7E3555" + } + ], + "/PipelineWithPostPrepareStack/Beta/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + ], + "/PipelineWithPostPrepareStack/Beta/Stack1/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithPostPrepareStack/Beta/Stack1/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithPostPrepareStack/Beta/Stack1" + }, + "PipelineWithPostPrepareStackBetaStack2A215C7AA.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithPostPrepareStackBetaStack2A215C7AA.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithPostPrepareStackBetaStack2A215C7AA": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithPostPrepareStackBetaStack2A215C7AA.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/e3aa38ca82b00b776ad3834e9ee862d2e529d91c0f0b12fad846884e1e600326.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithPostPrepareStackBetaStack2A215C7AA.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Beta-Stack2" + }, + "dependencies": [ + "PipelineWithPostPrepareStackBetaStack1E900E8C2", + "PipelineWithPostPrepareStackBetaStack2A215C7AA.assets" + ], + "metadata": { + "/PipelineWithPostPrepareStack/Beta/Stack2/OtherQueue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OtherQueue60B686DC" + } + ], + "/PipelineWithPostPrepareStack/Beta/Stack2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithPostPrepareStack/Beta/Stack2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithPostPrepareStack/Beta/Stack2" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack18A6E05FD.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack18A6E05FD.assets.json new file mode 100644 index 0000000000000..aaad33fa62a1c --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack18A6E05FD.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "774f0c3cec814003a4da7d6cab73aec82952a0cb52a221b3f94fae483d9922a3": { + "source": { + "path": "PipelineWithPostPrepareStackProd1Stack18A6E05FD.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "774f0c3cec814003a4da7d6cab73aec82952a0cb52a221b3f94fae483d9922a3.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack18A6E05FD.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack18A6E05FD.template.json new file mode 100644 index 0000000000000..b46a5cc4fbb7d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack18A6E05FD.template.json @@ -0,0 +1,56 @@ +{ + "Resources": { + "Queue4A7E3555": { + "Type": "AWS::SQS::Queue", + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Outputs": { + "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E": { + "Value": { + "Fn::GetAtt": [ + "Queue4A7E3555", + "Arn" + ] + }, + "Export": { + "Name": "Prod1-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack23830DAC4.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack23830DAC4.assets.json new file mode 100644 index 0000000000000..7edbf09075d8c --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack23830DAC4.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "c1cb4eebe68ea920a89e618efa29c36ecc1aa0c6f6ef6b65559efe9c0bba4059": { + "source": { + "path": "PipelineWithPostPrepareStackProd1Stack23830DAC4.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "c1cb4eebe68ea920a89e618efa29c36ecc1aa0c6f6ef6b65559efe9c0bba4059.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack23830DAC4.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack23830DAC4.template.json new file mode 100644 index 0000000000000..fcabd32211080 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack23830DAC4.template.json @@ -0,0 +1,51 @@ +{ + "Resources": { + "OtherQueue60B686DC": { + "Type": "AWS::SQS::Queue", + "Properties": { + "RedrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Prod1-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/manifest.json new file mode 100644 index 0000000000000..fe9b877cc24a4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod1/manifest.json @@ -0,0 +1,120 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithPostPrepareStackProd1Stack18A6E05FD.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithPostPrepareStackProd1Stack18A6E05FD.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithPostPrepareStackProd1Stack18A6E05FD": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithPostPrepareStackProd1Stack18A6E05FD.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/774f0c3cec814003a4da7d6cab73aec82952a0cb52a221b3f94fae483d9922a3.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithPostPrepareStackProd1Stack18A6E05FD.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod1-Stack1" + }, + "dependencies": [ + "PipelineWithPostPrepareStackProd1Stack18A6E05FD.assets" + ], + "metadata": { + "/PipelineWithPostPrepareStack/Prod1/Stack1/Queue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Queue4A7E3555" + } + ], + "/PipelineWithPostPrepareStack/Prod1/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + ], + "/PipelineWithPostPrepareStack/Prod1/Stack1/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithPostPrepareStack/Prod1/Stack1/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithPostPrepareStack/Prod1/Stack1" + }, + "PipelineWithPostPrepareStackProd1Stack23830DAC4.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithPostPrepareStackProd1Stack23830DAC4.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithPostPrepareStackProd1Stack23830DAC4": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithPostPrepareStackProd1Stack23830DAC4.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/c1cb4eebe68ea920a89e618efa29c36ecc1aa0c6f6ef6b65559efe9c0bba4059.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithPostPrepareStackProd1Stack23830DAC4.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod1-Stack2" + }, + "dependencies": [ + "PipelineWithPostPrepareStackProd1Stack18A6E05FD", + "PipelineWithPostPrepareStackProd1Stack23830DAC4.assets" + ], + "metadata": { + "/PipelineWithPostPrepareStack/Prod1/Stack2/OtherQueue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OtherQueue60B686DC" + } + ], + "/PipelineWithPostPrepareStack/Prod1/Stack2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithPostPrepareStack/Prod1/Stack2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithPostPrepareStack/Prod1/Stack2" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack1AE394F2F.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack1AE394F2F.assets.json new file mode 100644 index 0000000000000..e5a32c734926d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack1AE394F2F.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "a595899a57366f015e986ac46c3da09fac75670ea0f4719de8defc67d731fa68": { + "source": { + "path": "PipelineWithPostPrepareStackProd2Stack1AE394F2F.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "a595899a57366f015e986ac46c3da09fac75670ea0f4719de8defc67d731fa68.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack1AE394F2F.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack1AE394F2F.template.json new file mode 100644 index 0000000000000..302ccbd07207e --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack1AE394F2F.template.json @@ -0,0 +1,56 @@ +{ + "Resources": { + "Queue4A7E3555": { + "Type": "AWS::SQS::Queue", + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Outputs": { + "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E": { + "Value": { + "Fn::GetAtt": [ + "Queue4A7E3555", + "Arn" + ] + }, + "Export": { + "Name": "Prod2-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack2FE352778.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack2FE352778.assets.json new file mode 100644 index 0000000000000..990375301937f --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack2FE352778.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "364ee9a72c6c371a00c6e41438695af070848a2d625a4c953bfc4666e7ad5ae9": { + "source": { + "path": "PipelineWithPostPrepareStackProd2Stack2FE352778.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "364ee9a72c6c371a00c6e41438695af070848a2d625a4c953bfc4666e7ad5ae9.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack2FE352778.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack2FE352778.template.json new file mode 100644 index 0000000000000..933decc98d696 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack2FE352778.template.json @@ -0,0 +1,51 @@ +{ + "Resources": { + "OtherQueue60B686DC": { + "Type": "AWS::SQS::Queue", + "Properties": { + "RedrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Prod2-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/manifest.json new file mode 100644 index 0000000000000..6dffaff4aaf90 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod2/manifest.json @@ -0,0 +1,120 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithPostPrepareStackProd2Stack1AE394F2F.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithPostPrepareStackProd2Stack1AE394F2F.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithPostPrepareStackProd2Stack1AE394F2F": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithPostPrepareStackProd2Stack1AE394F2F.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/a595899a57366f015e986ac46c3da09fac75670ea0f4719de8defc67d731fa68.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithPostPrepareStackProd2Stack1AE394F2F.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod2-Stack1" + }, + "dependencies": [ + "PipelineWithPostPrepareStackProd2Stack1AE394F2F.assets" + ], + "metadata": { + "/PipelineWithPostPrepareStack/Prod2/Stack1/Queue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Queue4A7E3555" + } + ], + "/PipelineWithPostPrepareStack/Prod2/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + } + ], + "/PipelineWithPostPrepareStack/Prod2/Stack1/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithPostPrepareStack/Prod2/Stack1/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithPostPrepareStack/Prod2/Stack1" + }, + "PipelineWithPostPrepareStackProd2Stack2FE352778.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithPostPrepareStackProd2Stack2FE352778.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithPostPrepareStackProd2Stack2FE352778": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithPostPrepareStackProd2Stack2FE352778.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/364ee9a72c6c371a00c6e41438695af070848a2d625a4c953bfc4666e7ad5ae9.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithPostPrepareStackProd2Stack2FE352778.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod2-Stack2" + }, + "dependencies": [ + "PipelineWithPostPrepareStackProd2Stack1AE394F2F", + "PipelineWithPostPrepareStackProd2Stack2FE352778.assets" + ], + "metadata": { + "/PipelineWithPostPrepareStack/Prod2/Stack2/OtherQueue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OtherQueue60B686DC" + } + ], + "/PipelineWithPostPrepareStack/Prod2/Stack2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithPostPrepareStack/Prod2/Stack2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithPostPrepareStack/Prod2/Stack2" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/PipelineWithPostPrepareStackProd3Stack1E9091829.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/PipelineWithPostPrepareStackProd3Stack1E9091829.assets.json new file mode 100644 index 0000000000000..1cf4590723fd4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/PipelineWithPostPrepareStackProd3Stack1E9091829.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "PipelineWithPostPrepareStackProd3Stack1E9091829.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/PipelineWithPostPrepareStackProd3Stack1E9091829.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/PipelineWithPostPrepareStackProd3Stack1E9091829.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/PipelineWithPostPrepareStackProd3Stack1E9091829.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/manifest.json new file mode 100644 index 0000000000000..b0a84091323f2 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod3/manifest.json @@ -0,0 +1,53 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithPostPrepareStackProd3Stack1E9091829.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithPostPrepareStackProd3Stack1E9091829.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithPostPrepareStackProd3Stack1E9091829": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithPostPrepareStackProd3Stack1E9091829.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithPostPrepareStackProd3Stack1E9091829.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod3-Stack1" + }, + "dependencies": [ + "PipelineWithPostPrepareStackProd3Stack1E9091829.assets" + ], + "metadata": { + "/PipelineWithPostPrepareStack/Prod3/Stack1/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithPostPrepareStack/Prod3/Stack1/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithPostPrepareStack/Prod3/Stack1" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/PipelineWithPostPrepareStackProd4Stack224266FA1.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/PipelineWithPostPrepareStackProd4Stack224266FA1.assets.json new file mode 100644 index 0000000000000..0568fd5d01c44 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/PipelineWithPostPrepareStackProd4Stack224266FA1.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "PipelineWithPostPrepareStackProd4Stack224266FA1.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/PipelineWithPostPrepareStackProd4Stack224266FA1.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/PipelineWithPostPrepareStackProd4Stack224266FA1.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/PipelineWithPostPrepareStackProd4Stack224266FA1.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/manifest.json new file mode 100644 index 0000000000000..bc58be966ac1d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/assembly-PipelineWithPostPrepareStack-Prod4/manifest.json @@ -0,0 +1,53 @@ +{ + "version": "31.0.0", + "artifacts": { + "PipelineWithPostPrepareStackProd4Stack224266FA1.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithPostPrepareStackProd4Stack224266FA1.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithPostPrepareStackProd4Stack224266FA1": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithPostPrepareStackProd4Stack224266FA1.template.json", + "validateOnSynth": true, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithPostPrepareStackProd4Stack224266FA1.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + }, + "stackName": "Prod4-Stack2" + }, + "dependencies": [ + "PipelineWithPostPrepareStackProd4Stack224266FA1.assets" + ], + "metadata": { + "/PipelineWithPostPrepareStack/Prod4/Stack2/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithPostPrepareStack/Prod4/Stack2/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithPostPrepareStack/Prod4/Stack2" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/cdk.out new file mode 100644 index 0000000000000..7925065efbcc4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"31.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/integ.json new file mode 100644 index 0000000000000..5c345d605c42d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "31.0.0", + "testCases": { + "Integ/DefaultTest": { + "stacks": [ + "PipelineWithPostPrepareStack" + ], + "assertionStack": "Integ/DefaultTest/DeployAssert", + "assertionStackName": "IntegDefaultTestDeployAssert4E6713E1" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/manifest.json new file mode 100644 index 0000000000000..f01152cb6c4c5 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/manifest.json @@ -0,0 +1,242 @@ +{ + "version": "31.0.0", + "artifacts": { + "assembly-PipelineWithPostPrepareStack-Beta": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithPostPrepareStack-Beta", + "displayName": "PipelineWithPostPrepareStack/Beta" + } + }, + "assembly-PipelineWithPostPrepareStack-Prod1": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithPostPrepareStack-Prod1", + "displayName": "PipelineWithPostPrepareStack/Prod1" + } + }, + "assembly-PipelineWithPostPrepareStack-Prod2": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithPostPrepareStack-Prod2", + "displayName": "PipelineWithPostPrepareStack/Prod2" + } + }, + "assembly-PipelineWithPostPrepareStack-Prod3": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithPostPrepareStack-Prod3", + "displayName": "PipelineWithPostPrepareStack/Prod3" + } + }, + "assembly-PipelineWithPostPrepareStack-Prod4": { + "type": "cdk:cloud-assembly", + "properties": { + "directoryName": "assembly-PipelineWithPostPrepareStack-Prod4", + "displayName": "PipelineWithPostPrepareStack/Prod4" + } + }, + "PipelineWithPostPrepareStack.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "PipelineWithPostPrepareStack.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "PipelineWithPostPrepareStack": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "PipelineWithPostPrepareStack.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/0b49d4ab5e39b8af3160f841b1cb57d051eeb3009e494aeb1069ddb2d38e7114.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "PipelineWithPostPrepareStack.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "PipelineWithPostPrepareStack.assets" + ], + "metadata": { + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/ArtifactsBucket/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/ArtifactsBucket/Policy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineArtifactsBucketPolicy083A21B1" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineRole2917FC8F" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Role/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineRoleDefaultPolicy488B101C" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipeline26230908" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Source/Nico-DB_aws-cdk/WebhookResource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineSourceNicoDBawscdkWebhookResourceD40271CA" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRole50FA74A7" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject/Role/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRoleDefaultPolicy7BCFCA94" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta/Approval0/CodePipelineActionRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineBetaApproval0CodePipelineActionRole4EC4A93A" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod1.Approval1/CodePipelineActionRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineWave1Prod1Approval1CodePipelineActionRole1E69C5CA" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2/Prod3.Approval2/CodePipelineActionRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPreparePipelineWave2Prod3Approval2CodePipelineActionRoleDC716EBC" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/CodeBuildActionRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPrepareCodeBuildActionRole452BE06A" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/CodeBuildActionRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPrepareCodeBuildActionRoleDefaultPolicy4B1A81F6" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPrepareUpdatePipelineSelfMutationRole0B5BA2AF" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation/Role/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPrepareUpdatePipelineSelfMutationRoleDefaultPolicyF7AF6CE2" + } + ], + "/PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6" + } + ], + "/PipelineWithPostPrepareStack/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/PipelineWithPostPrepareStack/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "PipelineWithPostPrepareStack" + }, + "IntegDefaultTestDeployAssert4E6713E1.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "IntegDefaultTestDeployAssert4E6713E1.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "IntegDefaultTestDeployAssert4E6713E1": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "IntegDefaultTestDeployAssert4E6713E1.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "IntegDefaultTestDeployAssert4E6713E1.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "IntegDefaultTestDeployAssert4E6713E1.assets" + ], + "metadata": { + "/Integ/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "Integ/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/tree.json new file mode 100644 index 0000000000000..df0a89aa2ff17 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.js.snapshot/tree.json @@ -0,0 +1,3098 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "PipelineWithPostPrepareStack": { + "id": "PipelineWithPostPrepareStack", + "path": "PipelineWithPostPrepareStack", + "children": { + "PipelineWithPostPrepare": { + "id": "PipelineWithPostPrepare", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare", + "children": { + "Pipeline": { + "id": "Pipeline", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline", + "children": { + "ArtifactsBucket": { + "id": "ArtifactsBucket", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/ArtifactsBucket", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/ArtifactsBucket/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::Bucket", + "aws:cdk:cloudformation:props": { + "bucketEncryption": { + "serverSideEncryptionConfiguration": [ + { + "serverSideEncryptionByDefault": { + "sseAlgorithm": "aws:kms" + } + } + ] + }, + "publicAccessBlockConfiguration": { + "blockPublicAcls": true, + "blockPublicPolicy": true, + "ignorePublicAcls": true, + "restrictPublicBuckets": true + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.CfnBucket", + "version": "0.0.0" + } + }, + "Policy": { + "id": "Policy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/ArtifactsBucket/Policy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/ArtifactsBucket/Policy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::BucketPolicy", + "aws:cdk:cloudformation:props": { + "bucket": { + "Ref": "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB" + }, + "policyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Condition": { + "Bool": { + "aws:SecureTransport": "false" + } + }, + "Effect": "Deny", + "Principal": { + "AWS": "*" + }, + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.CfnBucketPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.BucketPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.Bucket", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codepipeline.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Role/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Role/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPrepareCodeBuildActionRole452BE06A", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineBetaApproval0CodePipelineActionRole4EC4A93A", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineWave1Prod1Approval1CodePipelineActionRole1E69C5CA", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineWave2Prod3Approval2CodePipelineActionRoleDC716EBC", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "PipelineWithPostPreparePipelineRoleDefaultPolicy488B101C", + "roles": [ + { + "Ref": "PipelineWithPostPreparePipelineRole2917FC8F" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodePipeline::Pipeline", + "aws:cdk:cloudformation:props": { + "roleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineRole2917FC8F", + "Arn" + ] + }, + "stages": [ + { + "name": "Source", + "actions": [ + { + "name": "Nico-DB_aws-cdk", + "outputArtifacts": [ + { + "name": "Nico_DB_aws_cdk_Source" + } + ], + "actionTypeId": { + "category": "Source", + "version": "1", + "owner": "ThirdParty", + "provider": "GitHub" + }, + "configuration": { + "Owner": "Nico-DB", + "Repo": "aws-cdk", + "Branch": "main", + "OAuthToken": "{{resolve:secretsmanager:github-token:SecretString:::}}", + "PollForSourceChanges": false + }, + "runOrder": 1 + } + ] + }, + { + "name": "Build", + "actions": [ + { + "name": "Synth", + "inputArtifacts": [ + { + "name": "Nico_DB_aws_cdk_Source" + } + ], + "outputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Build", + "version": "1", + "owner": "AWS", + "provider": "CodeBuild" + }, + "configuration": { + "ProjectName": { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC" + }, + "EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"09deb76d97fe89f2ccd364ad1eedc7ebc7c010be6bf79da68c34f358446cd134\"}]" + }, + "runOrder": 1, + "roleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPrepareCodeBuildActionRole452BE06A", + "Arn" + ] + } + } + ] + }, + { + "name": "UpdatePipeline", + "actions": [ + { + "name": "SelfMutate", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Build", + "version": "1", + "owner": "AWS", + "provider": "CodeBuild" + }, + "configuration": { + "ProjectName": { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6" + }, + "EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"3ddee2251fc74ec37387ef5b88ac1031be8e788fc79a287a0792aa9ee9134fe2\"}]" + }, + "runOrder": 1, + "roleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPrepareCodeBuildActionRole452BE06A", + "Arn" + ] + } + } + ] + }, + { + "name": "Beta", + "actions": [ + { + "name": "Prepare-Beta-Stack1", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Beta-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack1E900E8C2.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prepare-Beta-Stack2", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Beta-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Beta/PipelineWithPostPrepareStackBetaStack2A215C7AA.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Approval0", + "actionTypeId": { + "category": "Approval", + "version": "1", + "owner": "AWS", + "provider": "Manual" + }, + "runOrder": 2, + "roleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineBetaApproval0CodePipelineActionRole4EC4A93A", + "Arn" + ] + } + }, + { + "name": "Stack1.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Beta-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 3, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Stack2.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Beta-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 4, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + } + ] + }, + { + "name": "Wave1", + "actions": [ + { + "name": "Prod1.Prepare-Prod1-Stack1", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod1-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack18A6E05FD.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod1.Prepare-Prod1-Stack2", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod1-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod1/PipelineWithPostPrepareStackProd1Stack23830DAC4.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod2.Prepare-Prod2-Stack1", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod2-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack1AE394F2F.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod2.Prepare-Prod2-Stack2", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod2-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod2/PipelineWithPostPrepareStackProd2Stack2FE352778.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod1.Approval1", + "actionTypeId": { + "category": "Approval", + "version": "1", + "owner": "AWS", + "provider": "Manual" + }, + "runOrder": 2, + "roleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineWave1Prod1Approval1CodePipelineActionRole1E69C5CA", + "Arn" + ] + } + }, + { + "name": "Prod1.Stack1.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod1-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 3, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod2.Stack1.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod2-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 3, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod1.Stack2.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod1-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 4, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod2.Stack2.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod2-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 4, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + } + ] + }, + { + "name": "Wave2", + "actions": [ + { + "name": "Prod3.Prepare-Prod3-Stack1", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod3-Stack1", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod3/PipelineWithPostPrepareStackProd3Stack1E9091829.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod4.Prepare-Prod4-Stack2", + "inputArtifacts": [ + { + "name": "Synth_Output" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod4-Stack2", + "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND", + "RoleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-cfn-exec-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + }, + "ActionMode": "CHANGE_SET_REPLACE", + "ChangeSetName": "PipelineChange", + "TemplatePath": "Synth_Output::assembly-PipelineWithPostPrepareStack-Prod4/PipelineWithPostPrepareStackProd4Stack224266FA1.template.json" + }, + "runOrder": 1, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod3.Approval2", + "actionTypeId": { + "category": "Approval", + "version": "1", + "owner": "AWS", + "provider": "Manual" + }, + "runOrder": 2, + "roleArn": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineWave2Prod3Approval2CodePipelineActionRoleDC716EBC", + "Arn" + ] + } + }, + { + "name": "Prod3.Stack1.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod3-Stack1", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 3, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + }, + { + "name": "Prod4.Stack2.Deploy", + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "CloudFormation" + }, + "configuration": { + "StackName": "Prod4-Stack2", + "ActionMode": "CHANGE_SET_EXECUTE", + "ChangeSetName": "PipelineChange" + }, + "runOrder": 3, + "roleArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/cdk-hnb659fds-deploy-role-", + { + "Ref": "AWS::AccountId" + }, + "-", + { + "Ref": "AWS::Region" + } + ] + ] + } + } + ] + } + ], + "artifactStore": { + "type": "S3", + "location": { + "Ref": "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB" + } + }, + "restartExecutionOnUpdate": true + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codepipeline.CfnPipeline", + "version": "0.0.0" + } + }, + "Source": { + "id": "Source", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Source", + "children": { + "Nico-DB_aws-cdk": { + "id": "Nico-DB_aws-cdk", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Source/Nico-DB_aws-cdk", + "children": { + "WebhookResource": { + "id": "WebhookResource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Source/Nico-DB_aws-cdk/WebhookResource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodePipeline::Webhook", + "aws:cdk:cloudformation:props": { + "authentication": "GITHUB_HMAC", + "authenticationConfiguration": { + "secretToken": "{{resolve:secretsmanager:github-token:SecretString:::}}" + }, + "filters": [ + { + "jsonPath": "$.ref", + "matchEquals": "refs/heads/{Branch}" + } + ], + "targetAction": "Nico-DB_aws-cdk", + "targetPipeline": { + "Ref": "PipelineWithPostPreparePipeline26230908" + }, + "targetPipelineVersion": 1, + "registerWithThirdParty": true + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codepipeline.CfnWebhook", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Build": { + "id": "Build", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build", + "children": { + "Synth": { + "id": "Synth", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth", + "children": { + "CdkBuildProject": { + "id": "CdkBuildProject", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject", + "children": { + "Role": { + "id": "Role", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject/Role/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject/Role/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC" + }, + "-*" + ] + ] + } + }, + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRoleDefaultPolicy7BCFCA94", + "roles": [ + { + "Ref": "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRole50FA74A7" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Build/Synth/CdkBuildProject/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodeBuild::Project", + "aws:cdk:cloudformation:props": { + "artifacts": { + "type": "CODEPIPELINE" + }, + "environment": { + "type": "LINUX_CONTAINER", + "image": "aws/codebuild/standard:6.0", + "imagePullCredentialsType": "CODEBUILD", + "privilegedMode": false, + "computeType": "BUILD_GENERAL1_SMALL" + }, + "serviceRole": { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectRole50FA74A7", + "Arn" + ] + }, + "source": { + "type": "CODEPIPELINE", + "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}" + }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineWithPostPrepareStack/Pipeline/Build/Synth", + "encryptionKey": "alias/aws/s3" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.CfnProject", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.PipelineProject", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "UpdatePipeline": { + "id": "UpdatePipeline", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/UpdatePipeline", + "children": { + "SelfMutate": { + "id": "SelfMutate", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/UpdatePipeline/SelfMutate", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Beta": { + "id": "Beta", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta", + "children": { + "Prepare-Beta-Stack1": { + "id": "Prepare-Beta-Stack1", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta/Prepare-Beta-Stack1", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prepare-Beta-Stack2": { + "id": "Prepare-Beta-Stack2", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta/Prepare-Beta-Stack2", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Approval0": { + "id": "Approval0", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta/Approval0", + "children": { + "CodePipelineActionRole": { + "id": "CodePipelineActionRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta/Approval0/CodePipelineActionRole", + "children": { + "ImportCodePipelineActionRole": { + "id": "ImportCodePipelineActionRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta/Approval0/CodePipelineActionRole/ImportCodePipelineActionRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta/Approval0/CodePipelineActionRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Stack1.Deploy": { + "id": "Stack1.Deploy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta/Stack1.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Stack2.Deploy": { + "id": "Stack2.Deploy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Beta/Stack2.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { + "id": "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { + "id": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "children": { + "8389e75f-0810-4838-bf64-d6f85a95cf83": { + "id": "8389e75f-0810-4838-bf64-d6f85a95cf83", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}/8389e75f-0810-4838-bf64-d6f85a95cf83", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}": { + "id": "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}": { + "id": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Wave1": { + "id": "Wave1", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1", + "children": { + "Prod1.Prepare-Prod1-Stack1": { + "id": "Prod1.Prepare-Prod1-Stack1", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod1.Prepare-Prod1-Stack1", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod1.Prepare-Prod1-Stack2": { + "id": "Prod1.Prepare-Prod1-Stack2", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod1.Prepare-Prod1-Stack2", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod2.Prepare-Prod2-Stack1": { + "id": "Prod2.Prepare-Prod2-Stack1", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod2.Prepare-Prod2-Stack1", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod2.Prepare-Prod2-Stack2": { + "id": "Prod2.Prepare-Prod2-Stack2", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod2.Prepare-Prod2-Stack2", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod1.Approval1": { + "id": "Prod1.Approval1", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod1.Approval1", + "children": { + "CodePipelineActionRole": { + "id": "CodePipelineActionRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod1.Approval1/CodePipelineActionRole", + "children": { + "ImportCodePipelineActionRole": { + "id": "ImportCodePipelineActionRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod1.Approval1/CodePipelineActionRole/ImportCodePipelineActionRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod1.Approval1/CodePipelineActionRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod1.Stack1.Deploy": { + "id": "Prod1.Stack1.Deploy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod1.Stack1.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod2.Stack1.Deploy": { + "id": "Prod2.Stack1.Deploy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod2.Stack1.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod1.Stack2.Deploy": { + "id": "Prod1.Stack2.Deploy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod1.Stack2.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod2.Stack2.Deploy": { + "id": "Prod2.Stack2.Deploy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave1/Prod2.Stack2.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Wave2": { + "id": "Wave2", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2", + "children": { + "Prod3.Prepare-Prod3-Stack1": { + "id": "Prod3.Prepare-Prod3-Stack1", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2/Prod3.Prepare-Prod3-Stack1", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod4.Prepare-Prod4-Stack2": { + "id": "Prod4.Prepare-Prod4-Stack2", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2/Prod4.Prepare-Prod4-Stack2", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod3.Approval2": { + "id": "Prod3.Approval2", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2/Prod3.Approval2", + "children": { + "CodePipelineActionRole": { + "id": "CodePipelineActionRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2/Prod3.Approval2/CodePipelineActionRole", + "children": { + "ImportCodePipelineActionRole": { + "id": "ImportCodePipelineActionRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2/Prod3.Approval2/CodePipelineActionRole/ImportCodePipelineActionRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2/Prod3.Approval2/CodePipelineActionRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod3.Stack1.Deploy": { + "id": "Prod3.Stack1.Deploy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2/Prod3.Stack1.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "Prod4.Stack2.Deploy": { + "id": "Prod4.Stack2.Deploy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/Pipeline/Wave2/Prod4.Stack2.Deploy", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codepipeline.Pipeline", + "version": "0.0.0" + } + }, + "CodeBuildActionRole": { + "id": "CodeBuildActionRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/CodeBuildActionRole", + "children": { + "ImportCodeBuildActionRole": { + "id": "ImportCodeBuildActionRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/CodeBuildActionRole/ImportCodeBuildActionRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/CodeBuildActionRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Condition": { + "Bool": { + "aws:ViaAWSService": "codepipeline.amazonaws.com" + } + }, + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/CodeBuildActionRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/CodeBuildActionRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "codebuild:BatchGetBuilds", + "codebuild:StartBuild", + "codebuild:StopBuild" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineBuildSynthCdkBuildProjectFD5AF1EC", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6", + "Arn" + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "PipelineWithPostPrepareCodeBuildActionRoleDefaultPolicy4B1A81F6", + "roles": [ + { + "Ref": "PipelineWithPostPrepareCodeBuildActionRole452BE06A" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "UpdatePipeline": { + "id": "UpdatePipeline", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline", + "children": { + "SelfMutation": { + "id": "SelfMutation", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation", + "children": { + "Role": { + "id": "Role", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codebuild.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation/Role/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation/Role/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6" + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":logs:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":log-group:/aws/codebuild/", + { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6" + } + ] + ] + } + ] + }, + { + "Action": [ + "codebuild:BatchPutCodeCoverages", + "codebuild:BatchPutTestCases", + "codebuild:CreateReport", + "codebuild:CreateReportGroup", + "codebuild:UpdateReport" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":codebuild:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":report-group/", + { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutation7E069DA6" + }, + "-*" + ] + ] + } + }, + { + "Action": "sts:AssumeRole", + "Condition": { + "ForAnyValue:StringEquals": { + "iam:ResourceTag/aws-cdk:bootstrap-role": [ + "image-publishing", + "file-publishing", + "deploy" + ] + } + }, + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:*:iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/*" + ] + ] + } + }, + { + "Action": [ + "cloudformation:DescribeStacks", + "s3:ListBucket" + ], + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "PipelineWithPostPreparePipelineArtifactsBucketBB585ABB", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "PipelineWithPostPrepareUpdatePipelineSelfMutationRoleDefaultPolicyF7AF6CE2", + "roles": [ + { + "Ref": "PipelineWithPostPrepareUpdatePipelineSelfMutationRole0B5BA2AF" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/PipelineWithPostPrepare/UpdatePipeline/SelfMutation/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodeBuild::Project", + "aws:cdk:cloudformation:props": { + "artifacts": { + "type": "CODEPIPELINE" + }, + "environment": { + "type": "LINUX_CONTAINER", + "image": "aws/codebuild/standard:6.0", + "imagePullCredentialsType": "CODEBUILD", + "privilegedMode": false, + "computeType": "BUILD_GENERAL1_SMALL" + }, + "serviceRole": { + "Fn::GetAtt": [ + "PipelineWithPostPrepareUpdatePipelineSelfMutationRole0B5BA2AF", + "Arn" + ] + }, + "source": { + "type": "CODEPIPELINE", + "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineWithPostPrepareStack --require-approval=never --verbose\"\n ]\n }\n }\n}" + }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineWithPostPrepareStack/Pipeline/UpdatePipeline/SelfMutate", + "encryptionKey": "alias/aws/s3" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.CfnProject", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codebuild.PipelineProject", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.pipelines.CodePipeline", + "version": "0.0.0" + } + }, + "Beta": { + "id": "Beta", + "path": "PipelineWithPostPrepareStack/Beta", + "children": { + "Stack1": { + "id": "Stack1", + "path": "PipelineWithPostPrepareStack/Beta/Stack1", + "children": { + "Queue": { + "id": "Queue", + "path": "PipelineWithPostPrepareStack/Beta/Stack1/Queue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/Beta/Stack1/Queue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "Exports": { + "id": "Exports", + "path": "PipelineWithPostPrepareStack/Beta/Stack1/Exports", + "children": { + "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": { + "id": "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "path": "PipelineWithPostPrepareStack/Beta/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnOutput", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithPostPrepareStack/Beta/Stack1/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithPostPrepareStack/Beta/Stack1/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "Stack2": { + "id": "Stack2", + "path": "PipelineWithPostPrepareStack/Beta/Stack2", + "children": { + "OtherQueue": { + "id": "OtherQueue", + "path": "PipelineWithPostPrepareStack/Beta/Stack2/OtherQueue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/Beta/Stack2/OtherQueue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": { + "redrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Beta-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithPostPrepareStack/Beta/Stack2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithPostPrepareStack/Beta/Stack2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "Prod1": { + "id": "Prod1", + "path": "PipelineWithPostPrepareStack/Prod1", + "children": { + "Stack1": { + "id": "Stack1", + "path": "PipelineWithPostPrepareStack/Prod1/Stack1", + "children": { + "Queue": { + "id": "Queue", + "path": "PipelineWithPostPrepareStack/Prod1/Stack1/Queue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/Prod1/Stack1/Queue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "Exports": { + "id": "Exports", + "path": "PipelineWithPostPrepareStack/Prod1/Stack1/Exports", + "children": { + "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": { + "id": "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "path": "PipelineWithPostPrepareStack/Prod1/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnOutput", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod1/Stack1/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod1/Stack1/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "Stack2": { + "id": "Stack2", + "path": "PipelineWithPostPrepareStack/Prod1/Stack2", + "children": { + "OtherQueue": { + "id": "OtherQueue", + "path": "PipelineWithPostPrepareStack/Prod1/Stack2/OtherQueue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/Prod1/Stack2/OtherQueue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": { + "redrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Prod1-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod1/Stack2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod1/Stack2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "Prod2": { + "id": "Prod2", + "path": "PipelineWithPostPrepareStack/Prod2", + "children": { + "Stack1": { + "id": "Stack1", + "path": "PipelineWithPostPrepareStack/Prod2/Stack1", + "children": { + "Queue": { + "id": "Queue", + "path": "PipelineWithPostPrepareStack/Prod2/Stack1/Queue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/Prod2/Stack1/Queue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "Exports": { + "id": "Exports", + "path": "PipelineWithPostPrepareStack/Prod2/Stack1/Exports", + "children": { + "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}": { + "id": "Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "path": "PipelineWithPostPrepareStack/Prod2/Stack1/Exports/Output{\"Fn::GetAtt\":[\"Queue4A7E3555\",\"Arn\"]}", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnOutput", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod2/Stack1/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod2/Stack1/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "Stack2": { + "id": "Stack2", + "path": "PipelineWithPostPrepareStack/Prod2/Stack2", + "children": { + "OtherQueue": { + "id": "OtherQueue", + "path": "PipelineWithPostPrepareStack/Prod2/Stack2/OtherQueue", + "children": { + "Resource": { + "id": "Resource", + "path": "PipelineWithPostPrepareStack/Prod2/Stack2/OtherQueue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": { + "redrivePolicy": { + "deadLetterTargetArn": { + "Fn::ImportValue": "Prod2-Stack1:ExportsOutputFnGetAttQueue4A7E3555Arn15A7202E" + }, + "maxReceiveCount": 5 + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod2/Stack2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod2/Stack2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "Prod3": { + "id": "Prod3", + "path": "PipelineWithPostPrepareStack/Prod3", + "children": { + "Stack1": { + "id": "Stack1", + "path": "PipelineWithPostPrepareStack/Prod3/Stack1", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod3/Stack1/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod3/Stack1/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "Prod4": { + "id": "Prod4", + "path": "PipelineWithPostPrepareStack/Prod4", + "children": { + "Stack2": { + "id": "Stack2", + "path": "PipelineWithPostPrepareStack/Prod4/Stack2", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod4/Stack2/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithPostPrepareStack/Prod4/Stack2/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stage", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "PipelineWithPostPrepareStack/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "PipelineWithPostPrepareStack/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "Integ": { + "id": "Integ", + "path": "Integ", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "Integ/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "Integ/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "Integ/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "Integ/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "Integ/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.App", + "version": "0.0.0" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.ts b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.ts new file mode 100644 index 0000000000000..35b4904262e60 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-postPrepare.ts @@ -0,0 +1,89 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +/// !cdk-integ PipelineStack pragma:set-context:@aws-cdk/core:newStyleStackSynthesis=true +import { + IntegTest, +} from '@aws-cdk/integ-tests-alpha'; +import { App, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; +import * as sqs from 'aws-cdk-lib/aws-sqs'; +import * as pipelines from 'aws-cdk-lib/pipelines'; +import { Construct } from 'constructs'; + +class PipelineStack extends Stack { + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const pipeline = new pipelines.CodePipeline( + this, + 'PipelineWithPostPrepare', + { + synth: new pipelines.ShellStep('Synth', { + input: pipelines.CodePipelineSource.gitHub('Nico-DB/aws-cdk', 'main'), + commands: ['npm ci', 'npm run build', 'npx cdk synth'], + }), + allPrepareNodesFirst: true, + }, + ); + + pipeline.addStage(new AppStage(this, 'Beta'), { + postPrepare: [new pipelines.ManualApprovalStep('Approval0')], + }); + + const group = pipeline.addWave('Wave1', { + + postPrepare: [new pipelines.ManualApprovalStep('Approval1')], + }); + group.addStage(new AppStage(this, 'Prod1')); + group.addStage(new AppStage(this, 'Prod2')); + + const group2 = pipeline.addWave('Wave2', { postPrepare: [new pipelines.ManualApprovalStep('Approval2')] }); + group2.addStage(new AppStage2(this, 'Prod3')); + group2.addStage(new AppStage3(this, 'Prod4')); + + } +} + +class AppStage extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + const stack1 = new Stack(this, 'Stack1'); + const queue1 = new sqs.Queue(stack1, 'Queue'); + + const stack2 = new Stack(this, 'Stack2'); + new sqs.Queue(stack2, 'OtherQueue', { + deadLetterQueue: { + queue: queue1, + maxReceiveCount: 5, + }, + }); + } +} + +class AppStage2 extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + new Stack(this, 'Stack1'); + } +} + +class AppStage3 extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + new Stack(this, 'Stack2'); + } +} + +const app = new App({ + context: { + '@aws-cdk/core:newStyleStackSynthesis': '1', + }, +}); +const pipeStack = new PipelineStack(app, 'PipelineWithPostPrepareStack'); + +new IntegTest(app, 'Integ', { + testCases: [pipeStack], +}); + +app.synth(); diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.template.json index 9f3e70354b7d8..e2c95f9495265 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.template.json @@ -835,7 +835,7 @@ "Name": "Synth_Output" } ], - "Name": "Prepare", + "Name": "Prepare-Beta-Stack1", "RoleArn": { "Fn::Join": [ "", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.ts b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.ts index 9354ee94cb765..ccacf6ba6fe2f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.ts @@ -1,14 +1,16 @@ // eslint-disable-next-line import/no-extraneous-dependencies /// !cdk-integ PipelineStack pragma:set-context:@aws-cdk/core:newStyleStackSynthesis=true -import * as path from 'path'; +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { App, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; import * as s3_assets from 'aws-cdk-lib/aws-s3-assets'; import * as sqs from 'aws-cdk-lib/aws-sqs'; -import { App, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; -import { Construct } from 'constructs'; import * as pipelines from 'aws-cdk-lib/pipelines'; +import { Construct } from 'constructs'; +import * as path from 'path'; import { PIPELINE_REDUCE_ASSET_ROLE_TRUST_SCOPE } from 'aws-cdk-lib/cx-api'; + class PipelineStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); @@ -18,7 +20,7 @@ class PipelineStack extends Stack { const pipeline = new pipelines.CodePipeline(this, 'Pipeline', { codeBuildDefaults: { vpc }, synth: new pipelines.ShellStep('Synth', { - input: pipelines.CodePipelineSource.gitHub('aws/aws-cdk', 'v2-main'), + input: pipelines.CodePipelineSource.gitHub('Nico-DB/aws-cdk', 'main'), commands: [ 'npm ci', 'npm run build', @@ -54,5 +56,9 @@ const app = new App({ [PIPELINE_REDUCE_ASSET_ROLE_TRUST_SCOPE]: false, }, }); -new PipelineStack(app, 'PipelineStack'); -app.synth(); +const pipeStack = new PipelineStack(app, 'PipelineStack'); + +new IntegTest(app, 'Integ', { + testCases: [pipeStack], +}); +app.synth(); \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.assets.json new file mode 100644 index 0000000000000..9e7065c2b0432 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.assets.json @@ -0,0 +1,19 @@ +{ + "version": "31.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "IntegDefaultTestDeployAssert4E6713E1.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/IntegDefaultTestDeployAssert4E6713E1.template.json @@ -0,0 +1,36 @@ +{ + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.assets.json index b713f55bfa10c..e49d44cff8761 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.assets.json @@ -1,7 +1,9 @@ { "version": "36.0.0", "files": { - "d3f90d40f5d8c76699dbdce03029caa105a7d2f34e85de7756aa16e9e0b177be": { + + "aad7095cbd9a10588db159d8324e8c2884ae6371e6e923fd6b665f9b9a3ccd70": { + "source": { "path": "PipelineStack.template.json", "packaging": "file" @@ -9,7 +11,9 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "d3f90d40f5d8c76699dbdce03029caa105a7d2f34e85de7756aa16e9e0b177be.json", + + "objectKey": "aad7095cbd9a10588db159d8324e8c2884ae6371e6e923fd6b665f9b9a3ccd70.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.template.json index 2a30d523d289a..1658f321650cb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.template.json @@ -257,16 +257,16 @@ "Version": "1" }, "Configuration": { - "Owner": "rix0rrr", - "Repo": "cdk-pipelines-demo", + "Owner": "Nico-DB", + "Repo": "aws-cdk", "Branch": "main", "OAuthToken": "{{resolve:secretsmanager:github-token:SecretString:::}}", "PollForSourceChanges": false }, - "Name": "rix0rrr_cdk-pipelines-demo", + "Name": "Nico-DB_aws-cdk", "OutputArtifacts": [ { - "Name": "rix0rrr_cdk_pipelines_demo_Source" + "Name": "Nico_DB_aws_cdk_Source" } ], "RunOrder": 1 @@ -291,7 +291,7 @@ }, "InputArtifacts": [ { - "Name": "rix0rrr_cdk_pipelines_demo_Source" + "Name": "Nico_DB_aws_cdk_Source" } ], "Name": "Synth", @@ -387,7 +387,7 @@ "Name": "Synth_Output" } ], - "Name": "Stack1.Prepare", + "Name": "Stack1.Prepare-Beta-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -493,7 +493,7 @@ "Name": "Synth_Output" } ], - "Name": "Stack2.Prepare", + "Name": "Stack2.Prepare-Beta-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -604,7 +604,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod1.Stack1.Prepare", + "Name": "Prod1.Stack1.Prepare-Prod1-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -672,7 +672,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod2.Stack1.Prepare", + "Name": "Prod2.Stack1.Prepare-Prod2-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -816,7 +816,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod1.Stack2.Prepare", + "Name": "Prod1.Stack2.Prepare-Prod1-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -884,7 +884,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod2.Stack2.Prepare", + "Name": "Prod2.Stack2.Prepare-Prod2-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1033,7 +1033,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod3.Stack1.Prepare", + "Name": "Prod3.Stack1.Prepare-Prod3-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -1101,7 +1101,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod4.Stack1.Prepare", + "Name": "Prod4.Stack1.Prepare-Prod4-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -1169,7 +1169,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod5.Stack1.Prepare", + "Name": "Prod5.Stack1.Prepare-Prod5-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -1237,7 +1237,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod6.Stack1.Prepare", + "Name": "Prod6.Stack1.Prepare-Prod6-Stack1", "RoleArn": { "Fn::Join": [ "", @@ -1457,7 +1457,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod3.Stack2.Prepare", + "Name": "Prod3.Stack2.Prepare-Prod3-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1525,7 +1525,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod4.Stack2.Prepare", + "Name": "Prod4.Stack2.Prepare-Prod4-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1593,7 +1593,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod5.Stack2.Prepare", + "Name": "Prod5.Stack2.Prepare-Prod5-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1661,7 +1661,7 @@ "Name": "Synth_Output" } ], - "Name": "Prod6.Stack2.Prepare", + "Name": "Prod6.Stack2.Prepare-Prod6-Stack2", "RoleArn": { "Fn::Join": [ "", @@ -1849,7 +1849,7 @@ "PipelineRoleB27FAA37" ] }, - "PipelineSourcerix0rrrcdkpipelinesdemoWebhookResourceDB0C1BCA": { + "PipelineSourceNicoDBawscdkWebhookResource5DAA82C4": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "Authentication": "GITHUB_HMAC", @@ -1862,8 +1862,9 @@ "MatchEquals": "refs/heads/{Branch}" } ], - "RegisterWithThirdParty": true, - "TargetAction": "rix0rrr_cdk-pipelines-demo", + + "TargetAction": "Nico-DB_aws-cdk", + "TargetPipeline": { "Ref": "Pipeline9850B417" }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStackPipeline9DB740AF.dot b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStackPipeline9DB740AF.dot index 537fc7592bc9f..71cb12528429e 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStackPipeline9DB740AF.dot +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStackPipeline9DB740AF.dot @@ -7,7 +7,7 @@ digraph G { "BEGIN Build" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Build" [shape="cds", style="filled", fillcolor="#b7deff"]; "Build.Synth"; -"Source.rix0rrr/cdk-pipelines-demo" -> "Build.Synth"; +"Source.Nico-DB/aws-cdk" -> "Build.Synth"; "BEGIN Build" -> "Build.Synth"; "Build.Synth" -> "END Build"; "BEGIN UpdatePipeline" [shape="cds", style="filled", fillcolor="#b7deff"]; @@ -22,19 +22,21 @@ digraph G { "BEGIN Beta.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Beta.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Beta.Stack1.Deploy"; -"Beta.Stack1.Prepare" -> "Beta.Stack1.Deploy"; -"Beta.Stack1.Prepare"; -"Build.Synth" -> "Beta.Stack1.Prepare"; -"BEGIN Beta.Stack1" -> "Beta.Stack1.Prepare"; +"Beta.Stack1.Prepare-Beta-Stack1" -> "Beta.Stack1.Deploy"; +"Beta.Stack1.Prepare-Beta-Stack1" -> "Beta.Stack1.Deploy"; +"Beta.Stack1.Prepare-Beta-Stack1"; +"Build.Synth" -> "Beta.Stack1.Prepare-Beta-Stack1"; +"BEGIN Beta.Stack1" -> "Beta.Stack1.Prepare-Beta-Stack1"; "Beta.Stack1.Deploy" -> "END Beta.Stack1"; "BEGIN Beta.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Beta.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Beta.Stack1" -> "BEGIN Beta.Stack2"; "Beta.Stack2.Deploy"; -"Beta.Stack2.Prepare" -> "Beta.Stack2.Deploy"; -"Beta.Stack2.Prepare"; -"Build.Synth" -> "Beta.Stack2.Prepare"; -"BEGIN Beta.Stack2" -> "Beta.Stack2.Prepare"; +"Beta.Stack2.Prepare-Beta-Stack2" -> "Beta.Stack2.Deploy"; +"Beta.Stack2.Prepare-Beta-Stack2" -> "Beta.Stack2.Deploy"; +"Beta.Stack2.Prepare-Beta-Stack2"; +"Build.Synth" -> "Beta.Stack2.Prepare-Beta-Stack2"; +"BEGIN Beta.Stack2" -> "Beta.Stack2.Prepare-Beta-Stack2"; "Beta.Stack2.Deploy" -> "END Beta.Stack2"; "BEGIN Beta" -> "BEGIN Beta.Stack1"; "END Beta.Stack2" -> "END Beta"; @@ -47,19 +49,21 @@ digraph G { "BEGIN Wave1.Prod1.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod1.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave1.Prod1.Stack1.Deploy"; -"Wave1.Prod1.Stack1.Prepare" -> "Wave1.Prod1.Stack1.Deploy"; -"Wave1.Prod1.Stack1.Prepare"; -"Build.Synth" -> "Wave1.Prod1.Stack1.Prepare"; -"BEGIN Wave1.Prod1.Stack1" -> "Wave1.Prod1.Stack1.Prepare"; +"Wave1.Prod1.Stack1.Prepare-Prod1-Stack1" -> "Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Stack1.Prepare-Prod1-Stack1" -> "Wave1.Prod1.Stack1.Deploy"; +"Wave1.Prod1.Stack1.Prepare-Prod1-Stack1"; +"Build.Synth" -> "Wave1.Prod1.Stack1.Prepare-Prod1-Stack1"; +"BEGIN Wave1.Prod1.Stack1" -> "Wave1.Prod1.Stack1.Prepare-Prod1-Stack1"; "Wave1.Prod1.Stack1.Deploy" -> "END Wave1.Prod1.Stack1"; "BEGIN Wave1.Prod1.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod1.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod1.Stack1" -> "BEGIN Wave1.Prod1.Stack2"; "Wave1.Prod1.Stack2.Deploy"; -"Wave1.Prod1.Stack2.Prepare" -> "Wave1.Prod1.Stack2.Deploy"; -"Wave1.Prod1.Stack2.Prepare"; -"Build.Synth" -> "Wave1.Prod1.Stack2.Prepare"; -"BEGIN Wave1.Prod1.Stack2" -> "Wave1.Prod1.Stack2.Prepare"; +"Wave1.Prod1.Stack2.Prepare-Prod1-Stack2" -> "Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Stack2.Prepare-Prod1-Stack2" -> "Wave1.Prod1.Stack2.Deploy"; +"Wave1.Prod1.Stack2.Prepare-Prod1-Stack2"; +"Build.Synth" -> "Wave1.Prod1.Stack2.Prepare-Prod1-Stack2"; +"BEGIN Wave1.Prod1.Stack2" -> "Wave1.Prod1.Stack2.Prepare-Prod1-Stack2"; "Wave1.Prod1.Stack2.Deploy" -> "END Wave1.Prod1.Stack2"; "BEGIN Wave1.Prod1" -> "BEGIN Wave1.Prod1.Stack1"; "END Wave1.Prod1.Stack2" -> "END Wave1.Prod1"; @@ -68,19 +72,21 @@ digraph G { "BEGIN Wave1.Prod2.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod2.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave1.Prod2.Stack1.Deploy"; -"Wave1.Prod2.Stack1.Prepare" -> "Wave1.Prod2.Stack1.Deploy"; -"Wave1.Prod2.Stack1.Prepare"; -"Build.Synth" -> "Wave1.Prod2.Stack1.Prepare"; -"BEGIN Wave1.Prod2.Stack1" -> "Wave1.Prod2.Stack1.Prepare"; +"Wave1.Prod2.Stack1.Prepare-Prod2-Stack1" -> "Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod2.Stack1.Prepare-Prod2-Stack1" -> "Wave1.Prod2.Stack1.Deploy"; +"Wave1.Prod2.Stack1.Prepare-Prod2-Stack1"; +"Build.Synth" -> "Wave1.Prod2.Stack1.Prepare-Prod2-Stack1"; +"BEGIN Wave1.Prod2.Stack1" -> "Wave1.Prod2.Stack1.Prepare-Prod2-Stack1"; "Wave1.Prod2.Stack1.Deploy" -> "END Wave1.Prod2.Stack1"; "BEGIN Wave1.Prod2.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod2.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave1.Prod2.Stack1" -> "BEGIN Wave1.Prod2.Stack2"; "Wave1.Prod2.Stack2.Deploy"; -"Wave1.Prod2.Stack2.Prepare" -> "Wave1.Prod2.Stack2.Deploy"; -"Wave1.Prod2.Stack2.Prepare"; -"Build.Synth" -> "Wave1.Prod2.Stack2.Prepare"; -"BEGIN Wave1.Prod2.Stack2" -> "Wave1.Prod2.Stack2.Prepare"; +"Wave1.Prod2.Stack2.Prepare-Prod2-Stack2" -> "Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod2.Stack2.Prepare-Prod2-Stack2" -> "Wave1.Prod2.Stack2.Deploy"; +"Wave1.Prod2.Stack2.Prepare-Prod2-Stack2"; +"Build.Synth" -> "Wave1.Prod2.Stack2.Prepare-Prod2-Stack2"; +"BEGIN Wave1.Prod2.Stack2" -> "Wave1.Prod2.Stack2.Prepare-Prod2-Stack2"; "Wave1.Prod2.Stack2.Deploy" -> "END Wave1.Prod2.Stack2"; "BEGIN Wave1.Prod2" -> "BEGIN Wave1.Prod2.Stack1"; "END Wave1.Prod2.Stack2" -> "END Wave1.Prod2"; @@ -97,19 +103,21 @@ digraph G { "BEGIN Wave2.Prod3.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod3.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave2.Prod3.Stack1.Deploy"; -"Wave2.Prod3.Stack1.Prepare" -> "Wave2.Prod3.Stack1.Deploy"; -"Wave2.Prod3.Stack1.Prepare"; -"Build.Synth" -> "Wave2.Prod3.Stack1.Prepare"; -"BEGIN Wave2.Prod3.Stack1" -> "Wave2.Prod3.Stack1.Prepare"; +"Wave2.Prod3.Stack1.Prepare-Prod3-Stack1" -> "Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Stack1.Prepare-Prod3-Stack1" -> "Wave2.Prod3.Stack1.Deploy"; +"Wave2.Prod3.Stack1.Prepare-Prod3-Stack1"; +"Build.Synth" -> "Wave2.Prod3.Stack1.Prepare-Prod3-Stack1"; +"BEGIN Wave2.Prod3.Stack1" -> "Wave2.Prod3.Stack1.Prepare-Prod3-Stack1"; "Wave2.Prod3.Stack1.Deploy" -> "END Wave2.Prod3.Stack1"; "BEGIN Wave2.Prod3.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod3.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod3.Stack1" -> "BEGIN Wave2.Prod3.Stack2"; "Wave2.Prod3.Stack2.Deploy"; -"Wave2.Prod3.Stack2.Prepare" -> "Wave2.Prod3.Stack2.Deploy"; -"Wave2.Prod3.Stack2.Prepare"; -"Build.Synth" -> "Wave2.Prod3.Stack2.Prepare"; -"BEGIN Wave2.Prod3.Stack2" -> "Wave2.Prod3.Stack2.Prepare"; +"Wave2.Prod3.Stack2.Prepare-Prod3-Stack2" -> "Wave2.Prod3.Stack2.Deploy"; +"Wave2.Prod3.Stack2.Prepare-Prod3-Stack2" -> "Wave2.Prod3.Stack2.Deploy"; +"Wave2.Prod3.Stack2.Prepare-Prod3-Stack2"; +"Build.Synth" -> "Wave2.Prod3.Stack2.Prepare-Prod3-Stack2"; +"BEGIN Wave2.Prod3.Stack2" -> "Wave2.Prod3.Stack2.Prepare-Prod3-Stack2"; "Wave2.Prod3.Stack2.Deploy" -> "END Wave2.Prod3.Stack2"; "BEGIN Wave2.Prod3" -> "BEGIN Wave2.Prod3.Stack1"; "END Wave2.Prod3.Stack2" -> "END Wave2.Prod3"; @@ -118,19 +126,21 @@ digraph G { "BEGIN Wave2.Prod4.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod4.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave2.Prod4.Stack1.Deploy"; -"Wave2.Prod4.Stack1.Prepare" -> "Wave2.Prod4.Stack1.Deploy"; -"Wave2.Prod4.Stack1.Prepare"; -"Build.Synth" -> "Wave2.Prod4.Stack1.Prepare"; -"BEGIN Wave2.Prod4.Stack1" -> "Wave2.Prod4.Stack1.Prepare"; +"Wave2.Prod4.Stack1.Prepare-Prod4-Stack1" -> "Wave2.Prod4.Stack1.Deploy"; +"Wave2.Prod4.Stack1.Prepare-Prod4-Stack1" -> "Wave2.Prod4.Stack1.Deploy"; +"Wave2.Prod4.Stack1.Prepare-Prod4-Stack1"; +"Build.Synth" -> "Wave2.Prod4.Stack1.Prepare-Prod4-Stack1"; +"BEGIN Wave2.Prod4.Stack1" -> "Wave2.Prod4.Stack1.Prepare-Prod4-Stack1"; "Wave2.Prod4.Stack1.Deploy" -> "END Wave2.Prod4.Stack1"; "BEGIN Wave2.Prod4.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod4.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod4.Stack1" -> "BEGIN Wave2.Prod4.Stack2"; "Wave2.Prod4.Stack2.Deploy"; -"Wave2.Prod4.Stack2.Prepare" -> "Wave2.Prod4.Stack2.Deploy"; -"Wave2.Prod4.Stack2.Prepare"; -"Build.Synth" -> "Wave2.Prod4.Stack2.Prepare"; -"BEGIN Wave2.Prod4.Stack2" -> "Wave2.Prod4.Stack2.Prepare"; +"Wave2.Prod4.Stack2.Prepare-Prod4-Stack2" -> "Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod4.Stack2.Prepare-Prod4-Stack2" -> "Wave2.Prod4.Stack2.Deploy"; +"Wave2.Prod4.Stack2.Prepare-Prod4-Stack2"; +"Build.Synth" -> "Wave2.Prod4.Stack2.Prepare-Prod4-Stack2"; +"BEGIN Wave2.Prod4.Stack2" -> "Wave2.Prod4.Stack2.Prepare-Prod4-Stack2"; "Wave2.Prod4.Stack2.Deploy" -> "END Wave2.Prod4.Stack2"; "BEGIN Wave2.Prod4" -> "BEGIN Wave2.Prod4.Stack1"; "END Wave2.Prod4.Stack2" -> "END Wave2.Prod4"; @@ -139,19 +149,21 @@ digraph G { "BEGIN Wave2.Prod5.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod5.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave2.Prod5.Stack1.Deploy"; -"Wave2.Prod5.Stack1.Prepare" -> "Wave2.Prod5.Stack1.Deploy"; -"Wave2.Prod5.Stack1.Prepare"; -"Build.Synth" -> "Wave2.Prod5.Stack1.Prepare"; -"BEGIN Wave2.Prod5.Stack1" -> "Wave2.Prod5.Stack1.Prepare"; +"Wave2.Prod5.Stack1.Prepare-Prod5-Stack1" -> "Wave2.Prod5.Stack1.Deploy"; +"Wave2.Prod5.Stack1.Prepare-Prod5-Stack1" -> "Wave2.Prod5.Stack1.Deploy"; +"Wave2.Prod5.Stack1.Prepare-Prod5-Stack1"; +"Build.Synth" -> "Wave2.Prod5.Stack1.Prepare-Prod5-Stack1"; +"BEGIN Wave2.Prod5.Stack1" -> "Wave2.Prod5.Stack1.Prepare-Prod5-Stack1"; "Wave2.Prod5.Stack1.Deploy" -> "END Wave2.Prod5.Stack1"; "BEGIN Wave2.Prod5.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod5.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod5.Stack1" -> "BEGIN Wave2.Prod5.Stack2"; "Wave2.Prod5.Stack2.Deploy"; -"Wave2.Prod5.Stack2.Prepare" -> "Wave2.Prod5.Stack2.Deploy"; -"Wave2.Prod5.Stack2.Prepare"; -"Build.Synth" -> "Wave2.Prod5.Stack2.Prepare"; -"BEGIN Wave2.Prod5.Stack2" -> "Wave2.Prod5.Stack2.Prepare"; +"Wave2.Prod5.Stack2.Prepare-Prod5-Stack2" -> "Wave2.Prod5.Stack2.Deploy"; +"Wave2.Prod5.Stack2.Prepare-Prod5-Stack2" -> "Wave2.Prod5.Stack2.Deploy"; +"Wave2.Prod5.Stack2.Prepare-Prod5-Stack2"; +"Build.Synth" -> "Wave2.Prod5.Stack2.Prepare-Prod5-Stack2"; +"BEGIN Wave2.Prod5.Stack2" -> "Wave2.Prod5.Stack2.Prepare-Prod5-Stack2"; "Wave2.Prod5.Stack2.Deploy" -> "END Wave2.Prod5.Stack2"; "BEGIN Wave2.Prod5" -> "BEGIN Wave2.Prod5.Stack1"; "END Wave2.Prod5.Stack2" -> "END Wave2.Prod5"; @@ -160,19 +172,21 @@ digraph G { "BEGIN Wave2.Prod6.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod6.Stack1" [shape="cds", style="filled", fillcolor="#b7deff"]; "Wave2.Prod6.Stack1.Deploy"; -"Wave2.Prod6.Stack1.Prepare" -> "Wave2.Prod6.Stack1.Deploy"; -"Wave2.Prod6.Stack1.Prepare"; -"Build.Synth" -> "Wave2.Prod6.Stack1.Prepare"; -"BEGIN Wave2.Prod6.Stack1" -> "Wave2.Prod6.Stack1.Prepare"; +"Wave2.Prod6.Stack1.Prepare-Prod6-Stack1" -> "Wave2.Prod6.Stack1.Deploy"; +"Wave2.Prod6.Stack1.Prepare-Prod6-Stack1" -> "Wave2.Prod6.Stack1.Deploy"; +"Wave2.Prod6.Stack1.Prepare-Prod6-Stack1"; +"Build.Synth" -> "Wave2.Prod6.Stack1.Prepare-Prod6-Stack1"; +"BEGIN Wave2.Prod6.Stack1" -> "Wave2.Prod6.Stack1.Prepare-Prod6-Stack1"; "Wave2.Prod6.Stack1.Deploy" -> "END Wave2.Prod6.Stack1"; "BEGIN Wave2.Prod6.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod6.Stack2" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Wave2.Prod6.Stack1" -> "BEGIN Wave2.Prod6.Stack2"; "Wave2.Prod6.Stack2.Deploy"; -"Wave2.Prod6.Stack2.Prepare" -> "Wave2.Prod6.Stack2.Deploy"; -"Wave2.Prod6.Stack2.Prepare"; -"Build.Synth" -> "Wave2.Prod6.Stack2.Prepare"; -"BEGIN Wave2.Prod6.Stack2" -> "Wave2.Prod6.Stack2.Prepare"; +"Wave2.Prod6.Stack2.Prepare-Prod6-Stack2" -> "Wave2.Prod6.Stack2.Deploy"; +"Wave2.Prod6.Stack2.Prepare-Prod6-Stack2" -> "Wave2.Prod6.Stack2.Deploy"; +"Wave2.Prod6.Stack2.Prepare-Prod6-Stack2"; +"Build.Synth" -> "Wave2.Prod6.Stack2.Prepare-Prod6-Stack2"; +"BEGIN Wave2.Prod6.Stack2" -> "Wave2.Prod6.Stack2.Prepare-Prod6-Stack2"; "Wave2.Prod6.Stack2.Deploy" -> "END Wave2.Prod6.Stack2"; "BEGIN Wave2.Prod6" -> "BEGIN Wave2.Prod6.Stack1"; "END Wave2.Prod6.Stack2" -> "END Wave2.Prod6"; @@ -186,7 +200,7 @@ digraph G { "END Wave2.Prod6" -> "END Wave2"; "BEGIN Source" [shape="cds", style="filled", fillcolor="#b7deff"]; "END Source" [shape="cds", style="filled", fillcolor="#b7deff"]; -"Source.rix0rrr/cdk-pipelines-demo"; -"BEGIN Source" -> "Source.rix0rrr/cdk-pipelines-demo"; -"Source.rix0rrr/cdk-pipelines-demo" -> "END Source"; +"Source.Nico-DB/aws-cdk"; +"BEGIN Source" -> "Source.Nico-DB/aws-cdk"; +"Source.Nico-DB/aws-cdk" -> "END Source"; } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/integ.json index ffaf0f90174a5..1f43f8baed757 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/integ.json @@ -1,16 +1,12 @@ { "version": "36.0.0", "testCases": { - "integ.newpipeline": { + "Integ/DefaultTest": { "stacks": [ "PipelineStack" ], - "diffAssets": false, - "stackUpdateWorkflow": true + "assertionStack": "Integ/DefaultTest/DeployAssert", + "assertionStackName": "IntegDefaultTestDeployAssert4E6713E1" } - }, - "synthContext": { - "@aws-cdk/core:newStyleStackSynthesis": "true" - }, - "enableLookups": false + } } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/manifest.json index 7586b5b25124a..8eda5fa2b79a6 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/manifest.json @@ -67,7 +67,9 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d3f90d40f5d8c76699dbdce03029caa105a7d2f34e85de7756aa16e9e0b177be.json", + + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/aad7095cbd9a10588db159d8324e8c2884ae6371e6e923fd6b665f9b9a3ccd70.json", + "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -113,10 +115,10 @@ "data": "Pipeline9850B417" } ], - "/PipelineStack/Pipeline/Pipeline/Source/rix0rrr_cdk-pipelines-demo/WebhookResource": [ + "/PipelineStack/Pipeline/Pipeline/Source/Nico-DB_aws-cdk/WebhookResource": [ { "type": "aws:cdk:logicalId", - "data": "PipelineSourcerix0rrrcdkpipelinesdemoWebhookResourceDB0C1BCA" + "data": "PipelineSourceNicoDBawscdkWebhookResource5DAA82C4" } ], "/PipelineStack/Pipeline/Pipeline/Build/Synth/CdkBuildProject/Role/Resource": [ @@ -182,6 +184,53 @@ }, "displayName": "PipelineStack" }, + "IntegDefaultTestDeployAssert4E6713E1.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "IntegDefaultTestDeployAssert4E6713E1.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "IntegDefaultTestDeployAssert4E6713E1": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "IntegDefaultTestDeployAssert4E6713E1.template.json", + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "IntegDefaultTestDeployAssert4E6713E1.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "IntegDefaultTestDeployAssert4E6713E1.assets" + ], + "metadata": { + "/Integ/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "Integ/DefaultTest/DeployAssert" + }, "Tree": { "type": "cdk:tree", "properties": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/tree.json index 5f6d4ddc376cf..1cbc5b2e4d0db 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/tree.json @@ -348,10 +348,10 @@ "name": "Source", "actions": [ { - "name": "rix0rrr_cdk-pipelines-demo", + "name": "Nico-DB_aws-cdk", "outputArtifacts": [ { - "name": "rix0rrr_cdk_pipelines_demo_Source" + "name": "Nico_DB_aws_cdk_Source" } ], "actionTypeId": { @@ -361,8 +361,8 @@ "provider": "GitHub" }, "configuration": { - "Owner": "rix0rrr", - "Repo": "cdk-pipelines-demo", + "Owner": "Nico-DB", + "Repo": "aws-cdk", "Branch": "main", "OAuthToken": "{{resolve:secretsmanager:github-token:SecretString:::}}", "PollForSourceChanges": false @@ -378,7 +378,7 @@ "name": "Synth", "inputArtifacts": [ { - "name": "rix0rrr_cdk_pipelines_demo_Source" + "name": "Nico_DB_aws_cdk_Source" } ], "outputArtifacts": [ @@ -444,7 +444,7 @@ "name": "Beta", "actions": [ { - "name": "Stack1.Prepare", + "name": "Stack1.Prepare-Beta-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -550,7 +550,7 @@ } }, { - "name": "Stack2.Prepare", + "name": "Stack2.Prepare-Beta-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -661,7 +661,7 @@ "name": "Wave1", "actions": [ { - "name": "Prod1.Stack1.Prepare", + "name": "Prod1.Stack1.Prepare-Prod1-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -729,7 +729,7 @@ } }, { - "name": "Prod2.Stack1.Prepare", + "name": "Prod2.Stack1.Prepare-Prod2-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -873,7 +873,7 @@ } }, { - "name": "Prod1.Stack2.Prepare", + "name": "Prod1.Stack2.Prepare-Prod1-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -941,7 +941,7 @@ } }, { - "name": "Prod2.Stack2.Prepare", + "name": "Prod2.Stack2.Prepare-Prod2-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1090,7 +1090,7 @@ "name": "Wave2", "actions": [ { - "name": "Prod3.Stack1.Prepare", + "name": "Prod3.Stack1.Prepare-Prod3-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -1158,7 +1158,7 @@ } }, { - "name": "Prod4.Stack1.Prepare", + "name": "Prod4.Stack1.Prepare-Prod4-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -1226,7 +1226,7 @@ } }, { - "name": "Prod5.Stack1.Prepare", + "name": "Prod5.Stack1.Prepare-Prod5-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -1294,7 +1294,7 @@ } }, { - "name": "Prod6.Stack1.Prepare", + "name": "Prod6.Stack1.Prepare-Prod6-Stack1", "inputArtifacts": [ { "name": "Synth_Output" @@ -1514,7 +1514,7 @@ } }, { - "name": "Prod3.Stack2.Prepare", + "name": "Prod3.Stack2.Prepare-Prod3-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1582,7 +1582,7 @@ } }, { - "name": "Prod4.Stack2.Prepare", + "name": "Prod4.Stack2.Prepare-Prod4-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1650,7 +1650,7 @@ } }, { - "name": "Prod5.Stack2.Prepare", + "name": "Prod5.Stack2.Prepare-Prod5-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1718,7 +1718,7 @@ } }, { - "name": "Prod6.Stack2.Prepare", + "name": "Prod6.Stack2.Prepare-Prod6-Stack2", "inputArtifacts": [ { "name": "Synth_Output" @@ -1951,13 +1951,13 @@ "id": "Source", "path": "PipelineStack/Pipeline/Pipeline/Source", "children": { - "rix0rrr_cdk-pipelines-demo": { - "id": "rix0rrr_cdk-pipelines-demo", - "path": "PipelineStack/Pipeline/Pipeline/Source/rix0rrr_cdk-pipelines-demo", + "Nico-DB_aws-cdk": { + "id": "Nico-DB_aws-cdk", + "path": "PipelineStack/Pipeline/Pipeline/Source/Nico-DB_aws-cdk", "children": { "WebhookResource": { "id": "WebhookResource", - "path": "PipelineStack/Pipeline/Pipeline/Source/rix0rrr_cdk-pipelines-demo/WebhookResource", + "path": "PipelineStack/Pipeline/Pipeline/Source/Nico-DB_aws-cdk/WebhookResource", "attributes": { "aws:cdk:cloudformation:type": "AWS::CodePipeline::Webhook", "aws:cdk:cloudformation:props": { @@ -1971,8 +1971,9 @@ "matchEquals": "refs/heads/{Branch}" } ], - "registerWithThirdParty": true, - "targetAction": "rix0rrr_cdk-pipelines-demo", + + "targetAction": "Nico-DB_aws-cdk", + "targetPipeline": { "Ref": "Pipeline9850B417" }, @@ -2291,9 +2292,9 @@ "id": "Beta", "path": "PipelineStack/Pipeline/Pipeline/Beta", "children": { - "Stack1.Prepare": { - "id": "Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Prepare", + "Stack1.Prepare-Beta-Stack1": { + "id": "Stack1.Prepare-Beta-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Prepare-Beta-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2307,9 +2308,9 @@ "version": "10.3.0" } }, - "Stack2.Prepare": { - "id": "Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Prepare", + "Stack2.Prepare-Beta-Stack2": { + "id": "Stack2.Prepare-Beta-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Prepare-Beta-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2375,17 +2376,17 @@ "id": "Wave1", "path": "PipelineStack/Pipeline/Pipeline/Wave1", "children": { - "Prod1.Stack1.Prepare": { - "id": "Prod1.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Prepare", + "Prod1.Stack1.Prepare-Prod1-Stack1": { + "id": "Prod1.Stack1.Prepare-Prod1-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Prepare-Prod1-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod2.Stack1.Prepare": { - "id": "Prod2.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Prepare", + "Prod2.Stack1.Prepare-Prod2-Stack1": { + "id": "Prod2.Stack1.Prepare-Prod2-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Prepare-Prod2-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2407,17 +2408,17 @@ "version": "10.3.0" } }, - "Prod1.Stack2.Prepare": { - "id": "Prod1.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Prepare", + "Prod1.Stack2.Prepare-Prod1-Stack2": { + "id": "Prod1.Stack2.Prepare-Prod1-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Prepare-Prod1-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod2.Stack2.Prepare": { - "id": "Prod2.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Prepare", + "Prod2.Stack2.Prepare-Prod2-Stack2": { + "id": "Prod2.Stack2.Prepare-Prod2-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Prepare-Prod2-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2449,33 +2450,33 @@ "id": "Wave2", "path": "PipelineStack/Pipeline/Pipeline/Wave2", "children": { - "Prod3.Stack1.Prepare": { - "id": "Prod3.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Prepare", + "Prod3.Stack1.Prepare-Prod3-Stack1": { + "id": "Prod3.Stack1.Prepare-Prod3-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Prepare-Prod3-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod4.Stack1.Prepare": { - "id": "Prod4.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Prepare", + "Prod4.Stack1.Prepare-Prod4-Stack1": { + "id": "Prod4.Stack1.Prepare-Prod4-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Prepare-Prod4-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod5.Stack1.Prepare": { - "id": "Prod5.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Prepare", + "Prod5.Stack1.Prepare-Prod5-Stack1": { + "id": "Prod5.Stack1.Prepare-Prod5-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Prepare-Prod5-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod6.Stack1.Prepare": { - "id": "Prod6.Stack1.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Prepare", + "Prod6.Stack1.Prepare-Prod6-Stack1": { + "id": "Prod6.Stack1.Prepare-Prod6-Stack1", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Prepare-Prod6-Stack1", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -2513,33 +2514,33 @@ "version": "10.3.0" } }, - "Prod3.Stack2.Prepare": { - "id": "Prod3.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Prepare", + "Prod3.Stack2.Prepare-Prod3-Stack2": { + "id": "Prod3.Stack2.Prepare-Prod3-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Prepare-Prod3-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod4.Stack2.Prepare": { - "id": "Prod4.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Prepare", + "Prod4.Stack2.Prepare-Prod4-Stack2": { + "id": "Prod4.Stack2.Prepare-Prod4-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Prepare-Prod4-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod5.Stack2.Prepare": { - "id": "Prod5.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Prepare", + "Prod5.Stack2.Prepare-Prod5-Stack2": { + "id": "Prod5.Stack2.Prepare-Prod5-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Prepare-Prod5-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" } }, - "Prod6.Stack2.Prepare": { - "id": "Prod6.Stack2.Prepare", - "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Prepare", + "Prod6.Stack2.Prepare-Prod6-Stack2": { + "id": "Prod6.Stack2.Prepare-Prod6-Stack2", + "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Prepare-Prod6-Stack2", "constructInfo": { "fqn": "constructs.Construct", "version": "10.3.0" @@ -3927,6 +3928,60 @@ "version": "0.0.0" } }, + "Integ": { + "id": "Integ", + "path": "Integ", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "Integ/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "Integ/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.270" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "Integ/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "Integ/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "Integ/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", + "version": "0.0.0" + } + }, "Tree": { "id": "Tree", "path": "Tree", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.ts b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.ts index 2434b94f5e3d5..b5674b5a35370 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.ts @@ -1,56 +1,126 @@ // eslint-disable-next-line import/no-extraneous-dependencies /// !cdk-integ PipelineStack pragma:set-context:@aws-cdk/core:newStyleStackSynthesis=true -import * as sqs from 'aws-cdk-lib/aws-sqs'; -import { App, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; -import { Construct } from 'constructs'; + +import { App, Fn, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; +import * as ec2 from 'aws-cdk-lib/aws-ec2'; import * as pipelines from 'aws-cdk-lib/pipelines'; +import { Construct } from 'constructs'; class PipelineStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); + const vpc = ec2.Vpc.fromVpcAttributes(this, 'vpc', { + availabilityZones: ['eu-central-1a', 'eu-central-1b', 'eu-central-1c'], + vpcId: Fn.importValue('VPC1-VPC-ID'), + privateSubnetIds: [ + Fn.importValue('VPC1-AZ1Subnet1'), + Fn.importValue('VPC1-AZ2Subnet1'), + Fn.importValue('VPC1-AZ3Subnet1'), + ], + privateSubnetRouteTableIds: [ + Fn.importValue('VPC1-RouteTableIDAZ1'), + Fn.importValue('VPC1-RouteTableIDAZ2'), + Fn.importValue('VPC1-RouteTableIDAZ3'), + ], + }); + const pipeline = new pipelines.CodePipeline(this, 'Pipeline', { synth: new pipelines.ShellStep('Synth', { - input: pipelines.CodePipelineSource.gitHub('rix0rrr/cdk-pipelines-demo', 'main'), - commands: [ - 'npm ci', - 'npm run build', - 'npx cdk synth', - ], + input: pipelines.CodePipelineSource.gitHub('Nico-DB/aws-cdk', 'main'), + commands: ['npm ci', 'npm run build', 'npx cdk synth'], }), + pipelineName: 'test-cdk-contribution', + selfMutation: false, + synthCodeBuildDefaults: { + vpc: vpc, + }, + allPrepareNodesFirst: true, }); - pipeline.addStage(new AppStage(this, 'Beta')); + // const beta = new AppStage(this, 'Beta'); + // pipeline.addStage(beta, { + // allPrepareNodesFirst: true, + // stackSteps: [ + // { + // stack: beta.stack1, + // changeSet: [new pipelines.ManualApprovalStep('b approve')], // Executed after stack is prepared but before the stack is deployed + // }, + // ], + // }); + // const st=pipeline.addStage(new AppStage(this, 'test'), { + // allPrepareNodesFirst: true, + // postPrepare: [new pipelines.ManualApprovalStep('Approval0')], + // }); + // console.log(st.postPrepare); + const group = pipeline + .addWave('Wave1', { + postPrepare: [new pipelines.ManualApprovalStep('Approval1')], + }); + // group.addPostPrepare(new pipelines.ManualApprovalStep('Approval11')); - const group = pipeline.addWave('Wave1'); - group.addStage(new AppStage(this, 'Prod1')); + // group.addStage(new AppStage2(this, 'Prod1'), { + // // postPrepare: [new pipelines.ManualApprovalStep('Approval13')], + // }); group.addStage(new AppStage(this, 'Prod2')); - const group2 = pipeline.addWave('Wave2'); + const group2 = pipeline.addWave('Wave2', { + // postPrepare: [new pipelines.ManualApprovalStep('Approval2')], + }); group2.addStage(new AppStage(this, 'Prod3')); - group2.addStage(new AppStage(this, 'Prod4')); - group2.addStage(new AppStage(this, 'Prod5')); - group2.addStage(new AppStage(this, 'Prod6')); + // group2.addStage(new AppStage(this, 'Prod4')); + // group2.addStage(new AppStage(this, 'Prod5')); + // group2.addStage(new AppStage(this, 'Prod6')); } + } class AppStage extends Stage { + public readonly stack1: Stack; + public readonly stack2: Stack; constructor(scope: Construct, id: string, props?: StageProps) { super(scope, id, props); - const stack1 = new Stack(this, 'Stack1'); - const queue1 = new sqs.Queue(stack1, 'Queue'); + this.stack1 = new Stack(this, 'Stack1'); - const stack2 = new Stack(this, 'Stack2'); - new sqs.Queue(stack2, 'OtherQueue', { - deadLetterQueue: { - queue: queue1, - maxReceiveCount: 5, - }, - }); + // const q1=new sqs.Queue(this.stack1, 'Queue'); + this.stack2 = new Stack(this, 'Stack2'); + this.stack2.addDependency(this.stack1); + // new sqs.Queue(this.stack2, 'OtherQueue', { deadLetterQueue: { queue: q1, maxReceiveCount: 1 } }); } + } +// class AppStage3 extends Stage { +// public readonly stack1: Stack; + +// constructor(scope: Construct, id: string, props?: StageProps) { +// super(scope, id, props); + +// this.stack1 = new Stack(this, 'Stack1'); + +// // new sqs.Queue(this.stack2, 'OtherQueue', { deadLetterQueue: { queue: q1, maxReceiveCount: 1 } }); +// } +// } +// class AppStage4 extends Stage { + +// public readonly stack2: Stack; +// constructor(scope: Construct, id: string, props?: StageProps) { +// super(scope, id, props); + +// // const q1=new sqs.Queue(this.stack1, 'Queue'); +// this.stack2 = new Stack(this, 'Stack2'); +// // new sqs.Queue(this.stack2, 'OtherQueue', { deadLetterQueue: { queue: q1, maxReceiveCount: 1 } }); +// } +// } +// class AppStage2 extends Stage { +// public readonly stack3: Stack; +// constructor(scope: Construct, id: string, props?: StageProps) { +// super(scope, id, props); +// this.stack3 = new Stack(this, 'Stack3'); +// } +// } + const app = new App({ postCliContext: { '@aws-cdk/core:newStyleStackSynthesis': '1', @@ -58,4 +128,4 @@ const app = new App({ }, }); new PipelineStack(app, 'PipelineStack'); -app.synth(); \ No newline at end of file +app.synth(); diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline_with_allPrepareNodesFirst.ts b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline_with_allPrepareNodesFirst.ts new file mode 100644 index 0000000000000..391166fd12628 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline_with_allPrepareNodesFirst.ts @@ -0,0 +1,75 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +/// !cdk-integ PipelineStack pragma:set-context:@aws-cdk/core:newStyleStackSynthesis=true +import { App, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; +import * as sqs from 'aws-cdk-lib/aws-sqs'; +import * as pipelines from 'aws-cdk-lib/pipelines'; +import { Construct } from 'constructs'; + +class PipelineStack extends Stack { + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const pipeline = new pipelines.CodePipeline(this, 'Pipeline', { + synth: new pipelines.ShellStep('Synth', { + input: pipelines.CodePipelineSource.gitHub( + 'rix0rrr/cdk-pipelines-demo', + 'main', + ), + commands: ['npm ci', 'npm run build', 'npx cdk synth'], + }), + allPrepareNodesFirst: true, + }); + + pipeline.addStage(new AppStage(this, 'Beta'), { + }); + + const group = pipeline.addWave('Wave1'); + group.addStage(new AppStage(this, 'Prod1')); + group.addStage(new AppStage(this, 'Prod2')); + + const group2 = pipeline.addWave('Wave2'); + group2.addStage(new AppStage2(this, 'Prod3')); + group2.addStage(new AppStage3(this, 'Prod4')); + } +} + +class AppStage extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + const stack1 = new Stack(this, 'Stack1'); + const queue1 = new sqs.Queue(stack1, 'Queue'); + + const stack2 = new Stack(this, 'Stack2'); + new sqs.Queue(stack2, 'OtherQueue', { + deadLetterQueue: { + queue: queue1, + maxReceiveCount: 5, + }, + }); + } +} + +class AppStage2 extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + new Stack(this, 'Stack1'); + } +} + +class AppStage3 extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + new Stack(this, 'Stack2'); + } +} + +const app = new App({ + context: { + '@aws-cdk/core:newStyleStackSynthesis': '1', + }, +}); +new PipelineStack(app, 'PipelineWithAllPrepareNodesFirstStack'); +app.synth(); diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline_with_postPrepare.ts b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline_with_postPrepare.ts new file mode 100644 index 0000000000000..72ca8de2d3843 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline_with_postPrepare.ts @@ -0,0 +1,79 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +/// !cdk-integ PipelineStack pragma:set-context:@aws-cdk/core:newStyleStackSynthesis=true +import { App, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib'; +import * as sqs from 'aws-cdk-lib/aws-sqs'; +import * as pipelines from 'aws-cdk-lib/pipelines'; +import { Construct } from 'constructs'; + +class PipelineStack extends Stack { + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const pipeline = new pipelines.CodePipeline(this, 'PipelineWithPostPrepare', { + synth: new pipelines.ShellStep('Synth', { + input: pipelines.CodePipelineSource.gitHub( + 'rix0rrr/cdk-pipelines-demo', + 'main', + ), + commands: ['npm ci', 'npm run build', 'npx cdk synth'], + }), + allPrepareNodesFirst: true, + }); + + pipeline.addStage(new AppStage(this, 'Beta'), { + postPrepare: [new pipelines.ManualApprovalStep('Approval0')], + }); + + const group = pipeline.addWave('Wave1', { + + postPrepare: [new pipelines.ManualApprovalStep('Approval1')], + }); + group.addStage(new AppStage(this, 'Prod1')); + group.addStage(new AppStage(this, 'Prod2')); + + const group2 = pipeline.addWave('Wave2', { postPrepare: [new pipelines.ManualApprovalStep('Approval2')] }); + group2.addStage(new AppStage2(this, 'Prod3')); + group2.addStage(new AppStage3(this, 'Prod4')); + } +} + +class AppStage extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + const stack1 = new Stack(this, 'Stack1'); + const queue1 = new sqs.Queue(stack1, 'Queue'); + + const stack2 = new Stack(this, 'Stack2'); + new sqs.Queue(stack2, 'OtherQueue', { + deadLetterQueue: { + queue: queue1, + maxReceiveCount: 5, + }, + }); + } +} + +class AppStage2 extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + new Stack(this, 'Stack1'); + } +} + +class AppStage3 extends Stage { + constructor(scope: Construct, id: string, props?: StageProps) { + super(scope, id, props); + + new Stack(this, 'Stack2'); + } +} + +const app = new App({ + context: { + '@aws-cdk/core:newStyleStackSynthesis': '1', + }, +}); +new PipelineStack(app, 'PipelineWithPostPrepareStack'); +app.synth(); diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.template.json index 086e0f98c02b5..21a48563e993e 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.template.json @@ -387,7 +387,7 @@ "Name": "Synth_Output" } ], - "Name": "Stack.Prepare", + "Name": "Stack.Prepare-AppStage-Stack", "RoleArn": { "Fn::Join": [ "", diff --git a/packages/aws-cdk-lib/pipelines/README.md b/packages/aws-cdk-lib/pipelines/README.md index 6f1698cb590c1..7dde1b0cb0969 100644 --- a/packages/aws-cdk-lib/pipelines/README.md +++ b/packages/aws-cdk-lib/pipelines/README.md @@ -1,6 +1,5 @@ # CDK Pipelines - A construct library for painless Continuous Delivery of CDK applications. CDK Pipelines is an *opinionated construct library*. It is purpose-built to @@ -164,9 +163,9 @@ has been bootstrapped (see below), and then execute deploying the Run the following commands to get the pipeline going: ```console -$ git commit -a -$ git push -$ cdk deploy PipelineStack +git commit -a +git push +cdk deploy PipelineStack ``` Administrative permissions to the account are only necessary up until @@ -567,6 +566,38 @@ class PipelineStack extends Stack { } ``` +#### Deploying with all change sets at first + +Deployment is done by default with `CodePipeline` engine using change sets, +i.e. to first create a change set and then execute it. This allows you to inject +steps that inspect the change set and approve or reject it, but failed deployments +are not retryable and creation of the change set costs time. The change sets tough are +being sorted within the pipeline by its dependencies. This means that some of the change set +might not be at the top level of a stage. Therefore there is the possibility to define, that +every change set is set as the first action (all in parallel) + +The creation of change sets at the top level can be switched on by setting `allPrepareNodesFirst: true`. +`useChangeSets` needs to be activated in order to use this feature. + +```ts +declare const synth: pipelines.ShellStep; + +class PipelineStack extends Stack { + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const pipeline = new pipelines.CodePipeline(this, 'Pipeline', { + synth, + + allPrepareNodesFirst: true, + }); + } +} +``` + +It is further possible to add Steps in between the change sets and the deploy nodes (e.g. a manual approval step). This allows inspecting all change sets before deploying the stacks +in the desired order. + ### Validation Every `addStage()` and `addWave()` command takes additional options. As part of these options, @@ -1656,7 +1687,7 @@ $ env CDK_NEW_BOOTSTRAP=1 npx cdk bootstrap \ ``` - Update all impacted stacks in the pipeline to use this new qualifier. -See https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html for more info. +See for more info. ```ts new Stack(this, 'MyStack', { diff --git a/packages/aws-cdk-lib/pipelines/lib/blueprint/stack-deployment.ts b/packages/aws-cdk-lib/pipelines/lib/blueprint/stack-deployment.ts index 5732ec0724fd3..faac9a8bec567 100644 --- a/packages/aws-cdk-lib/pipelines/lib/blueprint/stack-deployment.ts +++ b/packages/aws-cdk-lib/pipelines/lib/blueprint/stack-deployment.ts @@ -91,11 +91,14 @@ export class StackDeployment { /** * Build a `StackDeployment` from a Stack Artifact in a Cloud Assembly. */ - public static fromArtifact(stackArtifact: cxapi.CloudFormationStackArtifact): StackDeployment { + public static fromArtifact( + stackArtifact: cxapi.CloudFormationStackArtifact, + ): StackDeployment { const artRegion = stackArtifact.environment.region; const region = artRegion === cxapi.UNKNOWN_REGION ? undefined : artRegion; const artAccount = stackArtifact.environment.account; - const account = artAccount === cxapi.UNKNOWN_ACCOUNT ? undefined : artAccount; + const account = + artAccount === cxapi.UNKNOWN_ACCOUNT ? undefined : artAccount; return new StackDeployment({ account, @@ -104,7 +107,10 @@ export class StackDeployment { stackArtifactId: stackArtifact.id, constructPath: stackArtifact.hierarchicalId, stackName: stackArtifact.stackName, - absoluteTemplatePath: path.join(stackArtifact.assembly.directory, stackArtifact.templateFile), + absoluteTemplatePath: path.join( + stackArtifact.assembly.directory, + stackArtifact.templateFile, + ), assumeRoleArn: stackArtifact.assumeRoleArn, executionRoleArn: stackArtifact.cloudFormationExecutionRoleArn, assets: extractStackAssets(stackArtifact), @@ -206,6 +212,12 @@ export class StackDeployment { */ public readonly post: Step[] = []; + /** + * Additional steps to run after all of the prepare-nodes in the stage + */ + + public readonly postPrepare: Step[] = []; + private constructor(props: StackDeploymentProps) { this.stackArtifactId = props.stackArtifactId; this.constructPath = props.constructPath; @@ -216,7 +228,9 @@ export class StackDeployment { this.executionRoleArn = props.executionRoleArn; this.stackName = props.stackName; this.absoluteTemplatePath = props.absoluteTemplatePath; - this.templateUrl = props.templateS3Uri ? s3UrlFromUri(props.templateS3Uri, props.region) : undefined; + this.templateUrl = props.templateS3Uri + ? s3UrlFromUri(props.templateS3Uri, props.region) + : undefined; this.assets = new Array(); @@ -242,10 +256,16 @@ export class StackDeployment { * @param changeSet steps executed after stack.prepare and before stack.deploy * @param post steps executed after stack.deploy */ - public addStackSteps(pre: Step[], changeSet: Step[], post: Step[]) { + public addStackSteps( + pre: Step[], + changeSet: Step[], + post: Step[], + postPrepare: Step[], + ) { this.pre.push(...pre); this.changeSet.push(...changeSet); this.post.push(...post); + this.postPrepare.push(...postPrepare); } } diff --git a/packages/aws-cdk-lib/pipelines/lib/blueprint/stage-deployment.ts b/packages/aws-cdk-lib/pipelines/lib/blueprint/stage-deployment.ts index 813e7aacf9f12..26459d2dd84b1 100644 --- a/packages/aws-cdk-lib/pipelines/lib/blueprint/stage-deployment.ts +++ b/packages/aws-cdk-lib/pipelines/lib/blueprint/stage-deployment.ts @@ -30,6 +30,13 @@ export interface StageDeploymentProps { */ readonly post?: Step[]; + /** + * Additional steps to run after all of the prepare-nodes in the stage. If this property is set allPrepareNodesFirst has to be set to true also. This is the case, because dependency cycle will occour otherwise. + * + * @default - No additional steps + */ + readonly postPrepare?: Step[]; + /** * Instructions for additional steps that are run at the stack level * @@ -56,36 +63,54 @@ export class StageDeployment { if (assembly.stacks.length === 0) { // If we don't check here, a more puzzling "stage contains no actions" // error will be thrown come deployment time. - throw new Error(`The given Stage construct ('${stage.node.path}') should contain at least one Stack`); + throw new Error( + `The given Stage construct ('${stage.node.path}') should contain at least one Stack`, + ); } - const stepFromArtifact = new Map(); + const stepFromArtifact = new Map< + CloudFormationStackArtifact, + StackDeployment + >(); for (const artifact of assembly.stacks) { const step = StackDeployment.fromArtifact(artifact); stepFromArtifact.set(artifact, step); } if (props.stackSteps) { for (const stackstep of props.stackSteps) { - const stackArtifact = assembly.getStackArtifact(stackstep.stack.artifactId); + const stackArtifact = assembly.getStackArtifact( + stackstep.stack.artifactId, + ); const thisStep = stepFromArtifact.get(stackArtifact); if (!thisStep) { - throw new Error('Logic error: we just added a step for this artifact but it disappeared.'); + throw new Error( + 'Logic error: we just added a step for this artifact but it disappeared.', + ); } - thisStep.addStackSteps(stackstep.pre ?? [], stackstep.changeSet ?? [], stackstep.post ?? []); + thisStep.addStackSteps( + stackstep.pre ?? [], + stackstep.changeSet ?? [], + stackstep.post ?? [], + stackstep.postPrepare ?? [], + ); } } for (const artifact of assembly.stacks) { const thisStep = stepFromArtifact.get(artifact); if (!thisStep) { - throw new Error('Logic error: we just added a step for this artifact but it disappeared.'); + throw new Error( + 'Logic error: we just added a step for this artifact but it disappeared.', + ); } const stackDependencies = artifact.dependencies.filter(isStackArtifact); for (const dep of stackDependencies) { const depStep = stepFromArtifact.get(dep); if (!depStep) { - throw new Error(`Stack '${artifact.id}' depends on stack not found in same Stage: '${dep.id}'`); + throw new Error( + `Stack '${artifact.id}' depends on stack not found in same Stage: '${dep.id}'`, + ); } thisStep.addStackDependency(depStep); } @@ -112,6 +137,13 @@ export class StageDeployment { */ public readonly post: Step[]; + /** + * Additional steps to run after all of the prepare-nodes in the stage. If this property is set allPrepareNodesFirst has to be set to true also. This is the case, because dependency cycle will occour otherwise. + * + * @default - No additional steps + */ + public readonly postPrepare: Step[]; + /** * Instructions for additional steps that are run at stack level */ @@ -125,10 +157,13 @@ export class StageDeployment { private constructor( /** The stacks deployed in this stage */ - public readonly stacks: StackDeployment[], props: StageDeploymentProps = {}) { + public readonly stacks: StackDeployment[], + props: StageDeploymentProps = {}, + ) { this.stageName = props.stageName ?? ''; this.pre = props.pre ?? []; this.post = props.post ?? []; + this.postPrepare = props.postPrepare ?? []; this.stackSteps = props.stackSteps ?? []; } @@ -145,4 +180,11 @@ export class StageDeployment { public addPost(...steps: Step[]) { this.post.push(...steps); } + + /** + * Add an additional step to run after all of the stacks in this stage + */ + public addPostPrepare(...steps: Step[]) { + this.postPrepare.push(...steps); + } } \ No newline at end of file diff --git a/packages/aws-cdk-lib/pipelines/lib/blueprint/step.ts b/packages/aws-cdk-lib/pipelines/lib/blueprint/step.ts index 86a6a5d8eca29..d938fe94d2019 100644 --- a/packages/aws-cdk-lib/pipelines/lib/blueprint/step.ts +++ b/packages/aws-cdk-lib/pipelines/lib/blueprint/step.ts @@ -142,6 +142,13 @@ export interface StackSteps { */ readonly pre?: Step[]; + /** + * Additional steps to run after all of the prepare-nodes in the stage. If this property is set allPrepareNodesFirst has to be set to true also. This is the case, because dependency cycle will occour otherwise. + * + * @default - No additional steps + */ + readonly postPrepare?: Step[]; + /** * Steps that execute after stack is prepared but before stack is deployed * diff --git a/packages/aws-cdk-lib/pipelines/lib/blueprint/wave.ts b/packages/aws-cdk-lib/pipelines/lib/blueprint/wave.ts index 50a9527ead786..bb812b99e323e 100644 --- a/packages/aws-cdk-lib/pipelines/lib/blueprint/wave.ts +++ b/packages/aws-cdk-lib/pipelines/lib/blueprint/wave.ts @@ -19,6 +19,14 @@ export interface WaveProps { * @default - No additional steps */ readonly post?: Step[]; + + /** + * Additional steps to run after all of the prepare-nodes in the stage. If this property is set allPrepareNodesFirst has to be set to true also. This is the case, because dependency cycle will occour otherwise. + * + * @default - No additional steps + */ + readonly postPrepare?: Step[]; + } /** @@ -35,6 +43,12 @@ export class Wave { */ public readonly post: Step[]; + /** + * Additional steps to run after all of the prepare-nodes in the stage. If this property is set allPrepareNodesFirst has to be set to true also. This is the case, because dependency cycle will occour otherwise. + * + */ + public readonly postPrepare: Step[]; + /** * The stages that are deployed in this wave */ @@ -42,9 +56,13 @@ export class Wave { constructor( /** Identifier for this Wave */ - public readonly id: string, props: WaveProps = {}) { + public readonly id: string, + props: WaveProps = {}, + ) { this.pre = props.pre ?? []; this.post = props.post ?? []; + this.postPrepare = props.postPrepare ?? []; + } /** @@ -72,6 +90,13 @@ export class Wave { public addPost(...steps: Step[]) { this.post.push(...steps); } + + /** + * Add an additional step to run after all of the stacks in this stage + */ + public addPostPrepare(...steps: Step[]) { + this.postPrepare.push(...steps); + } } /** @@ -92,12 +117,20 @@ export interface AddStageOpts { */ readonly post?: Step[]; + /** + * Additional steps to run after all of the prepare-nodes in the stage. If this property is set allPrepareNodesFirst has to be set to true also. This is the case, because dependency cycle will occour otherwise. + * + * @default - No additional steps + */ + readonly postPrepare?: Step[]; + /** * Instructions for stack level steps * * @default - No additional instructions */ readonly stackSteps?: StackSteps[]; + } /** @@ -117,4 +150,12 @@ export interface WaveOptions { * @default - No additional steps */ readonly post?: Step[]; + + /** + * Additional steps to run after all of the prepare-nodes in the stage + * + * @default - No additional steps + */ + readonly postPrepare?: Step[]; + } \ No newline at end of file diff --git a/packages/aws-cdk-lib/pipelines/lib/codepipeline/codepipeline.ts b/packages/aws-cdk-lib/pipelines/lib/codepipeline/codepipeline.ts index cef5a40dc459f..6c7322ab49d9c 100644 --- a/packages/aws-cdk-lib/pipelines/lib/codepipeline/codepipeline.ts +++ b/packages/aws-cdk-lib/pipelines/lib/codepipeline/codepipeline.ts @@ -16,8 +16,8 @@ import * as s3 from '../../../aws-s3'; import { Aws, CfnCapabilities, Duration, PhysicalName, Stack, Names, FeatureFlags } from '../../../core'; import * as cxapi from '../../../cx-api'; import { AssetType, FileSet, IFileSetProducer, ManualApprovalStep, ShellStep, StackAsset, StackDeployment, Step } from '../blueprint'; -import { DockerCredential, dockerCredentialsInstallCommands, DockerCredentialUsage } from '../docker-credentials'; -import { GraphNodeCollection, isGraph, AGraphNode, PipelineGraph } from '../helpers-internal'; +import { DockerCredential, DockerCredentialUsage, dockerCredentialsInstallCommands } from '../docker-credentials'; +import { AGraphNode, GraphNodeCollection, PipelineGraph, isGraph } from '../helpers-internal'; import { PipelineBase } from '../main'; import { AssetSingletonRole } from '../private/asset-singleton-role'; import { CachedFnSub } from '../private/cached-fnsub'; @@ -244,6 +244,15 @@ export interface CodePipelineProps { * @default - A new S3 bucket will be created. */ readonly artifactBucket?: s3.IBucket; + + + /** + * If all "prepare" step should be placed all together as the first actions within a stage/wave + * @default - False + */ + + readonly allPrepareNodesFirst?: boolean; + /** * A map of region to S3 bucket name used for cross-region CodePipeline. * For every Action that you specify targeting a different region than the Pipeline itself, @@ -254,6 +263,7 @@ export interface CodePipelineProps { * @default - no cross region replication buckets. */ readonly crossRegionReplicationBuckets?: { [region: string]: s3.IBucket }; + } /** @@ -366,11 +376,12 @@ export class CodePipeline extends PipelineBase { private readonly dockerCredentials: DockerCredential[]; private readonly cachedFnSub = new CachedFnSub(); private stackOutputs: StackOutputsMap; - + private readonly allPrepareNodesFirst: boolean; /** * Asset roles shared for publishing */ - private readonly assetCodeBuildRoles: Map = new Map(); + private readonly assetCodeBuildRoles: Map = + new Map(); /** * This is set to the very first artifact produced in the pipeline @@ -382,7 +393,11 @@ export class CodePipeline extends PipelineBase { private readonly singlePublisherPerAssetType: boolean; private readonly cliVersion?: string; - constructor(scope: Construct, id: string, private readonly props: CodePipelineProps) { + constructor( + scope: Construct, + id: string, + private readonly props: CodePipelineProps, + ) { super(scope, id, props); this.selfMutationEnabled = props.selfMutation ?? true; @@ -391,6 +406,7 @@ export class CodePipeline extends PipelineBase { this.cliVersion = props.cliVersion ?? preferredCliVersion(); this.useChangeSets = props.useChangeSets ?? true; this.stackOutputs = new StackOutputsMap(this); + this.allPrepareNodesFirst = props.allPrepareNodesFirst ?? false; } /** @@ -400,7 +416,9 @@ export class CodePipeline extends PipelineBase { */ public get synthProject(): cb.IProject { if (!this._synthProject) { - throw new Error('Call pipeline.buildPipeline() before reading this property'); + throw new Error( + 'Call pipeline.buildPipeline() before reading this property', + ); } return this._synthProject; } @@ -413,10 +431,14 @@ export class CodePipeline extends PipelineBase { */ public get selfMutationProject(): cb.IProject { if (!this._pipeline) { - throw new Error('Call pipeline.buildPipeline() before reading this property'); + throw new Error( + 'Call pipeline.buildPipeline() before reading this property', + ); } if (!this._selfMutationProject) { - throw new Error('No selfMutationProject since the selfMutation property was set to false'); + throw new Error( + 'No selfMutationProject since the selfMutation property was set to false', + ); } return this._selfMutationProject; } @@ -442,29 +464,48 @@ export class CodePipeline extends PipelineBase { if (this.props.codePipeline) { if (this.props.pipelineName) { - throw new Error('Cannot set \'pipelineName\' if an existing CodePipeline is given using \'codePipeline\''); + throw new Error( + "Cannot set 'pipelineName' if an existing CodePipeline is given using 'codePipeline'", + ); } if (this.props.crossAccountKeys !== undefined) { - throw new Error('Cannot set \'crossAccountKeys\' if an existing CodePipeline is given using \'codePipeline\''); + throw new Error( + "Cannot set 'crossAccountKeys' if an existing CodePipeline is given using 'codePipeline'", + ); } if (this.props.enableKeyRotation !== undefined) { - throw new Error('Cannot set \'enableKeyRotation\' if an existing CodePipeline is given using \'codePipeline\''); + throw new Error( + "Cannot set 'enableKeyRotation' if an existing CodePipeline is given using 'codePipeline'", + ); } if (this.props.crossRegionReplicationBuckets !== undefined) { throw new Error('Cannot set \'crossRegionReplicationBuckets\' if an existing CodePipeline is given using \'codePipeline\''); } if (this.props.reuseCrossRegionSupportStacks !== undefined) { - throw new Error('Cannot set \'reuseCrossRegionSupportStacks\' if an existing CodePipeline is given using \'codePipeline\''); + throw new Error( + "Cannot set 'reuseCrossRegionSupportStacks' if an existing CodePipeline is given using 'codePipeline'", + ); } if (this.props.role !== undefined) { - throw new Error('Cannot set \'role\' if an existing CodePipeline is given using \'codePipeline\''); + throw new Error( + "Cannot set 'role' if an existing CodePipeline is given using 'codePipeline'", + ); } if (this.props.artifactBucket !== undefined) { - throw new Error('Cannot set \'artifactBucket\' if an existing CodePipeline is given using \'codePipeline\''); + throw new Error( + "Cannot set 'artifactBucket' if an existing CodePipeline is given using 'codePipeline'", + ); } this._pipeline = this.props.codePipeline; } else { + + if (this.props.allPrepareNodesFirst && this.props.useChangeSets === false) { + throw new Error( + "Cannot set 'allPrepareNodesFirst: true' if 'useChangeSets' is set to false.", + ); + } + this._pipeline = new cp.Pipeline(this, 'Pipeline', { pipelineName: this.props.pipelineName, pipelineType: cp.PipelineType.V1, @@ -484,6 +525,7 @@ export class CodePipeline extends PipelineBase { selfMutation: this.selfMutationEnabled, singlePublisherPerAssetType: this.singlePublisherPerAssetType, prepareStep: this.useChangeSets, + allPrepareNodesFirst: this.allPrepareNodesFirst, }); this._cloudAssemblyFileSet = graphFromBp.cloudAssemblyFileSet; @@ -491,12 +533,18 @@ export class CodePipeline extends PipelineBase { // Write a dotfile for the pipeline layout const dotFile = `${Names.uniqueId(this)}.dot`; - fs.writeFileSync(path.join(this.myCxAsmRoot, dotFile), graphFromBp.graph.renderDot().replace(/input\.dot/, dotFile), { encoding: 'utf-8' }); + fs.writeFileSync( + path.join(this.myCxAsmRoot, dotFile), + graphFromBp.graph.renderDot().replace(/input\.dot/, dotFile), + { encoding: 'utf-8' }, + ); } private get myCxAsmRoot(): string { if (!this._myCxAsmRoot) { - throw new Error('Can\'t read \'myCxAsmRoot\' if build deployment not called yet'); + throw new Error( + "Can't read 'myCxAsmRoot' if build deployment not called yet", + ); } return this._myCxAsmRoot; } @@ -515,7 +563,9 @@ export class CodePipeline extends PipelineBase { let beforeSelfMutation = this.selfMutationEnabled; for (const stageNode of flatten(structure.graph.sortedChildren())) { if (!isGraph(stageNode)) { - throw new Error(`Top-level children must be graphs, got '${stageNode}'`); + throw new Error( + `Top-level children must be graphs, got '${stageNode}'`, + ); } // Group our ordered tranches into blocks of 50. @@ -523,10 +573,14 @@ export class CodePipeline extends PipelineBase { const chunks = chunkTranches(50, stageNode.sortedLeaves()); const actionsOverflowStage = chunks.length > 1; for (const [i, tranches] of enumerate(chunks)) { - const stageName = actionsOverflowStage ? `${stageNode.id}.${i + 1}` : stageNode.id; + const stageName = actionsOverflowStage + ? `${stageNode.id}.${i + 1}` + : stageNode.id; const pipelineStage = this.pipeline.addStage({ stageName }); - const sharedParent = new GraphNodeCollection(flatten(tranches)).commonAncestor(); + const sharedParent = new GraphNodeCollection( + flatten(tranches), + ).commonAncestor(); let runOrder = 1; for (const tranche of tranches) { @@ -538,9 +592,10 @@ export class CodePipeline extends PipelineBase { const nodeType = this.nodeTypeFromNode(node); const name = actionName(node, sharedParent); - const variablesNamespace = node.data?.type === 'step' - ? namespaceStepOutputs(node.data.step, pipelineStage, name) - : undefined; + const variablesNamespace = + node.data?.type === 'step' + ? namespaceStepOutputs(node.data.step, pipelineStage, name) + : undefined; const result = factory.produceAction(pipelineStage, { actionName: name, @@ -550,7 +605,9 @@ export class CodePipeline extends PipelineBase { fallbackArtifact: this._fallbackArtifact, pipeline: this, // If this step happens to produce a CodeBuild job, set the default options - codeBuildDefaults: nodeType ? this.codeBuildDefaultsFor(nodeType) : undefined, + codeBuildDefaults: nodeType + ? this.codeBuildDefaultsFor(nodeType) + : undefined, beforeSelfMutation, variablesNamespace, stackOutputsMap: this.stackOutputs, @@ -577,11 +634,16 @@ export class CodePipeline extends PipelineBase { * Some minor state manipulation of CodeBuild projects and pipeline * artifacts. */ - private postProcessNode(node: AGraphNode, result: CodePipelineActionFactoryResult) { + private postProcessNode( + node: AGraphNode, + result: CodePipelineActionFactoryResult, + ) { const nodeType = this.nodeTypeFromNode(node); if (result.project) { - const dockerUsage = dockerUsageFromCodeBuild(nodeType ?? CodeBuildProjectType.STEP); + const dockerUsage = dockerUsageFromCodeBuild( + nodeType ?? CodeBuildProjectType.STEP, + ); if (dockerUsage) { for (const c of this.dockerCredentials) { c.grantRead(result.project, dockerUsage); @@ -596,8 +658,14 @@ export class CodePipeline extends PipelineBase { } } - if (node.data?.type === 'step' && node.data.step.primaryOutput?.primaryOutput && !this._fallbackArtifact) { - this._fallbackArtifact = this.artifacts.toCodePipeline(node.data.step.primaryOutput?.primaryOutput); + if ( + node.data?.type === 'step' && + node.data.step.primaryOutput?.primaryOutput && + !this._fallbackArtifact + ) { + this._fallbackArtifact = this.artifacts.toCodePipeline( + node.data.step.primaryOutput?.primaryOutput, + ); } } @@ -610,7 +678,9 @@ export class CodePipeline extends PipelineBase { case 'group': case 'stack-group': case undefined: - throw new Error(`actionFromNode: did not expect to get group nodes: ${node.data?.type}`); + throw new Error( + `actionFromNode: did not expect to get group nodes: ${node.data?.type}`, + ); case 'self-update': return this.selfMutateAction(); @@ -623,14 +693,22 @@ export class CodePipeline extends PipelineBase { case 'execute': return node.data.withoutChangeSet - ? this.executeDeploymentAction(node.data.stack, node.data.captureOutputs) - : this.executeChangeSetAction(node.data.stack, node.data.captureOutputs); + ? this.executeDeploymentAction( + node.data.stack, + node.data.captureOutputs, + ) + : this.executeChangeSetAction( + node.data.stack, + node.data.captureOutputs, + ); case 'step': return this.actionFromStep(node, node.data.step); default: - throw new Error(`CodePipeline does not support graph nodes of type '${node.data?.type}'. You are probably using a feature this CDK Pipelines implementation does not support.`); + throw new Error( + `CodePipeline does not support graph nodes of type '${node.data?.type}'. You are probably using a feature this CDK Pipelines implementation does not support.`, + ); } } @@ -646,7 +724,10 @@ export class CodePipeline extends PipelineBase { * The rest is expressed in terms of these 3, or in terms of graph nodes * which are handled elsewhere. */ - private actionFromStep(node: AGraphNode, step: Step): ICodePipelineActionFactory { + private actionFromStep( + node: AGraphNode, + step: Step, + ): ICodePipelineActionFactory { const nodeType = this.nodeTypeFromNode(node); // CodePipeline-specific steps first -- this includes Sources @@ -657,9 +738,8 @@ export class CodePipeline extends PipelineBase { // Now built-in steps if (step instanceof ShellStep || step instanceof CodeBuildStep) { // The 'CdkBuildProject' will be the construct ID of the CodeBuild project, necessary for backwards compat - let constructId = nodeType === CodeBuildProjectType.SYNTH - ? 'CdkBuildProject' - : step.id; + let constructId = + nodeType === CodeBuildProjectType.SYNTH ? 'CdkBuildProject' : step.id; return step instanceof CodeBuildStep ? CodeBuildFactory.fromCodeBuildStep(constructId, step) @@ -669,101 +749,174 @@ export class CodePipeline extends PipelineBase { if (step instanceof ManualApprovalStep) { return { produceAction: (stage, options) => { - stage.addAction(new cpa.ManualApprovalAction({ - actionName: options.actionName, - runOrder: options.runOrder, - additionalInformation: step.comment, - })); + stage.addAction( + new cpa.ManualApprovalAction({ + actionName: options.actionName, + runOrder: options.runOrder, + additionalInformation: step.comment, + }), + ); return { runOrdersConsumed: 1 }; }, }; } - throw new Error(`Deployment step '${step}' is not supported for CodePipeline-backed pipelines`); + throw new Error( + `Deployment step '${step}' is not supported for CodePipeline-backed pipelines`, + ); } - private createChangeSetAction(stack: StackDeployment): ICodePipelineActionFactory { + private createChangeSetAction( + stack: StackDeployment, + ): ICodePipelineActionFactory { const changeSetName = 'PipelineChange'; - const templateArtifact = this.artifacts.toCodePipeline(this._cloudAssemblyFileSet!); + const templateArtifact = this.artifacts.toCodePipeline( + this._cloudAssemblyFileSet!, + ); const templateConfigurationPath = this.writeTemplateConfiguration(stack); - const region = stack.region !== Stack.of(this).region ? stack.region : undefined; - const account = stack.account !== Stack.of(this).account ? stack.account : undefined; + const region = + stack.region !== Stack.of(this).region ? stack.region : undefined; + const account = + stack.account !== Stack.of(this).account ? stack.account : undefined; - const relativeTemplatePath = path.relative(this.myCxAsmRoot, stack.absoluteTemplatePath); + const relativeTemplatePath = path.relative( + this.myCxAsmRoot, + stack.absoluteTemplatePath, + ); return { produceAction: (stage, options) => { - stage.addAction(new cpa.CloudFormationCreateReplaceChangeSetAction({ - actionName: options.actionName, - runOrder: options.runOrder, - changeSetName, - stackName: stack.stackName, - templatePath: templateArtifact.atPath(toPosixPath(relativeTemplatePath)), - adminPermissions: true, - role: this.roleFromPlaceholderArn(this.pipeline, region, account, stack.assumeRoleArn), - deploymentRole: this.roleFromPlaceholderArn(this.pipeline, region, account, stack.executionRoleArn), - region: region, - templateConfiguration: templateConfigurationPath - ? templateArtifact.atPath(toPosixPath(templateConfigurationPath)) - : undefined, - cfnCapabilities: [CfnCapabilities.NAMED_IAM, CfnCapabilities.AUTO_EXPAND], - })); + stage.addAction( + new cpa.CloudFormationCreateReplaceChangeSetAction({ + actionName: options.actionName, + runOrder: options.runOrder, + changeSetName, + stackName: stack.stackName, + templatePath: templateArtifact.atPath( + toPosixPath(relativeTemplatePath), + ), + adminPermissions: true, + role: this.roleFromPlaceholderArn( + this.pipeline, + region, + account, + stack.assumeRoleArn, + ), + deploymentRole: this.roleFromPlaceholderArn( + this.pipeline, + region, + account, + stack.executionRoleArn, + ), + region: region, + templateConfiguration: templateConfigurationPath + ? templateArtifact.atPath(toPosixPath(templateConfigurationPath)) + : undefined, + cfnCapabilities: [ + CfnCapabilities.NAMED_IAM, + CfnCapabilities.AUTO_EXPAND, + ], + }), + ); return { runOrdersConsumed: 1 }; }, }; } - private executeChangeSetAction(stack: StackDeployment, captureOutputs: boolean): ICodePipelineActionFactory { + private executeChangeSetAction( + stack: StackDeployment, + captureOutputs: boolean, + ): ICodePipelineActionFactory { const changeSetName = 'PipelineChange'; - const region = stack.region !== Stack.of(this).region ? stack.region : undefined; - const account = stack.account !== Stack.of(this).account ? stack.account : undefined; + const region = + stack.region !== Stack.of(this).region ? stack.region : undefined; + const account = + stack.account !== Stack.of(this).account ? stack.account : undefined; return { produceAction: (stage, options) => { - stage.addAction(new cpa.CloudFormationExecuteChangeSetAction({ - actionName: options.actionName, - runOrder: options.runOrder, - changeSetName, - stackName: stack.stackName, - role: this.roleFromPlaceholderArn(this.pipeline, region, account, stack.assumeRoleArn), - region: region, - variablesNamespace: captureOutputs ? stackVariableNamespace(stack) : undefined, - })); + stage.addAction( + new cpa.CloudFormationExecuteChangeSetAction({ + actionName: options.actionName, + runOrder: options.runOrder, + changeSetName, + stackName: stack.stackName, + role: this.roleFromPlaceholderArn( + this.pipeline, + region, + account, + stack.assumeRoleArn, + ), + region: region, + variablesNamespace: captureOutputs + ? stackVariableNamespace(stack) + : undefined, + }), + ); return { runOrdersConsumed: 1 }; }, }; } - private executeDeploymentAction(stack: StackDeployment, captureOutputs: boolean): ICodePipelineActionFactory { - const templateArtifact = this.artifacts.toCodePipeline(this._cloudAssemblyFileSet!); + private executeDeploymentAction( + stack: StackDeployment, + captureOutputs: boolean, + ): ICodePipelineActionFactory { + const templateArtifact = this.artifacts.toCodePipeline( + this._cloudAssemblyFileSet!, + ); const templateConfigurationPath = this.writeTemplateConfiguration(stack); - const region = stack.region !== Stack.of(this).region ? stack.region : undefined; - const account = stack.account !== Stack.of(this).account ? stack.account : undefined; + const region = + stack.region !== Stack.of(this).region ? stack.region : undefined; + const account = + stack.account !== Stack.of(this).account ? stack.account : undefined; - const relativeTemplatePath = path.relative(this.myCxAsmRoot, stack.absoluteTemplatePath); + const relativeTemplatePath = path.relative( + this.myCxAsmRoot, + stack.absoluteTemplatePath, + ); return { produceAction: (stage, options) => { - stage.addAction(new cpa.CloudFormationCreateUpdateStackAction({ - actionName: options.actionName, - runOrder: options.runOrder, - stackName: stack.stackName, - templatePath: templateArtifact.atPath(toPosixPath(relativeTemplatePath)), - adminPermissions: true, - role: this.roleFromPlaceholderArn(this.pipeline, region, account, stack.assumeRoleArn), - deploymentRole: this.roleFromPlaceholderArn(this.pipeline, region, account, stack.executionRoleArn), - region: region, - templateConfiguration: templateConfigurationPath - ? templateArtifact.atPath(toPosixPath(templateConfigurationPath)) - : undefined, - cfnCapabilities: [CfnCapabilities.NAMED_IAM, CfnCapabilities.AUTO_EXPAND], - variablesNamespace: captureOutputs ? stackVariableNamespace(stack) : undefined, - })); + stage.addAction( + new cpa.CloudFormationCreateUpdateStackAction({ + actionName: options.actionName, + runOrder: options.runOrder, + stackName: stack.stackName, + templatePath: templateArtifact.atPath( + toPosixPath(relativeTemplatePath), + ), + adminPermissions: true, + role: this.roleFromPlaceholderArn( + this.pipeline, + region, + account, + stack.assumeRoleArn, + ), + deploymentRole: this.roleFromPlaceholderArn( + this.pipeline, + region, + account, + stack.executionRoleArn, + ), + region: region, + templateConfiguration: templateConfigurationPath + ? templateArtifact.atPath(toPosixPath(templateConfigurationPath)) + : undefined, + cfnCapabilities: [ + CfnCapabilities.NAMED_IAM, + CfnCapabilities.AUTO_EXPAND, + ], + variablesNamespace: captureOutputs + ? stackVariableNamespace(stack) + : undefined, + }), + ); return { runOrdersConsumed: 1 }; }, @@ -774,16 +927,17 @@ export class CodePipeline extends PipelineBase { const installSuffix = this.cliVersion ? `@${this.cliVersion}` : ''; const pipelineStack = Stack.of(this.pipeline); - const pipelineStackIdentifier = pipelineStack.node.path ?? pipelineStack.stackName; + const pipelineStackIdentifier = + pipelineStack.node.path ?? pipelineStack.stackName; const step = new CodeBuildStep('SelfMutate', { projectName: maybeSuffix(this.props.pipelineName, '-selfupdate'), input: this._cloudAssemblyFileSet, - installCommands: [ - `npm install -g aws-cdk${installSuffix}`, - ], + installCommands: [`npm install -g aws-cdk${installSuffix}`], commands: [ - `cdk -a ${toPosixPath(embeddedAsmPath(this.pipeline))} deploy ${pipelineStackIdentifier} --require-approval=never --verbose`, + `cdk -a ${toPosixPath( + embeddedAsmPath(this.pipeline), + )} deploy ${pipelineStackIdentifier} --require-approval=never --verbose`, ], rolePolicyStatements: [ @@ -793,7 +947,11 @@ export class CodePipeline extends PipelineBase { resources: [`arn:*:iam::${Stack.of(this.pipeline).account}:role/*`], conditions: { 'ForAnyValue:StringEquals': { - 'iam:ResourceTag/aws-cdk:bootstrap-role': ['image-publishing', 'file-publishing', 'deploy'], + 'iam:ResourceTag/aws-cdk:bootstrap-role': [ + 'image-publishing', + 'file-publishing', + 'deploy', + ], }, }, }), @@ -816,38 +974,47 @@ export class CodePipeline extends PipelineBase { }); } - private publishAssetsAction(node: AGraphNode, assets: StackAsset[]): ICodePipelineActionFactory { + private publishAssetsAction( + node: AGraphNode, + assets: StackAsset[], + ): ICodePipelineActionFactory { const installSuffix = this.cliVersion ? `@${this.cliVersion}` : ''; - const commands = assets.map(asset => { - const relativeAssetManifestPath = path.relative(this.myCxAsmRoot, asset.assetManifestPath); - return `cdk-assets --path "${toPosixPath(relativeAssetManifestPath)}" --verbose publish "${asset.assetSelector}"`; + const commands = assets.map((asset) => { + const relativeAssetManifestPath = path.relative( + this.myCxAsmRoot, + asset.assetManifestPath, + ); + return `cdk-assets --path "${toPosixPath( + relativeAssetManifestPath, + )}" --verbose publish "${asset.assetSelector}"`; }); const assetType = assets[0].assetType; - if (assets.some(a => a.assetType !== assetType)) { - throw new Error('All assets in a single publishing step must be of the same type'); + if (assets.some((a) => a.assetType !== assetType)) { + throw new Error( + 'All assets in a single publishing step must be of the same type', + ); } const role = this.obtainAssetCodeBuildRole(assets[0].assetType); - for (const roleArn of assets.flatMap(a => a.assetPublishingRoleArn ? [a.assetPublishingRoleArn] : [])) { + for (const roleArn of assets.flatMap((a) => + a.assetPublishingRoleArn ? [a.assetPublishingRoleArn] : [], + )) { // The ARNs include raw AWS pseudo parameters (e.g., ${AWS::Partition}), which need to be substituted. role.addAssumeRole(this.cachedFnSub.fnSub(roleArn)); - }; + } // The base commands that need to be run const script = new CodeBuildStep(node.id, { commands, - installCommands: [ - `npm install -g cdk-assets${installSuffix}`, - ], + installCommands: [`npm install -g cdk-assets${installSuffix}`], input: this._cloudAssemblyFileSet, buildEnvironment: { - privileged: ( - assets.some(asset => asset.assetType === AssetType.DOCKER_IMAGE) || - this.props.codeBuildDefaults?.buildEnvironment?.privileged - ), + privileged: + assets.some((asset) => asset.assetType === AssetType.DOCKER_IMAGE) || + this.props.codeBuildDefaults?.buildEnvironment?.privileged, }, role, }); @@ -865,7 +1032,9 @@ export class CodePipeline extends PipelineBase { private nodeTypeFromNode(node: AGraphNode) { if (node.data?.type === 'step') { - return !!node.data?.isBuildStep ? CodeBuildProjectType.SYNTH : CodeBuildProjectType.STEP; + return !!node.data?.isBuildStep + ? CodeBuildProjectType.SYNTH + : CodeBuildProjectType.STEP; } if (node.data?.type === 'publish-assets') { return CodeBuildProjectType.ASSETS; @@ -876,7 +1045,9 @@ export class CodePipeline extends PipelineBase { return undefined; } - private codeBuildDefaultsFor(nodeType: CodeBuildProjectType): CodeBuildOptions | undefined { + private codeBuildDefaultsFor( + nodeType: CodeBuildProjectType, + ): CodeBuildOptions | undefined { const defaultOptions: CodeBuildOptions = { buildEnvironment: { buildImage: CDKP_DEFAULT_CODEBUILD_IMAGE, @@ -886,32 +1057,46 @@ export class CodePipeline extends PipelineBase { const typeBasedCustomizations = { [CodeBuildProjectType.SYNTH]: this.props.dockerEnabledForSynth - ? mergeCodeBuildOptions(this.props.synthCodeBuildDefaults, { buildEnvironment: { privileged: true } }) + ? mergeCodeBuildOptions(this.props.synthCodeBuildDefaults, { + buildEnvironment: { privileged: true }, + }) : this.props.synthCodeBuildDefaults, - [CodeBuildProjectType.ASSETS]: this.props.assetPublishingCodeBuildDefaults, + [CodeBuildProjectType.ASSETS]: + this.props.assetPublishingCodeBuildDefaults, - [CodeBuildProjectType.SELF_MUTATE]: this.props.dockerEnabledForSelfMutation - ? mergeCodeBuildOptions(this.props.selfMutationCodeBuildDefaults, { buildEnvironment: { privileged: true } }) + [CodeBuildProjectType.SELF_MUTATE]: this.props + .dockerEnabledForSelfMutation + ? mergeCodeBuildOptions(this.props.selfMutationCodeBuildDefaults, { + buildEnvironment: { privileged: true }, + }) : this.props.selfMutationCodeBuildDefaults, [CodeBuildProjectType.STEP]: {}, }; const dockerUsage = dockerUsageFromCodeBuild(nodeType); - const dockerCommands = dockerUsage !== undefined - ? dockerCredentialsInstallCommands(dockerUsage, this.dockerCredentials, 'both') - : []; - const typeBasedDockerCommands = dockerCommands.length > 0 ? { - partialBuildSpec: cb.BuildSpec.fromObject({ - version: '0.2', - phases: { - pre_build: { - commands: dockerCommands, - }, - }, - }), - } : {}; + const dockerCommands = + dockerUsage !== undefined + ? dockerCredentialsInstallCommands( + dockerUsage, + this.dockerCredentials, + 'both', + ) + : []; + const typeBasedDockerCommands = + dockerCommands.length > 0 + ? { + partialBuildSpec: cb.BuildSpec.fromObject({ + version: '0.2', + phases: { + pre_build: { + commands: dockerCommands, + }, + }, + }), + } + : {}; return mergeCodeBuildOptions( defaultOptions, @@ -921,31 +1106,53 @@ export class CodePipeline extends PipelineBase { ); } - private roleFromPlaceholderArn(scope: Construct, region: string | undefined, - account: string | undefined, arn: string): iam.IRole; - private roleFromPlaceholderArn(scope: Construct, region: string | undefined, - account: string | undefined, arn: string | undefined): iam.IRole | undefined; - private roleFromPlaceholderArn(scope: Construct, region: string | undefined, - account: string | undefined, arn: string | undefined): iam.IRole | undefined { - - if (!arn) { return undefined; } + private roleFromPlaceholderArn( + scope: Construct, + region: string | undefined, + account: string | undefined, + arn: string + ): iam.IRole; + private roleFromPlaceholderArn( + scope: Construct, + region: string | undefined, + account: string | undefined, + arn: string | undefined + ): iam.IRole | undefined; + private roleFromPlaceholderArn( + scope: Construct, + region: string | undefined, + account: string | undefined, + arn: string | undefined, + ): iam.IRole | undefined { + if (!arn) { + return undefined; + } // Use placeholder arn as construct ID. const id = arn; // https://github.com/aws/aws-cdk/issues/7255 - let existingRole = scope.node.tryFindChild(`ImmutableRole${id}`) as iam.IRole; - if (existingRole) { return existingRole; } + let existingRole = scope.node.tryFindChild( + `ImmutableRole${id}`, + ) as iam.IRole; + if (existingRole) { + return existingRole; + } // For when #7255 is fixed. existingRole = scope.node.tryFindChild(id) as iam.IRole; - if (existingRole) { return existingRole; } + if (existingRole) { + return existingRole; + } const arnToImport = cxapi.EnvironmentPlaceholders.replace(arn, { region: region ?? Aws.REGION, accountId: account ?? Aws.ACCOUNT_ID, partition: Aws.PARTITION, }); - return iam.Role.fromRoleArn(scope, id, arnToImport, { mutable: false, addGrantsToResources: true }); + return iam.Role.fromRoleArn(scope, id, arnToImport, { + mutable: false, + addGrantsToResources: true, + }); } /** @@ -953,8 +1160,12 @@ export class CodePipeline extends PipelineBase { * * Currently only supports tags. */ - private writeTemplateConfiguration(stack: StackDeployment): string | undefined { - if (Object.keys(stack.tags).length === 0) { return undefined; } + private writeTemplateConfiguration( + stack: StackDeployment, + ): string | undefined { + if (Object.keys(stack.tags).length === 0) { + return undefined; + } const absConfigPath = `${stack.absoluteTemplatePath}.config.json`; const relativeConfigPath = path.relative(this.myCxAsmRoot, absConfigPath); @@ -984,6 +1195,7 @@ export class CodePipeline extends PipelineBase { const stack = Stack.of(this); + const removeRootPrincipal = FeatureFlags.of(this).isEnabled(cxapi.PIPELINE_REDUCE_ASSET_ROLE_TRUST_SCOPE); const assumePrincipal = removeRootPrincipal ? new iam.CompositePrincipal( @@ -1000,15 +1212,17 @@ export class CodePipeline extends PipelineBase { assumedBy: assumePrincipal, }); + // Grant pull access for any ECR registries and secrets that exist if (assetType === AssetType.DOCKER_IMAGE) { - this.dockerCredentials.forEach(reg => reg.grantRead(assetRole, DockerCredentialUsage.ASSET_PUBLISHING)); + this.dockerCredentials.forEach((reg) => + reg.grantRead(assetRole, DockerCredentialUsage.ASSET_PUBLISHING), + ); } this.assetCodeBuildRoles.set(assetType, assetRole); return assetRole; } - } function dockerUsageFromCodeBuild(cbt: CodeBuildProjectType): DockerCredentialUsage | undefined { diff --git a/packages/aws-cdk-lib/pipelines/lib/helpers-internal/pipeline-graph.ts b/packages/aws-cdk-lib/pipelines/lib/helpers-internal/pipeline-graph.ts index cad9fe7769c1a..1766a83885fbb 100644 --- a/packages/aws-cdk-lib/pipelines/lib/helpers-internal/pipeline-graph.ts +++ b/packages/aws-cdk-lib/pipelines/lib/helpers-internal/pipeline-graph.ts @@ -32,6 +32,12 @@ export interface PipelineGraphProps { * @default true */ readonly prepareStep?: boolean; + + /** + * If all "prepare" step should be placed all together as the first actions within a stage/wave + */ + + readonly allPrepareNodesFirst?: boolean; } /** @@ -43,7 +49,7 @@ export class PipelineGraph { /** * A Step object that may be used as the producer of FileSets that should not be represented in the graph */ - public static readonly NO_STEP: Step = new class extends Step { }('NO_STEP'); + public static readonly NO_STEP: Step = new (class extends Step {})('NO_STEP'); public readonly graph: AGraph = Graph.of('', { type: 'group' }); public readonly cloudAssemblyFileSet: FileSet; @@ -54,24 +60,31 @@ export class PipelineGraph { private readonly assetNodesByType = new Map(); private readonly synthNode?: AGraphNode; private readonly selfMutateNode?: AGraphNode; - private readonly stackOutputDependencies = new DependencyBuilders(); + private readonly stackOutputDependencies = + new DependencyBuilders(); /** Mapping steps to depbuilders, satisfied by the step itself */ private readonly nodeDependencies = new DependencyBuilders(); private readonly publishTemplate: boolean; private readonly prepareStep: boolean; private readonly singlePublisher: boolean; + private readonly allPrepareNodesFirst: boolean; private lastPreparationNode?: AGraphNode; private _fileAssetCtr = 0; private _dockerAssetCtr = 0; - constructor(public readonly pipeline: PipelineBase, props: PipelineGraphProps = {}) { + constructor( + public readonly pipeline: PipelineBase, + props: PipelineGraphProps = {}, + ) { this.publishTemplate = props.publishTemplate ?? false; this.prepareStep = props.prepareStep ?? true; this.singlePublisher = props.singlePublisherPerAssetType ?? false; this.queries = new PipelineQueries(pipeline); + this.allPrepareNodesFirst = props.allPrepareNodesFirst ?? false; + if (pipeline.synth instanceof Step) { this.synthNode = this.addBuildStep(pipeline.synth); if (this.synthNode?.data?.type === 'step') { @@ -82,7 +95,9 @@ export class PipelineGraph { const cloudAssembly = pipeline.synth.primaryOutput?.primaryOutput; if (!cloudAssembly) { - throw new Error(`The synth step must produce the cloud assembly artifact, but doesn't: ${pipeline.synth}`); + throw new Error( + `The synth step must produce the cloud assembly artifact, but doesn't: ${pipeline.synth}`, + ); } this.cloudAssemblyFileSet = cloudAssembly; @@ -97,7 +112,7 @@ export class PipelineGraph { this.lastPreparationNode = this.selfMutateNode; } - const waves = pipeline.waves.map(w => this.addWave(w)); + const waves = pipeline.waves.map((w) => this.addWave(w)); // Make sure the waves deploy sequentially for (let i = 1; i < waves.length; i++) { @@ -116,26 +131,60 @@ export class PipelineGraph { } private addWave(wave: Wave): AGraph { + if (wave.postPrepare.length > 0 && this.allPrepareNodesFirst === false) { + throw new Error( + '"postPrepare" is set, but property "allPrepareNodesFirst" is not set to "true"', + ); + } + // If the wave only has one Stage in it, don't add an additional Graph around it - const retGraph: AGraph = wave.stages.length === 1 - ? this.addStage(wave.stages[0]) - : Graph.of(wave.id, { type: 'group' }, wave.stages.map(s => this.addStage(s))); + const retGraph: AGraph = + wave.stages.length === 1 + ? this.addStage( + wave.stages[0], + wave.postPrepare ?? [], + ) + : Graph.of( + wave.id, + { type: 'group' }, + wave.stages.map((s) => + this.addStage( + s, + wave.postPrepare ?? [], + ), + ), + ); this.addPrePost(wave.pre, wave.post, retGraph); + // this.addPostPrepare(wave.postPrepare, retGraph); retGraph.dependOn(this.lastPreparationNode); this.graph.add(retGraph); return retGraph; } - private addStage(stage: StageDeployment): AGraph { + private addStage( + stage: StageDeployment, + wavePostPrepareSteps: Step[], + ): AGraph { const retGraph: AGraph = Graph.of(stage.stageName, { type: 'group' }); - + const prepareNodes = new GraphNodeCollection(new Array()); const stackGraphs = new Map(); + if (stage.postPrepare.length > 0 && this.allPrepareNodesFirst === false) { + throw new Error( + '"postPrepare" is set, but property "allPrepareNodesFirst" is not set to "true"', + ); + } + for (const stack of stage.stacks) { - const stackGraph: AGraph = Graph.of(this.simpleStackName(stack.stackName, stage.stageName), { type: 'stack-group', stack }); - const prepareNode: AGraphNode | undefined = this.prepareStep ? aGraphNode('Prepare', { type: 'prepare', stack }) : undefined; + const stackGraph: AGraph = Graph.of( + this.simpleStackName(stack.stackName, stage.stageName), + { type: 'stack-group', stack }, + ); + const prepareNode: AGraphNode | undefined = this.prepareStep + ? aGraphNode('Prepare-' + stack.stackName, { type: 'prepare', stack }) + : undefined; const deployNode: AGraphNode = aGraphNode('Deploy', { type: 'execute', stack, @@ -149,8 +198,43 @@ export class PipelineGraph { // node or node collection that represents first point of contact in each stack let firstDeployNode; if (prepareNode) { - stackGraph.add(prepareNode); - deployNode.dependOn(prepareNode); + prepareNodes.nodes.push(prepareNode); + // retGraph.add(prepareNode); + + if (this.allPrepareNodesFirst) { + retGraph.add(prepareNode); + } else { + stackGraph.add(prepareNode); + + // this.addPostPrepare(stage.postPrepare, stackGraph); + } + + const postPrepareNodesWave = this.addPostPrepare( + wavePostPrepareSteps ?? [], + retGraph, + ); + if (postPrepareNodesWave.nodes.length > 0) { + for (const n of postPrepareNodesWave.nodes) { + deployNode.dependOn(n); + n.dependOn(prepareNode); + } + } else { + deployNode.dependOn(prepareNode); + } + + const postPrepareNodes = this.addPostPrepare( + stage.postPrepare, + retGraph, + ); + if (postPrepareNodes.nodes.length > 0) { + for (const n of postPrepareNodes.nodes) { + deployNode.dependOn(n); + n.dependOn(prepareNode); + } + } else { + deployNode.dependOn(prepareNode); + } + firstDeployNode = prepareNode; } else { firstDeployNode = deployNode; @@ -159,9 +243,16 @@ export class PipelineGraph { // add changeset steps at the stack level if (stack.changeSet.length > 0) { if (prepareNode) { - this.addChangeSetNode(stack.changeSet, prepareNode, deployNode, stackGraph); + this.addChangeSetNode( + stack.changeSet, + prepareNode, + deployNode, + stackGraph, + ); } else { - throw new Error(`Cannot use \'changeSet\' steps for stack \'${stack.stackName}\': the pipeline does not support them or they have been disabled`); + throw new Error( + `Cannot use \'changeSet\' steps for stack \'${stack.stackName}\': the pipeline does not support them or they have been disabled`, + ); } } @@ -175,12 +266,16 @@ export class PipelineGraph { const cloudAssembly = this.cloudAssemblyFileSet; - firstDeployNode.dependOn(this.addStepNode(cloudAssembly.producer, retGraph)); + firstDeployNode.dependOn( + this.addStepNode(cloudAssembly.producer, retGraph), + ); // add the template asset if (this.publishTemplate) { if (!stack.templateAsset) { - throw new Error(`"publishTemplate" is enabled, but stack ${stack.stackArtifactId} does not have a template asset`); + throw new Error( + `"publishTemplate" is enabled, but stack ${stack.stackArtifactId} does not have a template asset`, + ); } firstDeployNode.dependOn(this.publishAsset(stack.templateAsset)); @@ -215,11 +310,17 @@ export class PipelineGraph { } this.addPrePost(stage.pre, stage.post, retGraph); - + // this.addPostPrepare(stage.addPostPrepare,) + // this.addPostPrepare(stage.postPrepare, retGraph); return retGraph; } - private addChangeSetNode(changeSet: Step[], prepareNode: AGraphNode, deployNode: AGraphNode, graph: AGraph) { + private addChangeSetNode( + changeSet: Step[], + prepareNode: AGraphNode, + deployNode: AGraphNode, + graph: AGraph, + ) { for (const c of changeSet) { const changeSetNode = this.addStepNode(c, graph); changeSetNode?.dependOn(prepareNode); @@ -227,6 +328,17 @@ export class PipelineGraph { } } + private addPostPrepare(postPrepare: Step[], parent: AGraph) { + const currentNodes = new GraphNodeCollection(parent.nodes); + const postPrepareNodes = new GraphNodeCollection(new Array()); + for (const p of postPrepare) { + const preNode = this.addStepNode(p, parent); + postPrepareNodes?.dependOn(...currentNodes.nodes); + postPrepareNodes.nodes.push(preNode!); + } + return postPrepareNodes; + } + private addPrePost(pre: Step[], post: Step[], parent: AGraph) { const currentNodes = new GraphNodeCollection(parent.nodes); const preNodes = new GraphNodeCollection(new Array()); @@ -257,10 +369,14 @@ export class PipelineGraph { * Adds all dependencies for that Node to the same Step as well. */ private addStepNode(step: Step, parent: AGraph) { - if (step === PipelineGraph.NO_STEP) { return undefined; } + if (step === PipelineGraph.NO_STEP) { + return undefined; + } const previous = this.added.get(step); - if (previous) { return previous; } + if (previous) { + return previous; + } const node: AGraphNode = aGraphNode(step.id, { type: 'step', step }); @@ -302,25 +418,38 @@ export class PipelineGraph { // May need to do this more than once to recursively add all missing producers let attempts = 20; while (attempts-- > 0) { - const unsatisfied = this.nodeDependencies.unsatisfiedBuilders().filter(([s]) => s !== PipelineGraph.NO_STEP); - if (unsatisfied.length === 0) { return; } + const unsatisfied = this.nodeDependencies + .unsatisfiedBuilders() + .filter(([s]) => s !== PipelineGraph.NO_STEP); + if (unsatisfied.length === 0) { + return; + } for (const [step, builder] of unsatisfied) { // Add a new node for this step to the parent of the "leftmost" consumer. - const leftMostConsumer = new GraphNodeCollection(builder.consumers).first(); + const leftMostConsumer = new GraphNodeCollection( + builder.consumers, + ).first(); const parent = leftMostConsumer.parentGraph; if (!parent) { - throw new Error(`Consumer doesn't have a parent graph: ${leftMostConsumer}`); + throw new Error( + `Consumer doesn't have a parent graph: ${leftMostConsumer}`, + ); } this.addStepNode(step, parent); } } const unsatisfied = this.nodeDependencies.unsatisfiedBuilders(); - throw new Error([ - 'Recursion depth too large while adding dependency nodes:', - unsatisfied.map(([step, builder]) => `${builder.consumersAsString()} awaiting ${step}.`), - ].join(' ')); + throw new Error( + [ + 'Recursion depth too large while adding dependency nodes:', + unsatisfied.map( + ([step, builder]) => + `${builder.consumersAsString()} awaiting ${step}.`, + ), + ].join(' '), + ); } private publishAsset(stackAsset: StackAsset): AGraphNode { @@ -330,14 +459,22 @@ export class PipelineGraph { if (assetNode) { // If there's already a node publishing this asset, add as a new publishing // destination to the same node. - } else if (this.singlePublisher && this.assetNodesByType.has(stackAsset.assetType)) { + } else if ( + this.singlePublisher && + this.assetNodesByType.has(stackAsset.assetType) + ) { // If we're doing a single node per type, lookup by that assetNode = this.assetNodesByType.get(stackAsset.assetType)!; } else { // Otherwise add a new one - const id = stackAsset.assetType === AssetType.FILE - ? (this.singlePublisher ? 'FileAsset' : `FileAsset${++this._fileAssetCtr}`) - : (this.singlePublisher ? 'DockerAsset' : `DockerAsset${++this._dockerAssetCtr}`); + const id = + stackAsset.assetType === AssetType.FILE + ? this.singlePublisher + ? 'FileAsset' + : `FileAsset${++this._fileAssetCtr}` + : this.singlePublisher + ? 'DockerAsset' + : `DockerAsset${++this._dockerAssetCtr}`; assetNode = aGraphNode(id, { type: 'publish-assets', assets: [] }); assetsGraph.add(assetNode); @@ -352,7 +489,9 @@ export class PipelineGraph { throw new Error(`${assetNode} has the wrong data.type: ${data?.type}`); } - if (!data.assets.some(a => a.assetSelector === stackAsset.assetSelector)) { + if ( + !data.assets.some((a) => a.assetSelector === stackAsset.assetSelector) + ) { data.assets.push(stackAsset); } @@ -378,8 +517,7 @@ type GraphAnnotation = // Explicitly disable exhaustiveness checking on GraphAnnotation. This forces all consumers to adding // a 'default' clause which allows us to extend this list in the future. // The code below looks weird, 'type' must be a non-enumerable type that is not assignable to 'string'. - | { readonly type: { error: 'you must add a default case to your switch' } } - ; + | { readonly type: { error: 'you must add a default case to your switch' } }; interface ExecuteAnnotation { readonly type: 'execute'; @@ -412,4 +550,4 @@ function aGraphNode(id: string, x: GraphAnnotation): AGraphNode { function stripPrefix(s: string, prefix: string) { return s.startsWith(prefix) ? s.slice(prefix.length) : s; -} \ No newline at end of file +} diff --git a/packages/aws-cdk-lib/pipelines/lib/helpers-internal/pipeline-queries.ts b/packages/aws-cdk-lib/pipelines/lib/helpers-internal/pipeline-queries.ts index 3d6fa25f11937..f1e0bdb800701 100644 --- a/packages/aws-cdk-lib/pipelines/lib/helpers-internal/pipeline-queries.ts +++ b/packages/aws-cdk-lib/pipelines/lib/helpers-internal/pipeline-queries.ts @@ -1,4 +1,4 @@ -import { Step, StackOutputReference, StackDeployment, StackAsset, StageDeployment } from '../blueprint'; +import { StackAsset, StackDeployment, StackOutputReference, StageDeployment, Step } from '../blueprint'; import { PipelineBase } from '../main/pipeline-base'; /** @@ -14,11 +14,11 @@ export class PipelineQueries { public stackOutputsReferenced(stack: StackDeployment): string[] { const steps = new Array(); for (const wave of this.pipeline.waves) { - steps.push(...wave.pre, ...wave.post); + steps.push(...wave.pre, ...wave.post, ...wave.postPrepare); for (const stage of wave.stages) { - steps.push(...stage.pre, ...stage.post); + steps.push(...stage.pre, ...stage.post, ...stage.postPrepare); for (const stackDeployment of stage.stacks) { - steps.push(...stackDeployment.pre, ...stackDeployment.changeSet, ...stackDeployment.post); + steps.push(...stackDeployment.pre, ...stackDeployment.changeSet, ...stackDeployment.post, ...stackDeployment.postPrepare); } } } diff --git a/packages/aws-cdk-lib/pipelines/test/blueprint/helpers-internal/pipeline-graph.test.ts b/packages/aws-cdk-lib/pipelines/test/blueprint/helpers-internal/pipeline-graph.test.ts index b8d4dc53957af..14d6093e552a2 100644 --- a/packages/aws-cdk-lib/pipelines/test/blueprint/helpers-internal/pipeline-graph.test.ts +++ b/packages/aws-cdk-lib/pipelines/test/blueprint/helpers-internal/pipeline-graph.test.ts @@ -3,7 +3,7 @@ import * as cdkp from '../../../lib'; import { ManualApprovalStep, Step } from '../../../lib'; import { Graph, GraphNode, PipelineGraph } from '../../../lib/helpers-internal'; import { flatten } from '../../../lib/private/javascript'; -import { AppWithOutput, AppWithExposedStacks, OneStackApp, TestApp } from '../../testhelpers/test-app'; +import { AppWithExposedStacks, AppWithOutput, OneStackApp, TestApp } from '../../testhelpers/test-app'; let app: TestApp; @@ -43,7 +43,7 @@ describe('blueprint with one stage', () => { ]); expect(childrenAt(graph, 'CrossAccount', 'Stack')).toEqual([ - 'Prepare', + 'Prepare-CrossAccount-Stack', 'Deploy', ]); }); @@ -114,6 +114,47 @@ describe('blueprint with wave and stage', () => { ]); }); + test('postPrepare and prepareNodes are added correctly inside stack graph', () => { + // GIVEN + const appWithExposedStacks = new AppWithExposedStacks(app, 'Gamma'); + + blueprint.waves[0].addStage(appWithExposedStacks, { + postPrepare: [ + new cdkp.ManualApprovalStep('Step1'), + // new cdkp.ManualApprovalStep('Step2'), + // new cdkp.ManualApprovalStep('Step3'), + ], + // stackSteps: [ + // { + // stack, + // pre: [ + // new cdkp.ManualApprovalStep('Step1'), + // new cdkp.ManualApprovalStep('Step2'), + // new cdkp.ManualApprovalStep('Step3'), + // ], + // changeSet: [new cdkp.ManualApprovalStep('Manual Approval')], + // post: [new cdkp.ManualApprovalStep('Post Approval')], + // }, + // ], + }); + + // WHEN + const graph = new PipelineGraph(blueprint, { allPrepareNodesFirst: true }).graph; + // THEN + // console.log(childrenAt(graph, 'Wave', 'Gamma')); + // console.log(childrenAt(graph, 'Wave', 'Gamma', 'Stack1')); + expect(childrenAt(graph, 'Wave', 'Gamma')).toEqual([ + 'Prepare-Gamma-Stack1', + 'Prepare-Gamma-Stack2', + 'Prepare-Gamma-Stack3', + 'Step1', + 'Stack1', + 'Stack2', + 'Stack3', + ]); + + }); + test('pre, changeSet, and post are added correctly inside stack graph', () => { // GIVEN const appWithExposedStacks = new AppWithExposedStacks(app, 'Gamma'); @@ -135,7 +176,7 @@ describe('blueprint with wave and stage', () => { 'Step1', 'Step2', 'Step3', - 'Prepare', + 'Prepare-Gamma-Stack1', 'Manual Approval', 'Deploy', 'Post Approval', diff --git a/packages/aws-cdk-lib/pipelines/test/blueprint/helpers-internal/pipeline-queries.test.ts b/packages/aws-cdk-lib/pipelines/test/blueprint/helpers-internal/pipeline-queries.test.ts index fd7e6ab9d1ccc..eaf0fe9f82923 100644 --- a/packages/aws-cdk-lib/pipelines/test/blueprint/helpers-internal/pipeline-queries.test.ts +++ b/packages/aws-cdk-lib/pipelines/test/blueprint/helpers-internal/pipeline-queries.test.ts @@ -57,17 +57,17 @@ describe('pipeline-queries', () => { }, { description: 'output referenced in stack pre step', - additionalSetup: () => stackDeployment.addStackSteps([step], [], []), + additionalSetup: () => stackDeployment.addStackSteps([step], [], [], []), expectedResultGetter: () => [outputName], }, { description: 'output referenced in stack changeSet step', - additionalSetup: () => stackDeployment.addStackSteps([], [step], []), + additionalSetup: () => stackDeployment.addStackSteps([], [step], [], []), expectedResultGetter: () => [outputName], }, { description: 'output referenced in stack post step', - additionalSetup: () => stackDeployment.addStackSteps([], [], [step]), + additionalSetup: () => stackDeployment.addStackSteps([], [], [step], []), expectedResultGetter: () => [outputName], }, { diff --git a/packages/aws-cdk-lib/pipelines/test/codepipeline/codepipeline.test.ts b/packages/aws-cdk-lib/pipelines/test/codepipeline/codepipeline.test.ts index ed265b78327f0..49f7647e5cacd 100644 --- a/packages/aws-cdk-lib/pipelines/test/codepipeline/codepipeline.test.ts +++ b/packages/aws-cdk-lib/pipelines/test/codepipeline/codepipeline.test.ts @@ -1,5 +1,5 @@ import { Construct } from 'constructs'; -import { Template, Annotations, Match } from '../../../assertions'; +import { Annotations, Match, Template } from '../../../assertions'; import * as ccommit from '../../../aws-codecommit'; import { Pipeline } from '../../../aws-codepipeline'; import * as iam from '../../../aws-iam'; @@ -10,7 +10,7 @@ import { Stack } from '../../../core'; import * as cxapi from '../../../cx-api'; import * as cdkp from '../../lib'; import { CodePipeline } from '../../lib'; -import { PIPELINE_ENV, TestApp, ModernTestGitHubNpmPipeline, FileAssetApp, TwoStackApp, StageWithStackOutput } from '../testhelpers'; +import { FileAssetApp, ModernTestGitHubNpmPipeline, PIPELINE_ENV, StageWithStackOutput, TestApp, TwoStackApp } from '../testhelpers'; let app: TestApp; @@ -370,7 +370,7 @@ describe('deployment of stack', () => { Configuration: Match.objectLike({ ActionMode: 'CHANGE_SET_REPLACE', }), - Name: 'Prepare', + Name: 'Prepare-App-Stack', }), Match.objectLike({ Configuration: Match.objectLike({ @@ -471,8 +471,8 @@ test('synths with change set approvers', () => { Stages: Match.arrayWith([{ Name: 'TheApp', Actions: Match.arrayWith([ - Match.objectLike({ Name: 'Stack1.Prepare', RunOrder: 1 }), - Match.objectLike({ Name: 'Stack2.Prepare', RunOrder: 1 }), + Match.objectLike({ Name: 'Stack1.Prepare-TheApp-Stack1', RunOrder: 1 }), + Match.objectLike({ Name: 'Stack2.Prepare-TheApp-Stack2', RunOrder: 1 }), Match.objectLike({ Name: 'Stack1.ChangeSetApproval', RunOrder: 2 }), Match.objectLike({ Name: 'Stack1.Deploy', RunOrder: 3 }), Match.objectLike({ Name: 'Stack2.Deploy', RunOrder: 3 }), diff --git a/packages/aws-cdk-lib/pipelines/test/compliance/basic-behavior.test.ts b/packages/aws-cdk-lib/pipelines/test/compliance/basic-behavior.test.ts index 75d58084dadfb..10d8e798d69b0 100644 --- a/packages/aws-cdk-lib/pipelines/test/compliance/basic-behavior.test.ts +++ b/packages/aws-cdk-lib/pipelines/test/compliance/basic-behavior.test.ts @@ -4,7 +4,7 @@ import * as path from 'path'; import { Construct } from 'constructs'; import { Capture, Match, Template } from '../../../assertions'; import { Stack, Stage, StageProps, Tags } from '../../../core'; -import { behavior, LegacyTestGitHubNpmPipeline, OneStackApp, BucketStack, PIPELINE_ENV, TestApp, ModernTestGitHubNpmPipeline, stringLike } from '../testhelpers'; +import { BucketStack, LegacyTestGitHubNpmPipeline, ModernTestGitHubNpmPipeline, OneStackApp, PIPELINE_ENV, TestApp, behavior, stringLike } from '../testhelpers'; let app: TestApp; let pipelineStack: Stack; @@ -41,7 +41,7 @@ behavior('stack templates in nested assemblies are correctly addressed', (suite) Name: 'App', Actions: Match.arrayWith([ Match.objectLike({ - Name: stringLike('*Prepare'), + Name: stringLike('*Prepare*'), InputArtifacts: [Match.objectLike({})], Configuration: Match.objectLike({ StackName: 'App-Stack', @@ -98,7 +98,7 @@ behavior('overridden stack names are respected', (suite) => { { Name: 'App1', Actions: Match.arrayWith([Match.objectLike({ - Name: stringLike('*Prepare'), + Name: stringLike('*Prepare*'), Configuration: Match.objectLike({ StackName: 'MyFancyStack', }), @@ -107,7 +107,7 @@ behavior('overridden stack names are respected', (suite) => { { Name: 'App2', Actions: Match.arrayWith([Match.objectLike({ - Name: stringLike('*Prepare'), + Name: stringLike('*Prepare*'), Configuration: Match.objectLike({ StackName: 'MyFancyStack', }), @@ -195,7 +195,7 @@ behavior('tags get reflected in pipeline', (suite) => { Name: 'App', Actions: Match.arrayWith([ Match.objectLike({ - Name: stringLike('*Prepare'), + Name: stringLike('*Prepare*'), InputArtifacts: [Match.objectLike({})], Configuration: Match.objectLike({ StackName: 'App-Stack', diff --git a/packages/aws-cdk-lib/pipelines/test/compliance/environments.test.ts b/packages/aws-cdk-lib/pipelines/test/compliance/environments.test.ts index 777ffb83a0d2c..17293401d0f4b 100644 --- a/packages/aws-cdk-lib/pipelines/test/compliance/environments.test.ts +++ b/packages/aws-cdk-lib/pipelines/test/compliance/environments.test.ts @@ -1,7 +1,7 @@ /* eslint-disable import/no-extraneous-dependencies */ import { Match, Template } from '../../../assertions'; import { Stack } from '../../../core'; -import { behavior, LegacyTestGitHubNpmPipeline, OneStackApp, PIPELINE_ENV, TestApp, ModernTestGitHubNpmPipeline, stringLike } from '../testhelpers'; +import { LegacyTestGitHubNpmPipeline, ModernTestGitHubNpmPipeline, OneStackApp, PIPELINE_ENV, TestApp, behavior, stringLike } from '../testhelpers'; let app: TestApp; let pipelineStack: Stack; @@ -55,7 +55,7 @@ behavior('action has right settings for same-env deployment', (suite) => { Name: 'Same', Actions: [ Match.objectLike({ - Name: stringLike('*Prepare'), + Name: stringLike('*Prepare*'), RoleArn: roleArn('deploy-role'), Configuration: Match.objectLike({ StackName: 'Same-Stack', @@ -113,7 +113,7 @@ behavior('action has right settings for cross-account deployment', (suite) => { Name: 'CrossAccount', Actions: [ Match.objectLike({ - Name: stringLike('*Prepare'), + Name: stringLike('*Prepare*'), RoleArn: { 'Fn::Join': ['', [ 'arn:', @@ -198,7 +198,7 @@ behavior('action has right settings for cross-region deployment', (suite) => { Name: 'CrossRegion', Actions: [ Match.objectLike({ - Name: stringLike('*Prepare'), + Name: stringLike('*Prepare*'), RoleArn: { 'Fn::Join': ['', [ 'arn:', @@ -288,7 +288,7 @@ behavior('action has right settings for cross-account/cross-region deployment', Name: 'CrossBoth', Actions: [ Match.objectLike({ - Name: stringLike('*Prepare'), + Name: stringLike('*Prepare*'), RoleArn: { 'Fn::Join': ['', [ 'arn:', diff --git a/packages/aws-cdk-lib/pipelines/test/compliance/security-check.test.ts b/packages/aws-cdk-lib/pipelines/test/compliance/security-check.test.ts index 88138cb2b840f..c8490c0648972 100644 --- a/packages/aws-cdk-lib/pipelines/test/compliance/security-check.test.ts +++ b/packages/aws-cdk-lib/pipelines/test/compliance/security-check.test.ts @@ -327,40 +327,50 @@ behavior('confirmBroadeningPermissions and notification topic options generates function THEN_codePipelineExpectation() { Template.fromStack(pipelineStack).resourceCountIs('AWS::SNS::Topic', 1); - Template.fromStack(pipelineStack).hasResourceProperties('AWS::CodePipeline::Pipeline', { - Stages: Match.arrayWith([ - { - Name: 'MyStack', - Actions: [ - Match.objectLike({ - Configuration: { - ProjectName: { Ref: stringLike('*SecurityCheck*') }, - EnvironmentVariables: { - 'Fn::Join': ['', [ - stringLike('*'), - { Ref: 'NotificationTopicEB7A0DF1' }, - stringLike('*'), - ]], + + Template.fromStack(pipelineStack).hasResourceProperties( + 'AWS::CodePipeline::Pipeline', + { + Stages: Match.arrayWith([ + { + Name: 'MyStack', + Actions: [ + Match.objectLike({ + Configuration: { + ProjectName: { Ref: stringLike('*SecurityCheck*') }, + EnvironmentVariables: { + 'Fn::Join': [ + '', + [ + stringLike('*'), + { Ref: 'NotificationTopicEB7A0DF1' }, + stringLike('*'), + ], + ], + }, }, - }, - Name: stringLike('*Check'), - Namespace: stringLike('*'), - RunOrder: 1, - }), - Match.objectLike({ - Configuration: { - CustomData: stringLike('#{*.MESSAGE}'), - ExternalEntityLink: stringLike('#{*.LINK}'), - }, - Name: stringLike('*Approv*'), - RunOrder: 2, - }), - Match.objectLike({ Name: 'Stack.Prepare', RunOrder: 3 }), - Match.objectLike({ Name: 'Stack.Deploy', RunOrder: 4 }), - ], - }, - ]), - }); + Name: stringLike('*Check'), + Namespace: stringLike('*'), + RunOrder: 1, + }), + Match.objectLike({ + Configuration: { + CustomData: stringLike('#{*.MESSAGE}'), + ExternalEntityLink: stringLike('#{*.LINK}'), + }, + Name: stringLike('*Approv*'), + RunOrder: 2, + }), + Match.objectLike({ + Name: stringLike('Stack.Prepare*'), + RunOrder: 3, + }), + Match.objectLike({ Name: 'Stack.Deploy', RunOrder: 4 }), + ], + }, + ]), + }, + ); } }); diff --git a/packages/aws-cdk-lib/pipelines/test/compliance/stack-ordering.test.ts b/packages/aws-cdk-lib/pipelines/test/compliance/stack-ordering.test.ts index 827c2839a6462..fd5e9c3d6d38c 100644 --- a/packages/aws-cdk-lib/pipelines/test/compliance/stack-ordering.test.ts +++ b/packages/aws-cdk-lib/pipelines/test/compliance/stack-ordering.test.ts @@ -1,6 +1,17 @@ import { Match, Template } from '../../../assertions'; import { App, Stack } from '../../../core'; -import { behavior, LegacyTestGitHubNpmPipeline, ModernTestGitHubNpmPipeline, OneStackApp, PIPELINE_ENV, sortByRunOrder, TestApp, ThreeStackApp, TwoStackApp } from '../testhelpers'; +import { + LegacyTestGitHubNpmPipeline, + ModernTestGitHubNpmPipeline, + OneStackApp, + PIPELINE_ENV, + TestApp, + ThreeStackApp, + TwoStackApp, + behavior, + sortByRunOrder, + stringLike, +} from '../testhelpers'; let app: App; let pipelineStack: Stack; @@ -31,9 +42,9 @@ behavior('interdependent stacks are in the right order', (suite) => { Stages: Match.arrayWith([{ Name: 'MyApp', Actions: sortByRunOrder([ - Match.objectLike({ Name: 'Stack1.Prepare' }), + Match.objectLike({ Name: stringLike('Stack1.Prepare*') }), Match.objectLike({ Name: 'Stack1.Deploy' }), - Match.objectLike({ Name: 'Stack2.Prepare' }), + Match.objectLike({ Name: stringLike('Stack2.Prepare*') }), Match.objectLike({ Name: 'Stack2.Deploy' }), ]), }]), @@ -58,21 +69,26 @@ behavior('multiple independent stacks go in parallel', (suite) => { }); function THEN_codePipelineExpectation() { - Template.fromStack(pipelineStack).hasResourceProperties('AWS::CodePipeline::Pipeline', { - Stages: Match.arrayWith([{ - Name: 'MyApp', - Actions: sortByRunOrder([ - // 1 and 2 in parallel - Match.objectLike({ Name: 'Stack1.Prepare' }), - Match.objectLike({ Name: 'Stack2.Prepare' }), - Match.objectLike({ Name: 'Stack1.Deploy' }), - Match.objectLike({ Name: 'Stack2.Deploy' }), - // Then 3 - Match.objectLike({ Name: 'Stack3.Prepare' }), - Match.objectLike({ Name: 'Stack3.Deploy' }), + Template.fromStack(pipelineStack).hasResourceProperties( + 'AWS::CodePipeline::Pipeline', + { + Stages: Match.arrayWith([ + { + Name: 'MyApp', + Actions: sortByRunOrder([ + // 1 and 2 in parallel + Match.objectLike({ Name: stringLike('Stack1.Prepare*') }), + Match.objectLike({ Name: stringLike('Stack2.Prepare*') }), + Match.objectLike({ Name: 'Stack1.Deploy' }), + Match.objectLike({ Name: 'Stack2.Deploy' }), + // Then 3 + Match.objectLike({ Name: stringLike('Stack3.Prepare*') }), + Match.objectLike({ Name: 'Stack3.Deploy' }), + ]), + }, ]), - }]), - }); + }, + ); } }); diff --git a/packages/aws-cdk-lib/pipelines/test/compliance/validations.test.ts b/packages/aws-cdk-lib/pipelines/test/compliance/validations.test.ts index f1a560fdae911..6e8b8ae4b3e04 100644 --- a/packages/aws-cdk-lib/pipelines/test/compliance/validations.test.ts +++ b/packages/aws-cdk-lib/pipelines/test/compliance/validations.test.ts @@ -9,7 +9,20 @@ import { Stack } from '../../../core'; import * as cdkp from '../../lib'; import { CodePipelineSource, ShellStep } from '../../lib'; import { CDKP_DEFAULT_CODEBUILD_IMAGE } from '../../lib/private/default-codebuild-image'; -import { AppWithOutput, behavior, LegacyTestGitHubNpmPipeline, ModernTestGitHubNpmPipeline, OneStackApp, PIPELINE_ENV, sortByRunOrder, StageWithStackOutput, stringNoLongerThan, TestApp, TwoStackApp } from '../testhelpers'; +import { + AppWithOutput, + LegacyTestGitHubNpmPipeline, + ModernTestGitHubNpmPipeline, + OneStackApp, + PIPELINE_ENV, + StageWithStackOutput, + TestApp, + TwoStackApp, + behavior, + sortByRunOrder, + stringLike, + stringNoLongerThan, +} from '../testhelpers'; let app: TestApp; let pipelineStack: Stack; @@ -37,18 +50,23 @@ behavior('can add manual approval after app', (suite) => { }); // THEN - Template.fromStack(pipelineStack).hasResourceProperties('AWS::CodePipeline::Pipeline', { - Stages: Match.arrayWith([{ - Name: 'MyApp', - Actions: sortByRunOrder([ - Match.objectLike({ Name: 'Stack1.Prepare' }), - Match.objectLike({ Name: 'Stack1.Deploy' }), - Match.objectLike({ Name: 'Stack2.Prepare' }), - Match.objectLike({ Name: 'Stack2.Deploy' }), - Match.objectLike({ Name: 'Approve' }), + Template.fromStack(pipelineStack).hasResourceProperties( + 'AWS::CodePipeline::Pipeline', + { + Stages: Match.arrayWith([ + { + Name: 'MyApp', + Actions: sortByRunOrder([ + Match.objectLike({ Name: 'Stack1.Prepare-MyApp-Stack1' }), + Match.objectLike({ Name: 'Stack1.Deploy' }), + Match.objectLike({ Name: 'Stack2.Prepare-MyApp-Stack2' }), + Match.objectLike({ Name: 'Stack2.Deploy' }), + Match.objectLike({ Name: 'Approve' }), + ]), + }, ]), - }]), - }); + }, + ); }); }); @@ -73,9 +91,9 @@ behavior('can add steps to wave', (suite) => { Stages: Match.arrayWith([{ Name: 'MyWave', Actions: sortByRunOrder([ - Match.objectLike({ Name: 'Stage1.Stack.Prepare' }), - Match.objectLike({ Name: 'Stage2.Stack.Prepare' }), - Match.objectLike({ Name: 'Stage3.Stack.Prepare' }), + Match.objectLike({ Name: stringLike('Stage1.Stack.Prepare*') }), + Match.objectLike({ Name: stringLike('Stage2.Stack.Prepare*') }), + Match.objectLike({ Name: stringLike('Stage3.Stack.Prepare*') }), Match.objectLike({ Name: 'Stage1.Stack.Deploy' }), Match.objectLike({ Name: 'Stage2.Stack.Deploy' }), Match.objectLike({ Name: 'Stage3.Stack.Deploy' }),