Skip to content

Commit 49d5cbf

Browse files
spriorielloclaude
andcommitted
refactor: extract shared setState helper, remove one-liner expand wrappers
- Add setCodeSecurityConfigurationState() to util_security_configuration.go, replacing ~83 identical d.Set() lines duplicated across both Read functions - Remove expandCodeSecurityConfiguration() and expandEnterpriseCodeSecurityConfiguration() one-liner wrappers; callers now call expandCodeSecurityConfigurationCommon() directly Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 01d53d0 commit 49d5cbf

3 files changed

Lines changed: 98 additions & 174 deletions

github/resource_github_enterprise_security_configuration.go

Lines changed: 4 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ func resourceGithubEnterpriseSecurityConfigurationCreate(ctx context.Context, d
308308
"name": name,
309309
})
310310

311-
config := expandEnterpriseCodeSecurityConfiguration(d)
311+
config := expandCodeSecurityConfigurationCommon(d)
312312

313313
configuration, _, err := client.Enterprise.CreateCodeSecurityConfiguration(ctx, enterprise, config)
314314
if err != nil {
@@ -378,88 +378,8 @@ func resourceGithubEnterpriseSecurityConfigurationRead(ctx context.Context, d *s
378378
return diag.FromErr(err)
379379
}
380380

381-
if err = d.Set("name", configuration.Name); err != nil {
382-
return diag.FromErr(err)
383-
}
384-
if err = d.Set("description", configuration.Description); err != nil {
385-
return diag.FromErr(err)
386-
}
387-
if err = d.Set("advanced_security", configuration.GetAdvancedSecurity()); err != nil {
388-
return diag.FromErr(err)
389-
}
390-
if err = d.Set("dependency_graph", configuration.GetDependencyGraph()); err != nil {
391-
return diag.FromErr(err)
392-
}
393-
if err = d.Set("dependency_graph_autosubmit_action", configuration.GetDependencyGraphAutosubmitAction()); err != nil {
394-
return diag.FromErr(err)
395-
}
396-
if err := d.Set("dependency_graph_autosubmit_action_options", flattenDependencyGraphAutosubmitActionOptions(configuration.DependencyGraphAutosubmitActionOptions)); err != nil {
397-
return diag.FromErr(err)
398-
}
399-
if err = d.Set("dependabot_alerts", configuration.GetDependabotAlerts()); err != nil {
400-
return diag.FromErr(err)
401-
}
402-
if err = d.Set("dependabot_security_updates", configuration.GetDependabotSecurityUpdates()); err != nil {
403-
return diag.FromErr(err)
404-
}
405-
if err = d.Set("code_scanning_default_setup", configuration.GetCodeScanningDefaultSetup()); err != nil {
406-
return diag.FromErr(err)
407-
}
408-
if err := d.Set("code_scanning_default_setup_options", flattenCodeScanningDefaultSetupOptions(configuration.CodeScanningDefaultSetupOptions)); err != nil {
409-
return diag.FromErr(err)
410-
}
411-
if err := d.Set("code_scanning_options", flattenCodeScanningOptions(configuration.CodeScanningOptions)); err != nil {
412-
return diag.FromErr(err)
413-
}
414-
if err = d.Set("code_scanning_delegated_alert_dismissal", configuration.GetCodeScanningDelegatedAlertDismissal()); err != nil {
415-
return diag.FromErr(err)
416-
}
417-
codeSec := configuration.GetCodeSecurity()
418-
if codeSec == "" {
419-
codeSec = "disabled"
420-
}
421-
if err = d.Set("code_security", codeSec); err != nil {
422-
return diag.FromErr(err)
423-
}
424-
if err = d.Set("secret_scanning", configuration.GetSecretScanning()); err != nil {
425-
return diag.FromErr(err)
426-
}
427-
if err = d.Set("secret_scanning_push_protection", configuration.GetSecretScanningPushProtection()); err != nil {
428-
return diag.FromErr(err)
429-
}
430-
if err = d.Set("secret_scanning_delegated_bypass", configuration.GetSecretScanningDelegatedBypass()); err != nil {
431-
return diag.FromErr(err)
432-
}
433-
if err := d.Set("secret_scanning_delegated_bypass_options", flattenSecretScanningDelegatedBypassOptions(configuration.SecretScanningDelegatedBypassOptions)); err != nil {
434-
return diag.FromErr(err)
435-
}
436-
if err = d.Set("secret_scanning_validity_checks", configuration.GetSecretScanningValidityChecks()); err != nil {
437-
return diag.FromErr(err)
438-
}
439-
if err = d.Set("secret_scanning_non_provider_patterns", configuration.GetSecretScanningNonProviderPatterns()); err != nil {
440-
return diag.FromErr(err)
441-
}
442-
if err = d.Set("secret_scanning_generic_secrets", configuration.GetSecretScanningGenericSecrets()); err != nil {
443-
return diag.FromErr(err)
444-
}
445-
if err = d.Set("secret_scanning_delegated_alert_dismissal", configuration.GetSecretScanningDelegatedAlertDismissal()); err != nil {
446-
return diag.FromErr(err)
447-
}
448-
secretProt := configuration.GetSecretProtection()
449-
if secretProt == "" {
450-
secretProt = "disabled"
451-
}
452-
if err = d.Set("secret_protection", secretProt); err != nil {
453-
return diag.FromErr(err)
454-
}
455-
if err = d.Set("private_vulnerability_reporting", configuration.GetPrivateVulnerabilityReporting()); err != nil {
456-
return diag.FromErr(err)
457-
}
458-
if err = d.Set("enforcement", configuration.GetEnforcement()); err != nil {
459-
return diag.FromErr(err)
460-
}
461-
if err = d.Set("target_type", configuration.GetTargetType()); err != nil {
462-
return diag.FromErr(err)
381+
if diags := setCodeSecurityConfigurationState(d, configuration); diags != nil {
382+
return diags
463383
}
464384

465385
tflog.Trace(ctx, fmt.Sprintf("Successfully read enterprise code security configuration: %s/%d", enterprise, id), map[string]any{
@@ -488,7 +408,7 @@ func resourceGithubEnterpriseSecurityConfigurationUpdate(ctx context.Context, d
488408
"id": id,
489409
})
490410

491-
config := expandEnterpriseCodeSecurityConfiguration(d)
411+
config := expandCodeSecurityConfigurationCommon(d)
492412

493413
_, _, err = client.Enterprise.UpdateCodeSecurityConfiguration(ctx, enterprise, id, config)
494414
if err != nil {
@@ -571,6 +491,3 @@ func resourceGithubEnterpriseSecurityConfigurationImport(ctx context.Context, d
571491
return []*schema.ResourceData{d}, nil
572492
}
573493

574-
func expandEnterpriseCodeSecurityConfiguration(d *schema.ResourceData) github.CodeSecurityConfiguration {
575-
return expandCodeSecurityConfigurationCommon(d)
576-
}

github/resource_github_organization_security_configuration.go

Lines changed: 4 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ func resourceGithubOrganizationSecurityConfigurationCreate(ctx context.Context,
306306
"name": name,
307307
})
308308

309-
config := expandCodeSecurityConfiguration(d)
309+
config := expandCodeSecurityConfigurationCommon(d)
310310

311311
configuration, _, err := client.Organizations.CreateCodeSecurityConfiguration(ctx, org, config)
312312
if err != nil {
@@ -376,88 +376,8 @@ func resourceGithubOrganizationSecurityConfigurationRead(ctx context.Context, d
376376
return diag.FromErr(err)
377377
}
378378

379-
if err = d.Set("name", configuration.Name); err != nil {
380-
return diag.FromErr(err)
381-
}
382-
if err = d.Set("description", configuration.Description); err != nil {
383-
return diag.FromErr(err)
384-
}
385-
if err = d.Set("advanced_security", configuration.GetAdvancedSecurity()); err != nil {
386-
return diag.FromErr(err)
387-
}
388-
if err = d.Set("dependency_graph", configuration.GetDependencyGraph()); err != nil {
389-
return diag.FromErr(err)
390-
}
391-
if err = d.Set("dependency_graph_autosubmit_action", configuration.GetDependencyGraphAutosubmitAction()); err != nil {
392-
return diag.FromErr(err)
393-
}
394-
if err := d.Set("dependency_graph_autosubmit_action_options", flattenDependencyGraphAutosubmitActionOptions(configuration.DependencyGraphAutosubmitActionOptions)); err != nil {
395-
return diag.FromErr(err)
396-
}
397-
if err = d.Set("dependabot_alerts", configuration.GetDependabotAlerts()); err != nil {
398-
return diag.FromErr(err)
399-
}
400-
if err = d.Set("dependabot_security_updates", configuration.GetDependabotSecurityUpdates()); err != nil {
401-
return diag.FromErr(err)
402-
}
403-
if err = d.Set("code_scanning_default_setup", configuration.GetCodeScanningDefaultSetup()); err != nil {
404-
return diag.FromErr(err)
405-
}
406-
if err := d.Set("code_scanning_default_setup_options", flattenCodeScanningDefaultSetupOptions(configuration.CodeScanningDefaultSetupOptions)); err != nil {
407-
return diag.FromErr(err)
408-
}
409-
if err = d.Set("code_scanning_delegated_alert_dismissal", configuration.GetCodeScanningDelegatedAlertDismissal()); err != nil {
410-
return diag.FromErr(err)
411-
}
412-
if err := d.Set("code_scanning_options", flattenCodeScanningOptions(configuration.CodeScanningOptions)); err != nil {
413-
return diag.FromErr(err)
414-
}
415-
codeSec := configuration.GetCodeSecurity()
416-
if codeSec == "" {
417-
codeSec = "disabled"
418-
}
419-
if err = d.Set("code_security", codeSec); err != nil {
420-
return diag.FromErr(err)
421-
}
422-
if err = d.Set("secret_scanning", configuration.GetSecretScanning()); err != nil {
423-
return diag.FromErr(err)
424-
}
425-
if err = d.Set("secret_scanning_push_protection", configuration.GetSecretScanningPushProtection()); err != nil {
426-
return diag.FromErr(err)
427-
}
428-
if err = d.Set("secret_scanning_delegated_bypass", configuration.GetSecretScanningDelegatedBypass()); err != nil {
429-
return diag.FromErr(err)
430-
}
431-
if err := d.Set("secret_scanning_delegated_bypass_options", flattenSecretScanningDelegatedBypassOptions(configuration.SecretScanningDelegatedBypassOptions)); err != nil {
432-
return diag.FromErr(err)
433-
}
434-
if err = d.Set("secret_scanning_validity_checks", configuration.GetSecretScanningValidityChecks()); err != nil {
435-
return diag.FromErr(err)
436-
}
437-
if err = d.Set("secret_scanning_non_provider_patterns", configuration.GetSecretScanningNonProviderPatterns()); err != nil {
438-
return diag.FromErr(err)
439-
}
440-
if err = d.Set("secret_scanning_generic_secrets", configuration.GetSecretScanningGenericSecrets()); err != nil {
441-
return diag.FromErr(err)
442-
}
443-
if err = d.Set("secret_scanning_delegated_alert_dismissal", configuration.GetSecretScanningDelegatedAlertDismissal()); err != nil {
444-
return diag.FromErr(err)
445-
}
446-
secretProt := configuration.GetSecretProtection()
447-
if secretProt == "" {
448-
secretProt = "disabled"
449-
}
450-
if err = d.Set("secret_protection", secretProt); err != nil {
451-
return diag.FromErr(err)
452-
}
453-
if err = d.Set("private_vulnerability_reporting", configuration.GetPrivateVulnerabilityReporting()); err != nil {
454-
return diag.FromErr(err)
455-
}
456-
if err = d.Set("enforcement", configuration.GetEnforcement()); err != nil {
457-
return diag.FromErr(err)
458-
}
459-
if err = d.Set("target_type", configuration.GetTargetType()); err != nil {
460-
return diag.FromErr(err)
379+
if diags := setCodeSecurityConfigurationState(d, configuration); diags != nil {
380+
return diags
461381
}
462382

463383
tflog.Trace(ctx, fmt.Sprintf("Successfully read organization code security configuration: %s/%d", org, id), map[string]any{
@@ -490,7 +410,7 @@ func resourceGithubOrganizationSecurityConfigurationUpdate(ctx context.Context,
490410
"id": id,
491411
})
492412

493-
config := expandCodeSecurityConfiguration(d)
413+
config := expandCodeSecurityConfigurationCommon(d)
494414

495415
_, _, err = client.Organizations.UpdateCodeSecurityConfiguration(ctx, org, id, config)
496416
if err != nil {
@@ -558,6 +478,3 @@ func resourceGithubOrganizationSecurityConfigurationDelete(ctx context.Context,
558478
return nil
559479
}
560480

561-
func expandCodeSecurityConfiguration(d *schema.ResourceData) github.CodeSecurityConfiguration {
562-
return expandCodeSecurityConfigurationCommon(d)
563-
}

github/util_security_configuration.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package github
22

33
import (
44
"github.com/google/go-github/v83/github"
5+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
56
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
67
)
78

@@ -63,6 +64,95 @@ func flattenSecretScanningDelegatedBypassOptions(options *github.SecretScanningD
6364
return []any{bypassOpts}
6465
}
6566

67+
// setCodeSecurityConfigurationState writes all shared CodeSecurityConfiguration fields to Terraform state.
68+
// Used by both the organization and enterprise security configuration resources.
69+
func setCodeSecurityConfigurationState(d *schema.ResourceData, configuration *github.CodeSecurityConfiguration) diag.Diagnostics {
70+
if err := d.Set("name", configuration.Name); err != nil {
71+
return diag.FromErr(err)
72+
}
73+
if err := d.Set("description", configuration.Description); err != nil {
74+
return diag.FromErr(err)
75+
}
76+
if err := d.Set("advanced_security", configuration.GetAdvancedSecurity()); err != nil {
77+
return diag.FromErr(err)
78+
}
79+
if err := d.Set("dependency_graph", configuration.GetDependencyGraph()); err != nil {
80+
return diag.FromErr(err)
81+
}
82+
if err := d.Set("dependency_graph_autosubmit_action", configuration.GetDependencyGraphAutosubmitAction()); err != nil {
83+
return diag.FromErr(err)
84+
}
85+
if err := d.Set("dependency_graph_autosubmit_action_options", flattenDependencyGraphAutosubmitActionOptions(configuration.DependencyGraphAutosubmitActionOptions)); err != nil {
86+
return diag.FromErr(err)
87+
}
88+
if err := d.Set("dependabot_alerts", configuration.GetDependabotAlerts()); err != nil {
89+
return diag.FromErr(err)
90+
}
91+
if err := d.Set("dependabot_security_updates", configuration.GetDependabotSecurityUpdates()); err != nil {
92+
return diag.FromErr(err)
93+
}
94+
if err := d.Set("code_scanning_default_setup", configuration.GetCodeScanningDefaultSetup()); err != nil {
95+
return diag.FromErr(err)
96+
}
97+
if err := d.Set("code_scanning_default_setup_options", flattenCodeScanningDefaultSetupOptions(configuration.CodeScanningDefaultSetupOptions)); err != nil {
98+
return diag.FromErr(err)
99+
}
100+
if err := d.Set("code_scanning_delegated_alert_dismissal", configuration.GetCodeScanningDelegatedAlertDismissal()); err != nil {
101+
return diag.FromErr(err)
102+
}
103+
if err := d.Set("code_scanning_options", flattenCodeScanningOptions(configuration.CodeScanningOptions)); err != nil {
104+
return diag.FromErr(err)
105+
}
106+
codeSec := configuration.GetCodeSecurity()
107+
if codeSec == "" {
108+
codeSec = "disabled"
109+
}
110+
if err := d.Set("code_security", codeSec); err != nil {
111+
return diag.FromErr(err)
112+
}
113+
if err := d.Set("secret_scanning", configuration.GetSecretScanning()); err != nil {
114+
return diag.FromErr(err)
115+
}
116+
if err := d.Set("secret_scanning_push_protection", configuration.GetSecretScanningPushProtection()); err != nil {
117+
return diag.FromErr(err)
118+
}
119+
if err := d.Set("secret_scanning_delegated_bypass", configuration.GetSecretScanningDelegatedBypass()); err != nil {
120+
return diag.FromErr(err)
121+
}
122+
if err := d.Set("secret_scanning_delegated_bypass_options", flattenSecretScanningDelegatedBypassOptions(configuration.SecretScanningDelegatedBypassOptions)); err != nil {
123+
return diag.FromErr(err)
124+
}
125+
if err := d.Set("secret_scanning_validity_checks", configuration.GetSecretScanningValidityChecks()); err != nil {
126+
return diag.FromErr(err)
127+
}
128+
if err := d.Set("secret_scanning_non_provider_patterns", configuration.GetSecretScanningNonProviderPatterns()); err != nil {
129+
return diag.FromErr(err)
130+
}
131+
if err := d.Set("secret_scanning_generic_secrets", configuration.GetSecretScanningGenericSecrets()); err != nil {
132+
return diag.FromErr(err)
133+
}
134+
if err := d.Set("secret_scanning_delegated_alert_dismissal", configuration.GetSecretScanningDelegatedAlertDismissal()); err != nil {
135+
return diag.FromErr(err)
136+
}
137+
secretProt := configuration.GetSecretProtection()
138+
if secretProt == "" {
139+
secretProt = "disabled"
140+
}
141+
if err := d.Set("secret_protection", secretProt); err != nil {
142+
return diag.FromErr(err)
143+
}
144+
if err := d.Set("private_vulnerability_reporting", configuration.GetPrivateVulnerabilityReporting()); err != nil {
145+
return diag.FromErr(err)
146+
}
147+
if err := d.Set("enforcement", configuration.GetEnforcement()); err != nil {
148+
return diag.FromErr(err)
149+
}
150+
if err := d.Set("target_type", configuration.GetTargetType()); err != nil {
151+
return diag.FromErr(err)
152+
}
153+
return nil
154+
}
155+
66156
// expandCodeSecurityConfigurationCommon builds a CodeSecurityConfiguration from Terraform resource data.
67157
// Used by both the organization and enterprise security configuration resources.
68158
func expandCodeSecurityConfigurationCommon(d *schema.ResourceData) github.CodeSecurityConfiguration {

0 commit comments

Comments
 (0)