Skip to content

Commit cb73bdb

Browse files
committed
refactor(enterprise_ruleset): streamline ruleset target types and improve import handling
1 parent 08cc9aa commit cb73bdb

1 file changed

Lines changed: 36 additions & 58 deletions

File tree

github/resource_github_enterprise_ruleset.go

Lines changed: 36 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"fmt"
77
"net/http"
88
"strconv"
9-
"strings"
109

1110
"github.com/google/go-github/v82/github"
1211
"github.com/hashicorp/terraform-plugin-log/tflog"
@@ -15,13 +14,6 @@ import (
1514
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1615
)
1716

18-
var supportedEnterpriseRulesetTargetTypes = []string{
19-
string(github.RulesetTargetBranch),
20-
string(github.RulesetTargetTag),
21-
string(github.RulesetTargetPush),
22-
string(github.RulesetTargetRepository),
23-
}
24-
2517
func resourceGithubEnterpriseRuleset() *schema.Resource {
2618
return &schema.Resource{
2719
Description: "Manages GitHub enterprise rulesets",
@@ -54,7 +46,7 @@ func resourceGithubEnterpriseRuleset() *schema.Resource {
5446
Type: schema.TypeString,
5547
Required: true,
5648
ValidateDiagFunc: validation.ToDiagFunc(validation.StringInSlice(supportedEnterpriseRulesetTargetTypes, false)),
57-
Description: "Possible values are " + strings.Join(supportedEnterpriseRulesetTargetTypes[:len(supportedEnterpriseRulesetTargetTypes)-1], ", ") + " and " + supportedEnterpriseRulesetTargetTypes[len(supportedEnterpriseRulesetTargetTypes)-1] + ". Note: The `repository` target is in preview and is subject to change.",
49+
Description: "Possible values are `branch`, `tag`, `push` and `repository`. Note: The `repository` target is in preview and is subject to change.",
5850
},
5951
"enforcement": {
6052
Type: schema.TypeString,
@@ -797,25 +789,6 @@ func resourceGithubEnterpriseRuleset() *schema.Resource {
797789
}
798790
}
799791

800-
// resourceGithubEnterpriseRulesetObject creates a GitHub RepositoryRuleset object for enterprise-level rulesets
801-
func resourceGithubEnterpriseRulesetObject(d *schema.ResourceData) github.RepositoryRuleset {
802-
enterpriseSlug := d.Get("enterprise_slug").(string)
803-
target := github.RulesetTarget(d.Get("target").(string))
804-
enforcement := github.RulesetEnforcement(d.Get("enforcement").(string))
805-
sourceTypeEnum := github.RulesetSourceType("Enterprise")
806-
807-
return github.RepositoryRuleset{
808-
Name: d.Get("name").(string),
809-
Target: &target,
810-
Source: enterpriseSlug,
811-
SourceType: &sourceTypeEnum,
812-
Enforcement: enforcement,
813-
BypassActors: expandBypassActors(d.Get("bypass_actors").([]any)),
814-
Conditions: expandConditions(d.Get("conditions").([]any), true),
815-
Rules: expandRules(d.Get("rules").([]any), true),
816-
}
817-
}
818-
819792
func resourceGithubEnterpriseRulesetCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
820793
client := meta.(*Owner).v3client
821794
enterpriseSlug := d.Get("enterprise_slug").(string)
@@ -946,16 +919,7 @@ func resourceGithubEnterpriseRulesetUpdate(ctx context.Context, d *schema.Resour
946919
client := meta.(*Owner).v3client
947920
enterpriseSlug := d.Get("enterprise_slug").(string)
948921
name := d.Get("name").(string)
949-
950-
rulesetID, err := strconv.ParseInt(d.Id(), 10, 64)
951-
if err != nil {
952-
tflog.Error(ctx, "Could not convert ruleset ID to int64", map[string]any{
953-
"enterprise_slug": enterpriseSlug,
954-
"ruleset_id": d.Id(),
955-
"error": err.Error(),
956-
})
957-
return diag.FromErr(unconvertibleIdErr(d.Id(), err))
958-
}
922+
rulesetID := int64(d.Get("ruleset_id").(int))
959923

960924
tflog.Debug(ctx, "Updating enterprise ruleset", map[string]any{
961925
"enterprise_slug": enterpriseSlug,
@@ -965,7 +929,7 @@ func resourceGithubEnterpriseRulesetUpdate(ctx context.Context, d *schema.Resour
965929

966930
rulesetReq := resourceGithubEnterpriseRulesetObject(d)
967931

968-
ruleset, resp, err := client.Enterprise.UpdateRepositoryRuleset(ctx, enterpriseSlug, rulesetID, rulesetReq)
932+
_, resp, err := client.Enterprise.UpdateRepositoryRuleset(ctx, enterpriseSlug, rulesetID, rulesetReq)
969933
if err != nil {
970934
tflog.Error(ctx, "Failed to update enterprise ruleset", map[string]any{
971935
"enterprise_slug": enterpriseSlug,
@@ -975,13 +939,6 @@ func resourceGithubEnterpriseRulesetUpdate(ctx context.Context, d *schema.Resour
975939
return diag.FromErr(err)
976940
}
977941

978-
d.SetId(strconv.FormatInt(*ruleset.ID, 10))
979-
if err := d.Set("ruleset_id", ruleset.ID); err != nil {
980-
return diag.FromErr(err)
981-
}
982-
if err := d.Set("node_id", ruleset.GetNodeID()); err != nil {
983-
return diag.FromErr(err)
984-
}
985942
if err := d.Set("etag", resp.Header.Get("ETag")); err != nil {
986943
return diag.FromErr(err)
987944
}
@@ -998,23 +955,14 @@ func resourceGithubEnterpriseRulesetUpdate(ctx context.Context, d *schema.Resour
998955
func resourceGithubEnterpriseRulesetDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
999956
client := meta.(*Owner).v3client
1000957
enterpriseSlug := d.Get("enterprise_slug").(string)
1001-
1002-
rulesetID, err := strconv.ParseInt(d.Id(), 10, 64)
1003-
if err != nil {
1004-
tflog.Error(ctx, "Could not convert ruleset ID to int64", map[string]any{
1005-
"enterprise_slug": enterpriseSlug,
1006-
"ruleset_id": d.Id(),
1007-
"error": err.Error(),
1008-
})
1009-
return diag.FromErr(unconvertibleIdErr(d.Id(), err))
1010-
}
958+
rulesetID := int64(d.Get("ruleset_id").(int))
1011959

1012960
tflog.Debug(ctx, "Deleting enterprise ruleset", map[string]any{
1013961
"enterprise_slug": enterpriseSlug,
1014962
"ruleset_id": rulesetID,
1015963
})
1016964

1017-
_, err = client.Enterprise.DeleteRepositoryRuleset(ctx, enterpriseSlug, rulesetID)
965+
_, err := client.Enterprise.DeleteRepositoryRuleset(ctx, enterpriseSlug, rulesetID)
1018966
if err != nil {
1019967
var ghErr *github.ErrorResponse
1020968
if errors.As(err, &ghErr) && ghErr.Response.StatusCode == http.StatusNotFound {
@@ -1060,7 +1008,12 @@ func resourceGithubEnterpriseRulesetImport(ctx context.Context, d *schema.Resour
10601008
})
10611009

10621010
d.SetId(rulesetIDStr)
1063-
_ = d.Set("enterprise_slug", enterpriseSlug)
1011+
if err := d.Set("enterprise_slug", enterpriseSlug); err != nil {
1012+
return nil, err
1013+
}
1014+
if err := d.Set("ruleset_id", rulesetID); err != nil {
1015+
return nil, err
1016+
}
10641017

10651018
tflog.Info(ctx, "Imported enterprise ruleset", map[string]any{
10661019
"enterprise_slug": enterpriseSlug,
@@ -1070,3 +1023,28 @@ func resourceGithubEnterpriseRulesetImport(ctx context.Context, d *schema.Resour
10701023
return []*schema.ResourceData{d}, nil
10711024
}
10721025

1026+
var supportedEnterpriseRulesetTargetTypes = []string{
1027+
string(github.RulesetTargetBranch),
1028+
string(github.RulesetTargetTag),
1029+
string(github.RulesetTargetPush),
1030+
string(github.RulesetTargetRepository),
1031+
}
1032+
1033+
// resourceGithubEnterpriseRulesetObject creates a GitHub RepositoryRuleset object for enterprise-level rulesets
1034+
func resourceGithubEnterpriseRulesetObject(d *schema.ResourceData) github.RepositoryRuleset {
1035+
enterpriseSlug := d.Get("enterprise_slug").(string)
1036+
target := github.RulesetTarget(d.Get("target").(string))
1037+
enforcement := github.RulesetEnforcement(d.Get("enforcement").(string))
1038+
sourceTypeEnum := github.RulesetSourceType("Enterprise")
1039+
1040+
return github.RepositoryRuleset{
1041+
Name: d.Get("name").(string),
1042+
Target: &target,
1043+
Source: enterpriseSlug,
1044+
SourceType: &sourceTypeEnum,
1045+
Enforcement: enforcement,
1046+
BypassActors: expandBypassActors(d.Get("bypass_actors").([]any)),
1047+
Conditions: expandConditions(d.Get("conditions").([]any), true),
1048+
Rules: expandRules(d.Get("rules").([]any), true),
1049+
}
1050+
}

0 commit comments

Comments
 (0)