Skip to content

Commit 8df8d10

Browse files
spriorielloclaude
andcommitted
fix: upgrade go-github v84, address remaining PR integrations#3143 review feedback
- Upgrade go-github imports from v83 to v84 across all feature files - Remove secret_scanning_delegated_bypass from enterprise resource (org-only API) - Fix reviewer_type enum casing to TEAM/ROLE to match GitHub API - Wire expandSecretScanningDelegatedBypass into org Create/Update - Remove hardcoded "disabled" defaults for code_security/secret_protection - Use GetOk for description field in expand (consistency with other Optional fields) - Add unit tests for all flatten utility functions (deiga requested) - Add missing ImportState steps to acceptance tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 20f4c17 commit 8df8d10

8 files changed

Lines changed: 181 additions & 117 deletions

github/resource_github_enterprise_security_configuration.go

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"net/http"
88
"strconv"
99

10-
"github.com/google/go-github/v83/github"
10+
"github.com/google/go-github/v84/github"
1111
"github.com/hashicorp/terraform-plugin-log/tflog"
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1313
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -192,45 +192,6 @@ func resourceGithubEnterpriseSecurityConfiguration() *schema.Resource {
192192
"enabled", "disabled", "not_set",
193193
}, false)),
194194
},
195-
"secret_scanning_delegated_bypass": {
196-
Type: schema.TypeString,
197-
Optional: true,
198-
Computed: true,
199-
Description: "The secret scanning delegated bypass configuration for the code security configuration. Can be one of 'enabled', 'disabled', 'not_set'.",
200-
ValidateDiagFunc: validation.ToDiagFunc(validation.StringInSlice([]string{
201-
"enabled", "disabled", "not_set",
202-
}, false)),
203-
},
204-
"secret_scanning_delegated_bypass_options": {
205-
Type: schema.TypeList,
206-
Optional: true,
207-
MaxItems: 1,
208-
Description: "The secret scanning delegated bypass options for the code security configuration.",
209-
Elem: &schema.Resource{
210-
Schema: map[string]*schema.Schema{
211-
"reviewers": {
212-
Type: schema.TypeList,
213-
Optional: true,
214-
Description: "The bypass reviewers for the secret scanning delegated bypass.",
215-
Elem: &schema.Resource{
216-
Schema: map[string]*schema.Schema{
217-
"reviewer_id": {
218-
Type: schema.TypeInt,
219-
Required: true,
220-
Description: "The ID of the bypass reviewer.",
221-
},
222-
"reviewer_type": {
223-
Type: schema.TypeString,
224-
Required: true,
225-
Description: "The type of the bypass reviewer. Can be one of 'Team', 'Role'.",
226-
ValidateDiagFunc: validation.ToDiagFunc(validation.StringInSlice([]string{"Team", "Role"}, false)),
227-
},
228-
},
229-
},
230-
},
231-
},
232-
},
233-
},
234195
"secret_scanning_validity_checks": {
235196
Type: schema.TypeString,
236197
Optional: true,

github/resource_github_enterprise_security_configuration_test.go

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -174,45 +174,13 @@ func TestAccGithubEnterpriseSecurityConfiguration(t *testing.T) {
174174
tfjsonpath.New("target_type"), knownvalue.NotNull()),
175175
},
176176
},
177-
},
178-
})
179-
})
180-
181-
t.Run("creates enterprise security configuration with delegated bypass options", func(t *testing.T) {
182-
randomID := acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum)
183-
configName := fmt.Sprintf("test-config-bypass-%s", randomID)
184-
185-
config := fmt.Sprintf(`
186-
resource "github_enterprise_security_configuration" "test" {
187-
enterprise_slug = "%s"
188-
name = "%s"
189-
description = "Test configuration with delegated bypass"
190-
advanced_security = "enabled"
191-
secret_scanning = "enabled"
192-
secret_scanning_push_protection = "enabled"
193-
secret_scanning_delegated_bypass = "enabled"
194-
secret_scanning_delegated_bypass_options {
195-
reviewers {
196-
reviewer_id = 1
197-
reviewer_type = "Team"
198-
}
199-
}
200-
}`, testAccConf.enterpriseSlug, configName)
201-
202-
resource.Test(t, resource.TestCase{
203-
PreCheck: func() { skipUnlessEnterprise(t) },
204-
ProviderFactories: providerFactories,
205-
Steps: []resource.TestStep{
206177
{
207-
Config: config,
208-
ConfigStateChecks: []statecheck.StateCheck{
209-
statecheck.ExpectKnownValue("github_enterprise_security_configuration.test",
210-
tfjsonpath.New("secret_scanning_delegated_bypass"), knownvalue.StringExact("enabled")),
211-
statecheck.ExpectKnownValue("github_enterprise_security_configuration.test",
212-
tfjsonpath.New("secret_scanning_delegated_bypass_options").AtSliceIndex(0).AtMapKey("reviewers").AtSliceIndex(0).AtMapKey("reviewer_type"), knownvalue.StringExact("Team")),
213-
},
178+
ResourceName: "github_enterprise_security_configuration.test",
179+
ImportState: true,
180+
ImportStateVerify: true,
214181
},
215182
},
216183
})
217184
})
185+
218186
}

