68 lines
2.3 KiB
Go
68 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"git.warky.dev/wdevs/relspecgo/pkg/buildinfo"
|
|
)
|
|
|
|
// version/buildDate mirror pkg/buildinfo so existing call sites keep working.
|
|
// The actual values are set there via ldflags (see Makefile).
|
|
var (
|
|
version = buildinfo.Version
|
|
buildDate = buildinfo.BuildDate
|
|
prisma7 bool
|
|
noVersion bool
|
|
silent bool
|
|
strictDirectives bool
|
|
)
|
|
|
|
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.).`,
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(convertCmd)
|
|
rootCmd.AddCommand(diffCmd)
|
|
rootCmd.AddCommand(inspectCmd)
|
|
rootCmd.AddCommand(scriptsCmd)
|
|
rootCmd.AddCommand(jobCmd)
|
|
rootCmd.AddCommand(assetsCmd)
|
|
rootCmd.AddCommand(templCmd)
|
|
rootCmd.AddCommand(editCmd)
|
|
rootCmd.AddCommand(mergeCmd)
|
|
rootCmd.AddCommand(splitCmd)
|
|
rootCmd.AddCommand(versionCmd)
|
|
rootCmd.AddCommand(reportCmd)
|
|
rootCmd.PersistentFlags().BoolVar(&prisma7, "prisma7", false, "Use Prisma 7 generator conventions when reading/writing Prisma schemas")
|
|
rootCmd.PersistentFlags().BoolVar(&noVersion, "no-version", false, "Suppress the RelSpec version header")
|
|
rootCmd.PersistentFlags().BoolVar(&silent, "silent", false, "Suppress progress and status messages (errors are still shown)")
|
|
rootCmd.PersistentFlags().BoolVar(&strictDirectives, "strict-directives", false, "Fail on unknown or untranslatable DBML dialect directives (@postgres:, @sqlite:, …)")
|
|
}
|
|
|
|
// printVersionHeader prints the "RelSpec <version> (built: <date>)" banner
|
|
// that precedes all command output. It is invoked from main() before cobra
|
|
// parses/executes anything, so it runs even for --help and bare invocations.
|
|
// It is skipped when --no-version is present, or when the version subcommand
|
|
// is being run (which prints its own, more detailed output).
|
|
func printVersionHeader(args []string) {
|
|
for _, a := range args {
|
|
if a == "--no-version" {
|
|
return
|
|
}
|
|
}
|
|
if len(args) > 0 && args[0] == "version" {
|
|
return
|
|
}
|
|
fmt.Printf("RelSpec %s (built: %s)\n\n", version, buildDate)
|
|
}
|