diff --git a/internal/cli/admin.go b/internal/cli/admin.go index bc851e02da..de352fd050 100644 --- a/internal/cli/admin.go +++ b/internal/cli/admin.go @@ -309,7 +309,7 @@ Inference authentication: printer := ui.New(os.Stdout) ctx := cmd.Context() - printer.Banner() + printer.Banner(Version()) printer.Blank() printer.Header("Installing fullsend for " + org) printer.Blank() @@ -603,7 +603,7 @@ func runPerRepoInstall(ctx context.Context, c perRepoInstallConfig) error { client := gh.New(token) printer := ui.New(os.Stdout) - printer.Banner() + printer.Banner(Version()) printer.Blank() printer.Header("Installing per-repo fullsend for " + repoFullName) printer.Blank() @@ -1048,7 +1048,7 @@ func newUninstallCmd() *cobra.Command { printer := ui.New(os.Stdout) ctx := cmd.Context() - printer.Banner() + printer.Banner(Version()) printer.Blank() printer.Header("Uninstalling fullsend from " + org) printer.Blank() @@ -1096,7 +1096,7 @@ func newAnalyzeCmd() *cobra.Command { printer := ui.New(os.Stdout) ctx := cmd.Context() - printer.Banner() + printer.Banner(Version()) printer.Blank() printer.Header("Analyzing fullsend installation for " + org) printer.Blank() @@ -2090,7 +2090,7 @@ func newDisableReposCmd() *cobra.Command { // The yolo parameter is accepted for signature compatibility with reposRunFunc but is unused // since enable has no destructive operations that require confirmation. func runEnableRepos(ctx context.Context, client forge.Client, printer *ui.Printer, org string, repos []string, all bool, yolo bool) error { - printer.Banner() + printer.Banner(Version()) printer.Blank() printer.Header("Enabling repositories for " + org) printer.Blank() @@ -2203,7 +2203,7 @@ func runEnableRepos(ctx context.Context, client forge.Client, printer *ui.Printe // runDisableRepos disables the specified repositories from fullsend enrollment. func runDisableRepos(ctx context.Context, client forge.Client, printer *ui.Printer, org string, repos []string, all bool, yolo bool) error { - printer.Banner() + printer.Banner(Version()) printer.Blank() printer.Header("Disabling repositories for " + org) printer.Blank() diff --git a/internal/cli/run.go b/internal/cli/run.go index c3b8128633..c7fbe64bc8 100644 --- a/internal/cli/run.go +++ b/internal/cli/run.go @@ -77,7 +77,7 @@ func newRunCmd() *cobra.Command { } func runAgent(agentName, fullsendDir, outputBase, targetRepo, fullsendBinary string, envFiles []string, noPostScript bool, debug string, printer *ui.Printer) (runErr error) { - printer.Banner() + printer.Banner(Version()) printer.Blank() printer.Header("Running agent: " + agentName) printer.Blank() diff --git a/internal/ui/ui.go b/internal/ui/ui.go index 03597d9f60..2fbf587f2e 100644 --- a/internal/ui/ui.go +++ b/internal/ui/ui.go @@ -31,12 +31,13 @@ func New(w io.Writer) *Printer { return &Printer{w: w} } -// Banner prints the fullsend brand banner with tagline. -func (p *Printer) Banner() { +// Banner prints the fullsend brand banner with version and tagline. +func (p *Printer) Banner(version string) { p.mu.Lock() defer p.mu.Unlock() brand := lipgloss.NewStyle().Bold(true).Foreground(ColorBrand).Render("fullsend") - fmt.Fprintf(p.w, "\u26a1 %s\n", brand) + ver := lipgloss.NewStyle().Foreground(ColorMuted).Render(version) + fmt.Fprintf(p.w, "\u26a1 %s %s\n", brand, ver) tagline := lipgloss.NewStyle().Foreground(ColorMuted).Render("Autonomous agentic development for GitHub organizations") fmt.Fprintf(p.w, " %s\n", tagline) } diff --git a/internal/ui/ui_test.go b/internal/ui/ui_test.go index 593beadc34..3da6b2ea5d 100644 --- a/internal/ui/ui_test.go +++ b/internal/ui/ui_test.go @@ -10,9 +10,19 @@ import ( func TestBanner(t *testing.T) { var buf bytes.Buffer p := New(&buf) - p.Banner() + p.Banner("v1.2.3") out := buf.String() assert.Contains(t, out, "fullsend") + assert.Contains(t, out, "v1.2.3") +} + +func TestBannerDevVersion(t *testing.T) { + var buf bytes.Buffer + p := New(&buf) + p.Banner("dev") + out := buf.String() + assert.Contains(t, out, "fullsend") + assert.Contains(t, out, "dev") } func TestHeader(t *testing.T) {