133728e barerepo 1mo
1
package store
133728e barerepo 1mo
3
import "strings"
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
11
for _, label := range want {
133728e barerepo 1mo
12
if !r.has(label) {
133728e barerepo 1mo
13
return false
133728e barerepo 1mo
16
return true
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
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
31
if os, ok := hostedOS(label); ok {
133728e barerepo 1mo
32
return strings.EqualFold(r.OS, os)
133728e barerepo 1mo
34
return strings.EqualFold(r.OS, label) || strings.EqualFold(r.Arch, label)
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
48
return "", false