Skip to content

Commit 09a39fb

Browse files
deigaclaude
andauthored
[FEAT] Add missing IP ranges to DS github_ip_ranges (#3157)
* feat(ip_ranges): add actions_macos and github_enterprise_importer fields Add support for the `actions_macos` and `github_enterprise_importer` IP ranges returned by the GitHub Meta API. These fields were missing from the data source but are available in go-github v82's APIMeta struct. New attributes: - actions_macos, actions_macos_ipv4, actions_macos_ipv6 - github_enterprise_importer, github_enterprise_importer_ipv4, github_enterprise_importer_ipv6 Also adds descriptions to the existing actions fields for consistency. Fixes #2607 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> * Refactor error handling Signed-off-by: Timo Sand <[email protected]> * Refactor to use context-aware function Signed-off-by: Timo Sand <[email protected]> * docs(ip_ranges): document new fields and deprecate dependabot Add documentation for actions_macos and github_enterprise_importer IP range fields. Mark dependabot fields as deprecated since Dependabot now uses GitHub Actions IP addresses. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> * Refactor to use `ConfigStateChecks` Signed-off-by: Timo Sand <[email protected]> --------- Signed-off-by: Timo Sand <[email protected]> Co-authored-by: Claude Opus 4.5 <[email protected]>
1 parent 3063ca4 commit 09a39fb

3 files changed

Lines changed: 222 additions & 151 deletions

File tree

github/data_source_github_ip_ranges.go

Lines changed: 151 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package github
22

33
import (
4+
"context"
45
"fmt"
56
"net"
67

8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
79
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
810
)
911

1012
func dataSourceGithubIpRanges() *schema.Resource {
1113
return &schema.Resource{
1214
Description: "Get the GitHub IP ranges used by various GitHub services.",
13-
Read: dataSourceGithubIpRangesRead,
15+
ReadContext: dataSourceGithubIpRangesRead,
1416
Schema: map[string]*schema.Schema{
1517
"hooks": {
1618
Type: schema.TypeList,
@@ -48,9 +50,22 @@ func dataSourceGithubIpRanges() *schema.Resource {
4850
Elem: &schema.Schema{Type: schema.TypeString},
4951
},
5052
"actions": {
51-
Type: schema.TypeList,
52-
Computed: true,
53-
Elem: &schema.Schema{Type: schema.TypeString},
53+
Type: schema.TypeList,
54+
Computed: true,
55+
Elem: &schema.Schema{Type: schema.TypeString},
56+
Description: "An array of IP addresses in CIDR format specifying the addresses that GitHub Actions will originate from.",
57+
},
58+
"actions_macos": {
59+
Type: schema.TypeList,
60+
Computed: true,
61+
Elem: &schema.Schema{Type: schema.TypeString},
62+
Description: "An array of IP addresses in CIDR format specifying the addresses that GitHub Actions macOS runners will originate from.",
63+
},
64+
"github_enterprise_importer": {
65+
Type: schema.TypeList,
66+
Computed: true,
67+
Elem: &schema.Schema{Type: schema.TypeString},
68+
Description: "An array of IP addresses in CIDR format specifying the addresses that GitHub Enterprise Importer will originate from.",
5469
},
5570
"dependabot": {
5671
Deprecated: "This attribute is no longer returned form the API, Dependabot now uses the GitHub Actions IP addresses.",
@@ -94,9 +109,22 @@ func dataSourceGithubIpRanges() *schema.Resource {
94109
Elem: &schema.Schema{Type: schema.TypeString},
95110
},
96111
"actions_ipv4": {
97-
Type: schema.TypeList,
98-
Computed: true,
99-
Elem: &schema.Schema{Type: schema.TypeString},
112+
Type: schema.TypeList,
113+
Computed: true,
114+
Elem: &schema.Schema{Type: schema.TypeString},
115+
Description: "An array of IPv4 addresses in CIDR format specifying the addresses that GitHub Actions will originate from.",
116+
},
117+
"actions_macos_ipv4": {
118+
Type: schema.TypeList,
119+
Computed: true,
120+
Elem: &schema.Schema{Type: schema.TypeString},
121+
Description: "An array of IPv4 addresses in CIDR format specifying the addresses that GitHub Actions macOS runners will originate from.",
122+
},
123+
"github_enterprise_importer_ipv4": {
124+
Type: schema.TypeList,
125+
Computed: true,
126+
Elem: &schema.Schema{Type: schema.TypeString},
127+
Description: "An array of IPv4 addresses in CIDR format specifying the addresses that GitHub Enterprise Importer will originate from.",
100128
},
101129
"dependabot_ipv4": {
102130
Deprecated: "This attribute is no longer returned form the API, Dependabot now uses the GitHub Actions IP addresses.",
@@ -140,9 +168,22 @@ func dataSourceGithubIpRanges() *schema.Resource {
140168
Elem: &schema.Schema{Type: schema.TypeString},
141169
},
142170
"actions_ipv6": {
143-
Type: schema.TypeList,
144-
Computed: true,
145-
Elem: &schema.Schema{Type: schema.TypeString},
171+
Type: schema.TypeList,
172+
Computed: true,
173+
Elem: &schema.Schema{Type: schema.TypeString},
174+
Description: "An array of IPv6 addresses in CIDR format specifying the addresses that GitHub Actions will originate from.",
175+
},
176+
"actions_macos_ipv6": {
177+
Type: schema.TypeList,
178+
Computed: true,
179+
Elem: &schema.Schema{Type: schema.TypeString},
180+
Description: "An array of IPv6 addresses in CIDR format specifying the addresses that GitHub Actions macOS runners will originate from.",
181+
},
182+
"github_enterprise_importer_ipv6": {
183+
Type: schema.TypeList,
184+
Computed: true,
185+
Elem: &schema.Schema{Type: schema.TypeString},
186+
Description: "An array of IPv6 addresses in CIDR format specifying the addresses that GitHub Enterprise Importer will originate from.",
146187
},
147188
"dependabot_ipv6": {
148189
Deprecated: "This attribute is no longer returned form the API, Dependabot now uses the GitHub Actions IP addresses.",
@@ -154,177 +195,191 @@ func dataSourceGithubIpRanges() *schema.Resource {
154195
}
155196
}
156197

157-
func dataSourceGithubIpRangesRead(d *schema.ResourceData, meta any) error {
198+
func dataSourceGithubIpRangesRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
158199
owner := meta.(*Owner)
159200

160201
api, _, err := owner.v3client.Meta.Get(owner.StopContext)
161202
if err != nil {
162-
return err
203+
return diag.FromErr(err)
163204
}
164205

165206
cidrHooksIpv4, cidrHooksIpv6, err := splitIpv4Ipv6Cidrs(&api.Hooks)
166207
if err != nil {
167-
return err
208+
return diag.FromErr(err)
168209
}
169210

170211
cidrGitIpv4, cidrGitIpv6, err := splitIpv4Ipv6Cidrs(&api.Git)
171212
if err != nil {
172-
return err
213+
return diag.FromErr(err)
173214
}
174215

175216
cidrPackagesIpv4, cidrPackagesIpv6, err := splitIpv4Ipv6Cidrs(&api.Packages)
176217
if err != nil {
177-
return err
218+
return diag.FromErr(err)
178219
}
179220

180221
cidrPagesIpv4, cidrPagesIpv6, err := splitIpv4Ipv6Cidrs(&api.Pages)
181222
if err != nil {
182-
return err
223+
return diag.FromErr(err)
183224
}
184225

185226
cidrImporterIpv4, cidrImporterIpv6, err := splitIpv4Ipv6Cidrs(&api.Importer)
186227
if err != nil {
187-
return err
228+
return diag.FromErr(err)
188229
}
189230

190231
cidrActionsIpv4, cidrActionsIpv6, err := splitIpv4Ipv6Cidrs(&api.Actions)
191232
if err != nil {
192-
return err
233+
return diag.FromErr(err)
234+
}
235+
236+
cidrActionsMacosIpv4, cidrActionsMacosIpv6, err := splitIpv4Ipv6Cidrs(&api.ActionsMacos)
237+
if err != nil {
238+
return diag.FromErr(err)
239+
}
240+
241+
cidrGithubEnterpriseImporterIpv4, cidrGithubEnterpriseImporterIpv6, err := splitIpv4Ipv6Cidrs(&api.GithubEnterpriseImporter)
242+
if err != nil {
243+
return diag.FromErr(err)
193244
}
194245

195246
cidrDependabotIpv4, cidrDependabotIpv6, err := splitIpv4Ipv6Cidrs(&api.Dependabot)
196247
if err != nil {
197-
return err
248+
return diag.FromErr(err)
198249
}
199250

200251
cidrWebIpv4, cidrWebIpv6, err := splitIpv4Ipv6Cidrs(&api.Web)
201252
if err != nil {
202-
return err
253+
return diag.FromErr(err)
203254
}
204255

205256
cidrApiIpv4, cidrApiIpv6, err := splitIpv4Ipv6Cidrs(&api.API)
206257
if err != nil {
207-
return err
258+
return diag.FromErr(err)
208259
}
209260

210261
if len(api.Hooks)+len(api.Git)+len(api.Pages)+len(api.Importer)+len(api.Actions)+len(api.Dependabot) > 0 {
211262
d.SetId("github-ip-ranges")
212263
}
213264
if len(api.Hooks) > 0 {
214-
err = d.Set("hooks", api.Hooks)
215-
if err != nil {
216-
return err
265+
if err := d.Set("hooks", api.Hooks); err != nil {
266+
return diag.FromErr(err)
217267
}
218-
err = d.Set("hooks_ipv4", cidrHooksIpv4)
219-
if err != nil {
220-
return err
268+
if err := d.Set("hooks_ipv4", cidrHooksIpv4); err != nil {
269+
return diag.FromErr(err)
221270
}
222-
err = d.Set("hooks_ipv6", cidrHooksIpv6)
223-
if err != nil {
224-
return err
271+
if err := d.Set("hooks_ipv6", cidrHooksIpv6); err != nil {
272+
return diag.FromErr(err)
225273
}
226274
}
227275
if len(api.Git) > 0 {
228-
err = d.Set("git", api.Git)
229-
if err != nil {
230-
return err
276+
if err := d.Set("git", api.Git); err != nil {
277+
return diag.FromErr(err)
231278
}
232-
err = d.Set("git_ipv4", cidrGitIpv4)
233-
if err != nil {
234-
return err
279+
if err := d.Set("git_ipv4", cidrGitIpv4); err != nil {
280+
return diag.FromErr(err)
235281
}
236-
err = d.Set("git_ipv6", cidrGitIpv6)
237-
if err != nil {
238-
return err
282+
if err := d.Set("git_ipv6", cidrGitIpv6); err != nil {
283+
return diag.FromErr(err)
239284
}
240285
}
241286
if len(api.Packages) > 0 {
242-
_ = d.Set("packages", api.Packages)
243-
_ = d.Set("packages_ipv4", cidrPackagesIpv4)
244-
_ = d.Set("packages_ipv6", cidrPackagesIpv6)
287+
if err := d.Set("packages", api.Packages); err != nil {
288+
return diag.FromErr(err)
289+
}
290+
if err := d.Set("packages_ipv4", cidrPackagesIpv4); err != nil {
291+
return diag.FromErr(err)
292+
}
293+
if err := d.Set("packages_ipv6", cidrPackagesIpv6); err != nil {
294+
return diag.FromErr(err)
295+
}
245296
}
246297
if len(api.Pages) > 0 {
247-
err = d.Set("pages", api.Pages)
248-
if err != nil {
249-
return err
298+
if err := d.Set("pages", api.Pages); err != nil {
299+
return diag.FromErr(err)
250300
}
251-
err = d.Set("pages_ipv4", cidrPagesIpv4)
252-
if err != nil {
253-
return err
301+
if err := d.Set("pages_ipv4", cidrPagesIpv4); err != nil {
302+
return diag.FromErr(err)
254303
}
255-
err = d.Set("pages_ipv6", cidrPagesIpv6)
256-
if err != nil {
257-
return err
304+
if err := d.Set("pages_ipv6", cidrPagesIpv6); err != nil {
305+
return diag.FromErr(err)
258306
}
259307
}
260308
if len(api.Importer) > 0 {
261-
err = d.Set("importer", api.Importer)
262-
if err != nil {
263-
return err
309+
if err := d.Set("importer", api.Importer); err != nil {
310+
return diag.FromErr(err)
264311
}
265-
err = d.Set("importer_ipv4", cidrImporterIpv4)
266-
if err != nil {
267-
return err
312+
if err := d.Set("importer_ipv4", cidrImporterIpv4); err != nil {
313+
return diag.FromErr(err)
268314
}
269-
err = d.Set("importer_ipv6", cidrImporterIpv6)
270-
if err != nil {
271-
return err
315+
if err := d.Set("importer_ipv6", cidrImporterIpv6); err != nil {
316+
return diag.FromErr(err)
272317
}
273318
}
274319
if len(api.Actions) > 0 {
275-
err = d.Set("actions", api.Actions)
276-
if err != nil {
277-
return err
320+
if err := d.Set("actions", api.Actions); err != nil {
321+
return diag.FromErr(err)
278322
}
279-
err = d.Set("actions_ipv4", cidrActionsIpv4)
280-
if err != nil {
281-
return err
323+
if err := d.Set("actions_ipv4", cidrActionsIpv4); err != nil {
324+
return diag.FromErr(err)
282325
}
283-
err = d.Set("actions_ipv6", cidrActionsIpv6)
284-
if err != nil {
285-
return err
326+
if err := d.Set("actions_ipv6", cidrActionsIpv6); err != nil {
327+
return diag.FromErr(err)
328+
}
329+
}
330+
if len(api.ActionsMacos) > 0 {
331+
if err := d.Set("actions_macos", api.ActionsMacos); err != nil {
332+
return diag.FromErr(err)
333+
}
334+
if err := d.Set("actions_macos_ipv4", cidrActionsMacosIpv4); err != nil {
335+
return diag.FromErr(err)
336+
}
337+
if err := d.Set("actions_macos_ipv6", cidrActionsMacosIpv6); err != nil {
338+
return diag.FromErr(err)
339+
}
340+
}
341+
if len(api.GithubEnterpriseImporter) > 0 {
342+
if err := d.Set("github_enterprise_importer", api.GithubEnterpriseImporter); err != nil {
343+
return diag.FromErr(err)
344+
}
345+
if err := d.Set("github_enterprise_importer_ipv4", cidrGithubEnterpriseImporterIpv4); err != nil {
346+
return diag.FromErr(err)
347+
}
348+
if err := d.Set("github_enterprise_importer_ipv6", cidrGithubEnterpriseImporterIpv6); err != nil {
349+
return diag.FromErr(err)
286350
}
287351
}
288352
if len(api.Dependabot) > 0 {
289-
err = d.Set("dependabot", api.Dependabot)
290-
if err != nil {
291-
return err
353+
if err := d.Set("dependabot", api.Dependabot); err != nil {
354+
return diag.FromErr(err)
292355
}
293-
err = d.Set("dependabot_ipv4", cidrDependabotIpv4)
294-
if err != nil {
295-
return err
356+
if err := d.Set("dependabot_ipv4", cidrDependabotIpv4); err != nil {
357+
return diag.FromErr(err)
296358
}
297-
err = d.Set("dependabot_ipv6", cidrDependabotIpv6)
298-
if err != nil {
299-
return err
359+
if err := d.Set("dependabot_ipv6", cidrDependabotIpv6); err != nil {
360+
return diag.FromErr(err)
300361
}
301362
}
302363
if len(api.Web) > 0 {
303-
err = d.Set("web", api.Web)
304-
if err != nil {
305-
return err
364+
if err := d.Set("web", api.Web); err != nil {
365+
return diag.FromErr(err)
306366
}
307-
err = d.Set("web_ipv4", cidrWebIpv4)
308-
if err != nil {
309-
return err
367+
if err := d.Set("web_ipv4", cidrWebIpv4); err != nil {
368+
return diag.FromErr(err)
310369
}
311-
err = d.Set("web_ipv6", cidrWebIpv6)
312-
if err != nil {
313-
return err
370+
if err := d.Set("web_ipv6", cidrWebIpv6); err != nil {
371+
return diag.FromErr(err)
314372
}
315373
}
316374
if len(api.API) > 0 {
317-
err = d.Set("api", api.API)
318-
if err != nil {
319-
return err
375+
if err := d.Set("api", api.API); err != nil {
376+
return diag.FromErr(err)
320377
}
321-
err = d.Set("api_ipv4", cidrApiIpv4)
322-
if err != nil {
323-
return err
378+
if err := d.Set("api_ipv4", cidrApiIpv4); err != nil {
379+
return diag.FromErr(err)
324380
}
325-
err = d.Set("api_ipv6", cidrApiIpv6)
326-
if err != nil {
327-
return err
381+
if err := d.Set("api_ipv6", cidrApiIpv6); err != nil {
382+
return diag.FromErr(err)
328383
}
329384
}
330385

0 commit comments

Comments
 (0)