Skip to content

Commit d30648f

Browse files
committed
refactor: migrate resource_github_issue_label to context-aware CRUD and tflog
1 parent e72c809 commit d30648f

1 file changed

Lines changed: 30 additions & 28 deletions

File tree

github/resource_github_issue_label.go

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@ package github
33
import (
44
"context"
55
"errors"
6-
"log"
76
"net/http"
87

98
"github.com/google/go-github/v84/github"
9+
"github.com/hashicorp/terraform-plugin-log/tflog"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1112
)
1213

1314
func resourceGithubIssueLabel() *schema.Resource {
1415
return &schema.Resource{
15-
Create: resourceGithubIssueLabelCreateOrUpdate,
16-
Read: resourceGithubIssueLabelRead,
17-
Update: resourceGithubIssueLabelCreateOrUpdate,
18-
Delete: resourceGithubIssueLabelDelete,
16+
CreateContext: resourceGithubIssueLabelCreateOrUpdate,
17+
ReadContext: resourceGithubIssueLabelRead,
18+
UpdateContext: resourceGithubIssueLabelCreateOrUpdate,
19+
DeleteContext: resourceGithubIssueLabelDelete,
1920
Importer: &schema.ResourceImporter{
2021
StateContext: schema.ImportStatePassthroughContext,
2122
},
@@ -70,7 +71,7 @@ func resourceGithubIssueLabel() *schema.Resource {
7071
// otherwise it will create. This is also advantageous in that we get to use the
7172
// same function for two schema funcs.
7273

73-
func resourceGithubIssueLabelCreateOrUpdate(d *schema.ResourceData, meta any) error {
74+
func resourceGithubIssueLabelCreateOrUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
7475
client := meta.(*Owner).v3client
7576
orgName := meta.(*Owner).name
7677
repoName := d.Get("repository").(string)
@@ -81,7 +82,6 @@ func resourceGithubIssueLabelCreateOrUpdate(d *schema.ResourceData, meta any) er
8182
Name: new(name),
8283
Color: new(color),
8384
}
84-
ctx := context.Background()
8585
if !d.IsNewResource() {
8686
ctx = context.WithValue(ctx, ctxId, d.Id())
8787
}
@@ -95,14 +95,14 @@ func resourceGithubIssueLabelCreateOrUpdate(d *schema.ResourceData, meta any) er
9595
var err error
9696
_, originalName, err = parseTwoPartID(d.Id(), "repository", "name")
9797
if err != nil {
98-
return err
98+
return diag.FromErr(err)
9999
}
100100
}
101101

102102
existing, resp, err := client.Issues.GetLabel(ctx,
103103
orgName, repoName, originalName)
104104
if err != nil && resp.StatusCode != http.StatusNotFound {
105-
return err
105+
return diag.FromErr(err)
106106
}
107107

108108
if existing != nil {
@@ -117,14 +117,14 @@ func resourceGithubIssueLabelCreateOrUpdate(d *schema.ResourceData, meta any) er
117117
var err error
118118
_, originalName, err = parseTwoPartID(d.Id(), "repository", "name")
119119
if err != nil {
120-
return err
120+
return diag.FromErr(err)
121121
}
122122
}
123123

124124
_, _, err := client.Issues.EditLabel(ctx,
125125
orgName, repoName, originalName, label)
126126
if err != nil {
127-
return err
127+
return diag.FromErr(err)
128128
}
129129
} else {
130130
if v, ok := d.GetOk("description"); ok {
@@ -134,24 +134,23 @@ func resourceGithubIssueLabelCreateOrUpdate(d *schema.ResourceData, meta any) er
134134
_, _, err := client.Issues.CreateLabel(ctx,
135135
orgName, repoName, label)
136136
if err != nil {
137-
return err
137+
return diag.FromErr(err)
138138
}
139139
}
140140

141141
d.SetId(buildTwoPartID(repoName, name))
142142

143-
return resourceGithubIssueLabelRead(d, meta)
143+
return resourceGithubIssueLabelRead(ctx, d, meta)
144144
}
145145

146-
func resourceGithubIssueLabelRead(d *schema.ResourceData, meta any) error {
146+
func resourceGithubIssueLabelRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
147147
client := meta.(*Owner).v3client
148148
repoName, name, err := parseTwoPartID(d.Id(), "repository", "name")
149149
if err != nil {
150-
return err
150+
return diag.FromErr(err)
151151
}
152152

153153
orgName := meta.(*Owner).name
154-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
155154
if !d.IsNewResource() {
156155
ctx = context.WithValue(ctx, ctxEtag, d.Get("etag").(string))
157156
}
@@ -165,45 +164,48 @@ func resourceGithubIssueLabelRead(d *schema.ResourceData, meta any) error {
165164
return nil
166165
}
167166
if ghErr.Response.StatusCode == http.StatusNotFound {
168-
log.Printf("[INFO] Removing label %s (%s/%s) from state because it no longer exists in GitHub",
169-
name, orgName, repoName)
167+
tflog.Info(ctx, "Removing label from state because it no longer exists in GitHub", map[string]any{
168+
"name": name,
169+
"org_name": orgName,
170+
"repo_name": repoName,
171+
})
170172
d.SetId("")
171173
return nil
172174
}
173175
}
174-
return err
176+
return diag.FromErr(err)
175177
}
176178

177179
if err = d.Set("etag", resp.Header.Get("ETag")); err != nil {
178-
return err
180+
return diag.FromErr(err)
179181
}
180182
if err = d.Set("repository", repoName); err != nil {
181-
return err
183+
return diag.FromErr(err)
182184
}
183185
if err = d.Set("name", name); err != nil {
184-
return err
186+
return diag.FromErr(err)
185187
}
186188
if err = d.Set("color", githubLabel.GetColor()); err != nil {
187-
return err
189+
return diag.FromErr(err)
188190
}
189191
if err = d.Set("description", githubLabel.GetDescription()); err != nil {
190-
return err
192+
return diag.FromErr(err)
191193
}
192194
if err = d.Set("url", githubLabel.GetURL()); err != nil {
193-
return err
195+
return diag.FromErr(err)
194196
}
195197

196198
return nil
197199
}
198200

199-
func resourceGithubIssueLabelDelete(d *schema.ResourceData, meta any) error {
201+
func resourceGithubIssueLabelDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
200202
client := meta.(*Owner).v3client
201203

202204
orgName := meta.(*Owner).name
203205
repoName := d.Get("repository").(string)
204206
name := d.Get("name").(string)
205-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
207+
ctx = context.WithValue(ctx, ctxId, d.Id())
206208

207209
_, err := client.Issues.DeleteLabel(ctx, orgName, repoName, name)
208-
return handleArchivedRepoDelete(err, "issue label", name, orgName, repoName)
210+
return diag.FromErr(handleArchivedRepoDelete(err, "issue label", name, orgName, repoName))
209211
}

0 commit comments

Comments
 (0)