diff --git a/cli/cmd/runner_register.go b/cli/cmd/runner_register.go index 493e6e607..a8edc2fe0 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 d275603d2..e09859a1e 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 9713f7ec3..c882fcc86 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 e281ff7a5..939e47a7d 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, }; },