.PHONY: build build-manager build-runner build-web run-manager run-runner run cleanup cleanup-manager cleanup-runner kill-all clean test help # Build all components build: clean-bin build-manager build-runner # Build manager build-manager: clean-bin build-web go build -o bin/manager ./cmd/manager # Build runner build-runner: clean-bin GOOS=linux GOARCH=amd64 go build -o bin/runner ./cmd/runner # Build web UI build-web: clean-web cd web && npm install && npm run build # Cleanup manager (database and storage) cleanup-manager: @echo "Cleaning up manager database and storage..." @rm -f jiggablend.db 2>/dev/null || true @rm -f jiggablend.db-shm 2>/dev/null || true @rm -f jiggablend.db-wal 2>/dev/null || true @rm -rf jiggablend-storage 2>/dev/null || true @echo "Manager cleanup complete" # Cleanup runner workspaces cleanup-runner: @echo "Cleaning up runner workspaces..." @rm -rf jiggablend-workspaces jiggablend-workspace* *workspace* 2>/dev/null || true @echo "Runner cleanup complete" # Cleanup both manager and runner cleanup: cleanup-manager cleanup-runner # Kill all manager and runner processes kill-all: @echo "Killing all manager and runner processes..." @# Kill manager processes (compiled binaries in bin/, root, and go run) @-pkill -f "bin/manager" 2>/dev/null || true @-pkill -f "\./manager" 2>/dev/null || true @-pkill -f "manager" 2>/dev/null || true @-pkill -f "main.*cmd/manager" 2>/dev/null || true @-pkill -f "go run.*cmd/manager" 2>/dev/null || true @# Kill runner processes (compiled binaries in bin/, root, and go run) @-pkill -f "bin/runner" 2>/dev/null || true @-pkill -f "\./runner" 2>/dev/null || true @-pkill -f "runner" 2>/dev/null || true @-pkill -f "main.*cmd/runner" 2>/dev/null || true @-pkill -f "go run.*cmd/runner" 2>/dev/null || true @# Wait a moment for graceful shutdown @echo "Waiting for 5 seconds for graceful shutdown..." @sleep 1 @echo "5" @sleep 1 @echo "4" @sleep 1 @echo "3" @sleep 1 @echo "2" @sleep 1 @echo "1" @sleep 1 @echo "0" @# Check if any manager or runner processes are still running @MANAGER_COUNT=$$(pgrep -f "bin/manager\|\./manager\|manager\|main.*cmd/manager\|go run.*cmd/manager" | wc -l); \ RUNNER_COUNT=$$(pgrep -f "bin/runner\|\./runner\|runner\|main.*cmd/runner\|go run.*cmd/runner" | wc -l); \ if [ $$MANAGER_COUNT -eq 0 ] && [ $$RUNNER_COUNT -eq 0 ]; then \ echo "All manager and runner processes have shut down gracefully"; \ exit 0; \ else \ echo "Some processes still running ($$MANAGER_COUNT managers, $$RUNNER_COUNT runners), proceeding with force kill..."; \ fi @# Force kill any remaining processes @-pkill -9 -f "bin/manager" 2>/dev/null || true @-pkill -9 -f "\./manager" 2>/dev/null || true @-pkill -9 -f "main.*cmd/manager" 2>/dev/null || true @-pkill -9 -f "go run.*cmd/manager" 2>/dev/null || true @-pkill -9 -f "bin/runner" 2>/dev/null || true @-pkill -9 -f "\./runner" 2>/dev/null || true @-pkill -9 -f "main.*cmd/runner" 2>/dev/null || true @-pkill -9 -f "go run.*cmd/runner" 2>/dev/null || true @echo "All manager and runner processes killed after 5 seconds" # Run all parallel run: cleanup-manager cleanup-runner build-manager build-runner @echo "Starting manager and runner in parallel..." @echo "Press Ctrl+C to stop both..." @echo "Note: This will create a test API key for the runner to use" @trap 'kill $$MANAGER_PID $$RUNNER_PID 2>/dev/null; exit' INT TERM; \ FIXED_API_KEY=jk_r0_test_key_123456789012345678901234567890 ENABLE_LOCAL_AUTH=true LOCAL_TEST_EMAIL=test@example.com LOCAL_TEST_PASSWORD=testpassword bin/manager & \ MANAGER_PID=$$!; \ sleep 2; \ API_KEY=jk_r0_test_key_123456789012345678901234567890 bin/runner & \ RUNNER_PID=$$!; \ wait $$MANAGER_PID $$RUNNER_PID # Run manager with test API key # Note: ENABLE_LOCAL_AUTH enables local user registration/login # LOCAL_TEST_EMAIL and LOCAL_TEST_PASSWORD create a test user on startup (if it doesn't exist) # FIXED_API_KEY provides a pre-configured API key for testing (jk_r0_... format) # The manager will accept this API key for runner registration run-manager: cleanup-manager build-manager FIXED_API_KEY=jk_r0_test_key_123456789012345678901234567890 ENABLE_LOCAL_AUTH=true LOCAL_TEST_EMAIL=test@example.com LOCAL_TEST_PASSWORD=testpassword bin/manager # Run runner with test API key # Note: API_KEY must match what the manager accepts (see run-manager) # The runner will use this API key for all authentication with the manager run-runner: cleanup-runner build-runner API_KEY=jk_r0_test_key_123456789012345678901234567890 bin/runner # Clean bin build artifacts clean-bin: rm -rf bin/ # Clean web build artifacts clean-web: rm -rf web/dist/ # Run tests test: go test ./... -timeout 30s # Show help help: @echo "Jiggablend Build and Run Makefile" @echo "" @echo "Build targets:" @echo " build - Build manager, runner, and web UI" @echo " build-manager - Build manager with web UI" @echo " build-runner - Build runner binary" @echo " build-web - Build web UI" @echo "" @echo "Run targets:" @echo " run - Run manager and runner in parallel with test API key" @echo " run-manager - Run manager with test API key enabled" @echo " run-runner - Run runner with test API key" @echo "" @echo "Cleanup targets:" @echo " cleanup - Clean manager and runner data" @echo " cleanup-manager - Clean manager database and storage" @echo " cleanup-runner - Clean runner workspaces and API keys" @echo "" @echo "Other targets:" @echo " clean - Clean build artifacts" @echo " kill-all - Kill all running manager and runner processes (binaries in bin/, root, or go run)" @echo " test - Run Go tests" @echo " help - Show this help" @echo "" @echo "API Key System:" @echo " - FIXED_API_KEY: Pre-configured API key for manager (optional)" @echo " - API_KEY: API key for runner authentication" @echo " - Format: jk_r{N}_{32-char-hex}" @echo " - Generate via admin UI or set FIXED_API_KEY for testing" @echo "" @echo "Timeouts:" @echo " - Use 'timeout make run' to prevent hanging during testing" @echo " - Example: timeout 30s make run"