Skip to content

Commit d68aac5

Browse files
chore: migrate releases resource and data source to context-aware functions (#2996)
The legacy CRUD function types are deprecated and should be replaced with the context-aware versions.
1 parent 63076f7 commit d68aac5

File tree

2 files changed

+42
-48
lines changed

2 files changed

+42
-48
lines changed

github/data_source_github_release.go

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package github
22

33
import (
44
"context"
5-
"fmt"
65
"strconv"
76
"strings"
87

8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
99
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1010

1111
"github.com/google/go-github/v67/github"
@@ -14,7 +14,7 @@ import (
1414

1515
func dataSourceGithubRelease() *schema.Resource {
1616
return &schema.Resource{
17-
Read: dataSourceGithubReleaseRead,
17+
ReadContext: dataSourceGithubReleaseRead,
1818
Description: "Use this data source to retrieve information about a GitHub release in a specific repository.",
1919
Schema: map[string]*schema.Schema{
2020
"repository": {
@@ -156,12 +156,11 @@ func dataSourceGithubRelease() *schema.Resource {
156156
}
157157
}
158158

159-
func dataSourceGithubReleaseRead(d *schema.ResourceData, meta any) error {
159+
func dataSourceGithubReleaseRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
160160
repository := d.Get("repository").(string)
161161
owner := d.Get("owner").(string)
162162

163163
client := meta.(*Owner).v3client
164-
ctx := context.Background()
165164

166165
var err error
167166
var release *github.RepositoryRelease
@@ -172,85 +171,85 @@ func dataSourceGithubReleaseRead(d *schema.ResourceData, meta any) error {
172171
case "id":
173172
releaseID := int64(d.Get("release_id").(int))
174173
if releaseID == 0 {
175-
return fmt.Errorf("`release_id` must be set when `retrieve_by` = `id`")
174+
return diag.Errorf("`release_id` must be set when `retrieve_by` = `id`")
176175
}
177176

178177
release, _, err = client.Repositories.GetRelease(ctx, owner, repository, releaseID)
179178
case "tag":
180179
tag := d.Get("release_tag").(string)
181180
if tag == "" {
182-
return fmt.Errorf("`release_tag` must be set when `retrieve_by` = `tag`")
181+
return diag.Errorf("`release_tag` must be set when `retrieve_by` = `tag`")
183182
}
184183

185184
release, _, err = client.Repositories.GetReleaseByTag(ctx, owner, repository, tag)
186185
default:
187-
return fmt.Errorf("one of: `latest`, `id`, `tag` must be set for `retrieve_by`")
186+
return diag.Errorf("one of: `latest`, `id`, `tag` must be set for `retrieve_by`")
188187
}
189188

190189
if err != nil {
191-
return err
190+
return diag.FromErr(err)
192191
}
193192

194193
d.SetId(strconv.FormatInt(release.GetID(), 10))
195194
err = d.Set("release_tag", release.GetTagName())
196195
if err != nil {
197-
return err
196+
return diag.FromErr(err)
198197
}
199198
err = d.Set("target_commitish", release.GetTargetCommitish())
200199
if err != nil {
201-
return err
200+
return diag.FromErr(err)
202201
}
203202
err = d.Set("name", release.GetName())
204203
if err != nil {
205-
return err
204+
return diag.FromErr(err)
206205
}
207206
err = d.Set("body", release.GetBody())
208207
if err != nil {
209-
return err
208+
return diag.FromErr(err)
210209
}
211210
err = d.Set("draft", release.GetDraft())
212211
if err != nil {
213-
return err
212+
return diag.FromErr(err)
214213
}
215214
err = d.Set("prerelease", release.GetPrerelease())
216215
if err != nil {
217-
return err
216+
return diag.FromErr(err)
218217
}
219218
err = d.Set("created_at", release.GetCreatedAt().String())
220219
if err != nil {
221-
return err
220+
return diag.FromErr(err)
222221
}
223222
err = d.Set("published_at", release.GetPublishedAt().String())
224223
if err != nil {
225-
return err
224+
return diag.FromErr(err)
226225
}
227226
err = d.Set("url", release.GetURL())
228227
if err != nil {
229-
return err
228+
return diag.FromErr(err)
230229
}
231230
err = d.Set("html_url", release.GetHTMLURL())
232231
if err != nil {
233-
return err
232+
return diag.FromErr(err)
234233
}
235234
err = d.Set("assets_url", release.GetAssetsURL())
236235
if err != nil {
237-
return err
236+
return diag.FromErr(err)
238237
}
239238
err = d.Set("asserts_url", release.GetAssetsURL()) // Deprecated, original version of assets_url
240239
if err != nil {
241-
return err
240+
return diag.FromErr(err)
242241
}
243242
err = d.Set("upload_url", release.GetUploadURL())
244243
if err != nil {
245-
return err
244+
return diag.FromErr(err)
246245
}
247246
err = d.Set("zipball_url", release.GetZipballURL())
248247
if err != nil {
249-
return err
248+
return diag.FromErr(err)
250249
}
251250
err = d.Set("tarball_url", release.GetTarballURL())
252251
if err != nil {
253-
return err
252+
return diag.FromErr(err)
254253
}
255254

256255
assets := make([]any, 0, len(release.Assets))
@@ -275,7 +274,7 @@ func dataSourceGithubReleaseRead(d *schema.ResourceData, meta any) error {
275274

276275
err = d.Set("assets", assets)
277276
if err != nil {
278-
return err
277+
return diag.FromErr(err)
279278
}
280279

281280
return nil

github/resource_github_release.go

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@ import (
99
"strconv"
1010

1111
"github.com/google/go-github/v67/github"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1213
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1314
)
1415

1516
func resourceGithubRelease() *schema.Resource {
1617
return &schema.Resource{
17-
Create: resourceGithubReleaseCreateUpdate,
18-
Update: resourceGithubReleaseCreateUpdate,
19-
Read: resourceGithubReleaseRead,
20-
Delete: resourceGithubReleaseDelete,
18+
CreateContext: resourceGithubReleaseCreateUpdate,
19+
UpdateContext: resourceGithubReleaseCreateUpdate,
20+
ReadContext: resourceGithubReleaseRead,
21+
DeleteContext: resourceGithubReleaseDelete,
2122
Importer: &schema.ResourceImporter{
2223
State: resourceGithubReleaseImport,
2324
},
@@ -137,12 +138,7 @@ func resourceGithubRelease() *schema.Resource {
137138
}
138139
}
139140

140-
func resourceGithubReleaseCreateUpdate(d *schema.ResourceData, meta any) error {
141-
ctx := context.Background()
142-
if !d.IsNewResource() {
143-
ctx = context.WithValue(ctx, ctxId, d.Id())
144-
}
145-
141+
func resourceGithubReleaseCreateUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
146142
client := meta.(*Owner).v3client
147143
owner := meta.(*Owner).name
148144
repoName := d.Get("repository").(string)
@@ -183,12 +179,12 @@ func resourceGithubReleaseCreateUpdate(d *schema.ResourceData, meta any) error {
183179
log.Printf("[DEBUG] Response from creating release: %#v", *resp)
184180
}
185181
if err != nil {
186-
return err
182+
return diag.FromErr(err)
187183
}
188184
} else {
189185
id, err := strconv.ParseInt(d.Id(), 10, 64)
190186
if err != nil {
191-
return err
187+
return diag.FromErr(err)
192188
}
193189
log.Printf("[DEBUG] Updating release: %d:%s (%s/%s)",
194190
id, targetCommitish, owner, repoName)
@@ -197,25 +193,25 @@ func resourceGithubReleaseCreateUpdate(d *schema.ResourceData, meta any) error {
197193
log.Printf("[DEBUG] Response from updating release: %#v", *resp)
198194
}
199195
if err != nil {
200-
return err
196+
return diag.FromErr(err)
201197
}
202198
}
203199

204200
transformResponseToResourceData(d, release, repoName)
205201
return nil
206202
}
207203

208-
func resourceGithubReleaseRead(d *schema.ResourceData, meta any) error {
204+
func resourceGithubReleaseRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
209205
repository := d.Get("repository").(string)
210-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
206+
211207
client := meta.(*Owner).v3client
212208
owner := meta.(*Owner).name
213209
releaseID, err := strconv.ParseInt(d.Id(), 10, 64)
214210
if err != nil {
215-
return err
211+
return diag.FromErr(err)
216212
}
217213
if releaseID == 0 {
218-
return fmt.Errorf("`release_id` must be present")
214+
return diag.Errorf("`release_id` must be present")
219215
}
220216

221217
release, _, err := client.Repositories.GetRelease(ctx, owner, repository, releaseID)
@@ -228,31 +224,30 @@ func resourceGithubReleaseRead(d *schema.ResourceData, meta any) error {
228224
return nil
229225
}
230226
}
231-
return err
227+
return diag.FromErr(err)
232228
}
233229
transformResponseToResourceData(d, release, repository)
234230
return nil
235231
}
236232

237-
func resourceGithubReleaseDelete(d *schema.ResourceData, meta any) error {
238-
ctx := context.WithValue(context.Background(), ctxId, d.Id())
233+
func resourceGithubReleaseDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
239234
repository := d.Get("repository").(string)
240235
client := meta.(*Owner).v3client
241236
owner := meta.(*Owner).name
242237

243238
releaseIDStr := d.Id()
244239
releaseID, err := strconv.ParseInt(d.Id(), 10, 64)
245240
if err != nil {
246-
return unconvertibleIdErr(releaseIDStr, err)
241+
return diag.FromErr(unconvertibleIdErr(releaseIDStr, err))
247242
}
248243
if releaseID == 0 {
249-
return fmt.Errorf("`release_id` must be present")
244+
return diag.Errorf("`release_id` must be present")
250245
}
251246

252247
_, err = client.Repositories.DeleteRelease(ctx, owner, repository, releaseID)
253248
if err != nil {
254-
return fmt.Errorf("error deleting GitHub release reference %s/%s (%s): %w",
255-
fmt.Sprint(releaseID), repository, owner, err)
249+
return diag.FromErr(fmt.Errorf("error deleting GitHub release reference %s/%s (%s): %w",
250+
fmt.Sprint(releaseID), repository, owner, err))
256251
}
257252
return nil
258253
}

0 commit comments

Comments
 (0)