- 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>
184 lines
4.0 KiB
Markdown
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
|