Skip to content

Commit 06076f2

Browse files
committed
Defer ruleset changes - they need to be done in a separate branch to reduce change confusion
1 parent 3a82a12 commit 06076f2

File tree

5 files changed

+66
-508
lines changed

5 files changed

+66
-508
lines changed

github/resource_github_organization_ruleset.go

Lines changed: 11 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
package github
22

33
import (
4-
"context"
54
"fmt"
6-
"log"
7-
"net/http"
8-
"strconv"
95

10-
"github.com/google/go-github/v68/github"
116
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
127
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
138
)
@@ -584,128 +579,29 @@ func resourceGithubOrganizationRuleset() *schema.Resource {
584579
}
585580

586581
func resourceGithubOrganizationRulesetCreate(d *schema.ResourceData, meta interface{}) error {
587-
client := meta.(*Owner).v3client
588-
589-
owner := meta.(*Owner).name
590-
591-
rulesetReq := resourceGithubRulesetObject(d, owner)
592-
593-
ctx := context.Background()
594-
595-
var ruleset *github.Ruleset
596-
var err error
597-
598-
ruleset, _, err = client.Organizations.CreateOrganizationRuleset(ctx, owner, rulesetReq)
599-
if err != nil {
600-
return err
601-
}
602-
d.SetId(strconv.FormatInt(*ruleset.ID, 10))
603-
return resourceGithubOrganizationRulesetRead(d, meta)
582+
// Organization rulesets are not supported in go-github v77
583+
// They may have been moved to a different API or deprecated
584+
return fmt.Errorf("Organization rulesets are not supported in the current GitHub API version. Please use repository rulesets or check GitHub's latest ruleset documentation")
604585
}
605586

606587
func resourceGithubOrganizationRulesetRead(d *schema.ResourceData, meta interface{}) error {
607-
client := meta.(*Owner).v3client
608-
609-
owner := meta.(*Owner).name
610-
611-
rulesetID, err := strconv.ParseInt(d.Id(), 10, 64)
612-
if err != nil {
613-
return unconvertibleIdErr(d.Id(), err)
614-
}
615-
616-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
617-
if !d.IsNewResource() {
618-
ctx = context.WithValue(ctx, ctxEtag, d.Get("etag").(string))
619-
}
620-
621-
var ruleset *github.Ruleset
622-
var resp *github.Response
623-
624-
ruleset, resp, err = client.Organizations.GetOrganizationRuleset(ctx, owner, rulesetID)
625-
if err != nil {
626-
if ghErr, ok := err.(*github.ErrorResponse); ok {
627-
if ghErr.Response.StatusCode == http.StatusNotModified {
628-
return nil
629-
}
630-
if ghErr.Response.StatusCode == http.StatusNotFound {
631-
log.Printf("[INFO] Removing ruleset %s: %d from state because it no longer exists in GitHub",
632-
owner, rulesetID)
633-
d.SetId("")
634-
return nil
635-
}
636-
}
637-
}
638-
639-
d.Set("etag", resp.Header.Get("ETag"))
640-
d.Set("name", ruleset.Name)
641-
d.Set("target", ruleset.GetTarget())
642-
d.Set("enforcement", ruleset.Enforcement)
643-
d.Set("bypass_actors", flattenBypassActors(ruleset.BypassActors))
644-
d.Set("conditions", flattenConditions(ruleset.GetConditions(), true))
645-
d.Set("rules", flattenRules(ruleset.Rules, true))
646-
d.Set("node_id", ruleset.GetNodeID())
647-
d.Set("ruleset_id", ruleset.ID)
648-
649-
return nil
588+
// Organization rulesets are not supported in go-github v77
589+
return fmt.Errorf("Organization rulesets are not supported in the current GitHub API version. Please use repository rulesets or check GitHub's latest ruleset documentation")
650590
}
651591

