Files
SIB/Makefile

164 lines
6.1 KiB
Makefile

.PHONY: help install-backend install-frontend dev-backend dev-frontend dev migrate-up migrate-down migrate-create setup clean seed
# Default target
.DEFAULT_GOAL := help
help: ## Show this help message
@echo 'Usage: make [target]'
@echo ''
@echo 'Available targets:'
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-20s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
# Installation targets
install-backend: ## Install backend dependencies
@echo "Installing backend dependencies..."
cd backend && uv sync
FRONTEND_MANAGER ?= bun
install-frontend: ## Install frontend dependencies
@echo "Installing frontend dependencies..."
cd frontend && $(FRONTEND_MANAGER) install
install: install-backend install-frontend ## Install all dependencies
# Development server targets
dev-backend: ## Run backend development server
@echo "Starting backend server..."
cd backend && uv run fastapi dev app/main.py
dev-frontend: ## Run frontend development server
@echo "Starting frontend server..."
cd frontend && $(FRONTEND_MANAGER) run dev
dev: ## Run both backend and frontend servers concurrently
@echo "Starting both backend and frontend servers..."
@make -j2 dev-backend dev-frontend
# Migration targets
migrate-create: ## Create a new migration (usage: make migrate-create NAME=migration_name)
@if [ -z "$(NAME)" ]; then \
echo "Error: NAME is required. Usage: make migrate-create NAME=migration_name"; \
exit 1; \
fi
@echo "Creating migration: $(NAME)..."
cd backend && uv run alembic revision --autogenerate -m "$(NAME)"
migrate-up: ## Apply all pending migrations
@echo "Applying migrations..."
cd backend && uv run alembic upgrade head
migrate-down: ## Rollback last migration
@echo "Rolling back last migration..."
cd backend && uv run alembic downgrade -1
migrate-history: ## Show migration history
@echo "Migration history:"
cd backend && uv run alembic history
migrate-current: ## Show current migration version
@echo "Current migration version:"
cd backend && uv run alembic current
# Setup target
setup: install ## Install dependencies and setup project
@echo "Setup complete! Don't forget to:"
@echo " 1. Configure backend/.env.development with your DATABASE_URL"
@echo " 2. Configure frontend/.env.development with your VITE_API_URL and VITE_GOOGLE_MAPS_API_KEY"
@echo " 3. Run 'make migrate-up' to apply database migrations"
# Build targets
build-backend: ## Build backend for production
@echo "Building backend..."
cd backend && uv build
build-frontend: ## Build frontend for production
@echo "Building frontend..."
cd frontend && $(FRONTEND_MANAGER) run build
build: build-backend build-frontend ## Build both backend and frontend
# Production server targets
run-backend: ## Run backend production server
@echo "Starting backend production server..."
cd backend && uv run fastapi run app/main.py
# Utility targets
clean-backend: ## Clean backend cache and temporary files
@echo "Cleaning backend..."
cd backend && find . -type d -name __pycache__ -exec rm -r {} + 2>/dev/null || true
cd backend && find . -type f -name "*.pyc" -delete
cd backend && rm -rf .pytest_cache .mypy_cache .coverage htmlcov 2>/dev/null || true
clean-frontend: ## Clean frontend build artifacts
@echo "Cleaning frontend..."
cd frontend && rm -rf dist node_modules/.vite 2>/dev/null || true
clean: clean-backend clean-frontend ## Clean all build artifacts
# Database targets
db-init: ## Initialize database (create tables)
@echo "Initializing database..."
cd backend && uv run python -c "from app.core.database import init_db; init_db()"
db-reset: ## Reset database (drop all tables and recreate)
@echo "Resetting database..."
@echo "⚠️ This will drop all tables and data!"
@read -p "Are you sure? [y/N] " -n 1 -r; \
echo; \
if [[ $$REPLY =~ ^[Yy]$$ ]]; then \
cd backend && uv run python -c "from sqlalchemy import text; from app.core.database import engine; from sqlmodel import Session; session = Session(engine); session.exec(text('DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public;')); session.commit(); session.close()"; \
echo "Database reset complete. Run 'make migrate-up' to recreate tables."; \
else \
echo "Cancelled."; \
fi
db-reset-alembic: ## Reset alembic version table (use when rebuilding migrations)
@echo "Resetting alembic version table..."
cd backend && uv run python -c "from sqlalchemy import text; from app.core.database import engine; from sqlmodel import Session; session = Session(engine); session.exec(text('DROP TABLE IF EXISTS alembic_version;')); session.commit(); session.close()"
@echo "Alembic version table reset. You can now create a new migration."
seed: ## Seed database with initial data
@echo "Seeding database..."
cd backend && uv run python -m app.core.seed
import-coordinates: ## Import bus stop coordinates from Supabase (usage: make import-coordinates ROUTE="Boquete>David" or make import-coordinates ALL=true)
@echo "Importing coordinates from Supabase..."
@if [ "$(ALL)" = "true" ]; then \
cd backend && uv run python -m app.core.import_supabase_coordinates --all; \
else \
cd backend && uv run python -m app.core.import_supabase_coordinates "$(ROUTE)"; \
fi
##Probar los lint
# Format and lint targets
format-backend: ## Format backend code
@echo "Formatting backend code..."
cd backend && uv run ruff format .
lint-backend: install-backend ## Lint backend code
@echo "Linting backend code..."
cd backend && uv run ruff check . --fix
format-frontend: ## Format frontend code
@echo "Formatting frontend code..."
cd frontend && $(FRONTEND_MANAGER) run format || echo "No format script found"
lint-frontend: install-frontend ## Lint frontend code
@echo "Linting frontend code..."
cd frontend && $(FRONTEND_MANAGER) run build
# cd frontend && $(FRONTEND_MANAGER) run lint || echo "No lint script found"
lint: lint-backend lint-frontend ## Lint all code
# Test targets
test-backend: ## Run backend tests
@echo "Running backend tests..."
cd backend && uv run pytest || echo "No tests found"
test-frontend: ## Run frontend tests
@echo "Running frontend tests..."
cd frontend && $(FRONTEND_MANAGER) run test || echo "No tests found"
test: test-backend test-frontend ## Run all tests