New Makefile.
This commit is contained in:
parent
bb1427754f
commit
94ee71f822
189
Makefile
Normal file
189
Makefile
Normal file
@ -0,0 +1,189 @@
|
||||
# City Builder - Makefile
|
||||
.PHONY: help install install-dev run dev test test-verbose test-watch clean lint format check-format check-lint setup venv activate build-requirements freeze-requirements reset-db check-deps
|
||||
|
||||
# Default target
|
||||
help:
|
||||
@echo "City Builder - Available make targets:"
|
||||
@echo ""
|
||||
@echo "Setup:"
|
||||
@echo " venv Create virtual environment"
|
||||
@echo " install Install dependencies"
|
||||
@echo " install-dev Install with dev dependencies"
|
||||
@echo " setup Complete setup (venv + install)"
|
||||
@echo ""
|
||||
@echo "Development:"
|
||||
@echo " run Start the server"
|
||||
@echo " dev Start server in development mode"
|
||||
@echo " test Run all tests"
|
||||
@echo " test-verbose Run tests with verbose output"
|
||||
@echo " test-watch Run tests in watch mode"
|
||||
@echo ""
|
||||
@echo "Code Quality:"
|
||||
@echo " lint Run linting checks"
|
||||
@echo " format Format code with black"
|
||||
@echo " check-format Check code formatting"
|
||||
@echo " check-lint Check linting without fixing"
|
||||
@echo ""
|
||||
@echo "Database:"
|
||||
@echo " reset-db Reset the database"
|
||||
@echo ""
|
||||
@echo "Maintenance:"
|
||||
@echo " clean Clean up cache files"
|
||||
@echo " freeze-requirements Update requirements.txt"
|
||||
@echo " check-deps Check for outdated dependencies"
|
||||
|
||||
# Variables
|
||||
PYTHON = python3
|
||||
VENV_DIR = .venv
|
||||
VENV_PYTHON = $(VENV_DIR)/bin/python
|
||||
VENV_PIP = $(VENV_DIR)/bin/pip
|
||||
VENV_ACTIVATE = source $(VENV_DIR)/bin/activate
|
||||
|
||||
# Create virtual environment
|
||||
venv:
|
||||
$(PYTHON) -m venv $(VENV_DIR)
|
||||
@echo "Virtual environment created at $(VENV_DIR)"
|
||||
@echo "Activate with: source $(VENV_DIR)/bin/activate"
|
||||
|
||||
# Install dependencies
|
||||
install: $(VENV_DIR)
|
||||
$(VENV_PIP) install --upgrade pip
|
||||
$(VENV_PIP) install -r requirements.txt
|
||||
|
||||
# Install with development dependencies
|
||||
install-dev: $(VENV_DIR)
|
||||
$(VENV_PIP) install --upgrade pip
|
||||
$(VENV_PIP) install -r requirements.txt
|
||||
$(VENV_PIP) install black flake8 isort pytest-cov mypy
|
||||
|
||||
# Complete setup
|
||||
setup: venv install
|
||||
@echo "Setup complete!"
|
||||
@echo "To activate the virtual environment, run:"
|
||||
@echo " source $(VENV_DIR)/bin/activate"
|
||||
|
||||
# Run the server
|
||||
run:
|
||||
@echo "Starting City Builder server..."
|
||||
$(VENV_PYTHON) run.py
|
||||
|
||||
# Run in development mode
|
||||
dev:
|
||||
@echo "Starting City Builder in development mode..."
|
||||
$(VENV_PYTHON) -m uvicorn server.main:app --host 127.0.0.1 --port 9901 --reload
|
||||
|
||||
# Run tests
|
||||
test:
|
||||
$(VENV_PYTHON) -m pytest
|
||||
|
||||
# Run tests with verbose output
|
||||
test-verbose:
|
||||
$(VENV_PYTHON) -m pytest -v -s
|
||||
|
||||
# Run tests in watch mode (requires pytest-watch)
|
||||
test-watch:
|
||||
$(VENV_PYTHON) -m pytest-watch
|
||||
|
||||
# Run specific test file
|
||||
test-smoke:
|
||||
$(VENV_PYTHON) -m pytest tests/test_smoke.py -v
|
||||
|
||||
test-integration:
|
||||
$(VENV_PYTHON) -m pytest tests/test_integration_*.py -v
|
||||
|
||||
test-multiplayer:
|
||||
$(VENV_PYTHON) -m pytest tests/test_multiplayer_*.py -v
|
||||
|
||||
# Code formatting with black
|
||||
format:
|
||||
@if [ -d "$(VENV_DIR)" ]; then \
|
||||
$(VENV_PYTHON) -m black server/ tests/ run.py || echo "black not installed, run 'make install-dev'"; \
|
||||
else \
|
||||
echo "Virtual environment not found. Run 'make venv' first."; \
|
||||
fi
|
||||
|
||||
# Check code formatting
|
||||
check-format:
|
||||
@if [ -d "$(VENV_DIR)" ]; then \
|
||||
$(VENV_PYTHON) -m black --check server/ tests/ run.py || echo "black not installed, run 'make install-dev'"; \
|
||||
else \
|
||||
echo "Virtual environment not found. Run 'make venv' first."; \
|
||||
fi
|
||||
|
||||
# Run linting
|
||||
lint:
|
||||
@if [ -d "$(VENV_DIR)" ]; then \
|
||||
$(VENV_PYTHON) -m flake8 server/ tests/ run.py --max-line-length=88 --extend-ignore=E203,W503 || echo "flake8 not installed, run 'make install-dev'"; \
|
||||
else \
|
||||
echo "Virtual environment not found. Run 'make venv' first."; \
|
||||
fi
|
||||
|
||||
# Check linting without fixing
|
||||
check-lint: lint
|
||||
|
||||
# Sort imports
|
||||
sort-imports:
|
||||
@if [ -d "$(VENV_DIR)" ]; then \
|
||||
$(VENV_PYTHON) -m isort server/ tests/ run.py || echo "isort not installed, run 'make install-dev'"; \
|
||||
else \
|
||||
echo "Virtual environment not found. Run 'make venv' first."; \
|
||||
fi
|
||||
|
||||
# Type checking
|
||||
type-check:
|
||||
@if [ -d "$(VENV_DIR)" ]; then \
|
||||
$(VENV_PYTHON) -m mypy server/ || echo "mypy not installed, run 'make install-dev'"; \
|
||||
else \
|
||||
echo "Virtual environment not found. Run 'make venv' first."; \
|
||||
fi
|
||||
|
||||
# Clean up cache files and temporary files
|
||||
clean:
|
||||
find . -type f -name "*.pyc" -delete
|
||||
find . -type d -name "__pycache__" -delete
|
||||
find . -type d -name "*.egg-info" -exec rm -rf {} +
|
||||
find . -type f -name ".coverage" -delete
|
||||
find . -type d -name ".pytest_cache" -exec rm -rf {} +
|
||||
find . -type d -name ".mypy_cache" -exec rm -rf {} +
|
||||
@echo "Cleaned up cache files"
|
||||
|
||||
# Reset database
|
||||
reset-db:
|
||||
@echo "Resetting database..."
|
||||
rm -f data/game.db
|
||||
mkdir -p data
|
||||
@echo "Database reset complete"
|
||||
|
||||
# Freeze current dependencies
|
||||
freeze-requirements:
|
||||
$(VENV_PIP) freeze > requirements-frozen.txt
|
||||
@echo "Frozen requirements saved to requirements-frozen.txt"
|
||||
|
||||
# Check for outdated dependencies
|
||||
check-deps:
|
||||
$(VENV_PIP) list --outdated
|
||||
|
||||
# Build and run in production mode
|
||||
prod:
|
||||
@echo "Starting in production mode..."
|
||||
$(VENV_PYTHON) -m uvicorn server.main:app --host 0.0.0.0 --port 9901
|
||||
|
||||
# Check virtual environment exists
|
||||
$(VENV_DIR):
|
||||
@if [ ! -d "$(VENV_DIR)" ]; then \
|
||||
echo "Virtual environment not found. Creating..."; \
|
||||
$(MAKE) venv; \
|
||||
fi
|
||||
|
||||
# Coverage report
|
||||
coverage:
|
||||
$(VENV_PYTHON) -m pytest --cov=server --cov-report=html --cov-report=term
|
||||
@echo "Coverage report generated in htmlcov/"
|
||||
|
||||
# Run all quality checks
|
||||
qa: check-format check-lint type-check test
|
||||
@echo "All quality checks passed!"
|
||||
|
||||
# Quick development cycle
|
||||
quick: format test
|
||||
@echo "Quick development cycle complete!"
|
||||
Loading…
Reference in New Issue
Block a user