From 4f90a0b7a11be451378c424f048d4ea5bf506e83 Mon Sep 17 00:00:00 2001 From: Vladyslav Miletskyi <33529567+Vladyslav-Miletskyi@users.noreply.github.com> Date: Mon, 22 Nov 2021 17:07:58 +0100 Subject: [PATCH] Harden resource github_actions_runner_group (#970) Resolves #969 #967 --- .../resource_github_actions_runner_group.go | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/github/resource_github_actions_runner_group.go b/github/resource_github_actions_runner_group.go index 4f9928e275..ed1595dbf6 100644 --- a/github/resource_github_actions_runner_group.go +++ b/github/resource_github_actions_runner_group.go @@ -169,15 +169,28 @@ func resourceGithubActionsRunnerGroupRead(d *schema.ResourceData, meta interface d.Set("visibility", runnerGroup.GetVisibility()) log.Printf("[DEBUG] Reading organization runner group repositories: %s (%s)", d.Id(), orgName) - runnerGroupRepositories, _, err := client.Actions.ListRepositoryAccessRunnerGroup(ctx, orgName, runnerGroupID, nil) - if err != nil { - return err + selectedRepositoryIDs := []int64{} + options := github.ListOptions{ + PerPage: maxPerPage, } - selectedRepositoryIDs := []int64{} - for _, repo := range runnerGroupRepositories.Repositories { - selectedRepositoryIDs = append(selectedRepositoryIDs, *repo.ID) + for { + runnerGroupRepositories, resp, err := client.Actions.ListRepositoryAccessRunnerGroup(ctx, orgName, runnerGroupID, &options) + if err != nil { + return err + } + + for _, repo := range runnerGroupRepositories.Repositories { + selectedRepositoryIDs = append(selectedRepositoryIDs, *repo.ID) + } + + if resp.NextPage == 0 { + break + } + + options.Page = resp.NextPage } + log.Printf("[DEBUG] Got selected_repository_ids: %v", selectedRepositoryIDs) d.Set("selected_repository_ids", selectedRepositoryIDs) @@ -212,6 +225,24 @@ func resourceGithubActionsRunnerGroupUpdate(d *schema.ResourceData, meta interfa return err } + selectedRepositories, hasSelectedRepositories := d.GetOk("selected_repository_ids") + selectedRepositoryIDs := []int64{} + + if hasSelectedRepositories { + ids := selectedRepositories.(*schema.Set).List() + + for _, id := range ids { + selectedRepositoryIDs = append(selectedRepositoryIDs, int64(id.(int))) + } + } + + reposOptions := github.SetRepoAccessRunnerGroupRequest{SelectedRepositoryIDs: selectedRepositoryIDs} + + log.Printf("[DEBUG] Updating organization runner group's selected repositries: %s (%s)", d.Id(), orgName) + if _, err := client.Actions.SetRepositoryAccessRunnerGroup(ctx, orgName, runnerGroupID, reposOptions); err != nil { + return err + } + return resourceGithubActionsRunnerGroupRead(d, meta) }