main.tf 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. data "github_repository" "this" {
  2. name = var.name
  3. }
  4. resource "aws_codebuild_project" "this" {
  5. count = var.artifact_s3_bucket=="" ? 0 : 1
  6. name = var.name
  7. description = "Project for ${var.name}"
  8. service_role = var.service_role
  9. encryption_key = var.kms_key
  10. badge_enabled = var.badge_enabled
  11. source {
  12. type = "GITHUB_ENTERPRISE"
  13. location = data.github_repository.this.http_clone_url
  14. report_build_status = true
  15. }
  16. environment {
  17. compute_type = "BUILD_GENERAL1_SMALL"
  18. image = var.codebuild_image
  19. type = "LINUX_CONTAINER"
  20. }
  21. artifacts {
  22. type = "S3"
  23. location = var.artifact_s3_bucket
  24. name = "/"
  25. path = var.name
  26. namespace_type = "BUILD_ID"
  27. packaging = "NONE"
  28. }
  29. tags = merge(var.standard_tags, var.tags)
  30. }
  31. resource "aws_codebuild_project" "this_no_artifact" {
  32. count = var.artifact_s3_bucket=="" ? 1 : 0
  33. name = var.name
  34. description = "Container for ${var.name}"
  35. service_role = var.service_role
  36. encryption_key = var.kms_key
  37. badge_enabled = var.badge_enabled
  38. source {
  39. type = "GITHUB_ENTERPRISE"
  40. location = data.github_repository.this.http_clone_url
  41. report_build_status = true
  42. }
  43. environment {
  44. compute_type = "BUILD_GENERAL1_SMALL"
  45. image = var.codebuild_image
  46. type = "LINUX_CONTAINER"
  47. privileged_mode = true
  48. }
  49. artifacts {
  50. type = "NO_ARTIFACTS"
  51. }
  52. tags = merge(var.standard_tags, var.tags)
  53. }
  54. resource "aws_ecr_repository" "this" {
  55. name = var.name
  56. }
  57. data "aws_iam_policy_document" "ecr_cross_account_policy" {
  58. statement {
  59. sid = "ECRWrite"
  60. effect = "Allow"
  61. actions = [
  62. "ecr:GetAuthorizationToken",
  63. "ecr:GetDownloadUrlForLayer",
  64. "ecr:BatchGetImage",
  65. "ecr:BatchCheckLayerAvailability",
  66. "ecr:PutImage",
  67. "ecr:InitiateLayerUpload",
  68. "ecr:UploadLayerPart",
  69. "ecr:CompleteLayerUpload",
  70. "ecr:DescribeRepositories",
  71. "ecr:ListImages",
  72. "ecr:DescribeImages",
  73. ]
  74. principals {
  75. identifiers = [
  76. "arn:aws-us-gov:iam::721817724804:root",
  77. "arn:aws-us-gov:iam::738800754746:root",
  78. "arn:aws-us-gov:iam::701290387780:root",
  79. ]
  80. type = "AWS"
  81. }
  82. }
  83. }
  84. resource "aws_ecr_repository_policy" "this" {
  85. repository = aws_ecr_repository.this.name
  86. policy = data.aws_iam_policy_document.ecr_cross_account_policy.json
  87. }
  88. resource "aws_codebuild_webhook" "this" {
  89. project_name = var.name
  90. branch_filter = var.webhook_branch_filter
  91. depends_on = [ aws_codebuild_project.this_no_artifact, aws_codebuild_project.this ]
  92. }
  93. resource "github_repository_webhook" "this" {
  94. active = true
  95. events = ["push"]
  96. repository = data.github_repository.this.name
  97. configuration {
  98. url = aws_codebuild_webhook.this.payload_url
  99. secret = aws_codebuild_webhook.this.secret
  100. content_type = "json"
  101. insecure_ssl = false
  102. }
  103. }