Trim slash for configure URL. (#2381)

This commit is contained in:
Tingluo Huang 2023-03-09 09:02:05 -05:00 committed by GitHub
parent c5d6842d5f
commit a462ecbe79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 73 additions and 4 deletions

View File

@ -12,7 +12,7 @@ metadata:
labels: labels:
{{- include "gha-runner-scale-set.labels" . | nindent 4 }} {{- include "gha-runner-scale-set.labels" . | nindent 4 }}
spec: spec:
githubConfigUrl: {{ required ".Values.githubConfigUrl is required" .Values.githubConfigUrl }} githubConfigUrl: {{ required ".Values.githubConfigUrl is required" (trimSuffix "/" .Values.githubConfigUrl) }}
githubConfigSecret: {{ include "gha-runner-scale-set.githubsecret" . }} githubConfigSecret: {{ include "gha-runner-scale-set.githubsecret" . }}
{{- with .Values.runnerGroup }} {{- with .Values.runnerGroup }}
runnerGroup: {{ . }} runnerGroup: {{ . }}

View File

@ -869,3 +869,31 @@ func TestTemplateNamingConstraints(t *testing.T) {
}) })
} }
} }
func TestTemplateRenderedGitHubConfigUrlEndsWIthSlash(t *testing.T) {
t.Parallel()
// Path to the helm chart we will test
helmChartPath, err := filepath.Abs("../../gha-runner-scale-set")
require.NoError(t, err)
releaseName := "test-runners"
namespaceName := "test-" + strings.ToLower(random.UniqueId())
options := &helm.Options{
SetValues: map[string]string{
"githubConfigUrl": "https://github.com/actions/",
"githubConfigSecret.github_token": "gh_token12345",
},
KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
}
output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/autoscalingrunnerset.yaml"})
var ars v1alpha1.AutoscalingRunnerSet
helm.UnmarshalK8SYaml(t, output, &ars)
assert.Equal(t, namespaceName, ars.Namespace)
assert.Equal(t, "test-runners", ars.Name)
assert.Equal(t, "https://github.com/actions", ars.Spec.GitHubConfigUrl)
}

View File

@ -29,7 +29,7 @@ type GitHubConfig struct {
} }
func ParseGitHubConfigFromURL(in string) (*GitHubConfig, error) { func ParseGitHubConfigFromURL(in string) (*GitHubConfig, error) {
u, err := url.Parse(in) u, err := url.Parse(strings.Trim(in, "/"))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -45,7 +45,7 @@ func ParseGitHubConfigFromURL(in string) (*GitHubConfig, error) {
invalidURLError := fmt.Errorf("%q: %w", u.String(), ErrInvalidGitHubConfigURL) invalidURLError := fmt.Errorf("%q: %w", u.String(), ErrInvalidGitHubConfigURL)
pathParts := strings.Split(strings.TrimPrefix(u.Path, "/"), "/") pathParts := strings.Split(strings.Trim(u.Path, "/"), "/")
switch len(pathParts) { switch len(pathParts) {
case 1: // Organization case 1: // Organization

View File

@ -3,6 +3,7 @@ package actions_test
import ( import (
"errors" "errors"
"net/url" "net/url"
"strings"
"testing" "testing"
"github.com/actions/actions-runner-controller/github/actions" "github.com/actions/actions-runner-controller/github/actions"
@ -26,6 +27,16 @@ func TestGitHubConfig(t *testing.T) {
IsHosted: true, IsHosted: true,
}, },
}, },
{
configURL: "https://github.com/org/repo/",
expected: &actions.GitHubConfig{
Scope: actions.GitHubScopeRepository,
Enterprise: "",
Organization: "org",
Repository: "repo",
IsHosted: true,
},
},
{ {
configURL: "https://github.com/org", configURL: "https://github.com/org",
expected: &actions.GitHubConfig{ expected: &actions.GitHubConfig{
@ -46,6 +57,16 @@ func TestGitHubConfig(t *testing.T) {
IsHosted: true, IsHosted: true,
}, },
}, },
{
configURL: "https://github.com/enterprises/my-enterprise/",
expected: &actions.GitHubConfig{
Scope: actions.GitHubScopeEnterprise,
Enterprise: "my-enterprise",
Organization: "",
Repository: "",
IsHosted: true,
},
},
{ {
configURL: "https://www.github.com/org", configURL: "https://www.github.com/org",
expected: &actions.GitHubConfig{ expected: &actions.GitHubConfig{
@ -56,6 +77,16 @@ func TestGitHubConfig(t *testing.T) {
IsHosted: true, IsHosted: true,
}, },
}, },
{
configURL: "https://www.github.com/org/",
expected: &actions.GitHubConfig{
Scope: actions.GitHubScopeOrganization,
Enterprise: "",
Organization: "org",
Repository: "",
IsHosted: true,
},
},
{ {
configURL: "https://github.localhost/org", configURL: "https://github.localhost/org",
expected: &actions.GitHubConfig{ expected: &actions.GitHubConfig{
@ -76,11 +107,21 @@ func TestGitHubConfig(t *testing.T) {
IsHosted: false, IsHosted: false,
}, },
}, },
{
configURL: "https://my-ghes.com/org/",
expected: &actions.GitHubConfig{
Scope: actions.GitHubScopeOrganization,
Enterprise: "",
Organization: "org",
Repository: "",
IsHosted: false,
},
},
} }
for _, test := range tests { for _, test := range tests {
t.Run(test.configURL, func(t *testing.T) { t.Run(test.configURL, func(t *testing.T) {
parsedURL, err := url.Parse(test.configURL) parsedURL, err := url.Parse(strings.Trim(test.configURL, "/"))
require.NoError(t, err) require.NoError(t, err)
test.expected.ConfigURL = parsedURL test.expected.ConfigURL = parsedURL