171 lines
4.6 KiB
Makefile
171 lines
4.6 KiB
Makefile
.PHONY: dev dev-up dev-down test migrate migrate-up migrate-down build clean
|
|
|
|
# Development
|
|
dev: dev-up
|
|
@echo "Development environment is running"
|
|
@echo "Backend: http://localhost:8080"
|
|
@echo "Frontend: http://localhost:3000"
|
|
@echo ""
|
|
@echo "To view logs:"
|
|
@echo " make dev-logs"
|
|
@echo ""
|
|
@echo "To stop:"
|
|
@echo " make dev-down"
|
|
|
|
dev-up:
|
|
@echo "Creating podman network..."
|
|
-podman network create paragliding-net 2>/dev/null || true
|
|
@echo "Starting PostgreSQL..."
|
|
-podman rm -f paragliding-postgres 2>/dev/null || true
|
|
podman run -d \
|
|
--name paragliding-postgres \
|
|
--network paragliding-net \
|
|
-e POSTGRES_DB=paragliding \
|
|
-e POSTGRES_USER=dev \
|
|
-e POSTGRES_PASSWORD=devpass \
|
|
-p 5432:5432 \
|
|
postgres:16-alpine
|
|
@echo "Waiting for PostgreSQL to be ready..."
|
|
@sleep 5
|
|
@echo "Building backend..."
|
|
podman build -t paragliding-backend:dev -f backend/Dockerfile.dev backend/
|
|
@echo "Starting backend..."
|
|
-podman rm -f paragliding-backend 2>/dev/null || true
|
|
podman run -d \
|
|
--name paragliding-backend \
|
|
--network paragliding-net \
|
|
-e DATABASE_URL="postgres://dev:devpass@paragliding-postgres:5432/paragliding?sslmode=disable" \
|
|
-e PORT=8080 \
|
|
-e LOCATION_LAT=32.8893 \
|
|
-e LOCATION_LON=-117.2519 \
|
|
-e LOCATION_NAME="Torrey Pines Gliderport" \
|
|
-e TIMEZONE="America/Los_Angeles" \
|
|
-e FETCH_INTERVAL=15m \
|
|
-e CACHE_TTL=10m \
|
|
-p 8080:8080 \
|
|
-v $(PWD)/backend:/app:z \
|
|
paragliding-backend:dev
|
|
@echo "Building frontend..."
|
|
podman build -t paragliding-frontend:dev --target dev -f frontend/Dockerfile frontend/
|
|
@echo "Starting frontend..."
|
|
-podman rm -f paragliding-frontend 2>/dev/null || true
|
|
podman run -d \
|
|
--name paragliding-frontend \
|
|
--network paragliding-net \
|
|
-e NEXT_PUBLIC_API_URL=http://localhost:8080/api/v1 \
|
|
-p 3000:3000 \
|
|
-v $(PWD)/frontend:/app:z \
|
|
-v /app/node_modules \
|
|
-v /app/.next \
|
|
paragliding-frontend:dev
|
|
|
|
dev-down:
|
|
@echo "Stopping containers..."
|
|
-podman rm -f paragliding-frontend paragliding-backend paragliding-postgres 2>/dev/null || true
|
|
@echo "Containers stopped"
|
|
|
|
dev-logs:
|
|
@echo "=== Backend Logs ==="
|
|
podman logs -f paragliding-backend
|
|
|
|
dev-logs-frontend:
|
|
@echo "=== Frontend Logs ==="
|
|
podman logs -f paragliding-frontend
|
|
|
|
dev-logs-postgres:
|
|
@echo "=== PostgreSQL Logs ==="
|
|
podman logs -f paragliding-postgres
|
|
|
|
# Database migrations
|
|
migrate-up:
|
|
cd backend && go run -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest \
|
|
-path ./migrations \
|
|
-database "$(DATABASE_URL)" \
|
|
up
|
|
|
|
migrate-down:
|
|
cd backend && go run -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest \
|
|
-path ./migrations \
|
|
-database "$(DATABASE_URL)" \
|
|
down 1
|
|
|
|
migrate-create:
|
|
cd backend && go run -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest \
|
|
create -ext sql -dir ./migrations -seq $(name)
|
|
|
|
# Testing
|
|
test:
|
|
docker compose -f docker-compose.test.yml up --build --abort-on-container-exit
|
|
docker compose -f docker-compose.test.yml down -v
|
|
|
|
test-backend:
|
|
cd backend && go test -v ./...
|
|
|
|
test-frontend:
|
|
cd frontend && npm test
|
|
|
|
# Build
|
|
build-backend:
|
|
cd backend && go build -o bin/api ./cmd/api
|
|
|
|
build-frontend:
|
|
cd frontend && npm run build
|
|
|
|
build: build-backend build-frontend
|
|
|
|
# Clean
|
|
clean:
|
|
rm -rf backend/bin
|
|
rm -rf frontend/.next
|
|
rm -rf frontend/node_modules
|
|
|
|
# Local development without Docker
|
|
# Start postgres only (for local dev)
|
|
dev-db:
|
|
@echo "Starting PostgreSQL..."
|
|
podman-compose -f docker-compose.dev.yml up -d
|
|
@echo "PostgreSQL is running on localhost:5432"
|
|
@echo "Database: paragliding"
|
|
@echo "User: dev"
|
|
@echo "Password: devpass"
|
|
|
|
dev-db-down:
|
|
@echo "Stopping PostgreSQL..."
|
|
podman-compose -f docker-compose.dev.yml down
|
|
@echo "PostgreSQL stopped"
|
|
|
|
# Run backend locally (requires postgres)
|
|
run-backend:
|
|
@if [ ! -f backend/.env ]; then \
|
|
echo "Creating backend/.env from .env.example..."; \
|
|
cp backend/.env.example backend/.env; \
|
|
fi
|
|
cd backend && go run ./cmd/api
|
|
|
|
# Run frontend locally
|
|
run-frontend:
|
|
cd frontend && npm run dev
|
|
|
|
# Complete local development setup (using idempotent script)
|
|
dev-local:
|
|
@./dev.sh
|
|
|
|
# Alternative: step-by-step setup
|
|
dev-local-manual:
|
|
@echo "🚀 Setting up local development environment..."
|
|
@echo ""
|
|
@echo "1. Starting PostgreSQL..."
|
|
@make dev-db
|
|
@echo ""
|
|
@echo "2. Waiting for PostgreSQL to be ready..."
|
|
@sleep 3
|
|
@echo ""
|
|
@echo "3. Running migrations..."
|
|
@make migrate-up DATABASE_URL="postgres://dev:devpass@localhost:5432/paragliding?sslmode=disable"
|
|
@echo ""
|
|
@echo "✅ Setup complete!"
|
|
@echo ""
|
|
@echo "Now run these commands in separate terminals:"
|
|
@echo " Terminal 1: make run-backend"
|
|
@echo " Terminal 2: make run-frontend"
|