package main import ( "context" "encoding/json" "errors" "fmt" "os" "time" "git.yuntuo.hk/k2safe/orbit/internal/config" "git.yuntuo.hk/k2safe/orbit/internal/storage/mysql" ) func main() { if err := run(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } func run() error { if len(os.Args) != 2 || os.Args[1] != "up" && os.Args[1] != "status" { return errors.New("usage: orbit-migrate up|status (ORBIT_MYSQL_DSN required)") } cfg, err := config.Load() if err != nil { return err } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) defer cancel() db, err := mysql.Open(ctx, cfg.MySQLDSN, 2, 1) if err != nil { return err } defer db.Close() if os.Args[1] == "up" { if err := mysql.Migrate(ctx, db); err != nil { return err } } status, err := mysql.Status(ctx, db) if err != nil { return err } return json.NewEncoder(os.Stdout).Encode(status) }