package main import ( "context" "flag" "fmt" "os" "time" "aigw/internal/controlplane" ) func main() { environment := flag.String("database-url-env", "AIGW_DATABASE_URL", "environment variable containing the PostgreSQL URL") status := flag.Bool("status", false, "print the latest applied migration instead of changing the schema") flag.Parse() databaseURL := os.Getenv(*environment) if databaseURL == "" { fmt.Fprintf(os.Stderr, "%s is empty\n", *environment) os.Exit(1) } ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() if *status { migration, err := controlplane.MigrationStatusDatabase(ctx, databaseURL) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } fmt.Printf("version=%d name=%s checksum=%s applied_at=%s\n", migration.Version, migration.Name, migration.Checksum, migration.AppliedAt.Format(time.RFC3339)) return } if err := controlplane.MigrateDatabase(ctx, databaseURL); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } fmt.Println("control-plane schema is up to date") }