diff --git a/internal/app/run/runner.go b/internal/app/run/runner.go index 710bb47..00a177d 100644 --- a/internal/app/run/runner.go +++ b/internal/app/run/runner.go @@ -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 +} diff --git a/internal/pkg/config/config.example.yaml b/internal/pkg/config/config.example.yaml index 22e1055..4825aaf 100644 --- a/internal/pkg/config/config.example.yaml +++ b/internal/pkg/config/config.example.yaml @@ -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. diff --git a/internal/pkg/config/config.go b/internal/pkg/config/config.go index afc34b9..7def129 100644 --- a/internal/pkg/config/config.go +++ b/internal/pkg/config/config.go @@ -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. diff --git a/internal/pkg/labels/labels.go b/internal/pkg/labels/labels.go index d6de373..16f9c5f 100644 --- a/internal/pkg/labels/labels.go +++ b/internal/pkg/labels/labels.go @@ -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 {