Files
insertr/cmd/root.go
Joakim c572428e45 config: unify configuration with multi-site support
- Remove mock_content setting (working database loop makes it unnecessary)
- Change server.dev_mode to global dev_mode setting for consistency
- Update CLI to use cli.site_id and cli.output for scoped configuration
- Implement database client for CLI enhance command (complete static site loop)
- Update justfile to use INSERTR_DATABASE_PATH environment variable
- Enable multi-site architecture: server is site-agnostic, CLI is site-specific
- Unified insertr.yaml now supports both server and CLI with minimal config
2025-09-10 19:28:59 +02:00

75 lines
2.0 KiB
Go

package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
var (
cfgFile string
dbPath string
apiURL string
apiKey string
siteID string
)
var rootCmd = &cobra.Command{
Use: "insertr",
Short: "Insertr - The Tailwind of CMS",
Long: `Insertr adds editing capabilities to static HTML sites by detecting
editable elements and injecting content management functionality.
The unified tool handles both build-time content injection (enhance command)
and runtime API server (serve command) for complete CMS functionality.`,
Version: "0.1.0",
}
func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
func init() {
cobra.OnInitialize(initConfig)
// Global flags
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is ./insertr.yaml)")
rootCmd.PersistentFlags().StringVar(&dbPath, "db", "./insertr.db", "database path (SQLite file or PostgreSQL connection string)")
rootCmd.PersistentFlags().StringVar(&apiURL, "api-url", "", "content API URL")
rootCmd.PersistentFlags().StringVar(&apiKey, "api-key", "", "API key for authentication")
rootCmd.PersistentFlags().StringVarP(&siteID, "site-id", "s", "demo", "site ID for content lookup")
// Bind flags to viper
viper.BindPFlag("database.path", rootCmd.PersistentFlags().Lookup("db"))
viper.BindPFlag("api.url", rootCmd.PersistentFlags().Lookup("api-url"))
viper.BindPFlag("api.key", rootCmd.PersistentFlags().Lookup("api-key"))
viper.BindPFlag("cli.site_id", rootCmd.PersistentFlags().Lookup("site-id"))
rootCmd.AddCommand(enhanceCmd)
rootCmd.AddCommand(serveCmd)
}
func initConfig() {
if cfgFile != "" {
viper.SetConfigFile(cfgFile)
} else {
viper.AddConfigPath(".")
viper.SetConfigName("insertr")
viper.SetConfigType("yaml")
}
// Environment variables
viper.SetEnvPrefix("INSERTR")
viper.AutomaticEnv()
// Read config file
if err := viper.ReadInConfig(); err == nil {
fmt.Fprintln(os.Stderr, "Using config file:", viper.ConfigFileUsed())
}
}