diff --git a/Taskfile.yml b/Taskfile.yml index 216afb151..ccb5cd267 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -12,7 +12,7 @@ vars: sh: date -u +"%Y-%m-%dT%H:%M:%SZ" GO_SOURCES: "**/*.go" BUILD_ARGS: '--build-arg GIT_TAG="{{.GIT_TAG}}" --build-arg GIT_COMMIT="{{.GIT_COMMIT}}" --build-arg BUILD_DATE="{{.BUILD_DATE}}" --build-arg TELEMETRY_ENDPOINT="{{.TELEMETRY_ENDPOINT}}" --build-arg TELEMETRY_API_KEY="{{.TELEMETRY_API_KEY}}" --build-arg TELEMETRY_HEADER="{{.TELEMETRY_HEADER}}"' - LDFLAGS: '-X "github.com/docker/cagent/cmd/root.Version={{.GIT_TAG}}" -X "github.com/docker/cagent/cmd/root.Commit={{.GIT_COMMIT}}" -X "github.com/docker/cagent/cmd/root.BuildTime={{.BUILD_DATE}}" -X "github.com/docker/cagent/internal/telemetry.TelemetryEndpoint={{.TELEMETRY_ENDPOINT}}" -X "github.com/docker/cagent/internal/telemetry.TelemetryAPIKey={{.TELEMETRY_API_KEY}}" -X "github.com/docker/cagent/internal/telemetry.TelemetryHeader={{.TELEMETRY_HEADER}}"' + LDFLAGS: '-X "github.com/docker/cagent/internal/version.Version={{.GIT_TAG}}" -X "github.com/docker/cagent/internal/version.Commit={{.GIT_COMMIT}}" -X "github.com/docker/cagent/internal/version.BuildTime={{.BUILD_DATE}}" -X "github.com/docker/cagent/internal/telemetry.TelemetryEndpoint={{.TELEMETRY_ENDPOINT}}" -X "github.com/docker/cagent/internal/telemetry.TelemetryAPIKey={{.TELEMETRY_API_KEY}}" -X "github.com/docker/cagent/internal/telemetry.TelemetryHeader={{.TELEMETRY_HEADER}}"' tasks: default: diff --git a/cmd/root/root.go b/cmd/root/root.go index 4bdbcc817..5d299c448 100644 --- a/cmd/root/root.go +++ b/cmd/root/root.go @@ -10,6 +10,7 @@ import ( "github.com/docker/cagent/internal/config" "github.com/docker/cagent/internal/telemetry" + "github.com/docker/cagent/internal/version" "github.com/spf13/cobra" ) @@ -106,7 +107,7 @@ func NewRootCmd() *cobra.Command { func Execute() { // Set the version for automatic telemetry initialization - telemetry.SetGlobalTelemetryVersion(Version) + telemetry.SetGlobalTelemetryVersion(version.Version) // Print startup message only on first installation/setup if isFirstRun() { diff --git a/cmd/root/version.go b/cmd/root/version.go index 7a94b551b..45be03466 100644 --- a/cmd/root/version.go +++ b/cmd/root/version.go @@ -4,16 +4,10 @@ import ( "fmt" "github.com/docker/cagent/internal/telemetry" + "github.com/docker/cagent/internal/version" "github.com/spf13/cobra" ) -// version information -var ( - Version = "dev" - BuildTime = "unknown" - Commit = "unknown" -) - // NewVersionCmd creates a new version command func NewVersionCmd() *cobra.Command { return &cobra.Command{ @@ -24,9 +18,9 @@ func NewVersionCmd() *cobra.Command { // Track the version command telemetry.TrackCommand("version", args) - fmt.Printf("cagent version %s\n", Version) - fmt.Printf("Build time: %s\n", BuildTime) - fmt.Printf("Commit: %s\n", Commit) + fmt.Printf("cagent version %s\n", version.Version) + fmt.Printf("Build time: %s\n", version.BuildTime) + fmt.Printf("Commit: %s\n", version.Commit) }, } } diff --git a/internal/tui/components/statusbar/statusbar.go b/internal/tui/components/statusbar/statusbar.go index 3a802c47b..32f385fc9 100644 --- a/internal/tui/components/statusbar/statusbar.go +++ b/internal/tui/components/statusbar/statusbar.go @@ -4,8 +4,10 @@ import ( "strings" "github.com/charmbracelet/bubbles/v2/key" + "github.com/charmbracelet/lipgloss/v2" "github.com/docker/cagent/internal/tui/core" "github.com/docker/cagent/internal/tui/styles" + "github.com/docker/cagent/internal/version" ) // StatusBar represents the status bar component that displays key bindings help @@ -47,27 +49,41 @@ func (s *StatusBar) formatHelpString(bindings []key.Binding) string { // View renders the status bar func (s *StatusBar) View() string { - if s.help == nil { - return "" - } + versionText := styles.MutedStyle.Render(version.Version) - help := s.help.Help() - if help == nil { - return "" + var helpText string + if s.help != nil { + help := s.help.Help() + if help != nil { + shortcuts := help.ShortHelp() + if len(shortcuts) > 0 { + helpText = s.formatHelpString(shortcuts) + } + } } - shortcuts := help.ShortHelp() - if len(shortcuts) == 0 { - return "" + // If no help text, just show version aligned right + if helpText == "" { + return styles.BaseStyle. + Width(s.width). + PaddingLeft(1). + PaddingRight(1). + Align(lipgloss.Right). + Render(versionText) } - statusText := s.formatHelpString(shortcuts) - if statusText == "" { - return "" + helpStyled := styles.BaseStyle.PaddingLeft(1).Render(helpText) + versionStyled := styles.BaseStyle.PaddingRight(1).Render(versionText) + + helpWidth := lipgloss.Width(helpStyled) + versionWidth := lipgloss.Width(versionStyled) + availableSpace := s.width - helpWidth - versionWidth + + if availableSpace < 0 { + availableSpace = 1 } - return styles.BaseStyle. - Width(s.width). - PaddingLeft(1). - Render(statusText) + spacer := strings.Repeat(" ", availableSpace) + + return helpStyled + spacer + versionStyled } diff --git a/internal/version/version.go b/internal/version/version.go new file mode 100644 index 000000000..dfc93fa4a --- /dev/null +++ b/internal/version/version.go @@ -0,0 +1,8 @@ +package version + +// version information +var ( + Version = "dev" + BuildTime = "unknown" + Commit = "unknown" +)