rdev/Makefile
jordan e42c18a9a3 feat: add session web UI mode + aeries-daeya cookbook tree
Session WebUI:
- Add `web_ui` flag to session create — launches claude-code-ui in pod on port 3001
- Install @siteboon/claude-code-ui in claudebox Dockerfile, expose port 3001
- Migration 027: add web_ui column to sessions table
- startWebUI/stopWebUI fire-and-forget helpers in SessionsHandler
- Service selects preview port 3001 (web UI) vs 8080 (sidecar) based on flag

Aeries Daeya cookbook:
- Add cookbooks/trees/aeries-daeya.yaml: privacy-first avatar social platform
  (infra → avatar data model → AI generation pipeline → studio UI)
- Add cookbooks/scripts/aeries-daeya-test.sh: run/status/diagnose/teardown harness
- Fix race condition in common.sh wait_for_pipeline: detect already-running pipelines
  at startup and track directly instead of waiting for a newer one

Docs/tooling:
- Add SDK Update Workflow section to CLAUDE.md
- Add `make sdk` and `make sdk-check` targets for OpenAPI spec management

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 23:14:08 -07:00

97 lines
3.0 KiB
Makefile

# rdev-api development commands
# Run 'make help' to see available targets
.PHONY: help setup run test build sdk sdk-check clean db-up db-down db-reset db-shell db-logs
# Load .env.local if it exists
ifneq (,$(wildcard .env.local))
include .env.local
endif
# Default values (can be overridden by .env.local)
PORT ?= 8080
DB_HOST ?= localhost
DB_PORT ?= 5433
DB_USER ?= appuser
DB_PASSWORD ?= localdev
DB_NAME ?= rdev
DB_SSL_MODE ?= disable
RDEV_ADMIN_KEY ?= rdev_sk_devadmin_0123456789abcdef0123456789abcdef
# Export all variables to child processes
export PORT DB_HOST DB_PORT DB_USER DB_PASSWORD DB_NAME DB_SSL_MODE RDEV_ADMIN_KEY
help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
setup: ## First-time setup: copy env template
@if [ ! -f .env.local ]; then \
cp .env.local.example .env.local; \
echo "Created .env.local from template"; \
else \
echo ".env.local already exists"; \
fi
run: ## Run the API server locally
go run ./cmd/rdev-api
test: ## Run all tests
go test -v ./...
build: ## Build the binary
CGO_ENABLED=0 go build -o rdev-api ./cmd/rdev-api
sdk: ## Regenerate sdk/openapi.json from the embedded OpenAPI spec
go run ./cmd/rdev-api --export-openapi > sdk/openapi.json
@echo "sdk/openapi.json updated"
sdk-check: ## Verify sdk/openapi.json matches the embedded spec (CI drift detection)
@go run ./cmd/rdev-api --export-openapi > /tmp/openapi-check.json
@diff sdk/openapi.json /tmp/openapi-check.json > /dev/null || \
(echo "ERROR: sdk/openapi.json is out of sync. Run 'make sdk'." && exit 1)
@echo "sdk/openapi.json is up to date"
clean: ## Remove build artifacts
rm -f rdev-api
# Database commands
db-up: ## Start local PostgreSQL container
docker compose up -d postgres
@echo "Waiting for postgres to be ready..."
@until docker compose exec -T postgres pg_isready -U $(DB_USER) -d $(DB_NAME) > /dev/null 2>&1; do \
sleep 1; \
done
@echo "PostgreSQL is ready on port $(DB_PORT)"
db-down: ## Stop local PostgreSQL container
docker compose down
db-reset: ## Reset database (destroy and recreate)
docker compose down -v
$(MAKE) db-up
db-shell: ## Open psql shell to local database
docker compose exec postgres psql -U $(DB_USER) -d $(DB_NAME)
db-logs: ## View PostgreSQL logs
docker compose logs -f postgres
# Combined commands
dev: db-up run ## Start database and run API
# Testing helpers
curl-health: ## Test health endpoint
@curl -s http://localhost:$(PORT)/health | jq .
curl-projects: ## Test projects endpoint (requires auth)
@curl -s -H "Authorization: Bearer $(RDEV_ADMIN_KEY)" http://localhost:$(PORT)/projects | jq .
curl-keys: ## Test keys endpoint (requires auth)
@curl -s -H "Authorization: Bearer $(RDEV_ADMIN_KEY)" http://localhost:$(PORT)/keys | jq .
create-test-key: ## Create a test API key
@curl -s -X POST -H "Authorization: Bearer $(RDEV_ADMIN_KEY)" \
-H "Content-Type: application/json" \
-d '{"name": "test-key", "scopes": ["projects:read"], "expires_in": "30d"}' \
http://localhost:$(PORT)/keys | jq .