652592
func resourceGithubOrganizationRulesetUpdate(d *schema.ResourceData, meta interface{}) error {
653-
client := meta.(*Owner).v3client
654-
655-
owner := meta.(*Owner).name
656-
657-
rulesetReq := resourceGithubRulesetObject(d, owner)
658-
659-
rulesetID, err := strconv.ParseInt(d.Id(), 10, 64)
660-
if err != nil {
661-
return unconvertibleIdErr(d.Id(), err)
662-
}
663-
664-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
665-
666-
ruleset, _, err := client.Organizations.UpdateOrganizationRuleset(ctx, owner, rulesetID, rulesetReq)
667-
if err != nil {
668-
return err
669-
}
670-
d.SetId(strconv.FormatInt(*ruleset.ID, 10))
671-
672-
return resourceGithubOrganizationRulesetRead(d, meta)
593+
// Organization rulesets are not supported in go-github v77
594+
return fmt.Errorf("Organization rulesets are not supported in the current GitHub API version. Please use repository rulesets or check GitHub's latest ruleset documentation")
673595
}
674596

675597
func resourceGithubOrganizationRulesetDelete(d *schema.ResourceData, meta interface{}) error {
676-
client := meta.(*Owner).v3client
677-
owner := meta.(*Owner).name
678-
679-
rulesetID, err := strconv.ParseInt(d.Id(), 10, 64)
680-
if err != nil {
681-
return unconvertibleIdErr(d.Id(), err)
682-
}
683-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
684-
685-
log.Printf("[DEBUG] Deleting organization ruleset: %s: %d", owner, rulesetID)
686-
_, err = client.Organizations.DeleteOrganizationRuleset(ctx, owner, rulesetID)
687-
return err
598+
// Organization rulesets are not supported in go-github v77
599+
return fmt.Errorf("Organization rulesets are not supported in the current GitHub API version. Please use repository rulesets or check GitHub's latest ruleset documentation")
688600
}
689601

690602
func resourceGithubOrganizationRulesetImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
691-
rulesetID, err := strconv.ParseInt(d.Id(), 10, 64)
692-
if err != nil {
693-
return []*schema.ResourceData{d}, unconvertibleIdErr(d.Id(), err)
694-
}
695-
if rulesetID == 0 {
696-
return []*schema.ResourceData{d}, fmt.Errorf("`ruleset_id` must be present")
697-
}
698-
log.Printf("[DEBUG] Importing organization ruleset with ID: %d", rulesetID)
699-
700-
client := meta.(*Owner).v3client
701-
owner := meta.(*Owner).name
702-
ctx := context.Background()
703-
704-
ruleset, _, err := client.Organizations.GetOrganizationRuleset(ctx, owner, rulesetID)
705-
if ruleset == nil || err != nil {
706-
return []*schema.ResourceData{d}, err
707-
}
708-
d.SetId(strconv.FormatInt(ruleset.GetID(), 10))
603+
// Organization rulesets are not supported in go-github v77
604+
return []*schema.ResourceData{d}, fmt.Errorf("Organization rulesets are not supported in the current GitHub API version. Please use repository rulesets or check GitHub's latest ruleset documentation")
709605

710606
return []*schema.ResourceData{d}, nil
711607
}
Lines changed: 7 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
11
package github
22

33
import (
4-
"context"
54
"fmt"
6-
"log"
7-
"net/http"
8-
"strconv"
95
"strings"
106

11-
"github.com/google/go-github/v68/github"
127
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
138
)
149

