-
Notifications
You must be signed in to change notification settings - Fork 4
/
app.ts
76 lines (66 loc) · 2.39 KB
/
app.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env node
/*********************************
* AWS CDK script to provision the resources.
*/
import 'source-map-support/register';
import cdk = require('@aws-cdk/core');
import codebuild = require('@aws-cdk/aws-codebuild');
import iam = require('@aws-cdk/aws-iam');
import ssm = require("@aws-cdk/aws-ssm");
class AppStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
this.createBuild();
}
createBuild() {
const source = this.createSource();
const project = this.createProject(source);
this.addTestReportPermissionToProject(project);
}
createSource(): codebuild.Source {
const secret = cdk.SecretValue.secretsManager('GITHUB_OAUTH_TOKEN');
new codebuild.GitHubSourceCredentials(this, 'GithubCredentials', {
accessToken: secret,
})
const repo = ssm.StringParameter.valueForStringParameter(this, 'GITHUB_REPO');
const owner = ssm.StringParameter.valueForStringParameter(this, 'GITHUB_OWNER');
const source = codebuild.Source.gitHub({
owner: owner,
repo: repo,
webhook: true,
webhookFilters: [
codebuild.FilterGroup.inEventOf(codebuild.EventAction.PUSH).andBranchIs('master'),
]
});
return source;
}
createProject(source: codebuild.Source): codebuild.Project {
return new codebuild.Project(this, 'Build', {
source: source,
});
}
addTestReportPermissionToProject(project: codebuild.IProject) {
//"arn:aws:codebuild:your-region:your-aws-account-id:report-group/my-project-*";
const pattern = {
partition: 'aws',
service: 'codebuild',
resource: `report-group/${project.projectName}-*`
};
const reportArn = cdk.Arn.format(pattern, cdk.Stack.of(this));
project.addToRolePolicy(new iam.PolicyStatement({
resources: [
reportArn,
],
effect: iam.Effect.ALLOW,
actions: [
"codebuild:CreateReportGroup",
"codebuild:CreateReport",
"codebuild:UpdateReport",
"codebuild:BatchPutTestCases"
]
}));
}
}
const app = new cdk.App();
new AppStack(app, 'PHPUnitCodeBuildStack');
app.synth();