- docker-compose.yaml: Local PostgreSQL on port 5433 - .env.local.example: Environment template for local dev - Makefile: Dev commands (run, test, db-up, db-reset, etc.) - QUICKSTART.md: Developer setup guide - .gitignore: Exclude .env.local Verified workflow: 1. make setup (creates .env.local) 2. make db-up (starts postgres) 3. make run (auto-migrates and serves on :8080) All endpoints tested and working. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
87 lines
2.5 KiB
Makefile
87 lines
2.5 KiB
Makefile
# rdev-api development commands
|
|
# Run 'make help' to see available targets
|
|
|
|
.PHONY: help setup run test build 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
|
|
|
|
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 .
|