infra/terraform/test-org/ci-triggers/triggers.tf (401 lines of code) (raw):
/**
* Copyright 2019 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
resource "google_cloudbuild_trigger" "int_trigger" {
provider = google-beta
project = local.project_id
name = "${substr(each.key, 0, 50)}-int-trigger"
description = "Integration tests on pull request for ${each.key}"
for_each = local.repo_folder
github {
owner = each.value.gh_org
name = each.key
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
substitutions = merge(
{
_BILLING_ACCOUNT = local.billing_account
_FOLDER_ID = each.value.folder_id
_ORG_ID = local.org_id
_BILLING_IAM_TEST_ACCOUNT = each.key == "terraform-google-iam" ? local.billing_iam_test_account : null
_VOD_TEST_PROJECT_ID = each.key == "terraform-google-media-cdn-vod" ? local.vod_test_project_id : null
_FILE_LOGS_BUCKET = lookup(local.enable_file_log, each.key, false) ? module.filelogs_bucket.url : null
_LR_BILLING_ACCOUNT = local.lr_billing_account
_TFE_TOKEN_SECRET_ID = each.key == "terraform-google-tf-cloud-agents" ? google_secret_manager_secret.tfe_token.id : null
_IM_GITHUB_PAT_SECRET_ID = each.key == "terraform-google-bootstrap" ? google_secret_manager_secret.im_github_pat.id : null
_IM_GITLAB_PAT_SECRET_ID = each.key == "terraform-google-bootstrap" ? google_secret_manager_secret.im_gitlab_pat.id : null
},
# add sfb substitutions
contains(local.bp_on_sfb, each.key) ? local.sfb_substs : {}
)
filename = "build/int.cloudbuild.yaml"
ignored_files = ["**/*.md", ".gitignore", ".github/**", "**/metadata.yaml", "**/metadata.display.yaml", "assets/**", "infra/assets/**"]
lifecycle {
precondition {
condition = each.value.folder_id != ""
error_message = "The folder_id must not be empty for ${each.key}"
}
}
}
# pull_request triggers do not support run trigger, so we have a shadow periodic trigger
resource "google_cloudbuild_trigger" "periodic_int_trigger" {
provider = google-beta
project = local.project_id
name = substr("${each.key}-periodic-int-trigger", 0, 64)
description = "Periodic integration tests on pull request for ${each.key}"
for_each = { for k, v in local.repo_folder : k => v if contains(local.periodic_repos, k) }
github {
owner = each.value.gh_org
name = each.key
# this will be invoked via cloud scheduler, hence using a regex that will not match any branch
push {
branch = ".^"
}
}
substitutions = merge(
{
_BILLING_ACCOUNT = local.billing_account
_FOLDER_ID = each.value.folder_id
_ORG_ID = local.org_id
_BILLING_IAM_TEST_ACCOUNT = each.key == "terraform-google-iam" ? local.billing_iam_test_account : null
_VOD_TEST_PROJECT_ID = each.key == "terraform-google-media-cdn-vod" ? local.vod_test_project_id : null
_FILE_LOGS_BUCKET = lookup(local.enable_file_log, each.key, false) ? module.filelogs_bucket.url : null
_LR_BILLING_ACCOUNT = local.lr_billing_account
_PERIODIC = true
},
# add sfb substitutions
contains(local.bp_on_sfb, each.key) ? local.sfb_substs : {}
)
filename = "build/int.cloudbuild.yaml"
ignored_files = ["**/*.md", ".gitignore", ".github/**", "**/metadata.yaml"]
}
resource "google_cloudbuild_trigger" "tf_validator_main_integration_tests" {
for_each = {
tf12 = "0.12.31"
tf13 = "0.13.7"
}
name = "tf-validator-main-integration-tests-${each.key}"
description = "Main/release branch integration tests for terraform-validator with terraform ${each.value}. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-validator"
push {
branch = "^(main|release-.+)$"
}
}
substitutions = {
_TERRAFORM_VERSION = each.value
_TEST_PROJECT = local.tf_validator_project_id
_TEST_FOLDER = local.tf_validator_folder_id
_TEST_ANCESTRY = local.tf_validator_ancestry
_TEST_ORG = local.org_id
}
filename = ".ci/cloudbuild-tests-integration.yaml"
}
resource "google_cloudbuild_trigger" "tf_validator_pull_integration_tests" {
for_each = {
tf12 = "0.12.31"
tf13 = "0.13.7"
}
name = "tf-validator-pull-integration-tests-${each.key}"
description = "Pull request integration tests for terraform-validator with terraform ${each.value}. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-validator"
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
substitutions = {
_TERRAFORM_VERSION = each.value
_TEST_PROJECT = local.tf_validator_project_id
_TEST_FOLDER = local.tf_validator_folder_id
_TEST_ANCESTRY = local.tf_validator_ancestry
_TEST_ORG = local.org_id
}
filename = ".ci/cloudbuild-tests-integration.yaml"
}
resource "google_cloudbuild_trigger" "tf_validator_pull_unit_tests" {
name = "tf-validator-pull-unit-tests"
description = "Pull request unit tests for terraform-validator. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-validator"
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
substitutions = {
_TEST_PROJECT = local.tf_validator_project_id
_TEST_FOLDER = local.tf_validator_folder_id
_TEST_ANCESTRY = local.tf_validator_ancestry
_TEST_ORG = local.org_id
}
filename = ".ci/cloudbuild-tests-unit.yaml"
}
resource "google_cloudbuild_trigger" "tf_validator_main_unit_tests" {
name = "tf-validator-main-unit-tests"
description = "Main/release branch unit tests for terraform-validator. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-validator"
push {
branch = "^(main|release-.+)$"
}
}
substitutions = {
_TEST_PROJECT = local.tf_validator_project_id
_TEST_FOLDER = local.tf_validator_folder_id
_TEST_ANCESTRY = local.tf_validator_ancestry
_TEST_ORG = local.org_id
}
filename = ".ci/cloudbuild-tests-unit.yaml"
}
resource "google_cloudbuild_trigger" "tf_validator_pull_license_check" {
name = "tf-validator-pull-license-check"
description = "Pull request license check for terraform-validator. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-validator"
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
filename = ".ci/cloudbuild-tests-go-licenses.yaml"
}
resource "google_cloudbuild_trigger" "tf_validator_main_license_check" {
name = "tf-validator-main-license-check"
description = "Main/release branch license check for terraform-validator. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-validator"
push {
branch = "^(main|release-.+)$"
}
}
filename = ".ci/cloudbuild-tests-go-licenses.yaml"
}
resource "google_cloudbuild_trigger" "tgc_main_integration_tests" {
for_each = {
tf12 = "0.12.31"
tf13 = "0.13.7"
}
name = "tgc-main-integration-tests-${each.key}"
description = "Main/release branch integration tests for terraform-google-conversion with terraform ${each.value}. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-google-conversion"
push {
branch = "^(main|release-.+)$"
}
}
substitutions = {
_TERRAFORM_VERSION = each.value
_TEST_PROJECT = local.tf_validator_project_id
_TEST_FOLDER = local.tf_validator_folder_id
_TEST_ANCESTRY = local.tf_validator_ancestry
_TEST_ORG = local.org_id
}
filename = ".ci/cloudbuild-tests-integration.yaml"
}
resource "google_cloudbuild_trigger" "tgc_pull_integration_tests" {
for_each = {
tf12 = "0.12.31"
tf13 = "0.13.7"
}
name = "tgc-pull-integration-tests-${each.key}"
description = "Pull request integration tests for terraform-google-conversion with terraform ${each.value}. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-google-conversion"
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
substitutions = {
_TERRAFORM_VERSION = each.value
_TEST_PROJECT = local.tf_validator_project_id
_TEST_FOLDER = local.tf_validator_folder_id
_TEST_ANCESTRY = local.tf_validator_ancestry
_TEST_ORG = local.org_id
}
filename = ".ci/cloudbuild-tests-integration.yaml"
}
resource "google_cloudbuild_trigger" "tgc_pull_unit_tests" {
name = "tgc-pull-unit-tests"
description = "Pull request unit tests for terraform-google-conversion. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-google-conversion"
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
substitutions = {
_TEST_PROJECT = local.tf_validator_project_id
_TEST_FOLDER = local.tf_validator_folder_id
_TEST_ANCESTRY = local.tf_validator_ancestry
_TEST_ORG = local.org_id
}
filename = ".ci/cloudbuild-tests-unit.yaml"
}
resource "google_cloudbuild_trigger" "tgc_main_unit_tests" {
name = "tgc-main-unit-tests"
description = "Main/release branch unit tests for terraform-google-conversion. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-google-conversion"
push {
branch = "^(main|release-.+)$"
}
}
substitutions = {
_TEST_PROJECT = local.tf_validator_project_id
_TEST_FOLDER = local.tf_validator_folder_id
_TEST_ANCESTRY = local.tf_validator_ancestry
_TEST_ORG = local.org_id
}
filename = ".ci/cloudbuild-tests-unit.yaml"
}
resource "google_cloudbuild_trigger" "tgc_pull_license_check" {
name = "tgc-pull-license-check"
description = "Pull request license check for terraform-google-conversion. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-google-conversion"
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
filename = ".ci/cloudbuild-tests-go-licenses.yaml"
}
resource "google_cloudbuild_trigger" "tgc_main_license_check" {
name = "tgc-main-license-check"
description = "Main/release branch license check for terraform-google-conversion. Managed by Terraform https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/main/infra/terraform/test-org/tf-validator/project.tf"
provider = google-beta
project = local.project_id
github {
owner = "GoogleCloudPlatform"
name = "terraform-google-conversion"
push {
branch = "^(main|release-.+)$"
}
}
filename = ".ci/cloudbuild-tests-go-licenses.yaml"
}
resource "google_cloudbuild_trigger" "forseti_lint" {
provider = google-beta
project = local.project_id
description = "Lint tests on pull request for forseti"
github {
owner = "forseti-security"
name = "terraform-google-forseti"
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
filename = "build/lint.cloudbuild.yaml"
}
resource "google_cloudbuild_trigger" "forseti_int" {
provider = google-beta
project = local.project_id
description = "Integration tests on pull request for forseti"
github {
owner = "forseti-security"
name = "terraform-google-forseti"
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
substitutions = {
_BILLING_ACCOUNT = local.billing_account
_FOLDER_ID = local.forseti_ci_folder_id
_ORG_ID = local.org_id
}
filename = "build/int.cloudbuild.yaml"
}
# example-foundation-int tests
resource "google_cloudbuild_trigger" "example_foundations_int_trigger" {
provider = google-beta
project = local.project_id
name = "terraform-example-foundation-int-trigger-${each.value}"
description = "Integration tests on pull request for example_foundations in ${each.value} mode"
for_each = toset(local.example_foundation_int_test_modes)
github {
owner = values(local.example_foundation)[0]["gh_org"]
name = keys(local.example_foundation)[0]
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
substitutions = {
_BILLING_ACCOUNT = local.billing_account
_FOLDER_ID = values(local.example_foundation)[0]["folder_id"]
_ORG_ID = local.org_id
_EXAMPLE_FOUNDATIONS_TEST_MODE = each.value
}
filename = "build/int.cloudbuild.yaml"
ignored_files = ["**/*.md", "**/*.png", ".gitignore", ".github/**", "**/*.example.tfvars", "helpers/foundation-deployer/**"]
}
resource "google_cloudbuild_trigger" "bpt_int_trigger" {
provider = google-beta
project = local.project_id
name = "bpt-int-trigger"
description = "Integration tests on pull request for blueprint test framework"
github {
owner = "GoogleCloudPlatform"
name = "cloud-foundation-toolkit"
pull_request {
branch = ".*"
comment_control = "COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY"
}
}
substitutions = {
_BILLING_ACCOUNT = local.billing_account
_FOLDER_ID = data.terraform_remote_state.org.outputs.bpt_folder
_ORG_ID = local.org_id
}
filename = "infra/blueprint-test/build/int.cloudbuild.yaml"
included_files = ["infra/blueprint-test/**"]
}