Skip to content

Commit d964a6c

Browse files
committed
fix(scaleset): fix scale set creation 400 error from invalid label types
The GitHub API returns a 400 ArgumentNullException when creating scale sets because Label.Type was set to invalid enum values ("scaleset", "scope"). Leave Type empty so the library defaults to "System", matching the official actions/scaleset examples. Also adds RunnerSetting{DisableUpdate: true} and removes the redundant RunnerGroupName field.
1 parent b6fbaf2 commit d964a6c

File tree

2 files changed

+40
-8
lines changed

2 files changed

+40
-8
lines changed

pkg/scaleset/manager.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,16 +241,15 @@ func (m *Manager) ensureScaleSet(ctx context.Context, client *scaleset.Client, n
241241
// Create new scale set
242242
logger.Logf(false, "[scaleset] creating new scale set: %s", name)
243243

244-
// Generate labels based on target scope
245-
var labels []scaleset.Label
246-
labels = append(labels, scaleset.Label{Type: "scaleset", Name: "scaleset"})
247-
labels = append(labels, scaleset.Label{Type: "scope", Name: target.Scope})
244+
labels := buildScaleSetLabels(name)
248245

249246
scaleSet, err = client.CreateRunnerScaleSet(ctx, &scaleset.RunnerScaleSet{
250-
Name: name,
251-
RunnerGroupID: runnerGroup.ID,
252-
RunnerGroupName: m.cfg.RunnerGroupName,
253-
Labels: labels,
247+
Name: name,
248+
RunnerGroupID: runnerGroup.ID,
249+
Labels: labels,
250+
RunnerSetting: scaleset.RunnerSetting{
251+
DisableUpdate: true,
252+
},
254253
})
255254
if err != nil {
256255
return 0, fmt.Errorf("failed to create scale set: %w", err)
@@ -296,3 +295,12 @@ func sanitizeScaleSetName(prefix, scope string) string {
296295
sanitized = strings.Trim(sanitized, "-")
297296
return fmt.Sprintf("%s-%s", prefix, sanitized)
298297
}
298+
299+
// buildScaleSetLabels creates labels for a scale set.
300+
// Type is left empty so that the library's applyDefaultLabelTypes() sets it to "System".
301+
func buildScaleSetLabels(scaleSetName string) []scaleset.Label {
302+
return []scaleset.Label{
303+
{Name: "self-hosted"},
304+
{Name: scaleSetName},
305+
}
306+
}

pkg/scaleset/manager_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,30 @@ func TestManager_DeferredCleanupDeletesOwnWrapper(t *testing.T) {
220220
}
221221
}
222222

223+
func TestBuildScaleSetLabels(t *testing.T) {
224+
const scaleSetName = "myshoes-myorg-myrepo"
225+
226+
labels := buildScaleSetLabels(scaleSetName)
227+
228+
if len(labels) != 2 {
229+
t.Fatalf("expected 2 labels, got %d", len(labels))
230+
}
231+
232+
// Type must be empty so that the library sets it to "System"
233+
for i, l := range labels {
234+
if l.Type != "" {
235+
t.Errorf("labels[%d].Type = %q, want empty string", i, l.Type)
236+
}
237+
}
238+
239+
if labels[0].Name != "self-hosted" {
240+
t.Errorf("labels[0].Name = %q, want %q", labels[0].Name, "self-hosted")
241+
}
242+
if labels[1].Name != scaleSetName {
243+
t.Errorf("labels[1].Name = %q, want %q", labels[1].Name, scaleSetName)
244+
}
245+
}
246+
223247
func TestManagerConfig_Fields(t *testing.T) {
224248
cfg := ManagerConfig{
225249
AppID: 12345,

0 commit comments

Comments
 (0)