From cdc765611f978d8f7e0c836387933a72e8a86985 Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 04:57:59 +0000 Subject: [PATCH] fix(help): add HTTP serve subcommand --- cmd/core/help/cmd.go | 16 ++++++++++++++++ cmd/core/help/cmd_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/cmd/core/help/cmd.go b/cmd/core/help/cmd.go index 2c2bf9e..82f9635 100644 --- a/cmd/core/help/cmd.go +++ b/cmd/core/help/cmd.go @@ -9,6 +9,10 @@ import ( "github.com/spf13/cobra" ) +var startHelpServer = func(catalog *gohelp.Catalog, addr string) error { + return gohelp.NewServer(catalog, addr).ListenAndServe() +} + func AddHelpCommands(root *cli.Command) { var searchQuery string @@ -37,6 +41,18 @@ func AddHelpCommands(root *cli.Command) { }, } + var serveAddr string + serveCmd := &cli.Command{ + Use: "serve", + Short: "Serve help documentation over HTTP", + Args: cobra.NoArgs, + RunE: func(cmd *cli.Command, args []string) error { + return startHelpServer(gohelp.DefaultCatalog(), serveAddr) + }, + } + serveCmd.Flags().StringVar(&serveAddr, "addr", ":8080", "HTTP listen address") + + helpCmd.AddCommand(serveCmd) helpCmd.Flags().StringVarP(&searchQuery, "search", "s", "", "Search help topics") root.AddCommand(helpCmd) } diff --git a/cmd/core/help/cmd_test.go b/cmd/core/help/cmd_test.go index 1d65d83..aa72e63 100644 --- a/cmd/core/help/cmd_test.go +++ b/cmd/core/help/cmd_test.go @@ -59,6 +59,30 @@ func TestAddHelpCommands_Good(t *testing.T) { assert.Contains(t, out, topics[0].ID) } +func TestAddHelpCommands_Good_Serve(t *testing.T) { + root := &cli.Command{Use: "core"} + AddHelpCommands(root) + + cmd, _, err := root.Find([]string{"help", "serve"}) + require.NoError(t, err) + require.NotNil(t, cmd) + + oldStart := startHelpServer + defer func() { startHelpServer = oldStart }() + + var gotAddr string + startHelpServer = func(catalog *gohelp.Catalog, addr string) error { + require.NotNil(t, catalog) + gotAddr = addr + return nil + } + + require.NoError(t, cmd.Flags().Set("addr", "127.0.0.1:9090")) + err = cmd.RunE(cmd, nil) + require.NoError(t, err) + assert.Equal(t, "127.0.0.1:9090", gotAddr) +} + func TestRenderSearchResults_Good(t *testing.T) { out := captureOutput(t, func() { err := renderSearchResults([]*gohelp.SearchResult{