modules/PR-analysis-CodeCommit/main.tf (134 lines of code) (raw):
resource "aws_codebuild_project" "pr-CodeCommit" {
name = "${var.repo_name}-pr-analysis-CodeCommit"
build_timeout = 20
service_role = var.service_role
artifacts {
type = "NO_ARTIFACTS"
}
source {
type = "CODECOMMIT"
location = "https://git-codecommit.${var.region}.amazonaws.com/v1/repos/${var.repo_name}"
git_clone_depth = 5
buildspec = "buildspec_pr.yml"
}
environment {
compute_type = "BUILD_GENERAL1_SMALL"
image = "aws/codebuild/standard:4.0"
type = "LINUX_CONTAINER"
image_pull_credentials_type = "CODEBUILD"
environment_variable {
name = "AWS_ACCOUNT_ID"
value = var.aws_account_id
}
environment_variable {
name = "DOMAIN"
value = var.codeartifact_domain
}
environment_variable {
name = "ART_REPO_ID"
value = var.codeartifact_repo
}
environment_variable {
name = "REGION"
value = var.region
}
environment_variable {
name = "PROJECT"
value = var.project
}
environment_variable {
name = "REPO_NAME"
value = var.repo_name
}
environment_variable {
name = "ORGANIZATION"
value = var.organization_name
}
environment_variable {
name = "SONAR_TOKEN"
value = var.sonarcloud_token_name
}
}
}
resource "aws_cloudwatch_event_rule" "pr_rule" {
name = "pr_trigger_${var.repo_name}"
event_pattern = <<PATTERN
{
"source": [
"aws.codecommit"
],
"detail-type": [
"CodeCommit Pull Request State Change"
],
"resources": [
"arn:aws:codecommit:${var.region}:${var.aws_account_id}:${var.repo_name}"
],
"detail": {
"event": [
"pullRequestCreated",
"pullRequestSourceBranchUpdated"
]
}
}
PATTERN
}
resource "aws_cloudwatch_event_target" "build_target" {
rule = aws_cloudwatch_event_rule.pr_rule.name
target_id = "SendToCodeBuild"
role_arn = aws_iam_role.cloudwatch.arn
arn = aws_codebuild_project.pr-CodeCommit.arn
input_transformer {
input_paths = {
pullRequestId = "$.detail.pullRequestId"
destinationReference = "$.detail.destinationReference"
sourceReference = "$.detail.sourceReference"
repositoryName : "$.detail.repositoryNames[0]"
sourceCommit : "$.detail.sourceCommit"
destinationCommit : "$.detail.destinationCommit"
revisionId : "$.detail.revisionId"
sourceVersion : "$.detail.sourceCommit"
}
input_template = <<PATTERN
{
"sourceVersion": <sourceVersion>,
"artifactsOverride": {"type": "NO_ARTIFACTS"},
"environmentVariablesOverride": [
{
"name": "PULL_REQUEST_ID",
"value": <pullRequestId>,
"type": "PLAINTEXT"
},
{ "name": "DEST_REF",
"value": <sourceReference>,
"type": "PLAINTEXT"
},
{ "name": "SRC_REF",
"value": <destinationReference>,
"type": "PLAINTEXT"
},
{
"name": "REPOSITORY_NAME",
"value": <repositoryName>,
"type": "PLAINTEXT"
},
{
"name": "SOURCE_COMMIT",
"value": <sourceCommit>,
"type": "PLAINTEXT"
},
{
"name": "DESTINATION_COMMIT",
"value": <destinationCommit>,
"type": "PLAINTEXT"
},
{
"name" : "REVISION_ID",
"value": <revisionId>,
"type": "PLAINTEXT"
}
]
}
PATTERN
}
depends_on = [aws_cloudwatch_event_rule.pr_rule]
}