Skip to content

Commit e68eeca

Browse files
committed
Update to use Context-aware functions
Signed-off-by: Timo Sand <[email protected]>
1 parent e72c809 commit e68eeca

1 file changed

Lines changed: 40 additions & 29 deletions

File tree

github/resource_github_repository_autolink_reference.go

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,23 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
"log"
87
"net/http"
98
"regexp"
109
"strconv"
1110
"strings"
1211

1312
"github.com/google/go-github/v84/github"
13+
"github.com/hashicorp/terraform-plugin-log/tflog"
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1415
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1516
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1617
)
1718

1819
func resourceGithubRepositoryAutolinkReference() *schema.Resource {
1920
return &schema.Resource{
20-
Create: resourceGithubRepositoryAutolinkReferenceCreate,
21-
Read: resourceGithubRepositoryAutolinkReferenceRead,
22-
Delete: resourceGithubRepositoryAutolinkReferenceDelete,
21+
CreateContext: resourceGithubRepositoryAutolinkReferenceCreate,
22+
ReadContext: resourceGithubRepositoryAutolinkReferenceRead,
23+
DeleteContext: resourceGithubRepositoryAutolinkReferenceDelete,
2324

2425
Importer: &schema.ResourceImporter{
2526
StateContext: func(ctx context.Context, d *schema.ResourceData, meta any) ([]*schema.ResourceData, error) {
@@ -92,15 +93,15 @@ func resourceGithubRepositoryAutolinkReference() *schema.Resource {
9293
}
9394
}
9495

95-
func resourceGithubRepositoryAutolinkReferenceCreate(d *schema.ResourceData, meta any) error {
96-
client := meta.(*Owner).v3client
96+
func resourceGithubRepositoryAutolinkReferenceCreate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
97+
meta := m.(*Owner)
98+
client := meta.v3client
99+
owner := meta.name
97100

98-
owner := meta.(*Owner).name
99101
repoName := d.Get("repository").(string)
100102
keyPrefix := d.Get("key_prefix").(string)
101103
targetURLTemplate := d.Get("target_url_template").(string)
102104
isAlphanumeric := d.Get("is_alphanumeric").(bool)
103-
ctx := context.Background()
104105

105106
opts := &github.AutolinkOptions{
106107
KeyPrefix: &keyPrefix,
@@ -110,23 +111,26 @@ func resourceGithubRepositoryAutolinkReferenceCreate(d *schema.ResourceData, met
110111

111112
autolinkRef, _, err := client.Repositories.AddAutolink(ctx, owner, repoName, opts)
112113
if err != nil {
113-
return err
114+
return diag.FromErr(err)
114115
}
115116
d.SetId(strconv.FormatInt(autolinkRef.GetID(), 10))
116117

117-
return resourceGithubRepositoryAutolinkReferenceRead(d, meta)
118+
return resourceGithubRepositoryAutolinkReferenceRead(ctx, d, m)
118119
}
119120

120-
func resourceGithubRepositoryAutolinkReferenceRead(d *schema.ResourceData, meta any) error {
121-
client := meta.(*Owner).v3client
121+
func resourceGithubRepositoryAutolinkReferenceRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
122+
ctx = tflog.SetField(ctx, "id", d.Id())
123+
124+
meta := m.(*Owner)
125+
client := meta.v3client
126+
owner := meta.name
122127

123-
owner := meta.(*Owner).name
124128
repoName := d.Get("repository").(string)
125129
autolinkRefID, err := strconv.ParseInt(d.Id(), 10, 64)
126130
if err != nil {
127-
return unconvertibleIdErr(d.Id(), err)
131+
return diag.FromErr(unconvertibleIdErr(d.Id(), err))
128132
}
129-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
133+
130134
if !d.IsNewResource() {
131135
ctx = context.WithValue(ctx, ctxEtag, d.Get("etag").(string))
132136
}
@@ -136,44 +140,51 @@ func resourceGithubRepositoryAutolinkReferenceRead(d *schema.ResourceData, meta
136140
var ghErr *github.ErrorResponse
137141
if errors.As(err, &ghErr) {
138142
if ghErr.Response.StatusCode == http.StatusNotFound {
139-
log.Printf("[INFO] Removing autolink reference for repository %s/%s from state because it no longer exists in GitHub",
140-
owner, repoName)
143+
tflog.Info(ctx, "Autolink reference not found, removing from state.", map[string]any{
144+
"owner": owner,
145+
"repository": repoName,
146+
})
141147
d.SetId("")
142148
return nil
143149
}
144150
}
145-
return err
151+
return diag.FromErr(err)
146152
}
147153

148-
// Set resource fields
149154
d.SetId(strconv.FormatInt(autolinkRef.GetID(), 10))
150155
if err = d.Set("repository", repoName); err != nil {
151-
return err
156+
return diag.FromErr(err)
152157
}
153158
if err = d.Set("key_prefix", autolinkRef.KeyPrefix); err != nil {
154-
return err
159+
return diag.FromErr(err)
155160
}
156161
if err = d.Set("target_url_template", autolinkRef.URLTemplate); err != nil {
157-
return err
162+
return diag.FromErr(err)
158163
}
159164
if err = d.Set("is_alphanumeric", autolinkRef.IsAlphanumeric); err != nil {
160-
return err
165+
return diag.FromErr(err)
161166
}
162167

163168
return nil
164169
}
165170

166-
func resourceGithubRepositoryAutolinkReferenceDelete(d *schema.ResourceData, meta any) error {
167-
client := meta.(*Owner).v3client
171+
func resourceGithubRepositoryAutolinkReferenceDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
172+
ctx = tflog.SetField(ctx, "id", d.Id())
173+
174+
meta := m.(*Owner)
175+
client := meta.v3client
176+
owner := meta.name
168177

169-
owner := meta.(*Owner).name
170178
repoName := d.Get("repository").(string)
171179
autolinkRefID, err := strconv.ParseInt(d.Id(), 10, 64)
172180
if err != nil {
173-
return unconvertibleIdErr(d.Id(), err)
181+
return diag.FromErr(unconvertibleIdErr(d.Id(), err))
174182
}
175-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
176183

177184
_, err = client.Repositories.DeleteAutolink(ctx, owner, repoName, autolinkRefID)
178-
return err
185+
if err != nil {
186+
return diag.FromErr(err)
187+
}
188+
189+
return nil
179190
}

0 commit comments

Comments
 (0)