Allow configuration of default platform if no runs-on labels match

This commit is contained in:
Mike
2025-01-26 19:49:15 -08:00
parent 8dfb805c62
commit 0957d88d06
4 changed files with 14 additions and 3 deletions

View File

@@ -206,7 +206,7 @@ func (r *Runner) run(ctx context.Context, task *runnerv1.Task, reporter *report.
ContainerDaemonSocket: r.cfg.Container.DockerHost,
Privileged: r.cfg.Container.Privileged,
DefaultActionInstance: taskContext["gitea_default_actions_url"].GetStringValue(),
PlatformPicker: r.labels.PickPlatform,
PlatformPicker: r.pickPlatform,
Vars: task.Vars,
ValidVolumes: r.cfg.Container.ValidVolumes,
InsecureSkipTLS: r.cfg.Runner.Insecure,
@@ -238,3 +238,11 @@ func (r *Runner) Declare(ctx context.Context, labels []string) (*connect.Respons
Labels: labels,
}))
}
func (r *Runner) pickPlatform(labels []string) string {
platform := r.labels.PickPlatform(labels)
if platform == "" {
platform = r.cfg.Runner.DefaultPlatform
}
return platform
}

View File

@@ -41,6 +41,8 @@ runner:
- "ubuntu-latest:docker://gitea/runner-images:ubuntu-latest"
- "ubuntu-22.04:docker://gitea/runner-images:ubuntu-22.04"
- "ubuntu-20.04:docker://gitea/runner-images:ubuntu-20.04"
# If no labels match the job's runs-on, this will be used
default_platform: "gitea/runner-images:ubuntu-latest"
cache:
# Enable cache server to use actions/cache.
@@ -70,7 +72,7 @@ container:
# And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway).
options:
# The parent directory of a job's working directory.
# NOTE: There is no need to add the first '/' of the path as act_runner will add it automatically.
# NOTE: There is no need to add the first '/' of the path as act_runner will add it automatically.
# If the path starts with '/', the '/' will be trimmed.
# For example, if the parent directory is /path/to/my/dir, workdir_parent should be path/to/my/dir
# If it's empty, /workspace will be used.

View File

@@ -31,6 +31,7 @@ type Runner struct {
FetchTimeout time.Duration `yaml:"fetch_timeout"` // FetchTimeout specifies the timeout duration for fetching resources.
FetchInterval time.Duration `yaml:"fetch_interval"` // FetchInterval specifies the interval duration for fetching resources.
Labels []string `yaml:"labels"` // Labels specify the labels of the runner. Labels are declared on each startup
DefaultPlatform string `yaml:"default_platform"` // DefaultPlatform specify the image to be used if no runs-on matches our labels
}
// Cache represents the configuration for caching.

View File

@@ -79,7 +79,7 @@ func (l Labels) PickPlatform(runsOn []string) string {
// So the runner receives a task with a label that the runner doesn't have,
// it happens when the user have edited the label of the runner in the web UI.
// TODO: it may be not correct, what if the runner is used as host mode only?
return "gitea/runner-images:ubuntu-latest"
return ""
}
func (l Labels) Names() []string {