File view with blame information shown in the left gutter beside each line.

barerepo / server / internal/store/labels.go
49 lines · 1.5kb · 133728eaa05486504991b230f9d4c7e986b7defc
log files threads runs releases config jump to file t
133728e barerepo 1mo
1
package store
133728e barerepo 1mo
2
133728e barerepo 1mo
3
import "strings"
133728e barerepo 1mo
4
133728e barerepo 1mo
5
// Satisfies reports whether this machine can take a job that asked for these labels.
133728e barerepo 1mo
6
func (r Runner) Satisfies(want []string) bool {
133728e barerepo 1mo
7
// A job that asks for nothing runs anywhere, which is what [build] command has always done.
133728e barerepo 1mo
8
if len(want) == 0 {
133728e barerepo 1mo
9
return true
133728e barerepo 1mo
10
}
133728e barerepo 1mo
11
for _, label := range want {
133728e barerepo 1mo
12
if !r.has(label) {
133728e barerepo 1mo
13
return false
133728e barerepo 1mo
14
}
133728e barerepo 1mo
15
}
133728e barerepo 1mo
16
return true
133728e barerepo 1mo
17
}
133728e barerepo 1mo
18
133728e barerepo 1mo
19
// has answers one label, translating GitHub's hosted names into what a runner reports about itself.
133728e barerepo 1mo
20
func (r Runner) has(label string) bool {
133728e barerepo 1mo
21
label = strings.ToLower(strings.TrimSpace(label))
133728e barerepo 1mo
22
// Every barerepo runner is self-hosted, so the label that says so is always true here.
133728e barerepo 1mo
23
if label == "self-hosted" {
133728e barerepo 1mo
24
return true
133728e barerepo 1mo
25
}
133728e barerepo 1mo
26
for _, own := range r.Labels {
133728e barerepo 1mo
27
if strings.EqualFold(strings.TrimSpace(own), label) {
133728e barerepo 1mo
28
return true
133728e barerepo 1mo
29
}
133728e barerepo 1mo
30
}
133728e barerepo 1mo
31
if os, ok := hostedOS(label); ok {
133728e barerepo 1mo
32
return strings.EqualFold(r.OS, os)
133728e barerepo 1mo
33
}
133728e barerepo 1mo
34
return strings.EqualFold(r.OS, label) || strings.EqualFold(r.Arch, label)
133728e barerepo 1mo
35
}
133728e barerepo 1mo
36
133728e barerepo 1mo
37
// hostedOS maps GitHub's runner images to an operating system, which is all barerepo can check.
133728e barerepo 1mo
38
func hostedOS(label string) (string, bool) {
133728e barerepo 1mo
39
switch {
133728e barerepo 1mo
40
case strings.HasPrefix(label, "ubuntu-"), label == "ubuntu",
133728e barerepo 1mo
41
strings.HasPrefix(label, "linux-"), label == "linux":
133728e barerepo 1mo
42
return "linux", true
133728e barerepo 1mo
43
case strings.HasPrefix(label, "macos-"), label == "macos", label == "darwin":
133728e barerepo 1mo
44
return "darwin", true
133728e barerepo 1mo
45
case strings.HasPrefix(label, "windows-"), label == "windows":
133728e barerepo 1mo
46
return "windows", true
133728e barerepo 1mo
47
}
133728e barerepo 1mo
48
return "", false
133728e barerepo 1mo
49
}
history · rawbarerepo 0.1.0