package app import ( "flag" "fmt" "log/slog" "os" "runtime/debug" ) const shortIDLen = 12 var Version string func Usage() { _, _ = fmt.Fprint(flag.CommandLine.Output(), "Usage: ds [flags]\n\nA terminal UI for Docker containers.\n\nFlags:\n") flag.PrintDefaults() } func ConfigureLogging(debug bool) { var handler slog.Handler if debug { handler = slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelDebug}) } else { handler = slog.DiscardHandler } slog.SetDefault(slog.New(handler)) } func ResolveVersion() string { if Version != "" { return Version } if info, ok := debug.ReadBuildInfo(); ok { if s := versionFromBuildInfo(info); s != "" { return s } } return "unknown" } func versionFromBuildInfo(info *debug.BuildInfo) string { var rev, modified string for _, s := range info.Settings { switch s.Key { case "vcs.revision": rev = s.Value case "vcs.modified": modified = s.Value } } if rev != "" { short := rev if len(short) > shortIDLen { short = short[:shortIDLen] } if modified == "true" { return short + "-dirty" } return short } if info.Main.Version != "" && info.Main.Version != "(devel)" { return info.Main.Version } return "" }