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-
2517func 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-
819792func 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
998955func 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