Skip to content

Commit 7685248

Browse files
authored
fix: remove default labels from job labels (#128)
1 parent c9c6029 commit 7685248

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

internal/database/database.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ const (
5555
`
5656
)
5757

58+
// GitHub automatically adds these labels to all self-hosted runner jobs.
59+
// They are stripped from job labels on insertion so they don't interfere
60+
// with flavor matching. The original labels are preserved in the raw payload.
61+
var defaultGitHubLabels = map[string]struct{}{
62+
"self-hosted": {},
63+
"linux": {},
64+
}
65+
5866
var (
5967
ErrNotExist = errors.New("does not exist")
6068
ErrExist = errors.New("already exists")
@@ -172,13 +180,15 @@ func (d *Database) AddJob(ctx context.Context, job *Job) error {
172180
raw = map[string]interface{}{}
173181
}
174182

183+
labels := stripDefaultLabels(job.Labels)
184+
175185
batch := &pgx.Batch{}
176186
batch.Queue(
177187
stmt,
178188
pgx.NamedArgs{
179189
"platform": job.Platform,
180190
"id": job.ID,
181-
"labels": job.Labels,
191+
"labels": labels,
182192
"created_at": job.CreatedAt,
183193
"started_at": job.StartedAt,
184194
"completed_at": job.CompletedAt,
@@ -615,3 +625,13 @@ func (d *Database) Close() {
615625
d.conn.Close()
616626
}
617627
}
628+
629+
func stripDefaultLabels(labels []string) []string {
630+
filtered := make([]string, 0, len(labels))
631+
for _, l := range labels {
632+
if _, ok := defaultGitHubLabels[l]; !ok {
633+
filtered = append(filtered, l)
634+
}
635+
}
636+
return filtered
637+
}

internal/database/database_test.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,8 @@ func TestDatabase_AddJob(t *testing.T) {
214214
assert.NoError(t, db.AddJob(ctx, &job))
215215
assertSingleNotificationReceived(t, pressureUpdates)
216216

217+
job.Labels = []string{"amd64", "large"}
218+
217219
jobs, err := db.ListJobs(ctx, job.Platform)
218220
assert.NoError(t, err)
219221

@@ -304,6 +306,32 @@ func TestDatabase_AddJob_FlavorSelection(t *testing.T) {
304306
assert.Nil(t, jobs[0].AssignedFlavor)
305307
}
306308

309+
// Verify that GitHub's default labels ("self-hosted", "linux") are stripped
310+
// from job labels on insertion, so flavors don't need to include them.
311+
func TestDatabase_AddJob_DefaultLabelsStripped(t *testing.T) {
312+
db := setupDatabase(t)
313+
defer teardownDatabase(t)
314+
ctx := t.Context()
315+
316+
assert.NoError(t, db.AddFlavor(ctx, &Flavor{
317+
Platform: "github",
318+
Name: "github-x64-noble",
319+
Labels: []string{"x64", "noble"},
320+
Priority: 100,
321+
}))
322+
323+
assert.NoError(t, db.AddJob(ctx, &Job{
324+
Platform: "github",
325+
ID: "1",
326+
Labels: []string{"self-hosted", "linux", "x64", "noble"},
327+
}))
328+
329+
jobs, err := db.ListJobs(ctx, "github", ListJobOptions{WithId: "1"})
330+
assert.NoError(t, err)
331+
assert.Equal(t, "github-x64-noble", *jobs[0].AssignedFlavor)
332+
assert.Equal(t, []string{"x64", "noble"}, jobs[0].Labels)
333+
}
334+
307335
func TestDatabase_AddJob_EqualPriority(t *testing.T) {
308336
db := setupDatabase(t)
309337
defer teardownDatabase(t)
@@ -364,13 +392,13 @@ func TestDatabase_AddJob_AssignedFlavor(t *testing.T) {
364392
assert.NoError(t, db.AddFlavor(ctx, &Flavor{
365393
Platform: "github",
366394
Name: "amd64-small",
367-
Labels: []string{"self-hosted", "amd64", "small"},
395+
Labels: []string{"amd64", "small"},
368396
Priority: 0,
369397
}))
370398
assert.NoError(t, db.AddFlavor(ctx, &Flavor{
371399
Platform: "github",
372400
Name: "amd64-large",
373-
Labels: []string{"self-hosted", "amd64", "large"},
401+
Labels: []string{"amd64", "large"},
374402
Priority: 0,
375403
}))
376404
assert.NoError(t, db.AddJob(ctx, &Job{
@@ -405,6 +433,7 @@ func TestDatabase_UpdateJobStarted(t *testing.T) {
405433
assert.NoError(t, db.AddJob(ctx, &job))
406434
assert.NoError(t, db.UpdateJobStarted(ctx, job.Platform, job.ID, startedAt, map[string]interface{}{"in_progress": "in_progress"}))
407435

436+
job.Labels = []string{"amd64", "large"}
408437
job.StartedAt = &startedAt
409438
job.Raw["in_progress"] = "in_progress"
410439

@@ -447,6 +476,7 @@ func TestDatabase_UpdateJobCompleted(t *testing.T) {
447476
assert.NoError(t, db.UpdateJobCompleted(ctx, job.Platform, job.ID, completedAt, map[string]interface{}{"completed": "completed"}))
448477
assertSingleNotificationReceived(t, pressureUpdates)
449478

479+
job.Labels = []string{"amd64", "large"}
450480
job.CompletedAt = &completedAt
451481
job.Raw["completed"] = "completed"
452482

0 commit comments

Comments
 (0)