github/resource_github_organization_security_configuration.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"net/http"
77
"strconv"
88

9-
"github.com/google/go-github/v83/github"
9+
"github.com/google/go-github/v84/github"
1010
"github.com/hashicorp/terraform-plugin-log/tflog"
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -215,8 +215,8 @@ func resourceGithubOrganizationSecurityConfiguration() *schema.Resource {
215215
"reviewer_type": {
216216
Type: schema.TypeString,
217217
Required: true,
218-
Description: "The type of the bypass reviewer. Can be one of 'Team', 'Role'.",
219-
ValidateDiagFunc: validation.ToDiagFunc(validation.StringInSlice([]string{"Team", "Role"}, false)),
218+
Description: "The type of the bypass reviewer. Can be one of 'TEAM', 'ROLE'.",
219+
ValidateDiagFunc: validation.ToDiagFunc(validation.StringInSlice([]string{"TEAM", "ROLE"}, false)),
220220
},
221221
},
222222
},
@@ -311,6 +311,7 @@ func resourceGithubOrganizationSecurityConfigurationCreate(ctx context.Context,
311311
})
312312

313313
config := expandCodeSecurityConfigurationCommon(d)
314+
expandSecretScanningDelegatedBypass(d, &config)
314315

315316
configuration, _, err := client.Organizations.CreateCodeSecurityConfiguration(ctx, org, config)
316317
if err != nil {
@@ -383,6 +384,12 @@ func resourceGithubOrganizationSecurityConfigurationRead(ctx context.Context, d
383384
if diags := setCodeSecurityConfigurationState(d, configuration); diags != nil {
384385
return diags
385386
}
387+
if err = d.Set("secret_scanning_delegated_bypass", configuration.GetSecretScanningDelegatedBypass()); err != nil {
388+
return diag.FromErr(err)
389+
}
390+
if err = d.Set("secret_scanning_delegated_bypass_options", flattenSecretScanningDelegatedBypassOptions(configuration.SecretScanningDelegatedBypassOptions)); err != nil {
391+
return diag.FromErr(err)
392+
}
386393

387394
tflog.Trace(ctx, "Successfully read organization code security configuration", map[string]any{
388395
"organization": org,
@@ -407,6 +414,7 @@ func resourceGithubOrganizationSecurityConfigurationUpdate(ctx context.Context,
407414
})
408415

409416
config := expandCodeSecurityConfigurationCommon(d)
417+
expandSecretScanningDelegatedBypass(d, &config)
410418

411419
_, _, err = client.Organizations.UpdateCodeSecurityConfiguration(ctx, org, id, config)
412420
if err != nil {

github/resource_github_organization_security_configuration_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ func TestAccGithubOrganizationSecurityConfiguration(t *testing.T) {
195195
secret_scanning_delegated_bypass_options {
196196
reviewers {
197197
reviewer_id = 1
198-
reviewer_type = "Team"
198+
reviewer_type = "TEAM"
199199
}
200200
}
201201
}`, configName)
@@ -210,9 +210,14 @@ func TestAccGithubOrganizationSecurityConfiguration(t *testing.T) {
210210
statecheck.ExpectKnownValue("github_organization_security_configuration.test",
211211
tfjsonpath.New("secret_scanning_delegated_bypass"), knownvalue.StringExact("enabled")),
212212
statecheck.ExpectKnownValue("github_organization_security_configuration.test",
213-
tfjsonpath.New("secret_scanning_delegated_bypass_options").AtSliceIndex(0).AtMapKey("reviewers").AtSliceIndex(0).AtMapKey("reviewer_type"), knownvalue.StringExact("Team")),
213+
tfjsonpath.New("secret_scanning_delegated_bypass_options").AtSliceIndex(0).AtMapKey("reviewers").AtSliceIndex(0).AtMapKey("reviewer_type"), knownvalue.StringExact("TEAM")),
214214
},
215215
},
216+
{
217+
ResourceName: "github_organization_security_configuration.test",
218+
ImportState: true,
219+
ImportStateVerify: true,
220+
},
216221
},
217222
})
218223
})

github/util_security_configuration.go

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package github
22

33
import (
4-
"github.com/google/go-github/v83/github"
4+
"github.com/google/go-github/v84/github"
55
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
66
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
77
)
@@ -106,11 +106,7 @@ func setCodeSecurityConfigurationState(d *schema.ResourceData, configuration *gi
106106
if err := d.Set("code_scanning_options", flattenCodeScanningOptions(configuration.CodeScanningOptions)); err != nil {
107107
return diag.FromErr(err)
108108
}
109-
codeSec := configuration.GetCodeSecurity()
110-
if codeSec == "" {
111-
codeSec = "disabled"
112-
}
113-
if err := d.Set("code_security", codeSec); err != nil {
109+
if err := d.Set("code_security", configuration.GetCodeSecurity()); err != nil {
114110
return diag.FromErr(err)
115111
}
116112
if err := d.Set("secret_scanning", configuration.GetSecretScanning()); err != nil {
@@ -119,12 +115,6 @@ func setCodeSecurityConfigurationState(d *schema.ResourceData, configuration *gi
119115
if err := d.Set("secret_scanning_push_protection", configuration.GetSecretScanningPushProtection()); err != nil {
120116
return diag.FromErr(err)
121117
}
122-
if err := d.Set("secret_scanning_delegated_bypass", configuration.GetSecretScanningDelegatedBypass()); err != nil {
123-
return diag.FromErr(err)
124-
}
125-
if err := d.Set("secret_scanning_delegated_bypass_options", flattenSecretScanningDelegatedBypassOptions(configuration.SecretScanningDelegatedBypassOptions)); err != nil {
126-
return diag.FromErr(err)
127-
}
128118
if err := d.Set("secret_scanning_validity_checks", configuration.GetSecretScanningValidityChecks()); err != nil {
129119
return diag.FromErr(err)
130120
}
@@ -137,11 +127,7 @@ func setCodeSecurityConfigurationState(d *schema.ResourceData, configuration *gi
137127
if err := d.Set("secret_scanning_delegated_alert_dismissal", configuration.GetSecretScanningDelegatedAlertDismissal()); err != nil {
138128
return diag.FromErr(err)
139129
}
140-
secretProt := configuration.GetSecretProtection()
141-
if secretProt == "" {
142-
secretProt = "disabled"
143-
}
144-
if err := d.Set("secret_protection", secretProt); err != nil {
130+
if err := d.Set("secret_protection", configuration.GetSecretProtection()); err != nil {
145131
return diag.FromErr(err)
146132
}
147133
if err := d.Set("private_vulnerability_reporting", configuration.GetPrivateVulnerabilityReporting()); err != nil {
@@ -160,8 +146,10 @@ func setCodeSecurityConfigurationState(d *schema.ResourceData, configuration *gi
160146
// Used by both the organization and enterprise security configuration resources.
161147
func expandCodeSecurityConfigurationCommon(d *schema.ResourceData) github.CodeSecurityConfiguration {
162148
config := github.CodeSecurityConfiguration{
163-
Name: d.Get("name").(string),
164-
Description: d.Get("description").(string),
149+
Name: d.Get("name").(string),
150+
}
151+
if val, ok := d.GetOk("description"); ok {
152+
config.Description = val.(string)
165153
}
166154

167155
if val, ok := d.GetOk("advanced_security"); ok {
@@ -194,9 +182,6 @@ func expandCodeSecurityConfigurationCommon(d *schema.ResourceData) github.CodeSe
194182
if val, ok := d.GetOk("secret_scanning_push_protection"); ok {
195183
config.SecretScanningPushProtection = github.Ptr(val.(string))
196184
}
197-
if val, ok := d.GetOk("secret_scanning_delegated_bypass"); ok {
198-
config.SecretScanningDelegatedBypass = github.Ptr(val.(string))
199-
}
200185
if val, ok := d.GetOk("secret_scanning_validity_checks"); ok {
201186
config.SecretScanningValidityChecks = github.Ptr(val.(string))
202187
}
@@ -252,6 +237,15 @@ func expandCodeSecurityConfigurationCommon(d *schema.ResourceData) github.CodeSe
252237
}
253238
}
254239

240+
return config
241+
}
242+
243+
// expandSecretScanningDelegatedBypass adds secret_scanning_delegated_bypass fields to a CodeSecurityConfiguration.
244+
// These fields are only supported by the organization API, not the enterprise API.
245+
func expandSecretScanningDelegatedBypass(d *schema.ResourceData, config *github.CodeSecurityConfiguration) {
246+
if val, ok := d.GetOk("secret_scanning_delegated_bypass"); ok {
247+
config.SecretScanningDelegatedBypass = github.Ptr(val.(string))
248+
}
255249
if val, ok := d.GetOk("secret_scanning_delegated_bypass_options"); ok {
256250
optionsList := val.([]any)
257251
if len(optionsList) > 0 {
@@ -272,6 +266,4 @@ func expandCodeSecurityConfigurationCommon(d *schema.ResourceData) github.CodeSe
272266
config.SecretScanningDelegatedBypassOptions = options
273267
}
274268
}
275-
276-
return config
277269
}

0 commit comments

Comments
 (0)