Skip to content

Commit e375c89

Browse files
committed
feat: added security_and_analysis block support
1 parent fd5eef1 commit e375c89

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

README.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ A [Terraform] module for creating a public or private repository on [Github].
1818
- [Resources](#resources)
1919
- [Inputs](#inputs)
2020
- [Outputs](#outputs)
21+
- [Security And Analysis Configuration](#security-and-analysis-configuration)
2122
- [External Documentation](#external-documentation)
2223
- [Terraform Github Provider Documentation](#terraform-github-provider-documentation)
2324
- [Module Versioning](#module-versioning)
@@ -178,6 +179,7 @@ See [variables.tf] and [examples/] for details and use-cases.
178179
| <a name="input_push_team_ids"></a> [push\_team\_ids](#input\_push\_team\_ids) | (Optional) A list of teams (by id) to grant push (read-write) permission to. | `list(string)` | `[]` | no |
179180
| <a name="input_push_teams"></a> [push\_teams](#input\_push\_teams) | (Optional) A list of teams (by name/slug) to grant push (read-write) permission to. | `list(string)` | `[]` | no |
180181
| <a name="input_rulesets"></a> [rulesets](#input\_rulesets) | (Optional) A list of branch rulesets to apply to the repository. Default is [].<br/><br/>It is very likely removal of any section will require setting it to an empty list/map.<br/>This is due to limitations in the API whereby components are not destroyed upon removal. | <pre>list(<br/> object({<br/> enforcement = string<br/> name = string<br/> target = string<br/><br/> rules = list(<br/> object({<br/> creation = optional(bool)<br/> deletion = optional(bool)<br/> non_fast_forward = optional(bool)<br/> required_signatures = optional(bool)<br/> required_linear_history = optional(bool)<br/> update = optional(bool)<br/> update_allows_fetch_and_merge = optional(bool)<br/><br/> branch_name_pattern = optional(<br/> object({<br/> operator = string<br/> pattern = string<br/> name = optional(string)<br/> negate = optional(bool)<br/> })<br/> )<br/><br/> commit_author_email_pattern = optional(<br/> object({<br/> operator = string<br/> pattern = string<br/> name = optional(string)<br/> negate = optional(bool)<br/> })<br/> )<br/><br/> commit_message_pattern = optional(<br/> object({<br/> operator = string<br/> pattern = string<br/> name = optional(string)<br/> negate = optional(bool)<br/> })<br/> )<br/><br/> committer_email_pattern = optional(<br/> object({<br/> operator = string<br/> pattern = string<br/> name = optional(string)<br/> negate = optional(bool)<br/> })<br/> )<br/><br/> tag_name_pattern = optional(<br/> object({<br/> operator = string<br/> pattern = string<br/> name = optional(string)<br/> negate = optional(bool)<br/> })<br/> )<br/><br/> required_status_checks = optional(<br/> object({<br/> strict_required_status_checks_policy = optional(bool)<br/> do_not_enforce_on_create = optional(bool)<br/> required_check = list(<br/> object({<br/> context = string<br/> integration_id = optional(number)<br/> })<br/> )<br/> })<br/> )<br/><br/> pull_request = optional(<br/> object({<br/> dismiss_stale_reviews_on_push = optional(bool)<br/> require_code_owner_review = optional(bool)<br/> require_last_push_approval = optional(bool)<br/> required_approving_review_count = optional(number)<br/> required_review_thread_resolution = optional(bool)<br/> })<br/> )<br/><br/> required_workflows = optional(<br/> object({<br/> required_workflow = list(<br/> object({<br/> repository_id = number<br/> ref = string<br/> path = string<br/> })<br/> )<br/> })<br/> )<br/><br/> required_deployments = optional(<br/> object({<br/> required_deployment_environments = list(string)<br/> })<br/> )<br/><br/> required_code_scanning = optional(<br/> object({<br/> required_code_scanning_tool = list(<br/> object({<br/> tool = string<br/> alerts_threshold = string<br/> security_alerts_threshold = string<br/> })<br/> )<br/> })<br/> )<br/><br/> merge_queue = optional(<br/> object({<br/> check_response_timeout_minutes = optional(number)<br/> grouping_strategy = optional(string)<br/> max_entries_to_build = optional(number)<br/> max_entries_to_merge = optional(number)<br/> merge_method = optional(string)<br/> min_entries_to_merge = optional(number)<br/> min_entries_to_merge_wait_minutes = optional(number)<br/> })<br/> )<br/> })<br/> )<br/><br/> bypass_actors = optional(<br/> list(<br/> object({<br/> actor_id = optional(number)<br/> actor_type = string<br/> bypass_mode = optional(string)<br/> })<br/> )<br/> )<br/><br/> conditions = optional(<br/> object({<br/> ref_name = object({<br/> include = list(string)<br/> exclude = list(string)<br/> })<br/> })<br/> )<br/> })<br/> )</pre> | `[]` | no |
182+
| <a name="input_security_and_analysis"></a> [security\_and\_analysis](#input\_security\_and\_analysis) | (Optional) Security and analysis configuration block | <pre>object({<br/> advanced_security = optional(string, "disabled")<br/> secret_scanning = optional(string, "disabled")<br/> secret_scanning_push_protection = optional(string, "disabled")<br/> })</pre> | `{}` | no |
181183
| <a name="input_squash_merge_commit_message"></a> [squash\_merge\_commit\_message](#input\_squash\_merge\_commit\_message) | (Optional) Can be `PR_BODY`, `COMMIT_MESSAGES`, or `BLANK` for a default squash merge commit message. | `string` | `"COMMIT_MESSAGES"` | no |
182184
| <a name="input_squash_merge_commit_title"></a> [squash\_merge\_commit\_title](#input\_squash\_merge\_commit\_title) | (Optional) Can be `PR_BODY`, `COMMIT_MESSAGES`, or `BLANK` for a default squash merge commit message. | `string` | `"COMMIT_OR_PR_TITLE"` | no |
183185
| <a name="input_template"></a> [template](#input\_template) | (Optional) Template repository to use. (Default: {}) | <pre>object({<br/> owner = string<br/> repository = string<br/> })</pre> | `null` | no |
@@ -210,6 +212,35 @@ See [variables.tf] and [examples/] for details and use-cases.
210212
| <a name="output_webhooks"></a> [webhooks](#output\_webhooks) | All attributes and arguments as returned by the github\_repository\_webhook resource. |
211213
<!-- END_TF_DOCS -->
212214

215+
### Security And Analysis Configuration
216+
217+
- [**`security_and_analysis`**](#var-security_and_analysis): *(Optional `object(security_and_analysis)`)*<a name="var-security_and_analysis"></a>
218+
219+
(Optional) The repository's [security and analysis](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository) configuration.
220+
See [Security and Analysis Configuration](#security-and-analysis-configuration) below for details.
221+
222+
Default is `{}`.
223+
224+
The `security_and_analysis` object accepts the following attributes:
225+
226+
- [**`advanced_security`**](#attr-security_and_analysis-advanced_security): *(**Required** `string`)*<a name="attr-security_and_analysis-advanced_security"></a>
227+
228+
The advanced security configuration for the repository. See [Advanced Security Configuration](#advanced-security-configuration) below for details.
229+
230+
Default is `"disabled"`.
231+
232+
- [**`secret_scanning`**](#attr-security_and_analysis-secret_scanning): *(**Required** `string`)*<a name="attr-security_and_analysis-secret_scanning"></a>
233+
234+
The secret scanning configuration for the repository. See [Secret Scanning Configuration](#secret-scanning-configuration) below for details.
235+
236+
Default is `"disabled"`.
237+
238+
- [**`secret_scanning_push_protection`**](#attr-security_and_analysis-secret_scanning_push_protection): *(**Required** `string`)*<a name="attr-security_and_analysis-secret_scanning_push_protection"></a>
239+
240+
The secret scanning push protection configuration for the repository. See [Secret Scanning Push Protection Configuration](#secret-scanning-push-protection-configuration) below for details.
241+
242+
Default is `"disabled"`.
243+
213244
## External Documentation
214245

215246
### Terraform Github Provider Documentation

main.tf

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,22 @@ resource "github_repository" "repository" {
153153
}
154154
}
155155

156+
dynamic "security_and_analysis" {
157+
for_each = var.security_and_analysis != null ? [true] : []
158+
159+
content {
160+
advanced_security {
161+
status = var.security_and_analysis.advanced_security
162+
}
163+
secret_scanning {
164+
status = var.security_and_analysis.secret_scanning
165+
}
166+
secret_scanning_push_protection {
167+
status = var.security_and_analysis.secret_scanning_push_protection
168+
}
169+
}
170+
}
171+
156172
lifecycle {
157173
ignore_changes = [
158174
auto_init,

variables.tf

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,27 @@ variable "branch_protections_v4" {
398398
}
399399
}
400400

401+
variable "security_and_analysis" {
402+
description = "(Optional) Security and analysis configuration block"
403+
type = object({
404+
advanced_security = optional(string, "disabled")
405+
secret_scanning = optional(string, "disabled")
406+
secret_scanning_push_protection = optional(string, "disabled")
407+
})
408+
default = {}
409+
validation {
410+
condition = alltrue(
411+
[
412+
for key, value in var.security_and_analysis : contains(["enabled", "disabled"], value)
413+
]
414+
)
415+
error_message = <<EOF
416+
Allowed values for security_and_analysis.advanced_security, security_and_analysis.secret_scanning,
417+
security_and_analysis.secret_scanning_push_protection are "disabled" and "enabled"
418+
EOF
419+
}
420+
}
421+
401422
variable "issue_labels_merge_with_github_labels" {
402423
description = "(Optional) Specify if you want to merge and control githubs default set of issue labels."
403424
type = bool

0 commit comments

Comments
 (0)