92 lines
2.5 KiB
Go
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
|
|
}
|