//go:build ignore package main import ( "database/sql" "fmt" "os" "strings" mysqlDriver "github.com/go-sql-driver/mysql" ) const sharedBusinessDatabase = "meeting_im" // This startup helper intentionally performs validation only. Database schema // changes are managed by the checked-in SQL migrations and must not be applied // implicitly while an IM Server pod is starting. func main() { rawDSN := strings.TrimSpace(os.Getenv("IM_MYSQL_DSN")) dsn := strings.TrimPrefix(rawDSN, "mysql://") if dsn == "" { fatal("IM_MYSQL_DSN is required") } config, err := mysqlDriver.ParseDSN(dsn) if err != nil { fatal(fmt.Errorf("parse IM_MYSQL_DSN: %w", err)) } if !strings.EqualFold(strings.TrimSpace(config.DBName), sharedBusinessDatabase) { fatal(fmt.Errorf("IM_MYSQL_DSN must select %s; got %q", sharedBusinessDatabase, config.DBName)) } db, err := sql.Open("mysql", config.FormatDSN()) if err != nil { fatal(err) } defer db.Close() if err = db.Ping(); err != nil { fatal(err) } var database string if err = db.QueryRow("SELECT DATABASE()").Scan(&database); err != nil { fatal(err) } if !strings.EqualFold(database, sharedBusinessDatabase) { fatal(fmt.Errorf("connected database is %q, want %q", database, sharedBusinessDatabase)) } fmt.Printf("IM shared database validated: %s\n", database) } func fatal(v any) { fmt.Fprintln(os.Stderr, v) os.Exit(1) }