package main import ( "fmt" "runtime/debug" "time" "github.com/spf13/cobra" ) var ( // Version information, set via ldflags during build version = "dev" buildDate = "unknown" ) func init() { // If version wasn't set via ldflags, try to get it from build info if version == "dev" { if info, ok := debug.ReadBuildInfo(); ok { // Try to get version from VCS var vcsRevision, vcsTime string for _, setting := range info.Settings { switch setting.Key { case "vcs.revision": if len(setting.Value) >= 7 { vcsRevision = setting.Value[:7] } case "vcs.time": vcsTime = setting.Value } } if vcsRevision != "" { version = vcsRevision } if vcsTime != "" { if t, err := time.Parse(time.RFC3339, vcsTime); err == nil { buildDate = t.UTC().Format("2006-01-02 15:04:05 UTC") } } } } } var rootCmd = &cobra.Command{ Use: "relspec", Short: "RelSpec - Database schema conversion and analysis tool", Long: `RelSpec is a database relations specification tool that provides bidirectional conversion between various database schema formats. It reads database schemas from multiple sources (live databases, DBML, DCTX, DrawDB, etc.) and writes them to various formats (GORM, Bun, JSON, YAML, SQL, etc.).`, PersistentPreRun: func(cmd *cobra.Command, args []string) { fmt.Printf("RelSpec %s (built: %s)\n\n", version, buildDate) }, } func init() { rootCmd.AddCommand(convertCmd) rootCmd.AddCommand(diffCmd) rootCmd.AddCommand(inspectCmd) rootCmd.AddCommand(scriptsCmd) rootCmd.AddCommand(templCmd) rootCmd.AddCommand(editCmd) rootCmd.AddCommand(mergeCmd) rootCmd.AddCommand(splitCmd) rootCmd.AddCommand(versionCmd) }