diff --git a/cmd/soft/migrate_config.go b/cmd/soft/migrate_config.go index 6624da972e92d86a861ac65a64eaaaf45d441ec7..c0fd101fb03bb9b5d9ea639902996d63aaeb0d29 100644 --- a/cmd/soft/migrate_config.go +++ b/cmd/soft/migrate_config.go @@ -37,7 +37,15 @@ var ( keyPath := os.Getenv("SOFT_SERVE_KEY_PATH") reposPath := os.Getenv("SOFT_SERVE_REPO_PATH") bindAddr := os.Getenv("SOFT_SERVE_BIND_ADDRESS") + + // Set up config cfg := config.DefaultConfig() + if !cfg.Exist() { + if err := cfg.WriteConfig(); err != nil { + return fmt.Errorf("failed to write default config: %w", err) + } + } + ctx = config.WithContext(ctx, cfg) sb, err := sqlite.NewSqliteBackend(ctx) if err != nil { diff --git a/cmd/soft/serve.go b/cmd/soft/serve.go index b9a9b2937a1be656acbe38b32325161cee61c572..b2a4746f9a2af69cb68dc96d796aa6cf63929189 100644 --- a/cmd/soft/serve.go +++ b/cmd/soft/serve.go @@ -22,7 +22,15 @@ var ( Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { ctx := cmd.Context() + + // Set up config cfg := config.DefaultConfig() + if !cfg.Exist() { + if err := cfg.WriteConfig(); err != nil { + return fmt.Errorf("failed to write default config: %w", err) + } + } + ctx = config.WithContext(ctx, cfg) cmd.SetContext(ctx) diff --git a/examples/setuid/main.go b/examples/setuid/main.go index 4b6c4770d5d6d2a759b1dd291bc67faf655faa4d..e0edc92f658143f27a93934a869388f1d533acdc 100644 --- a/examples/setuid/main.go +++ b/examples/setuid/main.go @@ -45,7 +45,13 @@ func main() { log.Fatal("Setuid error", "err", err) } ctx := context.Background() + // Set up config cfg := config.DefaultConfig() + if !cfg.Exist() { + if err := cfg.WriteConfig(); err != nil { + log.Fatal("failed to write default config: %w", err) + } + } ctx = config.WithContext(ctx, cfg) cfg.SSH.ListenAddr = fmt.Sprintf(":%d", *port) s, err := server.NewServer(ctx) diff --git a/server/config/config.go b/server/config/config.go index c8b9fa9bf159e24edcb4ce52f89374a66d6eb925..c16b237de9d83ef81a6883fe5221932edc23b94e 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -256,13 +256,6 @@ func DefaultConfig() *Config { log.Errorf("failed to parse config: %v", err) } - // Write config if it doesn't exist - if _, err := os.Stat(cp); os.IsNotExist(err) { - if err := WriteConfig(cp, cfg); err != nil { - log.Fatal("failed to write config", "err", err) - } - } - if err := cfg.validate(); err != nil { log.Fatal(err) } @@ -270,6 +263,17 @@ func DefaultConfig() *Config { return cfg } +// Exist returns true if the configuration file exists. +func (c *Config) Exist() bool { + _, err := os.Stat(filepath.Join(c.DataPath, "config.yaml")) + return err == nil +} + +// WriteConfig writes the configuration in the default path. +func (c *Config) WriteConfig() error { + return WriteConfig(filepath.Join(c.DataPath, "config.yaml"), c) +} + // WithBackend sets the backend for the configuration. func (c *Config) WithBackend(backend backend.Backend) *Config { c.Backend = backend diff --git a/server/daemon/daemon_test.go b/server/daemon/daemon_test.go index a28fb68d4404d5e3eaa9e50535a984874275de7e..52e83f0ef748a9d6a1cfc20a0d6a2a0bdb389c54 100644 --- a/server/daemon/daemon_test.go +++ b/server/daemon/daemon_test.go @@ -35,6 +35,9 @@ func TestMain(m *testing.M) { os.Setenv("SOFT_SERVE_GIT_LISTEN_ADDR", fmt.Sprintf(":%d", test.RandomPort())) ctx := context.TODO() cfg := config.DefaultConfig() + if err := cfg.WriteConfig(); err != nil { + log.Fatal("failed to write default config: %w", err) + } ctx = config.WithContext(ctx, cfg) fb, err := sqlite.NewSqliteBackend(ctx) if err != nil { diff --git a/server/server_test.go b/server/server_test.go index a856f1f4c33aeec35607d0b19420378eb0432776..4301cd4a0985fbf0d48279ee7b868d0984d8e315 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -27,6 +27,9 @@ func setupServer(tb testing.TB) (*Server, *config.Config, string) { tb.Setenv("SOFT_SERVE_GIT_LISTEN_ADDR", fmt.Sprintf(":%d", test.RandomPort())) ctx := context.TODO() cfg := config.DefaultConfig() + if err := cfg.WriteConfig(); err != nil { + tb.Fatal("failed to write default config: %w", err) + } ctx = config.WithContext(ctx, cfg) tb.Log("configuring server") s, err := NewServer(ctx)