Skip to content
This repository was archived by the owner on Mar 3, 2026. It is now read-only.

Commit d942ce0

Browse files
nikola-jokicunpollito
authored andcommitted
Trim repo/org/enterprise to 63 characters in label values (actions#2657)
1 parent 96a712f commit d942ce0

2 files changed

Lines changed: 96 additions & 20 deletions

File tree

controllers/actions.github.com/resourcebuilder.go

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,26 +63,24 @@ func (b *resourceBuilder) newAutoScalingListener(autoscalingRunnerSet *v1alpha1.
6363
effectiveMinRunners = *autoscalingRunnerSet.Spec.MinRunners
6464
}
6565

66-
githubConfig, err := actions.ParseGitHubConfigFromURL(autoscalingRunnerSet.Spec.GitHubConfigUrl)
67-
if err != nil {
68-
return nil, fmt.Errorf("failed to parse github config from url: %v", err)
66+
labels := map[string]string{
67+
LabelKeyGitHubScaleSetNamespace: autoscalingRunnerSet.Namespace,
68+
LabelKeyGitHubScaleSetName: autoscalingRunnerSet.Name,
69+
LabelKeyKubernetesPartOf: labelValueKubernetesPartOf,
70+
LabelKeyKubernetesComponent: "runner-scale-set-listener",
71+
LabelKeyKubernetesVersion: autoscalingRunnerSet.Labels[LabelKeyKubernetesVersion],
72+
labelKeyRunnerSpecHash: autoscalingRunnerSet.ListenerSpecHash(),
73+
}
74+
75+
if err := applyGitHubURLLabels(autoscalingRunnerSet.Spec.GitHubConfigUrl, labels); err != nil {
76+
return nil, fmt.Errorf("failed to apply GitHub URL labels: %v", err)
6977
}
7078

7179
autoscalingListener := &v1alpha1.AutoscalingListener{
7280
ObjectMeta: metav1.ObjectMeta{
7381
Name: scaleSetListenerName(autoscalingRunnerSet),
7482
Namespace: namespace,
75-
Labels: map[string]string{
76-
LabelKeyGitHubScaleSetNamespace: autoscalingRunnerSet.Namespace,
77-
LabelKeyGitHubScaleSetName: autoscalingRunnerSet.Name,
78-
LabelKeyKubernetesPartOf: labelValueKubernetesPartOf,
79-
LabelKeyKubernetesComponent: "runner-scale-set-listener",
80-
LabelKeyKubernetesVersion: autoscalingRunnerSet.Labels[LabelKeyKubernetesVersion],
81-
LabelKeyGitHubEnterprise: githubConfig.Enterprise,
82-
LabelKeyGitHubOrganization: githubConfig.Organization,
83-
LabelKeyGitHubRepository: githubConfig.Repository,
84-
labelKeyRunnerSpecHash: autoscalingRunnerSet.ListenerSpecHash(),
85-
},
83+
Labels: labels,
8684
},
8785
Spec: v1alpha1.AutoscalingListenerSpec{
8886
GitHubConfigUrl: autoscalingRunnerSet.Spec.GitHubConfigUrl,
@@ -323,7 +321,7 @@ func (b *resourceBuilder) newEphemeralRunnerSet(autoscalingRunnerSet *v1alpha1.A
323321
}
324322
runnerSpecHash := autoscalingRunnerSet.RunnerSetSpecHash()
325323

326-
newLabels := map[string]string{
324+
labels := map[string]string{
327325
labelKeyRunnerSpecHash: runnerSpecHash,
328326
LabelKeyKubernetesPartOf: labelValueKubernetesPartOf,
329327
LabelKeyKubernetesComponent: "runner-set",
@@ -332,7 +330,7 @@ func (b *resourceBuilder) newEphemeralRunnerSet(autoscalingRunnerSet *v1alpha1.A
332330
LabelKeyGitHubScaleSetNamespace: autoscalingRunnerSet.Namespace,
333331
}
334332

335-
if err := applyGitHubURLLabels(autoscalingRunnerSet.Spec.GitHubConfigUrl, newLabels); err != nil {
333+
if err := applyGitHubURLLabels(autoscalingRunnerSet.Spec.GitHubConfigUrl, labels); err != nil {
336334
return nil, fmt.Errorf("failed to apply GitHub URL labels: %v", err)
337335
}
338336

@@ -345,7 +343,7 @@ func (b *resourceBuilder) newEphemeralRunnerSet(autoscalingRunnerSet *v1alpha1.A
345343
ObjectMeta: metav1.ObjectMeta{
346344
GenerateName: autoscalingRunnerSet.ObjectMeta.Name + "-",
347345
Namespace: autoscalingRunnerSet.ObjectMeta.Namespace,
348-
Labels: newLabels,
346+
Labels: labels,
349347
Annotations: newAnnotations,
350348
},
351349
Spec: v1alpha1.EphemeralRunnerSetSpec{
@@ -545,14 +543,23 @@ func applyGitHubURLLabels(url string, labels map[string]string) error {
545543
}
546544

547545
if len(githubConfig.Enterprise) > 0 {
548-
labels[LabelKeyGitHubEnterprise] = githubConfig.Enterprise
546+
labels[LabelKeyGitHubEnterprise] = trimLabelValue(githubConfig.Enterprise)
549547
}
550548
if len(githubConfig.Organization) > 0 {
551-
labels[LabelKeyGitHubOrganization] = githubConfig.Organization
549+
labels[LabelKeyGitHubOrganization] = trimLabelValue(githubConfig.Organization)
552550
}
553551
if len(githubConfig.Repository) > 0 {
554-
labels[LabelKeyGitHubRepository] = githubConfig.Repository
552+
labels[LabelKeyGitHubRepository] = trimLabelValue(githubConfig.Repository)
555553
}
556554

557555
return nil
558556
}
557+
558+
const trimLabelVauleSuffix = "-trim"
559+
560+
func trimLabelValue(val string) string {
561+
if len(val) > 63 {
562+
return val[:63-len(trimLabelVauleSuffix)] + trimLabelVauleSuffix
563+
}
564+
return val
565+
}

controllers/actions.github.com/resourcebuilder_test.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package actionsgithubcom
22

33
import (
44
"context"
5+
"fmt"
6+
"strings"
57
"testing"
68

79
"github.com/actions/actions-runner-controller/apis/actions.github.com/v1alpha1"
@@ -91,3 +93,70 @@ func TestLabelPropagation(t *testing.T) {
9193
assert.Equal(t, ephemeralRunner.Labels[key], pod.Labels[key])
9294
}
9395
}
96+
97+
func TestGitHubURLTrimLabelValues(t *testing.T) {
98+
enterprise := strings.Repeat("a", 64)
99+
organization := strings.Repeat("b", 64)
100+
repository := strings.Repeat("c", 64)
101+
102+
autoscalingRunnerSet := v1alpha1.AutoscalingRunnerSet{
103+
ObjectMeta: metav1.ObjectMeta{
104+
Name: "test-scale-set",
105+
Namespace: "test-ns",
106+
Labels: map[string]string{
107+
LabelKeyKubernetesPartOf: labelValueKubernetesPartOf,
108+
LabelKeyKubernetesVersion: "0.2.0",
109+
},
110+
Annotations: map[string]string{
111+
runnerScaleSetIdAnnotationKey: "1",
112+
AnnotationKeyGitHubRunnerGroupName: "test-group",
113+
},
114+
},
115+
}
116+
117+
t.Run("org/repo", func(t *testing.T) {
118+
autoscalingRunnerSet := autoscalingRunnerSet.DeepCopy()
119+
autoscalingRunnerSet.Spec = v1alpha1.AutoscalingRunnerSetSpec{
120+
GitHubConfigUrl: fmt.Sprintf("https://github.com/%s/%s", organization, repository),
121+
}
122+
123+
var b resourceBuilder
124+
ephemeralRunnerSet, err := b.newEphemeralRunnerSet(autoscalingRunnerSet)
125+
require.NoError(t, err)
126+
assert.Len(t, ephemeralRunnerSet.Labels[LabelKeyGitHubEnterprise], 0)
127+
assert.Len(t, ephemeralRunnerSet.Labels[LabelKeyGitHubOrganization], 63)
128+
assert.Len(t, ephemeralRunnerSet.Labels[LabelKeyGitHubRepository], 63)
129+
assert.True(t, strings.HasSuffix(ephemeralRunnerSet.Labels[LabelKeyGitHubOrganization], trimLabelVauleSuffix))
130+
assert.True(t, strings.HasSuffix(ephemeralRunnerSet.Labels[LabelKeyGitHubRepository], trimLabelVauleSuffix))
131+
132+
listener, err := b.newAutoScalingListener(autoscalingRunnerSet, ephemeralRunnerSet, autoscalingRunnerSet.Namespace, "test:latest", nil)
133+
require.NoError(t, err)
134+
assert.Len(t, listener.Labels[LabelKeyGitHubEnterprise], 0)
135+
assert.Len(t, listener.Labels[LabelKeyGitHubOrganization], 63)
136+
assert.Len(t, listener.Labels[LabelKeyGitHubRepository], 63)
137+
assert.True(t, strings.HasSuffix(ephemeralRunnerSet.Labels[LabelKeyGitHubOrganization], trimLabelVauleSuffix))
138+
assert.True(t, strings.HasSuffix(ephemeralRunnerSet.Labels[LabelKeyGitHubRepository], trimLabelVauleSuffix))
139+
})
140+
141+
t.Run("enterprise", func(t *testing.T) {
142+
autoscalingRunnerSet := autoscalingRunnerSet.DeepCopy()
143+
autoscalingRunnerSet.Spec = v1alpha1.AutoscalingRunnerSetSpec{
144+
GitHubConfigUrl: fmt.Sprintf("https://github.com/enterprises/%s", enterprise),
145+
}
146+
147+
var b resourceBuilder
148+
ephemeralRunnerSet, err := b.newEphemeralRunnerSet(autoscalingRunnerSet)
149+
require.NoError(t, err)
150+
assert.Len(t, ephemeralRunnerSet.Labels[LabelKeyGitHubEnterprise], 63)
151+
assert.True(t, strings.HasSuffix(ephemeralRunnerSet.Labels[LabelKeyGitHubEnterprise], trimLabelVauleSuffix))
152+
assert.Len(t, ephemeralRunnerSet.Labels[LabelKeyGitHubOrganization], 0)
153+
assert.Len(t, ephemeralRunnerSet.Labels[LabelKeyGitHubRepository], 0)
154+
155+
listener, err := b.newAutoScalingListener(autoscalingRunnerSet, ephemeralRunnerSet, autoscalingRunnerSet.Namespace, "test:latest", nil)
156+
require.NoError(t, err)
157+
assert.Len(t, listener.Labels[LabelKeyGitHubEnterprise], 63)
158+
assert.True(t, strings.HasSuffix(ephemeralRunnerSet.Labels[LabelKeyGitHubEnterprise], trimLabelVauleSuffix))
159+
assert.Len(t, listener.Labels[LabelKeyGitHubOrganization], 0)
160+
assert.Len(t, listener.Labels[LabelKeyGitHubRepository], 0)
161+
})
162+
}

0 commit comments

Comments
 (0)