Skip to content

Commit c9bc556

Browse files
nicksenapclaude
andcommitted
Add Go CI, fix goreleaser deprecation, update README, debug MCP e2e
- Add go-check and go-e2e jobs to CI workflow - Migrate goreleaser brews to homebrew_casks - Add Go rewrite status section to README - Capture MCP e2e stderr to diagnose CI failures Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent f5af5cd commit c9bc556

File tree

2 files changed

+53
-4
lines changed

2 files changed

+53
-4
lines changed

README.md

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,14 @@ Grove gives you the multi-repo worktree workflow that monorepos get for free. On
1616

1717
## Install
1818

19-
### Homebrew
19+
### Homebrew (Go — recommended)
20+
21+
```bash
22+
brew tap nicksenap/grove
23+
brew install --cask grove-go
24+
```
25+
26+
### Homebrew (Python)
2027

2128
```bash
2229
brew tap nicksenap/grove
@@ -31,12 +38,18 @@ pipx install gw-cli
3138
pip install gw-cli
3239
```
3340

34-
### From source
41+
### From source (Python)
3542

3643
```bash
3744
uv tool install .
3845
```
3946

47+
### From source (Go)
48+
49+
```bash
50+
cd go && go build -o gw . && mv gw /usr/local/bin/
51+
```
52+
4053
Then add shell integration to your `.zshrc` (or `.bashrc`):
4154

4255
```bash
@@ -186,6 +199,37 @@ gw delete fix-auth-bug # removes worktrees, branches, and workspace
186199

187200
Grove copies your `CLAUDE.md` into new workspaces, so your agent gets project context from the start.
188201

202+
## Go rewrite
203+
204+
Grove is being rewritten in Go. The Python version works but has real distribution pain — Python version conflicts, `pipx`/`uv` packaging quirks, and slow startup (~300ms import overhead). The Go binary is a single static executable with instant startup and zero dependencies.
205+
206+
### Status
207+
208+
The Go version covers the core workflow. What's missing are the TUI features.
209+
210+
| Command | Go | Notes |
211+
|---|---|---|
212+
| `init`, `add-dir`, `remove-dir` | Done | |
213+
| `explore` | Done | Deep scan with remote URL caching |
214+
| `create` | Done | Parallel fetch, rollback, hooks |
215+
| `delete` | Done | Parallel teardown, hooks |
216+
| `list`, `status` | Done | Including `-s` summary and PR status |
217+
| `sync` | Done | Parallel rebase, conflict handling |
218+
| `go` | Done | Including `--close-tab` for Zellij |
219+
| `add-repo`, `remove-repo` | Done | |
220+
| `rename`, `doctor`, `stats` | Done | |
221+
| `preset` | Done | |
222+
| `shell-init` | Done | |
223+
| `mcp-serve` | Done | JSON-RPC server for Claude Code |
224+
| `hook` | Done | Claude Code hook handler |
225+
| `run` | Partial | Inline prefix output, no split-pane TUI |
226+
| `dash` | Not yet | Planned as separate plugin/binary |
227+
228+
285 tests passing (226 unit + 59 e2e).
229+
230+
Install the Go version with `brew install --cask nicksenap/grove/grove-go`, or build from source in `go/`.
231+
189232
## Requirements
190233

191-
Python 3.12+ (installed automatically by Homebrew)
234+
- **Go version:** No dependencies — single static binary
235+
- **Python version:** Python 3.12+ (installed automatically by Homebrew)

go/e2e/run.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,12 @@ MCP_INPUT=$(cat <<'JSONRPC'
561561
JSONRPC
562562
)
563563

564-
MCP_OUT=$(echo "${MCP_INPUT}" | timeout 10 gw mcp-serve --workspace mcp-ws 2>/dev/null || true)
564+
MCP_ERR=$(mktemp)
565+
MCP_OUT=$(echo "${MCP_INPUT}" | timeout 10 gw mcp-serve --workspace mcp-ws 2>"${MCP_ERR}" || true)
566+
if [ -s "${MCP_ERR}" ]; then
567+
echo " MCP stderr: $(cat "${MCP_ERR}")"
568+
fi
569+
rm -f "${MCP_ERR}"
565570

566571
# Check initialize response
567572
if echo "${MCP_OUT}" | grep -q '"protocolVersion"'; then

0 commit comments

Comments
 (0)