package main import ( "fmt" "os" "nex/backend/pkg/projectversion" ) func main() { if err := run(os.Args[1:]); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } func run(args []string) error { if len(args) == 0 { return usageError() } root, err := projectversion.FindRepoRoot(mustGetwd()) if err != nil { return err } switch args[0] { case "print": version, readErr := projectversion.ReadString(root) if readErr != nil { return readErr } fmt.Println(version) return nil case "sync": return projectversion.Sync(root) case "check": return projectversion.Check(root) case "verify-tag": if len(args) != 2 { return fmt.Errorf("verify-tag 需要一个 tag 参数") } return projectversion.VerifyTag(root, args[1]) case "macos-plist": if len(args) != 2 { return fmt.Errorf("macos-plist 需要一个最低系统版本参数") } return printMacOSPlist(root, args[1]) case "asset-name": return printAssetName(root, args[1:]) default: return usageError() } } func printMacOSPlist(root, minMacOSVersion string) error { version, err := projectversion.ReadString(root) if err != nil { return err } plist, err := projectversion.DesktopInfoPlist(version, minMacOSVersion) if err != nil { return err } fmt.Print(plist) return nil } func printAssetName(root string, args []string) error { if len(args) < 2 { return fmt.Errorf("asset-name 至少需要 kind 和 platform 参数") } version, err := projectversion.ReadString(root) if err != nil { return err } switch args[0] { case "server": if len(args) != 3 { return fmt.Errorf("server 资产命名需要 platform 和 arch 参数") } name, nameErr := projectversion.ServerAssetName(version, args[1], args[2]) if nameErr != nil { return nameErr } fmt.Println(name) return nil case "desktop": if len(args) != 2 { return fmt.Errorf("desktop 资产命名只需要 platform 参数") } name, nameErr := projectversion.DesktopAssetName(version, args[1]) if nameErr != nil { return nameErr } fmt.Println(name) return nil default: return fmt.Errorf("不支持的资产类型 %q", args[0]) } } func mustGetwd() string { wd, err := os.Getwd() if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } return wd } func usageError() error { return fmt.Errorf("用法: versionctl ") }