rdev/QUICKSTART.md
jordan 2fc8454b8c feat: add local development environment
- 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>
2026-01-25 00:07:02 -07:00

184 lines
4.0 KiB
Markdown

# rdev-api Developer Quickstart
Get the API running locally in under 2 minutes.
## Prerequisites
- Go 1.21+
- Docker (for PostgreSQL)
- jq (optional, for pretty JSON output)
## Quick Start
```bash
# 1. Clone and enter the repo
cd rdev
# 2. First-time setup (creates .env.local)
make setup
# 3. Start PostgreSQL
make db-up
# 4. Run the API
make run
```
The API will:
- Connect to PostgreSQL on port 5433
- Auto-run database migrations
- Start serving on http://localhost:8080
## Verify It Works
```bash
# Health check (no auth required)
curl http://localhost:8080/health | jq .
# API docs
open http://localhost:8080/docs
# List projects (requires auth)
make curl-projects
# Create a test API key
make create-test-key
```
## Available Commands
Run `make help` to see all commands:
| Command | Description |
|---------|-------------|
| `make setup` | First-time setup: create .env.local |
| `make run` | Run the API server |
| `make dev` | Start database + run API |
| `make test` | Run all tests |
| `make build` | Build the binary |
| `make db-up` | Start PostgreSQL container |
| `make db-down` | Stop PostgreSQL container |
| `make db-reset` | Destroy and recreate database |
| `make db-shell` | Open psql shell |
| `make curl-health` | Test health endpoint |
| `make curl-projects` | Test projects endpoint |
| `make curl-keys` | Test keys endpoint |
| `make create-test-key` | Create a test API key |
## Configuration
Edit `.env.local` to customize:
```bash
# Server
PORT=8080
# Database
DB_HOST=localhost
DB_PORT=5433
DB_USER=appuser
DB_PASSWORD=localdev
DB_NAME=rdev
DB_SSL_MODE=disable
# Authentication (dev admin key)
RDEV_ADMIN_KEY=rdev_sk_devadmin_0123456789abcdef0123456789abcdef
```
## API Authentication
All endpoints except `/health`, `/ready`, `/docs`, and `/openapi.json` require authentication.
Use the `Authorization` header:
```bash
curl -H "Authorization: Bearer rdev_sk_devadmin_..." http://localhost:8080/projects
```
Or the `X-API-Key` header:
```bash
curl -H "X-API-Key: rdev_sk_devadmin_..." http://localhost:8080/projects
```
### Creating API Keys
```bash
# Using the Makefile helper
make create-test-key
# Or manually
curl -X POST http://localhost:8080/keys \
-H "Authorization: Bearer $RDEV_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "my-key", "scopes": ["projects:read"], "expires_in": "30d"}'
```
### Available Scopes
| Scope | Description |
|-------|-------------|
| `projects:read` | List and view projects |
| `projects:execute` | Run commands (claude, shell, git) |
| `keys:read` | List API keys |
| `keys:write` | Create and revoke keys |
| `admin` | Full access |
## Project Structure
```
rdev/
├── cmd/rdev-api/ # API entry point
├── internal/
│ ├── auth/ # Authentication (keys, middleware)
│ ├── db/ # Database connection + migrations
│ ├── handlers/ # HTTP handlers
│ ├── executor/ # kubectl exec wrapper
│ └── projects/ # Project registry
├── pkg/api/ # HTTP server chassis
├── docker-compose.yaml # Local PostgreSQL
├── Makefile # Dev commands
└── .env.local # Local config (gitignored)
```
## Troubleshooting
### Port 5432 already in use
The default port is 5433 to avoid conflicts with local PostgreSQL. If you still have issues:
```bash
# Check what's using the port
lsof -i :5433
# Or change the port in .env.local and docker-compose.yaml
```
### Database connection errors
```bash
# Reset the database
make db-reset
# Check PostgreSQL is running
docker compose ps
# View PostgreSQL logs
make db-logs
```
### Permission denied on /projects
Ensure you're using the admin key from `.env.local`:
```bash
source .env.local
curl -H "Authorization: Bearer $RDEV_ADMIN_KEY" http://localhost:8080/projects
```
## Next Steps
- View the API documentation at http://localhost:8080/docs
- Create application-specific API keys for your services
- See `history/` for version history and architecture decisions