feat: use specified labels

This commit is contained in:
Jason Song
2022-11-24 11:55:52 +08:00
parent 5781e233c1
commit 2354f5bb18
10 changed files with 76 additions and 72 deletions

View File

@ -2,6 +2,7 @@ package runtime
import (
"context"
"strings"
runnerv1 "code.gitea.io/bots-proto-go/runner/v1"
"gitea.com/gitea/act_runner/client"
@ -13,9 +14,45 @@ type Runner struct {
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).Run(ctx, task)
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"
platforms := make(map[string]string, len(labels))
for _, l := range s.Labels {
// "ubuntu-18.04:docker://node:16-buster"
splits := strings.SplitN(l, ":", 2)
// ["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"
}

View File

@ -66,12 +66,13 @@ type Task struct {
BuildID int64
Input *TaskInput
client client.Client
log *log.Entry
client client.Client
log *log.Entry
platformPicker func([]string) string
}
// NewTask creates a new task
func NewTask(forgeInstance string, buildID int64, client client.Client, runnerEnvs map[string]string) *Task {
func NewTask(forgeInstance string, buildID int64, client client.Client, runnerEnvs map[string]string, picker func([]string) string) *Task {
task := &Task{
Input: &TaskInput{
envs: runnerEnvs,
@ -79,8 +80,9 @@ func NewTask(forgeInstance string, buildID int64, client client.Client, runnerEn
},
BuildID: buildID,
client: client,
log: log.WithField("buildID", buildID),
client: client,
log: log.WithField("buildID", buildID),
platformPicker: picker,
}
task.Input.repoDirectory, _ = os.Getwd()
return task
@ -99,34 +101,6 @@ func getWorkflowsPath(dir string) (string, error) {
return p, nil
}
func platformPicker(labels []string) string {
// FIXME: read custom labels
preset := map[string]string{
// FIXME: shouldn't be the same
"ubuntu-latest": "node:16-buster",
"ubuntu-22.04": "node:16-buster",
"ubuntu-20.04": "node:16-buster",
"ubuntu-18.04": "node:16-buster",
}
for _, label := range labels {
if v, ok := preset[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"
// FIXME: shall we need to support default?
return "node:16-buster"
}
func getToken(task *runnerv1.Task) string {
token := task.Secrets["GITHUB_TOKEN"]
if task.Secrets["GITEA_TOKEN"] != "" {
@ -247,7 +221,7 @@ func (t *Task) Run(ctx context.Context, task *runnerv1.Task) error {
ContainerMaxLifetime: 3 * time.Hour, // maybe should be specified by Gitea server
ContainerNetworkMode: input.containerNetworkMode,
DefaultActionInstance: dataContext["gitea_default_bots_url"].GetStringValue(),
PlatformPicker: platformPicker,
PlatformPicker: t.platformPicker,
}
r, err := runner.New(config)
if err != nil {