package main import ( "errors" "fmt" "log" "os" "path/filepath" "git.sr.ht/~bitfehler/brant/cli" "github.com/alexflint/go-arg" _ "github.com/jackc/pgx/v5/stdlib" "git.sr.ht/~sircmpwn/core-go/config" ) type Args struct { ServiceMeta *cli.Args `arg:"subcommand:meta.sr.ht" help:"run meta.sr.ht migration"` ServiceGit *cli.Args `arg:"subcommand:git.sr.ht" help:"run git.sr.ht migration"` ServiceHg *cli.Args `arg:"subcommand:hg.sr.ht" help:"run hg.sr.ht migration"` ServiceBuilds *cli.Args `arg:"subcommand:builds.sr.ht" help:"run builds.sr.ht migration"` ServiceTodo *cli.Args `arg:"subcommand:todo.sr.ht" help:"run todo.sr.ht migration"` ServiceLists *cli.Args `arg:"subcommand:lists.sr.ht" help:"run lists.sr.ht migration"` ServiceMan *cli.Args `arg:"subcommand:man.sr.ht" help:"run man.sr.ht migration"` ServiceHub *cli.Args `arg:"subcommand:hub.sr.ht" help:"run hub.sr.ht migration"` ServicePaste *cli.Args `arg:"subcommand:paste.sr.ht" help:"run paste.sr.ht migration"` ServicePages *cli.Args `arg:"subcommand:pages.sr.ht" help:"run pages.sr.ht migration"` } func (a Args) Epilogue() string { return "Use ` --help` for help with individual commands" } func main() { var a Args p := arg.MustParse(&a) if p.Subcommand() == nil { p.WriteHelp(os.Stderr) os.Exit(1) } service := p.SubcommandNames()[0] var brantArgs *cli.Args switch { case a.ServiceMeta != nil: brantArgs = a.ServiceMeta case a.ServiceGit != nil: brantArgs = a.ServiceGit case a.ServiceHg != nil: brantArgs = a.ServiceHg case a.ServiceBuilds != nil: brantArgs = a.ServiceBuilds case a.ServiceTodo != nil: brantArgs = a.ServiceTodo case a.ServiceLists != nil: brantArgs = a.ServiceLists case a.ServiceMan != nil: brantArgs = a.ServiceMan case a.ServiceHub != nil: brantArgs = a.ServiceHub case a.ServicePaste != nil: brantArgs = a.ServicePaste case a.ServicePages != nil: brantArgs = a.ServicePages default: panic(fmt.Errorf("unhandled service: %s", service)) } cfg := config.LoadFiles() if brantArgs.DataSourceName == "" { dbstring, ok := cfg.Get(service, "connection-string") if !ok { log.Fatalf("No database configured for %s", service) } brantArgs.DataSourceName = dbstring } if brantArgs.Directory == "" { m, err := os.Stat("migrations") if err != nil && !errors.Is(err, os.ErrNotExist) { log.Fatalf("Error checking for migrations: %s", err.Error()) } if err == nil && m.IsDir() { log.Println("sourcehut-migrate: ./migrations directory found, not defaulting to sr.ht::assets") } else { assetsDir := "/usr/share/sourcehut" if assets, ok := cfg.Get("sr.ht", "assets"); ok { assetsDir = assets } migrations := filepath.Join(assetsDir, "migrations", service) brantArgs.Directory = migrations } } cli.RunWithArgs(brantArgs) }