diff options
| -rw-r--r-- | internal/cli/root.go | 1 | ||||
| -rw-r--r-- | internal/cli/serve.go | 3 | ||||
| -rw-r--r-- | internal/cli/start.go | 44 | ||||
| -rw-r--r-- | internal/version/version.go | 20 |
4 files changed, 67 insertions, 1 deletions
diff --git a/internal/cli/root.go b/internal/cli/root.go index 43f5cb9..75ec393 100644 --- a/internal/cli/root.go +++ b/internal/cli/root.go @@ -41,6 +41,7 @@ func NewRootCmd() *cobra.Command { newStatusCmd(), newInitCmd(), newLogsCmd(), + newStartCmd(), ) return cmd diff --git a/internal/cli/serve.go b/internal/cli/serve.go index 9545f5c..363e276 100644 --- a/internal/cli/serve.go +++ b/internal/cli/serve.go @@ -13,6 +13,7 @@ import ( "github.com/thepeterstone/claudomator/internal/api" "github.com/thepeterstone/claudomator/internal/executor" "github.com/thepeterstone/claudomator/internal/storage" + "github.com/thepeterstone/claudomator/internal/version" "github.com/spf13/cobra" ) @@ -83,7 +84,7 @@ func serve(addr string) error { httpSrv.Shutdown(shutdownCtx) }() - fmt.Printf("Claudomator server listening on %s\n", addr) + fmt.Printf("Claudomator %s listening on %s\n", version.Version(), addr) if err := httpSrv.ListenAndServe(); err != http.ErrServerClosed { return err } diff --git a/internal/cli/start.go b/internal/cli/start.go new file mode 100644 index 0000000..6ec09b2 --- /dev/null +++ b/internal/cli/start.go @@ -0,0 +1,44 @@ +package cli + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/spf13/cobra" +) + +func newStartCmd() *cobra.Command { + var serverURL string + + cmd := &cobra.Command{ + Use: "start <task-id>", + Short: "Queue a task for execution via the running server", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + return startTask(serverURL, args[0]) + }, + } + + cmd.Flags().StringVar(&serverURL, "server", "http://localhost:8484", "claudomator server URL") + return cmd +} + +func startTask(serverURL, id string) error { + url := fmt.Sprintf("%s/api/tasks/%s/run", serverURL, id) + resp, err := http.Post(url, "application/json", nil) //nolint:noctx + if err != nil { + return fmt.Errorf("POST %s: %w", url, err) + } + defer resp.Body.Close() + + var body map[string]string + _ = json.NewDecoder(resp.Body).Decode(&body) + + if resp.StatusCode >= 300 { + return fmt.Errorf("server returned %d: %s", resp.StatusCode, body["error"]) + } + + fmt.Printf("Queued task %s\n", id) + return nil +} diff --git a/internal/version/version.go b/internal/version/version.go new file mode 100644 index 0000000..35136d4 --- /dev/null +++ b/internal/version/version.go @@ -0,0 +1,20 @@ +package version + +import "runtime/debug" + +// Version returns the VCS commit hash embedded by `go build`, or "dev" if unavailable. +func Version() string { + info, ok := debug.ReadBuildInfo() + if !ok { + return "dev" + } + for _, s := range info.Settings { + if s.Key == "vcs.revision" { + if len(s.Value) > 8 { + return s.Value[:8] + } + return s.Value + } + } + return "dev" +} |
