diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..457fe17 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Ignore any paths with `.terraform/` folders +**/.terraform/ +**/.terraform.lock.hcl diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 592d942..98331f6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,7 +12,6 @@ repos: - id: end-of-file-fixer - id: check-added-large-files - id: detect-private-key - exclude: .*/\.terraform/.* - repo: https://github.com/antonbabenko/pre-commit-terraform rev: v1.88.1 hooks: diff --git a/modules/enterprise-organization/README.md b/modules/enterprise-organization/README.md index b413c5c..8e3d9e5 100644 --- a/modules/enterprise-organization/README.md +++ b/modules/enterprise-organization/README.md @@ -2,7 +2,7 @@ | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 1.3 | +| [terraform](#requirement\_terraform) | >= 1.6 | | [github](#requirement\_github) | ~> 6.0 | ## Providers diff --git a/modules/enterprise-organization/versions.tf b/modules/enterprise-organization/versions.tf index bb0a0bb..1957e13 100644 --- a/modules/enterprise-organization/versions.tf +++ b/modules/enterprise-organization/versions.tf @@ -1,5 +1,5 @@ terraform { - required_version = ">= 1.3" + required_version = ">= 1.6" required_providers { github = { source = "integrations/github" diff --git a/modules/github-foundations/README.md b/modules/github-foundations/README.md index 306535f..c5ed838 100644 --- a/modules/github-foundations/README.md +++ b/modules/github-foundations/README.md @@ -2,15 +2,16 @@ | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 1.3 | +| [terraform](#requirement\_terraform) | >= 1.6 | | [github](#requirement\_github) | ~> 6.0 | +| [local](#requirement\_local) | ~> 2.5.1 | ## Providers | Name | Version | |------|---------| | [github](#provider\_github) | ~> 6.0 | -| [local](#provider\_local) | n/a | +| [local](#provider\_local) | ~> 2.5.1 | ## Modules @@ -47,7 +48,7 @@ |------|-------------|------|---------|:--------:| | [bootstrap\_repository\_name](#input\_bootstrap\_repository\_name) | The name of the bootstrap repository. | `string` | `"bootstrap"` | no | | [foundation\_devs\_team\_name](#input\_foundation\_devs\_team\_name) | The name of the foundation developers team. | `string` | `"foundation-devs"` | no | -| [oidc\_configuration](#input\_oidc\_configuration) | n/a |
object({
gcp = optional(object({
workload_identity_provider_name_secret_name = optional(string)
workload_identity_provider_name = string
organization_workload_identity_sa_secret_name = optional(string)
organization_workload_identity_sa = string
gcp_secret_manager_project_id_variable_name = optional(string)
gcp_secret_manager_project_id = string
gcp_tf_state_bucket_project_id_variable_name = optional(string)
gcp_tf_state_bucket_project_id = string
bucket_name_variable_name = optional(string)
bucket_name = string
bucket_location_variable_name = optional(string)
bucket_location = string
}))
custom = optional(object({
organization_secrets = map(string)
organization_variables = map(string)
repository_secrets = map(map(string))
repository_variables = map(map(string))
}))
}) | n/a | yes |
+| [oidc\_configuration](#input\_oidc\_configuration) | n/a | object({
gcp = optional(object({
workload_identity_provider_name_secret_name = optional(string)
workload_identity_provider_name = string
organization_workload_identity_sa_secret_name = optional(string)
organization_workload_identity_sa = string
gcp_secret_manager_project_id_variable_name = optional(string)
gcp_secret_manager_project_id = string
gcp_tf_state_bucket_project_id_variable_name = optional(string)
gcp_tf_state_bucket_project_id = string
bucket_name_variable_name = optional(string)
bucket_name = string
bucket_location_variable_name = optional(string)
bucket_location = string
}))
custom = optional(object({
organization_secrets = map(string)
organization_variables = map(string)
repository_secrets = map(map(string))
repository_variables = map(map(string))
}))
}) | n/a | yes |
| [organizations\_repository\_name](#input\_organizations\_repository\_name) | The name of the organizations repository. | `string` | `"organizations"` | no |
| [readme\_path](#input\_readme\_path) | Local Path to the README file in your current codebase. Pushed to the github foundation repository. | `string` | `""` | no |
diff --git a/modules/github-foundations/gcp-oidc-variables.tf b/modules/github-foundations/gcp-oidc-variables.tf
index 9b5516f..4b59004 100644
--- a/modules/github-foundations/gcp-oidc-variables.tf
+++ b/modules/github-foundations/gcp-oidc-variables.tf
@@ -1,5 +1,5 @@
resource "github_actions_secret" "organization_workload_identity_sa" {
- count = var.oidc_configuration.gcp != null ? 1 : 0
+ count = var.oidc_configuration.gcp != null ? 1 : 0
repository = github_repository.organizations_repo.name
secret_name = coalesce(var.oidc_configuration.gcp.organization_workload_identity_sa_secret_name, "GCP_SERVICE_ACCOUNT")
diff --git a/modules/github-foundations/variables.tf b/modules/github-foundations/variables.tf
index b7808f5..b471c6d 100644
--- a/modules/github-foundations/variables.tf
+++ b/modules/github-foundations/variables.tf
@@ -26,32 +26,32 @@ variable "oidc_configuration" {
type = object({
gcp = optional(object({
workload_identity_provider_name_secret_name = optional(string)
- workload_identity_provider_name = string
+ workload_identity_provider_name = string
organization_workload_identity_sa_secret_name = optional(string)
- organization_workload_identity_sa = string
+ organization_workload_identity_sa = string
gcp_secret_manager_project_id_variable_name = optional(string)
- gcp_secret_manager_project_id = string
+ gcp_secret_manager_project_id = string
gcp_tf_state_bucket_project_id_variable_name = optional(string)
- gcp_tf_state_bucket_project_id = string
+ gcp_tf_state_bucket_project_id = string
bucket_name_variable_name = optional(string)
- bucket_name = string
+ bucket_name = string
bucket_location_variable_name = optional(string)
- bucket_location = string
+ bucket_location = string
}))
custom = optional(object({
- organization_secrets = map(string)
+ organization_secrets = map(string)
organization_variables = map(string)
- repository_secrets = map(map(string))
- repository_variables = map(map(string))
+ repository_secrets = map(map(string))
+ repository_variables = map(map(string))
}))
})
validation {
- condition = var.oidc_configuration.gcp != null || var.oidc_configuration.custom != null
+ condition = var.oidc_configuration.gcp != null || var.oidc_configuration.custom != null
error_message = "At least one oidc_configuration must be set."
}
-}
\ No newline at end of file
+}
diff --git a/modules/github-foundations/versions.tf b/modules/github-foundations/versions.tf
index bb0a0bb..6d7e7e0 100644
--- a/modules/github-foundations/versions.tf
+++ b/modules/github-foundations/versions.tf
@@ -1,9 +1,13 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
github = {
source = "integrations/github"
version = "~> 6.0"
}
+ local = {
+ source = "hashicorp/local"
+ version = "~> 2.5.1"
+ }
}
}
diff --git a/modules/github-gcloud-oidc/README.md b/modules/github-gcloud-oidc/README.md
index 0609fcd..9624809 100644
--- a/modules/github-gcloud-oidc/README.md
+++ b/modules/github-gcloud-oidc/README.md
@@ -2,22 +2,23 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 1.3 |
+| [terraform](#requirement\_terraform) | >= 1.6 |
| [google](#requirement\_google) | >= 3.77 |
| [google-beta](#requirement\_google-beta) | >= 3.77 |
+| [random](#requirement\_random) | >= 3.6 |
## Providers
| Name | Version |
|------|---------|
| [google](#provider\_google) | >= 3.77 |
-| [random](#provider\_random) | n/a |
+| [random](#provider\_random) | >= 3.6 |
## Modules
| Name | Source | Version |
|------|--------|---------|
-| [oidc](#module\_oidc) | terraform-google-modules/github-actions-runners/google//modules/gh-oidc | n/a |
+| [oidc](#module\_oidc) | terraform-google-modules/github-actions-runners/google//modules/gh-oidc | 3.1.2 |
## Resources
@@ -57,7 +58,6 @@
| [lifecycle\_rules](#input\_lifecycle\_rules) | Bucket lifecycle rule. | map(object({
action = object({
type = string
storage_class = optional(string)
})
condition = object({
age = optional(number)
created_before = optional(string)
custom_time_before = optional(string)
days_since_custom_time = optional(number)
days_since_noncurrent_time = optional(number)
matches_prefix = optional(list(string))
matches_storage_class = optional(list(string)) # STANDARD, MULTI_REGIONAL, REGIONAL, NEARLINE, COLDLINE, ARCHIVE, DURABLE_REDUCED_AVAILABILITY
matches_suffix = optional(list(string))
noncurrent_time_before = optional(string)
num_newer_versions = optional(number)
with_state = optional(string) # "LIVE", "ARCHIVED", "ANY"
})
})) | `{}` | no |
| [location](#input\_location) | Bucket location. | `string` | n/a | yes |
| [logging\_config](#input\_logging\_config) | Bucket logging configuration. | object({
log_bucket = string
log_object_prefix = optional(string)
}) | `null` | no |
-| [organization\_id](#input\_organization\_id) | The organization id. | `string` | n/a | yes |
| [parent](#input\_parent) | Parent in folders/folder\_id or organizations/org\_id format. | `string` | `null` | no |
| [prefix](#input\_prefix) | Optional prefix used to generate project id and name. | `string` | `null` | no |
| [project\_create](#input\_project\_create) | Create project. When set to false, uses a data source to reference existing project. | `bool` | `true` | no |
diff --git a/modules/github-gcloud-oidc/folder.tf b/modules/github-gcloud-oidc/folder.tf
index 9f23744..a92a275 100644
--- a/modules/github-gcloud-oidc/folder.tf
+++ b/modules/github-gcloud-oidc/folder.tf
@@ -1,8 +1,8 @@
locals {
folder = (
var.folder_create
- ? try(google_folder.folder.0, null)
- : try(data.google_folder.folder.0, null)
+ ? try(google_folder.folder[0], null)
+ : try(data.google_folder.folder[0], null)
)
}
@@ -15,4 +15,4 @@ resource "google_folder" "folder" {
count = var.folder_create ? 1 : 0
display_name = var.folder_name
parent = var.parent
-}
\ No newline at end of file
+}
diff --git a/modules/github-gcloud-oidc/oidc.tf b/modules/github-gcloud-oidc/oidc.tf
index ae8fdc9..bf7e6fb 100644
--- a/modules/github-gcloud-oidc/oidc.tf
+++ b/modules/github-gcloud-oidc/oidc.tf
@@ -4,7 +4,6 @@ locals {
bootstrap_repo_name = "bootstrap"
organizations_repo_name = "organizations"
- projects_repo_name = "projects"
state_file_access_roles = tolist(["roles/storage.objectAdmin", "roles/storage.admin"])
@@ -53,6 +52,7 @@ resource "google_project_iam_member" "organizations_member" {
*/
module "oidc" {
source = "terraform-google-modules/github-actions-runners/google//modules/gh-oidc"
+ version = "3.1.2"
depends_on = [google_project_service.project_services, google_service_account.bootstrap_sa, google_service_account.organizations_sa]
project_id = google_project.project[0].project_id
pool_id = local.pool_id
diff --git a/modules/github-gcloud-oidc/project.tf b/modules/github-gcloud-oidc/project.tf
index 81382da..a52ccc9 100644
--- a/modules/github-gcloud-oidc/project.tf
+++ b/modules/github-gcloud-oidc/project.tf
@@ -25,14 +25,14 @@ locals {
project = (
var.project_create ?
{
- project_id = try(google_project.project.0.project_id, null)
- number = try(google_project.project.0.number, null)
- name = try(google_project.project.0.name, null)
+ project_id = try(google_project.project[0].project_id, null)
+ number = try(google_project.project[0].number, null)
+ name = try(google_project.project[0].name, null)
}
: {
project_id = local.project_id
- number = try(data.google_project.project.0.number, null)
- name = try(data.google_project.project.0.name, null)
+ number = try(data.google_project.project[0].number, null)
+ name = try(data.google_project.project[0].name, null)
}
)
}
@@ -66,4 +66,3 @@ resource "google_project_service" "project_services" {
disable_on_destroy = var.service_config.disable_on_destroy
disable_dependent_services = var.service_config.disable_dependent_services
}
-
diff --git a/modules/github-gcloud-oidc/storage.tf b/modules/github-gcloud-oidc/storage.tf
index e39de1f..8705ae1 100644
--- a/modules/github-gcloud-oidc/storage.tf
+++ b/modules/github-gcloud-oidc/storage.tf
@@ -1,3 +1,4 @@
+#trivy:ignore:avd-gcp-0066
resource "google_storage_bucket" "bucket" {
name = lower(var.bucket_name)
depends_on = [google_project_service.project_services]
@@ -94,4 +95,4 @@ resource "google_storage_bucket" "bucket" {
data_locations = var.custom_placement_config
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/github-gcloud-oidc/variables.tf b/modules/github-gcloud-oidc/variables.tf
index 8c70aab..e9bede8 100644
--- a/modules/github-gcloud-oidc/variables.tf
+++ b/modules/github-gcloud-oidc/variables.tf
@@ -1,9 +1,3 @@
-#Organization Variables
-variable "organization_id" {
- description = "The organization id."
- type = string
-}
-
#Folder Variables
variable "folder_create" {
description = "Create folder. When set to false, uses id to reference an existing folder."
@@ -277,4 +271,4 @@ variable "custom_placement_config" {
variable "github_foundations_organization_name" {
type = string
description = "The name of the organization that the github foundation repos will be under."
-}
\ No newline at end of file
+}
diff --git a/modules/github-gcloud-oidc/versions.tf b/modules/github-gcloud-oidc/versions.tf
index 6381a79..4658f90 100644
--- a/modules/github-gcloud-oidc/versions.tf
+++ b/modules/github-gcloud-oidc/versions.tf
@@ -1,5 +1,5 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
google = {
source = "hashicorp/google"
@@ -9,5 +9,9 @@ terraform {
source = "hashicorp/google-beta"
version = ">= 3.77" # tftest
}
+ random = {
+ source = "hashicorp/random"
+ version = ">= 3.6" # tftest
+ }
}
-}
\ No newline at end of file
+}
diff --git a/modules/organization/README.md b/modules/organization/README.md
index 407378c..d99d2e0 100644
--- a/modules/organization/README.md
+++ b/modules/organization/README.md
@@ -2,7 +2,7 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 1.3 |
+| [terraform](#requirement\_terraform) | >= 1.6 |
| [github](#requirement\_github) | ~> 6.0 |
## Providers
diff --git a/modules/organization/rulesets.tf b/modules/organization/rulesets.tf
index a51af05..e71ab97 100644
--- a/modules/organization/rulesets.tf
+++ b/modules/organization/rulesets.tf
@@ -84,15 +84,15 @@ module "ruleset" {
bypass_actors = {
repository_roles = [for bypasser in try(toset(coalesce(each.value.bypass_actors.repository_roles, [])), []) : {
- role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser["${bypasser.role}"].id)
+ role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser[bypasser.role].id)
always_bypass = bypasser.always_bypass
}]
teams = [for bypasser in try(toset(coalesce(each.value.bypass_actors.teams, [])), []) : {
- team_id = data.github_team.branch_ruleset_bypasser["${bypasser.team}"].id
+ team_id = data.github_team.branch_ruleset_bypasser[bypasser.team].id
always_bypass = bypasser.always_bypass
}]
organization_admins = [for bypasser in try(toset(coalesce(each.value.bypass_actors.organization_admins, [])), []) : {
- user_id = data.github_user.branch_ruleset_bypasser["${bypasser.user}"].id
+ user_id = data.github_user.branch_ruleset_bypasser[bypasser.user].id
always_bypass = bypasser.always_bypass
}]
integrations = try(each.value.bypass_actors.integrations, [])
@@ -125,15 +125,15 @@ module "base_default_branch_protection" {
bypass_actors = {
repository_roles = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.repository_roles, [])), []) : {
- role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser["${bypasser.role}"].id)
+ role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser[bypasser.role].id)
always_bypass = bypasser.always_bypass
}]
teams = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.teams, [])), []) : {
- team_id = data.github_team.branch_ruleset_bypasser["${bypasser.team}"].id
+ team_id = data.github_team.branch_ruleset_bypasser[bypasser.team].id
always_bypass = bypasser.always_bypass
}]
organization_admins = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.organization_admins, [])), []) : {
- user_id = data.github_user.branch_ruleset_bypasser["${bypasser.user}"].id
+ user_id = data.github_user.branch_ruleset_bypasser[bypasser.user].id
always_bypass = bypasser.always_bypass
}]
integrations = try(var.default_branch_protection_rulesets.bypass_actors.integrations, [])
@@ -162,15 +162,15 @@ module "minimum_approvals" {
bypass_actors = {
repository_roles = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.repository_roles, [])), []) : {
- role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser["${bypasser.role}"].id)
+ role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser[bypasser.role].id)
always_bypass = bypasser.always_bypass
}]
teams = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.teams, [])), []) : {
- team_id = data.github_team.branch_ruleset_bypasser["${bypasser.team}"].id
+ team_id = data.github_team.branch_ruleset_bypasser[bypasser.team].id
always_bypass = bypasser.always_bypass
}]
organization_admins = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.organization_admins, [])), []) : {
- user_id = data.github_user.branch_ruleset_bypasser["${bypasser.user}"].id
+ user_id = data.github_user.branch_ruleset_bypasser[bypasser.user].id
always_bypass = bypasser.always_bypass
}]
integrations = try(var.default_branch_protection_rulesets.bypass_actors.integrations, [])
@@ -199,15 +199,15 @@ module "dismiss_stale_reviews" {
bypass_actors = {
repository_roles = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.repository_roles, [])), []) : {
- role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser["${bypasser.role}"].id)
+ role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser[bypasser.role].id)
always_bypass = bypasser.always_bypass
}]
teams = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.teams, [])), []) : {
- team_id = data.github_team.branch_ruleset_bypasser["${bypasser.team}"].id
+ team_id = data.github_team.branch_ruleset_bypasser[bypasser.team].id
always_bypass = bypasser.always_bypass
}]
organization_admins = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.organization_admins, [])), []) : {
- user_id = data.github_user.branch_ruleset_bypasser["${bypasser.user}"].id
+ user_id = data.github_user.branch_ruleset_bypasser[bypasser.user].id
always_bypass = bypasser.always_bypass
}]
integrations = try(var.default_branch_protection_rulesets.bypass_actors.integrations, [])
@@ -233,17 +233,17 @@ module "require_signatures" {
bypass_actors = {
repository_roles = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.repository_roles, [])), []) : {
- role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser["${bypasser.role}"].id)
+ role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser[bypasser.role].id)
always_bypass = bypasser.always_bypass
}]
teams = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.teams, [])), []) : {
- team_id = data.github_team.branch_ruleset_bypasser["${bypasser.team}"].id
+ team_id = data.github_team.branch_ruleset_bypasser[bypasser.team].id
always_bypass = bypasser.always_bypass
}]
organization_admins = [for bypasser in try(toset(coalesce(var.default_branch_protection_rulesets.bypass_actors.organization_admins, [])), []) : {
- user_id = data.github_user.branch_ruleset_bypasser["${bypasser.user}"].id
+ user_id = data.github_user.branch_ruleset_bypasser[bypasser.user].id
always_bypass = bypasser.always_bypass
}]
integrations = try(var.default_branch_protection_rulesets.bypass_actors.integrations, [])
}
-}
\ No newline at end of file
+}
diff --git a/modules/organization/versions.tf b/modules/organization/versions.tf
index e58f121..1957e13 100644
--- a/modules/organization/versions.tf
+++ b/modules/organization/versions.tf
@@ -1,9 +1,9 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
github = {
source = "integrations/github"
version = "~> 6.0"
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/private_repository/README.md b/modules/private_repository/README.md
index 0ff1289..d3cc6cc 100644
--- a/modules/private_repository/README.md
+++ b/modules/private_repository/README.md
@@ -2,7 +2,7 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 1.3 |
+| [terraform](#requirement\_terraform) | >= 1.6 |
| [github](#requirement\_github) | ~> 6.0 |
## Providers
@@ -24,7 +24,7 @@ No resources.
| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [action\_secrets](#input\_action\_secrets) | An (Optional) map of GitHub Actions secrets to create for this repository. The key is the name of the secret and the value is the encrypted value. | `map(string)` | `{}` | no |
-| [advance\_security](#input\_advance\_security) | Enables advance security for the repository. If repository is public `advance_security` is enabled by default and cannot be changed. | `bool` | `true` | no |
+| [advance\_security](#input\_advance\_security) | Enables advance security for the repository. | `bool` | `true` | no |
| [allow\_auto\_merge](#input\_allow\_auto\_merge) | Allow auto-merging pull requests on the repository | `bool` | `true` | no |
| [codespace\_secrets](#input\_codespace\_secrets) | An (Optional) map of Github Codespace secrets to create for this repository. The key is the name of the secret and the value is the encrypted value. | `map(string)` | `{}` | no |
| [default\_branch](#input\_default\_branch) | The branch to set as the default branch for this repository. Defaults to "main" | `string` | `"main"` | no |
diff --git a/modules/private_repository/repository.tf b/modules/private_repository/repository.tf
index a872ce4..476c7cd 100644
--- a/modules/private_repository/repository.tf
+++ b/modules/private_repository/repository.tf
@@ -15,10 +15,10 @@ module "repository_base" {
repository_team_permissions = var.repository_team_permissions
repository_user_permissions = var.repository_user_permissions
- default_branch = var.default_branch
- protected_branches = var.protected_branches
- delete_head_on_merge = var.delete_head_on_merge
- allow_auto_merge = var.allow_auto_merge
+ default_branch = var.default_branch
+ protected_branches = var.protected_branches
+ delete_head_on_merge = var.delete_head_on_merge
+ allow_auto_merge = var.allow_auto_merge
requires_web_commit_signing = var.requires_web_commit_signing
secret_scanning = true
diff --git a/modules/private_repository/variables.tf b/modules/private_repository/variables.tf
index b347472..8abc711 100644
--- a/modules/private_repository/variables.tf
+++ b/modules/private_repository/variables.tf
@@ -68,7 +68,7 @@ variable "dependabot_security_updates" {
}
variable "advance_security" {
- description = "Enables advance security for the repository. If repository is public `advance_security` is enabled by default and cannot be changed."
+ description = "Enables advance security for the repository."
type = bool
default = true
}
diff --git a/modules/private_repository/versions.tf b/modules/private_repository/versions.tf
index e58f121..1957e13 100644
--- a/modules/private_repository/versions.tf
+++ b/modules/private_repository/versions.tf
@@ -1,9 +1,9 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
github = {
source = "integrations/github"
version = "~> 6.0"
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/public_repository/README.md b/modules/public_repository/README.md
index b47dc90..a04baad 100644
--- a/modules/public_repository/README.md
+++ b/modules/public_repository/README.md
@@ -2,7 +2,7 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 1.3 |
+| [terraform](#requirement\_terraform) | >= 1.6 |
| [github](#requirement\_github) | ~> 6.0 |
## Providers
diff --git a/modules/public_repository/repository.tf b/modules/public_repository/repository.tf
index 811be5c..04a6aec 100644
--- a/modules/public_repository/repository.tf
+++ b/modules/public_repository/repository.tf
@@ -15,10 +15,10 @@ module "repository_base" {
repository_team_permissions = var.repository_team_permissions
repository_user_permissions = var.repository_user_permissions
- default_branch = var.default_branch
- protected_branches = var.protected_branches
- delete_head_on_merge = var.delete_head_on_merge
- allow_auto_merge = var.allow_auto_merge
+ default_branch = var.default_branch
+ protected_branches = var.protected_branches
+ delete_head_on_merge = var.delete_head_on_merge
+ allow_auto_merge = var.allow_auto_merge
requires_web_commit_signing = var.requires_web_commit_signing
secret_scanning = true
diff --git a/modules/public_repository/versions.tf b/modules/public_repository/versions.tf
index e58f121..1957e13 100644
--- a/modules/public_repository/versions.tf
+++ b/modules/public_repository/versions.tf
@@ -1,9 +1,9 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
github = {
source = "integrations/github"
version = "~> 6.0"
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/repository_base/README.md b/modules/repository_base/README.md
index 94c955e..ff0ecd4 100644
--- a/modules/repository_base/README.md
+++ b/modules/repository_base/README.md
@@ -2,7 +2,7 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 1.3 |
+| [terraform](#requirement\_terraform) | >= 1.6 |
| [github](#requirement\_github) | ~> 6.0 |
## Providers
diff --git a/modules/repository_base/repository.tf b/modules/repository_base/repository.tf
index 6811c5f..bc3c38b 100644
--- a/modules/repository_base/repository.tf
+++ b/modules/repository_base/repository.tf
@@ -1,7 +1,6 @@
locals {
enable_dependabot_automated_security_fixes = var.has_vulnerability_alerts && var.dependabot_security_updates ? 1 : 0
- is_public = var.visibility == "public"
- can_configure_security_and_analysis = !local.is_public && var.advance_security
+ can_configure_security_and_analysis = var.advance_security || var.secret_scanning || var.secret_scanning_on_push
protected_branches_refs = [
for branch in var.protected_branches : "refs/heads/${branch}"
@@ -11,36 +10,48 @@ locals {
resource "github_repository" "repository" {
name = var.name
description = var.description
- visibility = var.visibility
+ #trivy:ignore:avd-git-0001
+ visibility = var.visibility
- auto_init = true
- archive_on_destroy = false
- has_downloads = var.has_downloads
- has_issues = var.has_issues
- has_projects = var.has_projects
- has_wiki = var.has_wiki
- has_discussions = var.has_discussions
- vulnerability_alerts = var.has_vulnerability_alerts
- topics = var.topics
- homepage_url = var.homepage
- delete_branch_on_merge = var.delete_head_on_merge
- allow_auto_merge = var.allow_auto_merge
+ auto_init = true
+ archive_on_destroy = false
+ has_downloads = var.has_downloads
+ has_issues = var.has_issues
+ has_projects = var.has_projects
+ has_wiki = var.has_wiki
+ has_discussions = var.has_discussions
+ vulnerability_alerts = var.has_vulnerability_alerts
+ topics = var.topics
+ homepage_url = var.homepage
+ delete_branch_on_merge = var.delete_head_on_merge
+ allow_auto_merge = var.allow_auto_merge
web_commit_signoff_required = var.requires_web_commit_signing
- license_template = var.license_template
+ license_template = var.license_template
# A hacky way of getting around the 422 errors received from github api
dynamic "security_and_analysis" {
for_each = local.can_configure_security_and_analysis ? [1] : []
content {
- advanced_security {
- status = var.advance_security ? "enabled" : "disabled"
+ dynamic "advanced_security" {
+ for_each = var.advance_security ? [var.advance_security] : []
+ content {
+ status = "enabled"
+ }
}
- secret_scanning {
- status = var.secret_scanning ? "enabled" : "disabled"
+
+ dynamic "secret_scanning" {
+ for_each = var.secret_scanning ? [var.secret_scanning] : []
+ content {
+ status = "enabled"
+ }
}
- secret_scanning_push_protection {
- status = var.secret_scanning_on_push ? "enabled" : "disabled"
+
+ dynamic "secret_scanning_push_protection" {
+ for_each = var.secret_scanning_on_push ? [var.secret_scanning_on_push] : []
+ content {
+ status = "enabled"
+ }
}
}
}
@@ -69,7 +80,7 @@ resource "github_branch_default" "default_branch" {
}
resource "github_repository_ruleset" "protected_branch_base_rules" {
- count = length(toset(local.protected_branches_refs)) > 0 ? 1 : 0
+ count = length(toset(local.protected_branches_refs)) > 0 ? 1 : 0
name = "protected_branch_base_ruleset"
repository = github_repository.repository.name
diff --git a/modules/repository_base/rulesets.tf b/modules/repository_base/rulesets.tf
index 7fdfa52..384e035 100644
--- a/modules/repository_base/rulesets.tf
+++ b/modules/repository_base/rulesets.tf
@@ -82,15 +82,15 @@ module "ruleset" {
bypass_actors = {
repository_roles = [for bypasser in try(toset(coalesce(each.value.bypass_actors.repository_roles, [])), []) : {
- role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser["${bypasser.role}"].id)
+ role_id = lookup(local.github_base_role_ids, bypasser.role, data.github_organization_custom_role.branch_ruleset_bypasser[bypasser.role].id)
always_bypass = bypasser.always_bypass
}]
teams = [for bypasser in try(toset(coalesce(each.value.bypass_actors.teams, [])), []) : {
- team_id = data.github_team.branch_ruleset_bypasser["${bypasser.team}"].id
+ team_id = data.github_team.branch_ruleset_bypasser[bypasser.team].id
always_bypass = bypasser.always_bypass
}]
organization_admins = [for bypasser in try(toset(coalesce(each.value.bypass_actors.organization_admins, [])), []) : {
- user_id = data.github_user.branch_ruleset_bypasser["${bypasser.user}"].id
+ user_id = data.github_user.branch_ruleset_bypasser[bypasser.user].id
always_bypass = bypasser.always_bypass
}]
integrations = try(each.value.bypass_actors.repository_roles, [])
@@ -98,4 +98,4 @@ module "ruleset" {
ref_name_inclusions = each.value.conditions.ref_name.include
ref_name_exclusions = each.value.conditions.ref_name.exclude
-}
\ No newline at end of file
+}
diff --git a/modules/repository_base/secrets.tf b/modules/repository_base/secrets.tf
index dd73ce2..a976385 100644
--- a/modules/repository_base/secrets.tf
+++ b/modules/repository_base/secrets.tf
@@ -40,7 +40,7 @@ resource "github_dependabot_secret" "dependabot_secret" {
resource "github_actions_environment_secret" "environment_secret" {
for_each = local.environment_action_secrets_map
repository = var.name
- environment = github_repository_environment.environment["${each.value.environment}"].environment
+ environment = github_repository_environment.environment[each.value.environment].environment
encrypted_value = each.value.encrypted_value
secret_name = each.value.name
}
diff --git a/modules/repository_base/versions.tf b/modules/repository_base/versions.tf
index e58f121..1957e13 100644
--- a/modules/repository_base/versions.tf
+++ b/modules/repository_base/versions.tf
@@ -1,9 +1,9 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
github = {
source = "integrations/github"
version = "~> 6.0"
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/repository_set/README.md b/modules/repository_set/README.md
index 6e325f0..d885ab0 100644
--- a/modules/repository_set/README.md
+++ b/modules/repository_set/README.md
@@ -2,7 +2,7 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 1.3 |
+| [terraform](#requirement\_terraform) | >= 1.6 |
| [github](#requirement\_github) | ~> 6.0 |
## Providers
diff --git a/modules/repository_set/organization-secrets.tf b/modules/repository_set/organization-secrets.tf
index 599a08c..ab5f84d 100644
--- a/modules/repository_set/organization-secrets.tf
+++ b/modules/repository_set/organization-secrets.tf
@@ -9,8 +9,8 @@ locals {
organization_action_secrets_repository_id_list = {
for secret in local.organization_action_secrets : secret => toset(distinct(concat(
- [for repo_name, repo in local.coalesced_public_repositories : module.public_repositories["${repo_name}"].id if contains(coalesce(repo.organization_action_secrets, []), secret)],
- [for repo_name, repo in local.coalesced_private_repositories : module.private_repositories["${repo_name}"].id if contains(coalesce(repo.organization_action_secrets, []), secret)]
+ [for repo_name, repo in local.coalesced_public_repositories : module.public_repositories[repo_name].id if contains(coalesce(repo.organization_action_secrets, []), secret)],
+ [for repo_name, repo in local.coalesced_private_repositories : module.private_repositories[repo_name].id if contains(coalesce(repo.organization_action_secrets, []), secret)]
)))
}
@@ -21,8 +21,8 @@ locals {
codespace_secrets_repository_id_list = {
for secret in local.codespace_secrets : secret => toset(distinct(concat(
- [for repo_name, repo in local.coalesced_public_repositories : module.public_repositories["${repo_name}"].id if contains(coalesce(repo.organization_codespace_secrets, []), secret)],
- [for repo_name, repo in local.coalesced_private_repositories : module.private_repositories["${repo_name}"].id if contains(coalesce(repo.organization_codespace_secrets, []), secret)]
+ [for repo_name, repo in local.coalesced_public_repositories : module.public_repositories[repo_name].id if contains(coalesce(repo.organization_codespace_secrets, []), secret)],
+ [for repo_name, repo in local.coalesced_private_repositories : module.private_repositories[repo_name].id if contains(coalesce(repo.organization_codespace_secrets, []), secret)]
)))
}
@@ -33,8 +33,8 @@ locals {
dependabot_secrets_id_list = {
for secret in local.dependabot_secrets : secret => toset(distinct(concat(
- [for repo_name, repo in local.coalesced_public_repositories : module.public_repositories["${repo_name}"].id if contains(coalesce(repo.organization_dependabot_secrets, []), secret)],
- [for repo_name, repo in local.coalesced_private_repositories : module.private_repositories["${repo_name}"].id if contains(coalesce(repo.organization_dependabot_secrets, []), secret)]
+ [for repo_name, repo in local.coalesced_public_repositories : module.public_repositories[repo_name].id if contains(coalesce(repo.organization_dependabot_secrets, []), secret)],
+ [for repo_name, repo in local.coalesced_private_repositories : module.private_repositories[repo_name].id if contains(coalesce(repo.organization_dependabot_secrets, []), secret)]
)))
}
}
@@ -58,4 +58,4 @@ resource "github_dependabot_organization_secret_repositories" "org__dependabot_s
secret_name = each.key
selected_repository_ids = each.value
-}
\ No newline at end of file
+}
diff --git a/modules/repository_set/versions.tf b/modules/repository_set/versions.tf
index e58f121..1957e13 100644
--- a/modules/repository_set/versions.tf
+++ b/modules/repository_set/versions.tf
@@ -1,9 +1,9 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
github = {
source = "integrations/github"
version = "~> 6.0"
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/ruleset/README.md b/modules/ruleset/README.md
index 7853302..a50dc9d 100644
--- a/modules/ruleset/README.md
+++ b/modules/ruleset/README.md
@@ -2,7 +2,7 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 1.3 |
+| [terraform](#requirement\_terraform) | >= 1.6 |
| [github](#requirement\_github) | ~> 6.0 |
## Providers
@@ -31,7 +31,6 @@ No modules.
| [name](#input\_name) | The name of the ruleset. | `string` | n/a | yes |
| [ref\_name\_exclusions](#input\_ref\_name\_exclusions) | A list of ref names or patterns to exclude. Defaults to an empty list. If set and `ruleset_type` is set to `organization` then either `repository_name_inclusions` or `repository_name_exclusions` must be set to a list of atleast 1 string. | `list(string)` | `[]` | no |
| [ref\_name\_inclusions](#input\_ref\_name\_inclusions) | A list of ref names or patterns to include. Defaults to an empty list. If set and `ruleset_type` is set to `organization` then either `repository_name_inclusions` or `repository_name_exclusions` must be set to a list of atleast 1 string. | `list(string)` | `[]` | no |
-| [repository](#input\_repository) | The repository to create the ruleset under. Only applicable if `ruleset_type` is set to `repository`. Defaults to "" | `string` | `""` | no |
| [repository\_name\_exclusions](#input\_repository\_name\_exclusions) | A list of repository names or patterns to exclude. If `ruleset_type` is set to `repository` then this field is ignored. | `list(string)` | `[]` | no |
| [repository\_name\_inclusions](#input\_repository\_name\_inclusions) | A list of repository names or patterns to include. If `ruleset_type` is set to `repository` then this field is ignored. | `list(string)` | `[]` | no |
| [rules](#input\_rules) | An object containing fields for all the rule definitions the ruleset should enforce. | object({
branch_name_pattern = optional(object({
operator = string
pattern = string
name = optional(string)
negate = optional(bool)
}))
tag_name_pattern = optional(object({
operator = string
pattern = string
name = optional(string)
negate = optional(bool)
}))
commit_author_email_pattern = optional(object({
operator = string
pattern = string
name = optional(string)
negate = optional(bool)
}))
commit_message_pattern = optional(object({
operator = string
pattern = string
name = optional(string)
negate = optional(bool)
}))
committer_email_pattern = optional(object({
operator = string
pattern = string
name = optional(string)
negate = optional(bool)
}))
creation = optional(bool)
deletion = optional(bool)
update = optional(bool)
non_fast_forward = optional(bool)
required_linear_history = optional(bool)
required_signatures = optional(bool)
update_allows_fetch_and_merge = optional(bool)
pull_request = optional(object({
dismiss_stale_reviews_on_push = optional(bool)
require_code_owner_review = optional(bool)
require_last_push_approval = optional(bool)
required_approving_review_count = optional(number)
required_review_thread_resolution = optional(bool)
}))
required_status_checks = optional(object({
required_check = list(object({
context = string
integration_id = optional(number)
}))
strict_required_status_check_policy = optional(bool)
}))
required_workflows = optional(object({
required_workflows = list(object({
repository_id = number
path = string
ref = optional(string)
}))
}))
required_deployment_environments = optional(list(string))
}) | n/a | yes |
diff --git a/modules/ruleset/variables.tf b/modules/ruleset/variables.tf
index d442c16..2ba4590 100644
--- a/modules/ruleset/variables.tf
+++ b/modules/ruleset/variables.tf
@@ -142,9 +142,3 @@ variable "enforcement" {
error_message = "The enforcement level must be either `active`, `evaluate` or `disabled`."
}
}
-
-variable "repository" {
- type = string
- description = "The repository to create the ruleset under. Only applicable if `ruleset_type` is set to `repository`. Defaults to \"\""
- default = ""
-}
diff --git a/modules/ruleset/versions.tf b/modules/ruleset/versions.tf
index e58f121..1957e13 100644
--- a/modules/ruleset/versions.tf
+++ b/modules/ruleset/versions.tf
@@ -1,9 +1,9 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
github = {
source = "integrations/github"
version = "~> 6.0"
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/team/README.md b/modules/team/README.md
index e71b7c9..8bface2 100644
--- a/modules/team/README.md
+++ b/modules/team/README.md
@@ -2,7 +2,7 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 1.3 |
+| [terraform](#requirement\_terraform) | >= 1.6 |
| [github](#requirement\_github) | ~> 6.0 |
## Providers
diff --git a/modules/team/versions.tf b/modules/team/versions.tf
index e58f121..1957e13 100644
--- a/modules/team/versions.tf
+++ b/modules/team/versions.tf
@@ -1,9 +1,9 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
github = {
source = "integrations/github"
version = "~> 6.0"
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/team_set/README.md b/modules/team_set/README.md
index e8f78c8..fcf9e7a 100644
--- a/modules/team_set/README.md
+++ b/modules/team_set/README.md
@@ -2,7 +2,7 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 1.3 |
+| [terraform](#requirement\_terraform) | >= 1.6 |
| [github](#requirement\_github) | ~> 6.0 |
## Providers
diff --git a/modules/team_set/data.tf b/modules/team_set/data.tf
index c4879a2..148afd9 100644
--- a/modules/team_set/data.tf
+++ b/modules/team_set/data.tf
@@ -16,11 +16,11 @@ locals {
data "terraform_remote_state" "state" {
for_each = {
- for i, state in local.distinct_states : "${i}" => state
+ for i, state in local.distinct_states : i => state
}
backend = "gcs"
config = {
bucket = each.value.bucket
prefix = each.value.prefix
}
-}
\ No newline at end of file
+}
diff --git a/modules/team_set/teams.tf b/modules/team_set/teams.tf
index 498d3b8..e6f0d42 100644
--- a/modules/team_set/teams.tf
+++ b/modules/team_set/teams.tf
@@ -15,7 +15,7 @@ module "prexisting_team" {
source = "../team"
for_each = var.preexisting_teams
- team_id = data.terraform_remote_state.state[local.team_to_state_index_map[each.key]].outputs["${each.value.output_name}"]
+ team_id = data.terraform_remote_state.state[local.team_to_state_index_map[each.key]].outputs[each.value.output_name]
team_maintainers = each.value.maintainers
team_members = each.value.members
diff --git a/modules/team_set/versions.tf b/modules/team_set/versions.tf
index bb0a0bb..1957e13 100644
--- a/modules/team_set/versions.tf
+++ b/modules/team_set/versions.tf
@@ -1,5 +1,5 @@
terraform {
- required_version = ">= 1.3"
+ required_version = ">= 1.6"
required_providers {
github = {
source = "integrations/github"