Files
pangolin/server/cmd/migrate/main.go
T
wangjia 03b00b9a0f merge: config + store(UTC DSN) + 自动迁移 [tsk_zRA6fGU1JuHj]
以 main 现有 config 设计为准(FromEnv/*Config/单 DSN/RS256),移植分支新增的 store 层:mysql.go 的 Open(*config.Config) 改用 cfg.DSN、结构化强制 UTC + 会话时区断言;migrate.go + migrations/embed.go 提供 golang-migrate 嵌入式迁移;cmd/migrate/main.go 实现 migrate CLI(读 DB_DSN)。未采用分支的 Load()/PANGOLIN_ 前缀/MySQL 拆分字段(与 main 设计冲突)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 18:42:46 +08:00

74 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Command migrate applies or reverts database schema migrations for the
// Pangolin server.
//
// Usage:
//
// migrate up apply all pending migrations
// migrate down revert all applied migrations
// migrate version print the current migration version
//
// Configuration is read from the DB_DSN environment variable (a full MySQL
// DSN), consistent with the rest of the server.
package main
import (
"fmt"
"log"
"os"
"github.com/wangjia/pangolin/server/internal/config"
"github.com/wangjia/pangolin/server/internal/store"
)
func main() {
if len(os.Args) < 2 {
usage()
os.Exit(1)
}
cmd := os.Args[1]
dsn := os.Getenv("DB_DSN")
if dsn == "" {
log.Fatal("migrate: DB_DSN is required")
}
db, err := store.Open(&config.Config{DSN: dsn})
if err != nil {
log.Fatalf("migrate: db: %v", err)
}
defer db.Close()
switch cmd {
case "up":
if err := store.MigrateUp(db); err != nil {
log.Fatalf("migrate up: %v", err)
}
log.Println("migrate: up — done")
case "down":
if err := store.MigrateDown(db); err != nil {
log.Fatalf("migrate down: %v", err)
}
log.Println("migrate: down — done")
case "version":
version, dirty, err := store.MigrateVersion(db)
if err != nil {
log.Fatalf("migrate version: %v", err)
}
fmt.Printf("migrate: version=%d dirty=%v\n", version, dirty)
default:
fmt.Fprintf(os.Stderr, "migrate: unknown command %q\n", cmd)
usage()
os.Exit(1)
}
}
func usage() {
fmt.Fprintln(os.Stderr, "Usage: migrate <up|down|version>")
fmt.Fprintln(os.Stderr, "")
fmt.Fprintln(os.Stderr, "Environment variables:")
fmt.Fprintln(os.Stderr, " DB_DSN full MySQL DSN (required)")
}