Files
oslstats/internal/config/flags.go
2026-01-26 00:31:01 +11:00

92 lines
2.5 KiB
Go

package config
import (
"flag"
"github.com/pkg/errors"
)
type Flags struct {
// Utility flags
EnvDoc bool
ShowEnv bool
GenEnv string
EnvFile string
DevMode bool
// Database reset (destructive)
ResetDB bool
// Migration commands
MigrateUp bool
MigrateRollback bool
MigrateStatus bool
MigrateCreate string
MigrateDryRun bool
// Backup control
MigrateNoBackup bool
}
func SetupFlags() (*Flags, error) {
// Utility flags
envDoc := flag.Bool("envdoc", false, "Print all environment variables and their documentation")
showEnv := flag.Bool("showenv", false, "Print all environment variable values and their documentation")
genEnv := flag.String("genenv", "", "Generate a .env file with all environment variables (specify filename)")
envfile := flag.String("envfile", ".env", "Specify a .env file to use for the configuration")
devMode := flag.Bool("dev", false, "Run the server in dev mode")
// Database reset (destructive)
resetDB := flag.Bool("reset-db", false, "⚠️ DESTRUCTIVE: Drop and recreate all tables (dev only)")
// Migration commands
migrateUp := flag.Bool("migrate-up", false, "Run pending database migrations (with automatic backup)")
migrateRollback := flag.Bool("migrate-rollback", false, "Rollback the last migration group (with automatic backup)")
migrateStatus := flag.Bool("migrate-status", false, "Show database migration status")
migrateCreate := flag.String("migrate-create", "", "Create a new migration file with the given name")
migrateDryRun := flag.Bool("migrate-dry-run", false, "Preview pending migrations without applying them")
// Backup control
migrateNoBackup := flag.Bool("no-backup", false, "Skip automatic backups (dev only - faster but less safe)")
flag.Parse()
// Validate: can't use multiple migration commands at once
commands := 0
if *migrateUp {
commands++
}
if *migrateRollback {
commands++
}
if *migrateStatus {
commands++
}
if *migrateDryRun {
commands++
}
if *resetDB {
commands++
}
if commands > 1 {
return nil, errors.New("cannot use multiple migration commands simultaneously")
}
flags := &Flags{
EnvDoc: *envDoc,
ShowEnv: *showEnv,
GenEnv: *genEnv,
EnvFile: *envfile,
DevMode: *devMode,
ResetDB: *resetDB,
MigrateUp: *migrateUp,
MigrateRollback: *migrateRollback,
MigrateStatus: *migrateStatus,
MigrateCreate: *migrateCreate,
MigrateDryRun: *migrateDryRun,
MigrateNoBackup: *migrateNoBackup,
}
return flags, nil
}