From 34c3c26769ae975f7514915a0ff931bfd1aee1fe Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 8 Jun 2026 11:10:25 +0000 Subject: [PATCH] fix(runners): register CLI and UI runners as active by default The --enabled flag on runner register defaults to true but was only applied when explicitly passed, leaving util.Config.Runner.Enabled false and creating inactive runners that never receive tasks. Also set Enabled=true for runner start --register and default new UI runners to active: true. Co-authored-by: Denis Gukov --- cli/cmd/runner_register.go | 7 ++++--- cli/cmd/runner_register_test.go | 27 +++++++++++++++++++++++++++ cli/cmd/runner_start.go | 2 ++ web/src/components/RunnerForm.vue | 1 + 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/cli/cmd/runner_register.go b/cli/cmd/runner_register.go index 493e6e607b..a8edc2fe02 100644 --- a/cli/cmd/runner_register.go +++ b/cli/cmd/runner_register.go @@ -83,9 +83,10 @@ func applyRunnerRegisterFlags(cmd *cobra.Command) { if cmd.PersistentFlags().Changed("tags") { util.Config.Runner.Tags = runnerRegisterArgs.tags } - if cmd.PersistentFlags().Changed("enabled") { - util.Config.Runner.Enabled = runnerRegisterArgs.enabled - } + // Always apply enabled: the flag defaults to true, but util.Config.Runner.Enabled + // stays false (zero value) unless we copy it. Without this, registration creates + // an inactive runner that never receives tasks. + util.Config.Runner.Enabled = runnerRegisterArgs.enabled } func registerRunner(cmd *cobra.Command) { diff --git a/cli/cmd/runner_register_test.go b/cli/cmd/runner_register_test.go index d275603d20..e09859a1e3 100644 --- a/cli/cmd/runner_register_test.go +++ b/cli/cmd/runner_register_test.go @@ -6,6 +6,7 @@ import ( "testing" "github.com/semaphoreui/semaphore/util" + "github.com/spf13/cobra" "github.com/stretchr/testify/assert" ) @@ -109,3 +110,29 @@ func TestInitRunnerRegistrationToken_FlagFileTakesPriority(t *testing.T) { assert.Equal(t, "flag-token", util.Config.Runner.RegistrationToken) } + +func TestApplyRunnerRegisterFlags_EnabledDefaultsTrue(t *testing.T) { + setupRunnerConfig() + util.Config.Runner.Enabled = false + runnerRegisterArgs.enabled = true + + cmd := &cobra.Command{} + cmd.PersistentFlags().BoolVar(&runnerRegisterArgs.enabled, "enabled", true, "") + applyRunnerRegisterFlags(cmd) + + assert.True(t, util.Config.Runner.Enabled) +} + +func TestApplyRunnerRegisterFlags_EnabledFalseWhenFlagSet(t *testing.T) { + setupRunnerConfig() + util.Config.Runner.Enabled = true + runnerRegisterArgs.enabled = false + + cmd := &cobra.Command{} + cmd.PersistentFlags().BoolVar(&runnerRegisterArgs.enabled, "enabled", true, "") + err := cmd.PersistentFlags().Set("enabled", "false") + assert.NoError(t, err) + applyRunnerRegisterFlags(cmd) + + assert.False(t, util.Config.Runner.Enabled) +} diff --git a/cli/cmd/runner_start.go b/cli/cmd/runner_start.go index 9713f7ec3f..c882fcc863 100644 --- a/cli/cmd/runner_start.go +++ b/cli/cmd/runner_start.go @@ -27,6 +27,8 @@ func runRunner() { if runnerStartArgs.register { initRunnerRegistrationToken() + // runner start has no --enabled flag; new registrations should be active. + util.Config.Runner.Enabled = true if util.Config.Runner.Token == "" { diff --git a/web/src/components/RunnerForm.vue b/web/src/components/RunnerForm.vue index e281ff7a5f..939e47a7d2 100644 --- a/web/src/components/RunnerForm.vue +++ b/web/src/components/RunnerForm.vue @@ -138,6 +138,7 @@ export default { // itself later using a one-time registration token. return { registered: true, + active: true, is_default: this.projectId == null, }; },