feat(config): add MODE env var to select compose or swarm operation

This commit is contained in:
2026-07-04 20:06:50 +02:00
parent 8f999c69bd
commit 1002bb7b96
2 changed files with 29 additions and 0 deletions
+6
View File
@@ -16,6 +16,7 @@ type Config struct {
LogLevel string LogLevel string
UpdateTimeout time.Duration UpdateTimeout time.Duration
OptInLabel string OptInLabel string
Mode string
} }
// Load reads configuration from environment variables, applies defaults, // Load reads configuration from environment variables, applies defaults,
@@ -28,12 +29,17 @@ func Load() (*Config, error) {
Port: getenvDefault("PORT", "8080"), Port: getenvDefault("PORT", "8080"),
LogLevel: getenvDefault("LOG_LEVEL", "info"), LogLevel: getenvDefault("LOG_LEVEL", "info"),
OptInLabel: getenvDefault("OPT_IN_LABEL", "se.shcizo.auto-update"), OptInLabel: getenvDefault("OPT_IN_LABEL", "se.shcizo.auto-update"),
Mode: getenvDefault("MODE", "compose"),
} }
if cfg.APIKey == "" { if cfg.APIKey == "" {
return nil, errors.New("UPDATER_API_KEY is required") return nil, errors.New("UPDATER_API_KEY is required")
} }
if cfg.Mode != "compose" && cfg.Mode != "swarm" {
return nil, fmt.Errorf("MODE %q is invalid: must be %q or %q", cfg.Mode, "compose", "swarm")
}
timeoutStr := getenvDefault("UPDATE_TIMEOUT", "5m") timeoutStr := getenvDefault("UPDATE_TIMEOUT", "5m")
d, err := time.ParseDuration(timeoutStr) d, err := time.ParseDuration(timeoutStr)
if err != nil { if err != nil {
+23
View File
@@ -57,3 +57,26 @@ func TestLoad_InvalidTimeoutErrors(t *testing.T) {
require.Error(t, err) require.Error(t, err)
require.Contains(t, err.Error(), "UPDATE_TIMEOUT") require.Contains(t, err.Error(), "UPDATE_TIMEOUT")
} }
func TestLoad_DefaultsToComposeMode(t *testing.T) {
t.Setenv("UPDATER_API_KEY", "secret")
cfg, err := config.Load()
require.NoError(t, err)
require.Equal(t, "compose", cfg.Mode)
}
func TestLoad_AcceptsSwarmMode(t *testing.T) {
t.Setenv("UPDATER_API_KEY", "secret")
t.Setenv("MODE", "swarm")
cfg, err := config.Load()
require.NoError(t, err)
require.Equal(t, "swarm", cfg.Mode)
}
func TestLoad_RejectsInvalidMode(t *testing.T) {
t.Setenv("UPDATER_API_KEY", "secret")
t.Setenv("MODE", "kubernetes")
_, err := config.Load()
require.Error(t, err)
require.Contains(t, err.Error(), "MODE")
}