Skip to content

Commit faa7c93

Browse files
committed
apply review and migrate to new test framework
1 parent 3b2f0f6 commit faa7c93

8 files changed

Lines changed: 89 additions & 75 deletions

github/data_source_github_enterprise_actions_hosted_runner_test.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,34 @@ import (
44
"fmt"
55
"testing"
66

7+
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
78
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-testing/knownvalue"
10+
"github.com/hashicorp/terraform-plugin-testing/statecheck"
11+
"github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
812
)
913

1014
func TestAccGithubEnterpriseActionsHostedRunnerDataSource(t *testing.T) {
1115
t.Run("gets a specific enterprise hosted runner by ID", func(t *testing.T) {
16+
randomID := acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum)
1217
config := fmt.Sprintf(`
1318
data "github_enterprise" "enterprise" {
1419
slug = "%s"
1520
}
1621
1722
resource "github_enterprise_actions_runner_group" "test" {
1823
enterprise_slug = data.github_enterprise.enterprise.slug
19-
name = "test-runner-group"
24+
name = "%srunner-group-%s"
2025
visibility = "all"
2126
}
2227
2328
resource "github_enterprise_actions_hosted_runner" "test" {
2429
enterprise_slug = data.github_enterprise.enterprise.slug
25-
name = "test-runner-for-datasource"
30+
name = "%srunner-datasource-%s"
2631
2732
image {
33+
# GitHub-owned Ubuntu Latest 24.04 image ID
34+
# To list available images: GET /enterprises/{enterprise}/actions/hosted-runners/images/github-owned
2835
id = "2306"
2936
source = "github"
3037
}
@@ -37,22 +44,22 @@ func TestAccGithubEnterpriseActionsHostedRunnerDataSource(t *testing.T) {
3744
enterprise_slug = data.github_enterprise.enterprise.slug
3845
runner_id = github_enterprise_actions_hosted_runner.test.runner_id
3946
}
40-
`, testAccConf.enterpriseSlug)
47+
`, testAccConf.enterpriseSlug, testResourcePrefix, randomID, testResourcePrefix, randomID)
4148

4249
resource.Test(t, resource.TestCase{
4350
PreCheck: func() { skipUnlessMode(t, enterprise) },
4451
ProviderFactories: providerFactories,
4552
Steps: []resource.TestStep{
4653
{
4754
Config: config,
48-
Check: resource.ComposeTestCheckFunc(
49-
resource.TestCheckResourceAttr("data.github_enterprise_actions_hosted_runner.test", "name", "test-runner-for-datasource"),
50-
resource.TestCheckResourceAttrSet("data.github_enterprise_actions_hosted_runner.test", "runner_id"),
51-
resource.TestCheckResourceAttrSet("data.github_enterprise_actions_hosted_runner.test", "status"),
52-
resource.TestCheckResourceAttrSet("data.github_enterprise_actions_hosted_runner.test", "platform"),
53-
resource.TestCheckResourceAttr("data.github_enterprise_actions_hosted_runner.test", "image_details.0.id", "2306"),
54-
resource.TestCheckResourceAttr("data.github_enterprise_actions_hosted_runner.test", "machine_size_details.0.id", "4-core"),
55-
),
55+
ConfigStateChecks: []statecheck.StateCheck{
56+
statecheck.ExpectKnownValue("data.github_enterprise_actions_hosted_runner.test", tfjsonpath.New("name"), knownvalue.StringExact(fmt.Sprintf("%srunner-datasource-%s", testResourcePrefix, randomID))),
57+
statecheck.ExpectKnownValue("data.github_enterprise_actions_hosted_runner.test", tfjsonpath.New("runner_id"), knownvalue.NotNull()),
58+
statecheck.ExpectKnownValue("data.github_enterprise_actions_hosted_runner.test", tfjsonpath.New("status"), knownvalue.NotNull()),
59+
statecheck.ExpectKnownValue("data.github_enterprise_actions_hosted_runner.test", tfjsonpath.New("platform"), knownvalue.NotNull()),
60+
statecheck.ExpectKnownValue("data.github_enterprise_actions_hosted_runner.test", tfjsonpath.New("image_details").AtSliceIndex(0).AtMapKey("id"), knownvalue.StringExact("2306")),
61+
statecheck.ExpectKnownValue("data.github_enterprise_actions_hosted_runner.test", tfjsonpath.New("machine_size_details").AtSliceIndex(0).AtMapKey("id"), knownvalue.StringExact("4-core")),
62+
},
5663
},
5764
},
5865
})

github/data_source_github_enterprise_actions_hosted_runners.go

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"time"
66

7-
"github.com/google/go-github/v82/github"
7+
"github.com/google/go-github/v84/github"
88
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
99
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1010
)
@@ -140,22 +140,15 @@ func dataSourceGithubEnterpriseActionsHostedRunnersRead(ctx context.Context, d *
140140

141141
enterpriseSlug := d.Get("enterprise_slug").(string)
142142

143-
// List all hosted runners with pagination
144-
opts := &github.ListOptions{PerPage: maxPerPage}
143+
// List all hosted runners using the iterator for automatic pagination
145144
var allRunners []*github.HostedRunner
146-
147-
for {
148-
runners, resp, err := client.Enterprise.ListHostedRunners(ctx, enterpriseSlug, opts)
145+
for runner, err := range client.Enterprise.ListHostedRunnersIter(ctx, enterpriseSlug, nil) {
149146
if err != nil {
150147
return diag.Errorf("error listing enterprise hosted runners: %s", err.Error())
151148
}
152-
153-
allRunners = append(allRunners, runners.Runners...)
154-
155-
if resp.NextPage == 0 {
156-
break
149+
if runner != nil {
150+
allRunners = append(allRunners, runner)
157151
}
158-
opts.Page = resp.NextPage
159152
}
160153

161154
// Set the ID as the enterprise slug

github/data_source_github_enterprise_actions_hosted_runners_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import (
55
"testing"
66

77
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
8+
"github.com/hashicorp/terraform-plugin-testing/knownvalue"
9+
"github.com/hashicorp/terraform-plugin-testing/statecheck"
10+
"github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
811
)
912

1013
func TestAccGithubEnterpriseActionsHostedRunnersDataSource(t *testing.T) {
@@ -21,9 +24,9 @@ func TestAccGithubEnterpriseActionsHostedRunnersDataSource(t *testing.T) {
2124
Steps: []resource.TestStep{
2225
{
2326
Config: config,
24-
Check: resource.ComposeTestCheckFunc(
25-
resource.TestCheckResourceAttrSet("data.github_enterprise_actions_hosted_runners.test", "runners.#"),
26-
),
27+
ConfigStateChecks: []statecheck.StateCheck{
28+
statecheck.ExpectKnownValue("data.github_enterprise_actions_hosted_runners.test", tfjsonpath.New("runners"), knownvalue.NotNull()),
29+
},
2730
},
2831
},
2932
})

github/resource_github_enterprise_actions_hosted_runner.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"strconv"
88
"time"
99

10-
"github.com/google/go-github/v82/github"
10+
"github.com/google/go-github/v84/github"
1111
"github.com/hashicorp/terraform-plugin-log/tflog"
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1313
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
@@ -204,7 +204,7 @@ func resourceGithubEnterpriseActionsHostedRunnerCreate(ctx context.Context, d *s
204204
enterpriseSlug := d.Get("enterprise_slug").(string)
205205

206206
// Build request using SDK struct
207-
request := &github.HostedRunnerRequest{
207+
request := github.CreateHostedRunnerRequest{
208208
Name: d.Get("name").(string),
209209
Size: d.Get("size").(string),
210210
RunnerGroupID: int64(d.Get("runner_group_id").(int)),
@@ -215,11 +215,13 @@ func resourceGithubEnterpriseActionsHostedRunnerCreate(ctx context.Context, d *s
215215
}
216216

217217
if v, ok := d.GetOk("maximum_runners"); ok {
218-
request.MaximumRunners = int64(v.(int))
218+
maxRunners := int64(v.(int))
219+
request.MaximumRunners = github.Ptr(maxRunners)
219220
}
220221

221222
if v, ok := d.GetOk("public_ip_enabled"); ok {
222-
request.EnableStaticIP = v.(bool)
223+
enableStaticIP := v.(bool)
224+
request.EnableStaticIP = &enableStaticIP
223225
}
224226

225227
runner, _, err := client.Enterprise.CreateHostedRunner(ctx, enterpriseSlug, request)
@@ -400,15 +402,20 @@ func resourceGithubEnterpriseActionsHostedRunnerUpdate(ctx context.Context, d *s
400402
return diag.Errorf("invalid runner ID %q: %s", runnerIDStr, err.Error())
401403
}
402404

403-
request := &github.HostedRunnerRequest{
404-
Name: d.Get("name").(string),
405-
Size: d.Get("size").(string),
406-
RunnerGroupID: int64(d.Get("runner_group_id").(int)),
407-
MaximumRunners: int64(d.Get("maximum_runners").(int)),
408-
EnableStaticIP: d.Get("public_ip_enabled").(bool),
405+
name := d.Get("name").(string)
406+
size := d.Get("size").(string)
407+
runnerGroupID := int64(d.Get("runner_group_id").(int))
408+
maximumRunners := int64(d.Get("maximum_runners").(int))
409+
enableStaticIP := d.Get("public_ip_enabled").(bool)
410+
request := github.UpdateHostedRunnerRequest{
411+
Name: &name,
412+
Size: &size,
413+
RunnerGroupID: &runnerGroupID,
414+
MaximumRunners: &maximumRunners,
415+
EnableStaticIP: &enableStaticIP,
409416
}
410417

411-
_, _, err = client.Enterprise.UpdateHostedRunner(ctx, enterpriseSlug, runnerID, *request)
418+
_, _, err = client.Enterprise.UpdateHostedRunner(ctx, enterpriseSlug, runnerID, request)
412419
if err != nil {
413420
return diag.Errorf("error updating enterprise hosted runner: %s", err.Error())
414421
}

github/resource_github_enterprise_actions_hosted_runner_test.go

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import (
66

77
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
88
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-testing/knownvalue"
10+
"github.com/hashicorp/terraform-plugin-testing/statecheck"
11+
"github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
912
)
1013

1114
func TestAccGithubEnterpriseActionsHostedRunner(t *testing.T) {
@@ -46,21 +49,21 @@ func TestAccGithubEnterpriseActionsHostedRunner(t *testing.T) {
4649
Steps: []resource.TestStep{
4750
{
4851
Config: config,
49-
Check: resource.ComposeTestCheckFunc(
50-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "enterprise_slug", testAccConf.enterpriseSlug),
51-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "name", fmt.Sprintf("tf-acc-test-%s", randomID)),
52-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "size", "4-core"),
53-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "image.0.id", "2306"),
54-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "image.0.source", "github"),
55-
resource.TestCheckResourceAttrSet("github_enterprise_actions_hosted_runner.test", "id"),
56-
resource.TestCheckResourceAttrSet("github_enterprise_actions_hosted_runner.test", "status"),
57-
resource.TestCheckResourceAttrSet("github_enterprise_actions_hosted_runner.test", "platform"),
58-
resource.TestCheckResourceAttrSet("github_enterprise_actions_hosted_runner.test", "image.0.size_gb"),
59-
resource.TestCheckResourceAttrSet("github_enterprise_actions_hosted_runner.test", "machine_size_details.0.id"),
60-
resource.TestCheckResourceAttrSet("github_enterprise_actions_hosted_runner.test", "machine_size_details.0.cpu_cores"),
61-
resource.TestCheckResourceAttrSet("github_enterprise_actions_hosted_runner.test", "machine_size_details.0.memory_gb"),
62-
resource.TestCheckResourceAttrSet("github_enterprise_actions_hosted_runner.test", "machine_size_details.0.storage_gb"),
63-
),
52+
ConfigStateChecks: []statecheck.StateCheck{
53+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("enterprise_slug"), knownvalue.StringExact(testAccConf.enterpriseSlug)),
54+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("name"), knownvalue.StringExact(fmt.Sprintf("tf-acc-test-%s", randomID))),
55+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("size"), knownvalue.StringExact("4-core")),
56+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("image").AtSliceIndex(0).AtMapKey("id"), knownvalue.StringExact("2306")),
57+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("image").AtSliceIndex(0).AtMapKey("source"), knownvalue.StringExact("github")),
58+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("id"), knownvalue.NotNull()),
59+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("status"), knownvalue.NotNull()),
60+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("platform"), knownvalue.NotNull()),
61+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("image").AtSliceIndex(0).AtMapKey("size_gb"), knownvalue.NotNull()),
62+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("machine_size_details").AtSliceIndex(0).AtMapKey("id"), knownvalue.NotNull()),
63+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("machine_size_details").AtSliceIndex(0).AtMapKey("cpu_cores"), knownvalue.NotNull()),
64+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("machine_size_details").AtSliceIndex(0).AtMapKey("memory_gb"), knownvalue.NotNull()),
65+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("machine_size_details").AtSliceIndex(0).AtMapKey("storage_gb"), knownvalue.NotNull()),
66+
},
6467
},
6568
},
6669
})
@@ -127,21 +130,21 @@ func TestAccGithubEnterpriseActionsHostedRunner(t *testing.T) {
127130
Steps: []resource.TestStep{
128131
{
129132
Config: config,
130-
Check: resource.ComposeTestCheckFunc(
131-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "name", fmt.Sprintf("tf-acc-test-%s", randomID)),
132-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "size", "4-core"),
133-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "maximum_runners", "5"),
134-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "public_ip_enabled", "false"),
135-
),
133+
ConfigStateChecks: []statecheck.StateCheck{
134+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("name"), knownvalue.StringExact(fmt.Sprintf("tf-acc-test-%s", randomID))),
135+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("size"), knownvalue.StringExact("4-core")),
136+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("maximum_runners"), knownvalue.Int64Exact(5)),
137+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("public_ip_enabled"), knownvalue.Bool(false)),
138+
},
136139
},
137140
{
138141
Config: configUpdated,
139-
Check: resource.ComposeTestCheckFunc(
140-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "name", fmt.Sprintf("tf-acc-test-updated-%s", randomID)),
141-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "size", "8-core"),
142-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "maximum_runners", "10"),
143-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "public_ip_enabled", "true"),
144-
),
142+
ConfigStateChecks: []statecheck.StateCheck{
143+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("name"), knownvalue.StringExact(fmt.Sprintf("tf-acc-test-updated-%s", randomID))),
144+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("size"), knownvalue.StringExact("8-core")),
145+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("maximum_runners"), knownvalue.Int64Exact(10)),
146+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("public_ip_enabled"), knownvalue.Bool(true)),
147+
},
145148
},
146149
},
147150
})
@@ -179,11 +182,11 @@ func TestAccGithubEnterpriseActionsHostedRunner(t *testing.T) {
179182
Steps: []resource.TestStep{
180183
{
181184
Config: config,
182-
Check: resource.ComposeTestCheckFunc(
183-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "enterprise_slug", testAccConf.enterpriseSlug),
184-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "name", fmt.Sprintf("tf-acc-test-%s", randomID)),
185-
resource.TestCheckResourceAttr("github_enterprise_actions_hosted_runner.test", "size", "4-core"),
186-
),
185+
ConfigStateChecks: []statecheck.StateCheck{
186+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("enterprise_slug"), knownvalue.StringExact(testAccConf.enterpriseSlug)),
187+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("name"), knownvalue.StringExact(fmt.Sprintf("tf-acc-test-%s", randomID))),
188+
statecheck.ExpectKnownValue("github_enterprise_actions_hosted_runner.test", tfjsonpath.New("size"), knownvalue.StringExact("4-core")),
189+
},
187190
},
188191
{
189192
ResourceName: "github_enterprise_actions_hosted_runner.test",

github/test-fixtures/domain.csr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ pcB8Yh08z0KhE7i2h81SkcBbhKbPHS1nq5jGcheYOFlAXWITrnSp0sxQz1Oyy1C0
9393
q93JAgMBAAGgADANBgkqhkiG9w0BAQUFAAOCAgEAAWpCMrvnELyUr8mo3VX+r2Yn
9494
mNsCJ+waz4kQAj3dxc1R/YgwQjEzPRMgX8wQHc83QE3Kfwiu6L/hCYi2+LyT1Q6q
9595
NVUwcRchisf/vO5wrsdMEjWU6GSNsOgCDc6xKvg/s8f6JbGWljwDThLbsIUCB05B
96-
iH4h/8pPPv83YqZJAEcjS9VnT033zHIX1QueMiTipQ9z4MF4Hgo1OtcF0nnhVmY+
96+
iH4h/8pPPv84YqZJAEcjS9VnT033zHIX1QueMiTipQ9z4MF4Hgo1OtcF0nnhVmY+
9797
Gx8B4OOEXNdlKn4P/JpIbpTjh+02JC+0SUHQSYBTPnhsQH5cCQ4+Lh2a1sPyxt2+
9898
nqwZOdklVb1n1Fg1R70PrdVI8XA6i0l5qYjiNb6YRmQe4tDvKuG9d1iQMXskSR4z
9999
/3qsp5K93v2MEw/7ZatGg12CBRZnlpjGntWn1lDmqR7/leayB1MEY/q9pjvrA2Ie

github/util_runners.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package github
22

33
import (
4-
"github.com/google/go-github/v82/github"
4+
"github.com/google/go-github/v84/github"
55
)
66

77
func expandHostedRunnerImage(imageList []any) *github.HostedRunnerImage {
@@ -19,10 +19,11 @@ func expandHostedRunnerImage(imageList []any) *github.HostedRunnerImage {
1919
image.Source = source
2020
}
2121
if version, ok := imageMap["version"].(string); ok && version != "" {
22-
image.Version = version
22+
image.Version = &version
2323
} else {
2424
// Default to 'latest' for GitHub-owned images as required by the API
25-
image.Version = "latest"
25+
latest := "latest"
26+
image.Version = &latest
2627
}
2728

2829
return image

website/docs/r/enterprise_actions_hosted_runner.html.markdown

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,10 @@ In addition to the arguments above, the following attributes are exported:
151151

152152
## Import
153153

154-
Enterprise hosted runners can be imported using the format `{enterprise_slug}/{runner_id}`:
154+
Enterprise hosted runners can be imported using the format `{enterprise_slug}:{runner_id}`:
155155

156156
```
157-
$ terraform import github_enterprise_actions_hosted_runner.example my-enterprise/123456
157+
$ terraform import github_enterprise_actions_hosted_runner.example my-enterprise:123456
158158
```
159159

160160
## Notes

0 commit comments

Comments
 (0)