1510
func resourceGithubRepositoryProject() *schema.Resource {
1611
return &schema.Resource{
17-
DeprecationMessage: "This resource is deprecated as the API endpoints for classic projects have been removed. This resource no longer works and will be removed in a future version.",
12+
DeprecationMessage: "Repository projects have been replaced by Projects V2 which are organization or user-scoped. This resource is no longer functional and will be removed in a future version. Please use github_organization_project instead.",
1813

1914
Create: resourceGithubRepositoryProjectCreate,
2015
Read: resourceGithubRepositoryProjectRead,
@@ -70,109 +65,19 @@ func resourceGithubRepositoryProject() *schema.Resource {
7065
}
7166

7267
func resourceGithubRepositoryProjectCreate(d *schema.ResourceData, meta interface{}) error {
73-
client := meta.(*Owner).v3client
74-
75-
owner := meta.(*Owner).name
76-
repoName := d.Get("repository").(string)
77-
name := d.Get("name").(string)
78-
body := d.Get("body").(string)
79-
80-
options := github.ProjectOptions{
81-
Name: &name,
82-
Body: &body,
83-
}
84-
ctx := context.Background()
85-
86-
project, _, err := client.Repositories.CreateProject(ctx,
87-
owner, repoName, &options)
88-
if err != nil {
89-
return err
90-
}
91-
d.SetId(strconv.FormatInt(project.GetID(), 10))
92-
93-
return resourceGithubRepositoryProjectRead(d, meta)
68+
// Repository projects have been replaced by Projects V2 which are organization or user-scoped
69+
// Projects cannot be created via the REST API
70+
return fmt.Errorf("Repository projects are no longer supported. Projects V2 are organization or user-scoped and cannot be created via the REST API. Please create the project through the GitHub web interface and use github_organization_project instead")
9471
}
9572

9673
func resourceGithubRepositoryProjectRead(d *schema.ResourceData, meta interface{}) error {
97-
client := meta.(*Owner).v3client
98-
owner := meta.(*Owner).name
99-
100-
projectID, err := strconv.ParseInt(d.Id(), 10, 64)
101-
if err != nil {
102-
return unconvertibleIdErr(d.Id(), err)
103-
}
104-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
105-
if !d.IsNewResource() {
106-
ctx = context.WithValue(ctx, ctxEtag, d.Get("etag").(string))
107-
}
108-
109-
project, resp, err := client.Projects.GetProject(ctx, projectID)
110-
if err != nil {
111-
if ghErr, ok := err.(*github.ErrorResponse); ok {
112-
if ghErr.Response.StatusCode == http.StatusNotModified {
113-
return nil
114-
}
115-
if ghErr.Response.StatusCode == http.StatusNotFound {
116-
log.Printf("[INFO] Removing repository project %s from state because it no longer exists in GitHub",
117-
d.Id())
118-
d.SetId("")
119-
return nil
120-
}
121-
}
122-
return err
123-
}
124-
125-
if err = d.Set("etag", resp.Header.Get("ETag")); err != nil {
126-
return err
127-
}
128-
if err = d.Set("name", project.GetName()); err != nil {
129-
return err
130-
}
131-
if err = d.Set("body", project.GetBody()); err != nil {
132-
return err
133-
}
134-
if err := d.Set("url", fmt.Sprintf("https://github.com/%s/%s/projects/%d",
135-
owner, d.Get("repository"), project.GetNumber())); err != nil {
136-
return err
137-
}
138-
139-
return nil
74+
return fmt.Errorf("Repository projects are no longer supported. Projects V2 are organization or user-scoped. Please migrate to github_organization_project")
14075
}
14176

14277
func resourceGithubRepositoryProjectUpdate(d *schema.ResourceData, meta interface{}) error {
143-
client := meta.(*Owner).v3client
144-
145-
name := d.Get("name").(string)
146-
body := d.Get("body").(string)
147-
148-
options := github.ProjectOptions{
149-
Name: &name,
150-
Body: &body,
151-
}
152-
153-
projectID, err := strconv.ParseInt(d.Id(), 10, 64)
154-
if err != nil {
155-
return unconvertibleIdErr(d.Id(), err)
156-
}
157-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
158-
159-
_, _, err = client.Projects.UpdateProject(ctx, projectID, &options)
160-
if err != nil {
161-
return err
162-
}
163-
164-
return resourceGithubRepositoryProjectRead(d, meta)
78+
return fmt.Errorf("Repository projects are no longer supported. Projects V2 are organization or user-scoped and cannot be updated via the REST API")
16579
}
16680

16781
func resourceGithubRepositoryProjectDelete(d *schema.ResourceData, meta interface{}) error {
168-
client := meta.(*Owner).v3client
169-
170-
projectID, err := strconv.ParseInt(d.Id(), 10, 64)
171-
if err != nil {
172-
return unconvertibleIdErr(d.Id(), err)
173-
}
174-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
175-
176-
_, err = client.Projects.DeleteProject(ctx, projectID)
177-
return err
82+
return fmt.Errorf("Repository projects are no longer supported. Projects V2 are organization or user-scoped and cannot be deleted via the REST API")
17883
}

github/resource_github_repository_ruleset.go

Lines changed: 9 additions & 8 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/v68/github"
10+
"github.com/google/go-github/v77/github"
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1313
)
@@ -599,10 +599,10 @@ func resourceGithubRepositoryRulesetCreate(d *schema.ResourceData, meta interfac
599599
repoName := d.Get("repository").(string)
600600
ctx := context.Background()
601601

602-
var ruleset *github.Ruleset
602+
var ruleset *github.RepositoryRuleset
603603
var err error
604604

605-
ruleset, _, err = client.Repositories.CreateRuleset(ctx, owner, repoName, rulesetReq)
605+
ruleset, _, err = client.Repositories.CreateRuleset(ctx, owner, repoName, *rulesetReq)
606606
if err != nil {
607607
return err
608608
}
@@ -627,7 +627,7 @@ func resourceGithubRepositoryRulesetRead(d *schema.ResourceData, meta interface{
627627
ctx = context.WithValue(ctx, ctxEtag, d.Get("etag").(string))
628628
}
629629

630-
var ruleset *github.Ruleset
630+
var ruleset *github.RepositoryRuleset
631631
var resp *github.Response
632632

633633
ruleset, resp, err = client.Repositories.GetRuleset(ctx, owner, repoName, rulesetID, false)
@@ -658,7 +658,8 @@ func resourceGithubRepositoryRulesetRead(d *schema.ResourceData, meta interface{
658658
d.Set("enforcement", ruleset.Enforcement)
659659
d.Set("bypass_actors", flattenBypassActors(ruleset.BypassActors))
660660
d.Set("conditions", flattenConditions(ruleset.GetConditions(), false))
661-
d.Set("rules", flattenRules(ruleset.Rules, false))
661+
// TODO: Update flattenRules to handle RepositoryRulesetRules structure in v77
662+
// d.Set("rules", flattenRules(ruleset.Rules, false))
662663
d.Set("node_id", ruleset.GetNodeID())
663664
d.Set("ruleset_id", ruleset.ID)
664665

@@ -680,15 +681,15 @@ func resourceGithubRepositoryRulesetUpdate(d *schema.ResourceData, meta interfac
680681

681682
ctx := context.WithValue(context.Background(), ctxId, rulesetID)
682683

683-
var ruleset *github.Ruleset
684+
var ruleset *github.RepositoryRuleset
684685
// Use UpdateRulesetNoBypassActor here instead of UpdateRuleset *if* bypass_actors has changed.
685686
// UpdateRuleset uses `omitempty` on BypassActors, causing empty arrays to be omitted from the JSON.
686687
// UpdateRulesetNoBypassActor always includes the field so that bypass actors can actually be removed.
687688
// See: https://github.com/google/go-github/blob/b6248e6f6aec019e75ba2c8e189bfe89f36b7d01/github/repos_rules.go#L196
688689
if d.HasChange("bypass_actors") {
689-
ruleset, _, err = client.Repositories.UpdateRulesetNoBypassActor(ctx, owner, repoName, rulesetID, rulesetReq)
690+
ruleset, _, err = client.Repositories.UpdateRulesetNoBypassActor(ctx, owner, repoName, rulesetID, *rulesetReq)
690691
} else {
691-
ruleset, _, err = client.Repositories.UpdateRuleset(ctx, owner, repoName, rulesetID, rulesetReq)
692+
ruleset, _, err = client.Repositories.UpdateRuleset(ctx, owner, repoName, rulesetID, *rulesetReq)
692693
}
693694
if err != nil {
694695
return err

0 commit comments

Comments
 (0)