diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 772a5561..97c36bf5 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -10,6 +10,10 @@ builds: - CGO_ENABLED=0 flags: - -trimpath + ldflags: + - -s + - -w + - -X github.com/gabe565/ascii-movie/cmd.version={{ .Version }} tags: - gzip goarch: diff --git a/cmd/cmd.go b/cmd/cmd.go index bdc35064..8a13971b 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -14,18 +14,21 @@ import ( flag "github.com/spf13/pflag" ) -func NewCommand(version, commit string) *cobra.Command { +var version = "beta" + +func NewCommand() *cobra.Command { + cmdVersion, commit := buildVersion(version) cmd := &cobra.Command{ Use: "ascii-movie", Short: "Command line ASCII movie player.", - Version: buildVersion(version, commit), + Version: cmdVersion, PersistentPreRunE: preRun, DisableAutoGenTag: true, } cmd.AddCommand( play.NewCommand(), - serve.NewCommand(), + serve.NewCommand(version, commit), ls.NewCommand(), get.NewCommand(), ) @@ -57,10 +60,3 @@ func loadFlagEnvs(flags *flag.FlagSet) error { }) return errors.Join(errs...) } - -func buildVersion(version, commit string) string { - if commit != "" { - version += " (" + commit + ")" - } - return version -} diff --git a/cmd/serve/cmd.go b/cmd/serve/cmd.go index 181aa3b9..586150c1 100644 --- a/cmd/serve/cmd.go +++ b/cmd/serve/cmd.go @@ -11,11 +11,12 @@ import ( "github.com/gabe565/ascii-movie/internal/movie" "github.com/gabe565/ascii-movie/internal/server" "github.com/muesli/termenv" + "github.com/rs/zerolog/log" "github.com/spf13/cobra" "golang.org/x/sync/errgroup" ) -func NewCommand() *cobra.Command { +func NewCommand(version, commit string) *cobra.Command { cmd := &cobra.Command{ Use: "serve [movie]", Aliases: []string{"server", "listen"}, @@ -23,6 +24,7 @@ func NewCommand() *cobra.Command { Short: "Serve an ASCII movie over Telnet and SSH.", RunE: run, + Annotations: map[string]string{"version": version, "commit": commit}, ValidArgsFunction: movie.CompleteMovieName, } @@ -35,6 +37,11 @@ func NewCommand() *cobra.Command { var ErrAllDisabled = errors.New("all server types are disabled") func run(cmd *cobra.Command, args []string) error { + log.Info(). + Str("version", cmd.Annotations["version"]). + Str("commit", cmd.Annotations["commit"]). + Msg("ASCII Movie") + var path string if len(args) > 0 { path = args[0] diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 00000000..ce57a5c2 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,31 @@ +package cmd + +import "runtime/debug" + +func buildVersion(version string) (string, string) { + var commit string + var modified bool + if info, ok := debug.ReadBuildInfo(); ok { + for _, setting := range info.Settings { + switch setting.Key { + case "vcs.revision": + commit = setting.Value + case "vcs.modified": + if setting.Value == "true" { + modified = true + } + } + } + } + + if commit != "" { + if len(commit) > 8 { + commit = commit[:8] + } + if modified { + commit = "*" + commit + } + version += " (" + commit + ")" + } + return version, commit +} diff --git a/cmd/version_test.go b/cmd/version_test.go new file mode 100644 index 00000000..5133a968 --- /dev/null +++ b/cmd/version_test.go @@ -0,0 +1,12 @@ +package cmd + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_buildVersion(t *testing.T) { + got, _ := buildVersion("0.0.0-next") + assert.Equal(t, "0.0.0-next", got) +} diff --git a/internal/generate/completions/main.go b/internal/generate/completions/main.go index 8dcc34bb..ebd521d0 100644 --- a/internal/generate/completions/main.go +++ b/internal/generate/completions/main.go @@ -21,7 +21,7 @@ func main() { log.Fatal().Err(err).Msg("failed to create completions dir") } - rootCmd := cmd.NewCommand("latest", "") + rootCmd := cmd.NewCommand() name := rootCmd.Name() var buf bytes.Buffer rootCmd.SetOut(&buf) diff --git a/internal/generate/docs/main.go b/internal/generate/docs/main.go index 8d928917..86278c18 100644 --- a/internal/generate/docs/main.go +++ b/internal/generate/docs/main.go @@ -22,7 +22,7 @@ func main() { log.Fatal().Err(err).Msg("failed to create directory") } - rootCmd := cmd.NewCommand("latest", "") + rootCmd := cmd.NewCommand() if err := doc.GenMarkdownTree(rootCmd, output); err != nil { log.Fatal().Err(err).Msg("failed to generate docs") } diff --git a/internal/generate/manpages/main.go b/internal/generate/manpages/main.go index 2831d65a..e65fd626 100644 --- a/internal/generate/manpages/main.go +++ b/internal/generate/manpages/main.go @@ -40,7 +40,7 @@ func main() { log.Fatal().Err(err).Msg("failed to create manpages dir") } - rootCmd := cmd.NewCommand("beta", "") + rootCmd := cmd.NewCommand() rootName := rootCmd.Name() date, err := time.Parse(time.RFC3339, dateParam) diff --git a/main.go b/main.go index d4e6bc99..2dfc48f4 100644 --- a/main.go +++ b/main.go @@ -8,14 +8,8 @@ import ( //go:generate go run ./internal/generate/gzip -//nolint:gochecknoglobals -var ( - version = "beta" - commit = "" -) - func main() { - if err := cmd.NewCommand(version, commit).Execute(); err != nil { + if err := cmd.NewCommand().Execute(); err != nil { os.Exit(1) } }