From 537c620051427e19e71ebd2239af0df87471950a Mon Sep 17 00:00:00 2001 From: panxiao81 Date: Mon, 21 Sep 2026 17:50:47 +0000 Subject: [PATCH] fix(runner): load job hooks configuration --- internal/runnerbootstrap/executor.go | 15 ++++++++++++--- internal/runnerbootstrap/executor_test.go | 8 ++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/internal/runnerbootstrap/executor.go b/internal/runnerbootstrap/executor.go index 9f42e2d..4158b81 100644 --- a/internal/runnerbootstrap/executor.go +++ b/internal/runnerbootstrap/executor.go @@ -22,6 +22,7 @@ type ExecutorConfig struct { FacadeSPIFFEID string WorkloadAPIAddr string RunnerBinary string + RunnerConfig string ListenAddress string WorkDir string Stdout *os.File @@ -35,6 +36,9 @@ func RunExecutor(ctx context.Context, config ExecutorConfig) error { if config.RunnerBinary == "" { config.RunnerBinary = "gitea-runner" } + if config.RunnerConfig == "" { + config.RunnerConfig = "/etc/gitea-runner/config.yaml" + } if config.ListenAddress == "" { config.ListenAddress = "127.0.0.1:0" } @@ -93,7 +97,7 @@ func RunExecutor(ctx context.Context, config ExecutorConfig) error { return errors.Join(readyErr, shutdownErr, serverErr) } - command := exec.CommandContext(ctx, config.RunnerBinary, "daemon", "--once") + command := exec.CommandContext(ctx, config.RunnerBinary, runnerArguments(config.RunnerConfig)...) command.Dir = workDir command.Stdout = config.Stdout command.Stderr = config.Stderr @@ -108,6 +112,10 @@ func RunExecutor(ctx context.Context, config ExecutorConfig) error { return errors.Join(runnerErr, shutdownErr, serverErr) } +func runnerArguments(configFile string) []string { + return []string{"daemon", "--config", configFile, "--once"} +} + func waitForFacade(ctx context.Context, endpoint string) error { client := &http.Client{Timeout: 2 * time.Second} ticker := time.NewTicker(250 * time.Millisecond) @@ -143,8 +151,9 @@ func ExecutorConfigFromEnvironment() (ExecutorConfig, error) { config := ExecutorConfig{ AssignmentID: os.Getenv(EnvAssignmentID), Capability: os.Getenv(EnvCapability), Backend: backend, FacadeURL: os.Getenv(EnvFacadeURL), FacadeSPIFFEID: os.Getenv(EnvFacadeID), - RunnerBinary: os.Getenv("GITEA_RUNNER_BINARY"), ListenAddress: "127.0.0.1:0", - Stdout: os.Stdout, Stderr: os.Stderr, + RunnerBinary: os.Getenv("GITEA_RUNNER_BINARY"), RunnerConfig: os.Getenv("GITEA_RUNNER_CONFIG_FILE"), + ListenAddress: "127.0.0.1:0", + Stdout: os.Stdout, Stderr: os.Stderr, } if config.AssignmentID == "" || config.Capability == "" || config.FacadeURL == "" || config.FacadeSPIFFEID == "" { return ExecutorConfig{}, errors.New("complete runner assignment and facade environment is required") diff --git a/internal/runnerbootstrap/executor_test.go b/internal/runnerbootstrap/executor_test.go index 6e808f4..daa64f7 100644 --- a/internal/runnerbootstrap/executor_test.go +++ b/internal/runnerbootstrap/executor_test.go @@ -4,11 +4,19 @@ import ( "context" "net/http" "net/http/httptest" + "reflect" "sync/atomic" "testing" "time" ) +func TestRunnerArgumentsLoadJobHooksConfig(t *testing.T) { + want := []string{"daemon", "--config", "/etc/gitea-runner/config.yaml", "--once"} + if got := runnerArguments("/etc/gitea-runner/config.yaml"); !reflect.DeepEqual(got, want) { + t.Fatalf("runner arguments = %q, want %q", got, want) + } +} + func TestWaitForFacadeRetriesTransientGatewayFailure(t *testing.T) { var requests atomic.Int32 server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, _ *http.Request) {