Fix a regression in webhook-based autoscaler (#1596)

The regression resulted in the webhook-based autoscaler be unable to find visible runner groups and therefore unable to scale up and down the target RunnerDeployment/RunnerSet at all when the webhook-based autoscaler was provided GitHub API credentials to enable the runner groups support. This fixes that.

The regression was introduced via #1578 which is not released yet. Users of existing ARC releases are therefore not affected.
This commit is contained in:
Yusuke Kuoka 2022-07-04 20:17:09 +09:00 committed by GitHub
parent 5a9e8545aa
commit bfc5ea4727
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 1 deletions

View File

@ -524,6 +524,7 @@ func (autoscaler *HorizontalRunnerAutoscalerGitHubWebhook) getScaleUpTargetWithF
if autoscaler.GitHubClient != nil {
simu := &simulator.Simulator{
Client: autoscaler.GitHubClient,
Log: log,
}
// Get available organization runner groups and enterprise runner groups for a repository
// These are the sum of runner groups with repository access = All repositories and runner groups

View File

@ -273,8 +273,17 @@ func (c *Client) ListOrganizationRunnerGroupsForRepository(ctx context.Context,
var runnerGroups []*github.RunnerGroup
var opts github.ListOrgRunnerGroupOptions
opts.PerPage = 100
opts.VisibleToRepository = repo
repoName := repo
parts := strings.Split(repo, "/")
if len(parts) == 2 {
repoName = parts[1]
}
// This must be the repo name without the owner part, so in case the repo is "myorg/myrepo" the repo name
// passed to visible_to_repository must be "myrepo".
opts.VisibleToRepository = repoName
for {
list, res, err := c.Actions.ListOrganizationRunnerGroups(ctx, org, &opts)

View File

@ -5,10 +5,12 @@ import (
"fmt"
"github.com/actions-runner-controller/actions-runner-controller/github"
"github.com/go-logr/logr"
)
type Simulator struct {
Client *github.Client
Log logr.Logger
}
func (c *Simulator) GetRunnerGroupsVisibleToRepository(ctx context.Context, org, repo string, managed *VisibleRunnerGroups) (*VisibleRunnerGroups, error) {
@ -24,6 +26,10 @@ func (c *Simulator) GetRunnerGroupsVisibleToRepository(ctx context.Context, org,
return visible, err
}
if c.Log.V(3).Enabled() {
c.Log.V(3).Info("ListOrganizationRunnerGroupsForRepository succeeded", "runerGroups", runnerGroups)
}
for _, runnerGroup := range runnerGroups {
ref := NewRunnerGroupFromGitHub(runnerGroup)