@@ -10,17 +10,18 @@ import (
1010 "strings"
1111
1212 "github.com/google/go-github/v81/github"
13+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1314 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1415)
1516
1617func resourceGithubRepositoryFile () * schema.Resource {
1718 return & schema.Resource {
18- Create : resourceGithubRepositoryFileCreate ,
19- Read : resourceGithubRepositoryFileRead ,
20- Update : resourceGithubRepositoryFileUpdate ,
21- Delete : resourceGithubRepositoryFileDelete ,
19+ CreateContext : resourceGithubRepositoryFileCreate ,
20+ ReadContext : resourceGithubRepositoryFileRead ,
21+ UpdateContext : resourceGithubRepositoryFileUpdate ,
22+ DeleteContext : resourceGithubRepositoryFileDelete ,
2223 Importer : & schema.ResourceImporter {
23- State : func (d * schema.ResourceData , meta any ) ([]* schema.ResourceData , error ) {
24+ StateContext : func (ctx context. Context , d * schema.ResourceData , meta any ) ([]* schema.ResourceData , error ) {
2425 parts := strings .Split (d .Id (), ":" )
2526
2627 if len (parts ) > 2 {
@@ -31,7 +32,6 @@ func resourceGithubRepositoryFile() *schema.Resource {
3132 owner := meta .(* Owner ).name
3233 repo , file := splitRepoFilePath (parts [0 ])
3334 // test if a file exists in a repository.
34- ctx := context .WithValue (context .Background (), ctxId , fmt .Sprintf ("%s/%s" , repo , file ))
3535 opts := & github.RepositoryContentGetOptions {}
3636 if len (parts ) == 2 {
3737 opts .Ref = parts [1 ]
@@ -187,10 +187,9 @@ func resourceGithubRepositoryFileOptions(d *schema.ResourceData) (*github.Reposi
187187 return opts , nil
188188}
189189
190- func resourceGithubRepositoryFileCreate (d * schema.ResourceData , meta any ) error {
190+ func resourceGithubRepositoryFileCreate (ctx context. Context , d * schema.ResourceData , meta any ) diag. Diagnostics {
191191 client := meta .(* Owner ).v3client
192192 owner := meta .(* Owner ).name
193- ctx := context .Background ()
194193
195194 repo := d .Get ("repository" ).(string )
196195 file := d .Get ("file" ).(string )
@@ -208,8 +207,8 @@ func resourceGithubRepositoryFileCreate(d *schema.ResourceData, meta any) error
208207 if _ , hasSourceSHA := d .GetOk ("autocreate_branch_source_sha" ); ! hasSourceSHA {
209208 ref , _ , err := client .Git .GetRef (ctx , owner , repo , sourceBranchRefName )
210209 if err != nil {
211- return fmt .Errorf ("error querying GitHub branch reference %s/%s (%s): %w " ,
212- owner , repo , sourceBranchRefName , err )
210+ return diag .Errorf ("error querying GitHub branch reference %s/%s (%s): %s " ,
211+ owner , repo , sourceBranchRefName , err . Error () )
213212 }
214213 _ = d .Set ("autocreate_branch_source_sha" , * ref .Object .SHA )
215214 }
@@ -218,18 +217,18 @@ func resourceGithubRepositoryFileCreate(d *schema.ResourceData, meta any) error
218217 Ref : branchRefName ,
219218 SHA : sourceBranchSHA ,
220219 }); err != nil {
221- return err
220+ return diag . FromErr ( err )
222221 }
223222 } else {
224- return err
223+ return diag . FromErr ( err )
225224 }
226225 }
227226 checkOpt .Ref = branch .(string )
228227 }
229228
230229 opts , err := resourceGithubRepositoryFileOptions (d )
231230 if err != nil {
232- return err
231+ return diag . FromErr ( err )
233232 }
234233
235234 if opts .Message == nil {
@@ -243,11 +242,11 @@ func resourceGithubRepositoryFileCreate(d *schema.ResourceData, meta any) error
243242 if resp != nil {
244243 if resp .StatusCode != 404 {
245244 // 404 is a valid response if the file does not exist
246- return err
245+ return diag . FromErr ( err )
247246 }
248247 } else {
249248 // Response should be non-nil
250- return err
249+ return diag . FromErr ( err )
251250 }
252251 }
253252
@@ -258,28 +257,28 @@ func resourceGithubRepositoryFileCreate(d *schema.ResourceData, meta any) error
258257 opts .SHA = fileContent .SHA
259258 } else {
260259 // Error if overwriting a file is not requested
261- return fmt .Errorf ("refusing to overwrite existing file: configure `overwrite_on_create` to `true` to override" )
260+ return diag .Errorf ("refusing to overwrite existing file: configure `overwrite_on_create` to `true` to override" )
262261 }
263262 }
264263
264+ log .Printf ("[DEBUG] Creating or overwriting a repository file: %s/%s/%s" , owner , repo , file )
265265 // Create a new or overwritten file
266266 create , _ , err := client .Repositories .CreateFile (ctx , owner , repo , file , opts )
267267 if err != nil {
268- return err
268+ return diag . FromErr ( err )
269269 }
270270
271271 d .SetId (fmt .Sprintf ("%s/%s" , repo , file ))
272272 if err = d .Set ("commit_sha" , create .GetSHA ()); err != nil {
273- return err
273+ return diag . FromErr ( err )
274274 }
275275
276- return resourceGithubRepositoryFileRead (d , meta )
276+ return resourceGithubRepositoryFileRead (ctx , d , meta )
277277}
278278
279- func resourceGithubRepositoryFileRead (d * schema.ResourceData , meta any ) error {
279+ func resourceGithubRepositoryFileRead (ctx context. Context , d * schema.ResourceData , meta any ) diag. Diagnostics {
280280 client := meta .(* Owner ).v3client
281281 owner := meta .(* Owner ).name
282- ctx := context .WithValue (context .Background (), ctxId , d .Id ())
283282
284283 repo , file := splitRepoFilePath (d .Id ())
285284
@@ -304,7 +303,7 @@ func resourceGithubRepositoryFileRead(d *schema.ResourceData, meta any) error {
304303 if err != nil {
305304 var errorResponse * github.ErrorResponse
306305 if errors .As (err , & errorResponse ) && errorResponse .Response .StatusCode == http .StatusTooManyRequests {
307- return err
306+ return diag . FromErr ( err )
308307 }
309308 }
310309 if fc == nil {
@@ -316,35 +315,35 @@ func resourceGithubRepositoryFileRead(d *schema.ResourceData, meta any) error {
316315
317316 content , err := fc .GetContent ()
318317 if err != nil {
319- return err
318+ return diag . FromErr ( err )
320319 }
321320
322321 if err = d .Set ("content" , content ); err != nil {
323- return err
322+ return diag . FromErr ( err )
324323 }
325324 if err = d .Set ("repository" , repo ); err != nil {
326- return err
325+ return diag . FromErr ( err )
327326 }
328327 if err = d .Set ("file" , file ); err != nil {
329- return err
328+ return diag . FromErr ( err )
330329 }
331330 if err = d .Set ("sha" , fc .GetSHA ()); err != nil {
332- return err
331+ return diag . FromErr ( err )
333332 }
334333
335334 var commit * github.RepositoryCommit
336335
337336 parsedUrl , err := url .Parse (fc .GetURL ())
338337 if err != nil {
339- return err
338+ return diag . FromErr ( err )
340339 }
341340 parsedQuery , err := url .ParseQuery (parsedUrl .RawQuery )
342341 if err != nil {
343- return err
342+ return diag . FromErr ( err )
344343 }
345344 ref := parsedQuery ["ref" ][0 ]
346345 if err = d .Set ("ref" , ref ); err != nil {
347- return err
346+ return diag . FromErr ( err )
348347 }
349348
350349 // Use the SHA to lookup the commit info if we know it, otherwise loop through commits
@@ -356,12 +355,12 @@ func resourceGithubRepositoryFileRead(d *schema.ResourceData, meta any) error {
356355 commit , err = getFileCommit (ctx , client , owner , repo , file , ref )
357356 }
358357 if err != nil {
359- return err
358+ return diag . FromErr ( err )
360359 }
361360 log .Printf ("[DEBUG] Found file: %s/%s/%s, in commit SHA: %s " , owner , repo , file , commit .GetSHA ())
362361
363362 if err = d .Set ("commit_sha" , commit .GetSHA ()); err != nil {
364- return err
363+ return diag . FromErr ( err )
365364 }
366365
367366 commit_author := commit .Commit .GetCommitter ().GetName ()
@@ -373,23 +372,22 @@ func resourceGithubRepositoryFileRead(d *schema.ResourceData, meta any) error {
373372 // read from state if author+email is set explicitly, and if it was not github signing it for you previously
374373 if commit_author != "GitHub" && commit_email != "[email protected] " && hasCommitAuthor && hasCommitEmail {
375374 if err = d .Set ("commit_author" , commit_author ); err != nil {
376- return err
375+ return diag . FromErr ( err )
377376 }
378377 if err = d .Set ("commit_email" , commit_email ); err != nil {
379- return err
378+ return diag . FromErr ( err )
380379 }
381380 }
382381 if err = d .Set ("commit_message" , commit .GetCommit ().GetMessage ()); err != nil {
383- return err
382+ return diag . FromErr ( err )
384383 }
385384
386385 return nil
387386}
388387
389- func resourceGithubRepositoryFileUpdate (d * schema.ResourceData , meta any ) error {
388+ func resourceGithubRepositoryFileUpdate (ctx context. Context , d * schema.ResourceData , meta any ) diag. Diagnostics {
390389 client := meta .(* Owner ).v3client
391390 owner := meta .(* Owner ).name
392- ctx := context .Background ()
393391
394392 repo := d .Get ("repository" ).(string )
395393 file := d .Get ("file" ).(string )
@@ -405,8 +403,8 @@ func resourceGithubRepositoryFileUpdate(d *schema.ResourceData, meta any) error
405403 if _ , hasSourceSHA := d .GetOk ("autocreate_branch_source_sha" ); ! hasSourceSHA {
406404 ref , _ , err := client .Git .GetRef (ctx , owner , repo , sourceBranchRefName )
407405 if err != nil {
408- return fmt .Errorf ("error querying GitHub branch reference %s/%s (%s): %w " ,
409- owner , repo , sourceBranchRefName , err )
406+ return diag .Errorf ("error querying GitHub branch reference %s/%s (%s): %s " ,
407+ owner , repo , sourceBranchRefName , err . Error () )
410408 }
411409 _ = d .Set ("autocreate_branch_source_sha" , * ref .Object .SHA )
412410 }
@@ -415,17 +413,17 @@ func resourceGithubRepositoryFileUpdate(d *schema.ResourceData, meta any) error
415413 Ref : branchRefName ,
416414 SHA : sourceBranchSHA ,
417415 }); err != nil {
418- return err
416+ return diag . FromErr ( err )
419417 }
420418 } else {
421- return err
419+ return diag . FromErr ( err )
422420 }
423421 }
424422 }
425423
426424 opts , err := resourceGithubRepositoryFileOptions (d )
427425 if err != nil {
428- return err
426+ return diag . FromErr ( err )
429427 }
430428
431429 if * opts .Message == fmt .Sprintf ("Add %s" , file ) {
@@ -435,20 +433,19 @@ func resourceGithubRepositoryFileUpdate(d *schema.ResourceData, meta any) error
435433
436434 create , _ , err := client .Repositories .CreateFile (ctx , owner , repo , file , opts )
437435 if err != nil {
438- return err
436+ return diag . FromErr ( err )
439437 }
440438
441439 if err = d .Set ("commit_sha" , create .GetSHA ()); err != nil {
442- return err
440+ return diag . FromErr ( err )
443441 }
444442
445- return resourceGithubRepositoryFileRead (d , meta )
443+ return resourceGithubRepositoryFileRead (ctx , d , meta )
446444}
447445
448- func resourceGithubRepositoryFileDelete (d * schema.ResourceData , meta any ) error {
446+ func resourceGithubRepositoryFileDelete (ctx context. Context , d * schema.ResourceData , meta any ) diag. Diagnostics {
449447 client := meta .(* Owner ).v3client
450448 owner := meta .(* Owner ).name
451- ctx := context .Background ()
452449
453450 repo := d .Get ("repository" ).(string )
454451 file := d .Get ("file" ).(string )
@@ -457,7 +454,7 @@ func resourceGithubRepositoryFileDelete(d *schema.ResourceData, meta any) error
457454
458455 opts , err := resourceGithubRepositoryFileOptions (d )
459456 if err != nil {
460- return err
457+ return diag . FromErr ( err )
461458 }
462459
463460 if * opts .Message == fmt .Sprintf ("Add %s" , file ) {
@@ -476,8 +473,8 @@ func resourceGithubRepositoryFileDelete(d *schema.ResourceData, meta any) error
476473 if _ , hasSourceSHA := d .GetOk ("autocreate_branch_source_sha" ); ! hasSourceSHA {
477474 ref , _ , err := client .Git .GetRef (ctx , owner , repo , sourceBranchRefName )
478475 if err != nil {
479- return fmt .Errorf ("error querying GitHub branch reference %s/%s (%s): %w " ,
480- owner , repo , sourceBranchRefName , err )
476+ return diag .Errorf ("error querying GitHub branch reference %s/%s (%s): %s " ,
477+ owner , repo , sourceBranchRefName , err . Error () )
481478 }
482479 _ = d .Set ("autocreate_branch_source_sha" , * ref .Object .SHA )
483480 }
@@ -486,18 +483,18 @@ func resourceGithubRepositoryFileDelete(d *schema.ResourceData, meta any) error
486483 Ref : branchRefName ,
487484 SHA : sourceBranchSHA ,
488485 }); err != nil {
489- return err
486+ return diag . FromErr ( err )
490487 }
491488 } else {
492- return err
489+ return diag . FromErr ( err )
493490 }
494491 }
495492 branch = b .(string )
496493 opts .Branch = & branch
497494 }
498495
499496 _ , _ , err = client .Repositories .DeleteFile (ctx , owner , repo , file , opts )
500- return handleArchivedRepoDelete (err , "repository file" , file , owner , repo )
497+ return diag . FromErr ( handleArchivedRepoDelete (err , "repository file" , file , owner , repo ) )
501498}
502499
503500func autoBranchDiffSuppressFunc (k , _ , _ string , d * schema.ResourceData ) bool {
0 commit comments