234 lines
6.5 KiB
Bash
Executable File
234 lines
6.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# test-gce-install.sh - Test Gas Town installation on fresh GCE VM
|
|
#
|
|
# Usage:
|
|
# # Create a fresh Debian/Ubuntu VM on GCE, then:
|
|
# curl -fsSL https://raw.githubusercontent.com/steveyegge/gastown/main/scripts/test-gce-install.sh | bash
|
|
#
|
|
# # Or clone and run locally:
|
|
# ./scripts/test-gce-install.sh
|
|
#
|
|
# This script:
|
|
# 1. Installs all prerequisites (Go, git, tmux, beads, Claude Code)
|
|
# 2. Installs Gas Town
|
|
# 3. Runs verification tests
|
|
# 4. Reports success/failure
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
log() { echo -e "${GREEN}[+]${NC} $1"; }
|
|
warn() { echo -e "${YELLOW}[!]${NC} $1"; }
|
|
fail() { echo -e "${RED}[X]${NC} $1"; exit 1; }
|
|
check() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
|
|
echo "================================================"
|
|
echo " Gas Town GCE Installation Test"
|
|
echo " $(date)"
|
|
echo "================================================"
|
|
echo
|
|
|
|
# Detect OS
|
|
if [[ -f /etc/os-release ]]; then
|
|
. /etc/os-release
|
|
OS=$ID
|
|
log "Detected OS: $OS ($VERSION_ID)"
|
|
else
|
|
fail "Cannot detect OS"
|
|
fi
|
|
|
|
# ============================================
|
|
# STEP 1: Install Prerequisites
|
|
# ============================================
|
|
log "Installing prerequisites..."
|
|
|
|
# Update package manager
|
|
if [[ "$OS" == "debian" || "$OS" == "ubuntu" ]]; then
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -y -qq git tmux curl
|
|
elif [[ "$OS" == "fedora" || "$OS" == "centos" || "$OS" == "rhel" ]]; then
|
|
sudo dnf install -y git tmux curl
|
|
else
|
|
warn "Unknown OS, assuming deps are installed"
|
|
fi
|
|
|
|
# Install Go 1.23+
|
|
if command -v go &> /dev/null; then
|
|
GO_VERSION=$(go version | grep -oP 'go\K[0-9]+\.[0-9]+')
|
|
if [[ $(echo "$GO_VERSION >= 1.23" | bc -l) -eq 1 ]]; then
|
|
check "Go $GO_VERSION already installed"
|
|
else
|
|
warn "Go $GO_VERSION too old, installing 1.23..."
|
|
INSTALL_GO=1
|
|
fi
|
|
else
|
|
INSTALL_GO=1
|
|
fi
|
|
|
|
if [[ -n "$INSTALL_GO" ]]; then
|
|
log "Installing Go 1.23..."
|
|
curl -fsSL https://go.dev/dl/go1.23.4.linux-amd64.tar.gz | sudo tar -C /usr/local -xzf -
|
|
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
|
|
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> ~/.bashrc
|
|
check "Go installed: $(go version)"
|
|
fi
|
|
|
|
# Ensure GOBIN is in PATH
|
|
export PATH=$PATH:$HOME/go/bin
|
|
|
|
# ============================================
|
|
# STEP 2: Install Beads
|
|
# ============================================
|
|
log "Installing beads (bd)..."
|
|
|
|
if command -v bd &> /dev/null; then
|
|
check "beads already installed: $(bd --version)"
|
|
else
|
|
# Install via go install
|
|
go install github.com/steveyegge/beads/cmd/bd@latest
|
|
if command -v bd &> /dev/null; then
|
|
check "beads installed: $(bd --version)"
|
|
else
|
|
fail "beads installation failed"
|
|
fi
|
|
fi
|
|
|
|
# ============================================
|
|
# STEP 3: Install Gas Town
|
|
# ============================================
|
|
log "Installing Gas Town (gt)..."
|
|
|
|
go install github.com/steveyegge/gastown/cmd/gt@latest
|
|
|
|
if command -v gt &> /dev/null; then
|
|
check "gt installed: $(gt --version 2>/dev/null || echo 'version unknown')"
|
|
else
|
|
fail "gt installation failed - check PATH includes ~/go/bin"
|
|
fi
|
|
|
|
# ============================================
|
|
# STEP 4: Create Test Workspace
|
|
# ============================================
|
|
TEST_DIR="$HOME/gt-test-$$"
|
|
log "Creating test workspace at $TEST_DIR..."
|
|
|
|
gt install "$TEST_DIR" --name test-town
|
|
|
|
if [[ -d "$TEST_DIR" && -f "$TEST_DIR/CLAUDE.md" ]]; then
|
|
check "Workspace created successfully"
|
|
else
|
|
fail "Workspace creation failed"
|
|
fi
|
|
|
|
cd "$TEST_DIR"
|
|
|
|
# ============================================
|
|
# STEP 5: Verification Tests
|
|
# ============================================
|
|
log "Running verification tests..."
|
|
|
|
# Test 1: gt status
|
|
if gt status &> /dev/null; then
|
|
check "gt status works"
|
|
else
|
|
warn "gt status failed (might be OK without daemon)"
|
|
fi
|
|
|
|
# Test 2: beads init
|
|
if [[ -d ".beads" ]]; then
|
|
check ".beads directory exists"
|
|
else
|
|
fail ".beads directory not created"
|
|
fi
|
|
|
|
# Test 3: bd commands work
|
|
if bd stats &> /dev/null; then
|
|
check "bd stats works"
|
|
else
|
|
warn "bd stats failed"
|
|
fi
|
|
|
|
# Test 4: Check for hardcoded paths
|
|
log "Checking for hardcoded paths..."
|
|
if grep -r "/Users/stevey" "$TEST_DIR" 2>/dev/null; then
|
|
warn "Found hardcoded /Users/stevey paths!"
|
|
else
|
|
check "No hardcoded user paths found"
|
|
fi
|
|
|
|
# Test 5: gt doctor
|
|
log "Running gt doctor..."
|
|
if gt doctor 2>&1 | tee /tmp/gt-doctor.log; then
|
|
check "gt doctor passed"
|
|
else
|
|
warn "gt doctor reported issues (see /tmp/gt-doctor.log)"
|
|
fi
|
|
|
|
# ============================================
|
|
# STEP 6: Test rig add (optional - needs real repo)
|
|
# ============================================
|
|
log "Testing rig add with sample repo..."
|
|
|
|
# Use a small public repo for testing
|
|
if gt rig add test-rig --remote=https://github.com/steveyegge/beads.git 2>&1; then
|
|
check "gt rig add works"
|
|
|
|
# Verify rig structure
|
|
if [[ -d "beads" ]]; then
|
|
check "Rig directory created"
|
|
fi
|
|
else
|
|
warn "gt rig add failed (might need auth)"
|
|
fi
|
|
|
|
# ============================================
|
|
# STEP 7: Claude Code CLI Check
|
|
# ============================================
|
|
log "Checking Claude Code CLI..."
|
|
|
|
if command -v claude &> /dev/null; then
|
|
check "Claude Code CLI found: $(claude --version 2>/dev/null || echo 'installed')"
|
|
else
|
|
warn "Claude Code CLI not installed"
|
|
echo " Install from: https://claude.ai/code"
|
|
echo " Gas Town works without it, but agents won't spawn"
|
|
fi
|
|
|
|
# ============================================
|
|
# Cleanup
|
|
# ============================================
|
|
log "Cleaning up test workspace..."
|
|
rm -rf "$TEST_DIR"
|
|
check "Cleanup complete"
|
|
|
|
# ============================================
|
|
# Summary
|
|
# ============================================
|
|
echo
|
|
echo "================================================"
|
|
echo " Installation Test Complete"
|
|
echo "================================================"
|
|
echo
|
|
echo "Prerequisites installed:"
|
|
echo " - Go: $(go version | grep -oP 'go[0-9]+\.[0-9]+\.[0-9]+')"
|
|
echo " - Git: $(git --version | grep -oP '[0-9]+\.[0-9]+\.[0-9]+')"
|
|
echo " - tmux: $(tmux -V | grep -oP '[0-9]+\.[0-9]+')"
|
|
echo " - beads: $(bd --version 2>/dev/null | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' || echo 'installed')"
|
|
echo " - gt: installed"
|
|
if command -v claude &> /dev/null; then
|
|
echo " - Claude Code: installed"
|
|
else
|
|
echo " - Claude Code: NOT INSTALLED (optional for basic usage)"
|
|
fi
|
|
echo
|
|
echo "Gas Town is ready to use!"
|
|
echo " gt install ~/my-workspace"
|
|
echo " cd ~/my-workspace"
|
|
echo " gt rig add myproject --remote=<url>"
|
|
echo
|