in lib/setup-member-account-stack.ts [15:94]
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// CodeCommit repository for storing the acceptance tests
const acceptanceTestsRepo = new codeCommit.Repository(
this,
"acceptanceTestsRepo",
{
repositoryName: StackConstants.acceptanceTestsRepoName,
description: StackConstants.acceptanceTestsRepoDesc
}
);
// IAM role for testing the SCPs
const policyTestRole = new iam.Role(this, "policyTestRole", {
assumedBy: new AccountPrincipal(this.account)
});
policyTestRole.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('AdministratorAccess'))
// IAM role for the code build project
const codeBuildServiceRole = new iam.Role(this, "codeBuildServiceRole", {
assumedBy: new ServicePrincipal('codebuild.amazonaws.com')
});
const inlinePolicyForCodeBuild = new iam.PolicyStatement({
effect: Effect.ALLOW,
actions: [
"sts:AssumeRole",
"codecommit:Get*",
"codecommit:List*",
"codecommit:GitPull",
"iam:SimulatePrincipalPolicy",
"iam:SimulateCustomPolicy",
"iam:GetContextKeysForPrincipalPolicy",
"iam:GetContextKeysForCustomPolicy",
"codebuild:CreateReportGroup",
"codebuild:CreateReport",
"codebuild:UpdateReport",
"codebuild:BatchPutTestCases"
],
resources: ["*"]
});
codeBuildServiceRole.addToPolicy(inlinePolicyForCodeBuild);
// Creating the code build project
const acceptanceTestsProject = new codeBuild.Project(this, "acceptanceTestsProject", {
role: codeBuildServiceRole,
description: StackConstants.acceptanceTestsCodeBuildDesc,
environment: {
buildImage: codeBuild.LinuxBuildImage.STANDARD_5_0,
computeType: ComputeType.SMALL,
environmentVariables: {
testRoleArn: {
value: policyTestRole.roleArn
}
}
},
source: codeBuild.Source.codeCommit({
repository: acceptanceTestsRepo,
branchOrRef: 'main'
})
});
// Event rule for onCommit of acceptanceTestsRepo to trigger code build
acceptanceTestsRepo.onCommit('OnCommit', {
branches: [
"main"
],
target: new targets.CodeBuildProject(acceptanceTestsProject),
description: "Execute the acceptance tests on code commit"
});
// CodeCommit repository to be used
new cdk.CfnOutput(this, 'acceptanceTestsRepoCloneUrlGrc', {
value: acceptanceTestsRepo.repositoryCloneUrlGrc,
exportName: 'acceptanceTestsRepoCloneUrlGrc'
});
}