Files
gastown/scripts/test-gce-install.sh

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