990cf93c71
The only reason docker is really required by now, is that act_runner ping docker. This change only pings docker if a label with `docker://` is added to the runner. Plain labels without `:` like `self-hosted` are run directly on the system. Previously the pseudo non docker label `-self-hosted` have been required like this `self-hosted:docker://-self-hosted`, but due to docker ping this still required a dockerd to be pingable. Co-authored-by: Christopher Homberger <christopher.homberger@web.de> Reviewed-on: https://gitea.com/gitea/act_runner/pulls/16 Reviewed-by: Jason Song <i@wolfogre.com> Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: ChristopherHX <christopherhx@noreply.gitea.io> Co-committed-by: ChristopherHX <christopherhx@noreply.gitea.io>
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package runtime
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
runnerv1 "code.gitea.io/actions-proto-go/runner/v1"
|
|
"gitea.com/gitea/act_runner/client"
|
|
)
|
|
|
|
// Runner runs the pipeline.
|
|
type Runner struct {
|
|
Machine string
|
|
ForgeInstance string
|
|
Environ map[string]string
|
|
Client client.Client
|
|
Labels []string
|
|
}
|
|
|
|
// Run runs the pipeline stage.
|
|
func (s *Runner) Run(ctx context.Context, task *runnerv1.Task) error {
|
|
return NewTask(s.ForgeInstance, task.Id, s.Client, s.Environ, s.platformPicker).Run(ctx, task)
|
|
}
|
|
|
|
func (s *Runner) platformPicker(labels []string) string {
|
|
// "ubuntu-18.04:docker://node:16-buster"
|
|
// "self-hosted"
|
|
|
|
platforms := make(map[string]string, len(labels))
|
|
for _, l := range s.Labels {
|
|
// "ubuntu-18.04:docker://node:16-buster"
|
|
splits := strings.SplitN(l, ":", 2)
|
|
if len(splits) == 1 {
|
|
// identifier for non docker execution environment
|
|
platforms[splits[0]] = "-self-hosted"
|
|
continue
|
|
}
|
|
// ["ubuntu-18.04", "docker://node:16-buster"]
|
|
k, v := splits[0], splits[1]
|
|
|
|
if prefix := "docker://"; !strings.HasPrefix(v, prefix) {
|
|
continue
|
|
} else {
|
|
v = strings.TrimPrefix(v, prefix)
|
|
}
|
|
// ubuntu-18.04 => node:16-buster
|
|
platforms[k] = v
|
|
}
|
|
|
|
for _, label := range labels {
|
|
if v, ok := platforms[label]; ok {
|
|
return v
|
|
}
|
|
}
|
|
|
|
// TODO: support multiple labels
|
|
// like:
|
|
// ["ubuntu-22.04"] => "ubuntu:22.04"
|
|
// ["with-gpu"] => "linux:with-gpu"
|
|
// ["ubuntu-22.04", "with-gpu"] => "ubuntu:22.04_with-gpu"
|
|
|
|
// return default
|
|
return "node:16-bullseye"
|
|
}
|