@@ -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
1819func 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