From bf03f36d5ab1bac5238d047aaf55d6a9291d3ab2 Mon Sep 17 00:00:00 2001 From: bircni Date: Tue, 29 Sep 2026 18:38:35 +0000 Subject: [PATCH] fix: honor configured Docker registration file (#1259) The Docker entrypoint always checked `.runner` in `/data` and ignored `runner.file` from `CONFIG_FILE`. When `runner.file` pointed elsewhere, it re-registered on every start, or skipped registration because of a stale `.runner`. It now reads the path from a new `config runner-file` subcommand, which resolves `runner.file` the same way as `register` and `daemon`. Closes https://gitea.com/gitea/runner/issues/585 --------- Co-authored-by: silverwind Reviewed-on: https://gitea.com/gitea/runner/pulls/1259 Reviewed-by: silverwind <2021+silverwind@noreply.gitea.com> --- internal/app/cmd/config.go | 13 +++++++++++++ internal/app/cmd/config_test.go | 11 +++++++++++ scripts/run.sh | 3 +-- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/internal/app/cmd/config.go b/internal/app/cmd/config.go index 844281dc..1c853b92 100644 --- a/internal/app/cmd/config.go +++ b/internal/app/cmd/config.go @@ -27,6 +27,19 @@ func loadConfigCmd(configFile *string) *cobra.Command { configCmd.AddCommand(loadGenerateConfigCmd("generate")) configCmd.AddCommand(loadInitConfigCmd(configFile)) + configCmd.AddCommand(&cobra.Command{ + Use: "runner-file", + Short: "Print the registration file path used by the runner", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, _ []string) error { + cfg, err := config.LoadDefault(*configFile) + if err != nil { + return err + } + fmt.Fprintln(cmd.OutOrStdout(), cfg.Runner.File) + return nil + }, + }) configCmd.AddCommand(&cobra.Command{ Use: "get ", diff --git a/internal/app/cmd/config_test.go b/internal/app/cmd/config_test.go index d89961fc..2744da70 100644 --- a/internal/app/cmd/config_test.go +++ b/internal/app/cmd/config_test.go @@ -97,3 +97,14 @@ func TestConfigCmdResolvesTheConfigFile(t *testing.T) { assert.Contains(t, err.Error(), "--config") }) } + +func TestConfigCmdRunnerFileUsesConfiguredPathOrDefault(t *testing.T) { + out, _, err := runConfigCmd(t, "", "runner-file") + require.NoError(t, err) + assert.Equal(t, ".runner\n", out) + file := filepath.Join(t.TempDir(), "config.yaml") + require.NoError(t, os.WriteFile(file, []byte("runner:\n file: 'state dir/registration.json'\n"), 0o600)) + out, _, err = runConfigCmd(t, file, "runner-file") + require.NoError(t, err) + assert.Equal(t, "state dir/registration.json\n", out) +} diff --git a/scripts/run.sh b/scripts/run.sh index 1914af65..13deb89b 100755 --- a/scripts/run.sh +++ b/scripts/run.sh @@ -6,12 +6,11 @@ fi cd /data -RUNNER_STATE_FILE=${RUNNER_STATE_FILE:-'.runner'} - CONFIG_ARG="" if [[ ! -z "${CONFIG_FILE}" ]]; then CONFIG_ARG="--config ${CONFIG_FILE}" fi +RUNNER_STATE_FILE=${RUNNER_STATE_FILE:-$(gitea-runner ${CONFIG_ARG} config runner-file)} LABEL_ARGS="" if [[ ! -z "${GITEA_RUNNER_LABELS}" ]]; then LABEL_ARGS="--labels ${GITEA_RUNNER_LABELS}"