From 94ee71f822b4a9000439a4b868e261442cb90882 Mon Sep 17 00:00:00 2001 From: retoor Date: Sun, 5 Oct 2025 02:31:31 +0200 Subject: [PATCH] New Makefile. --- Makefile | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ddad022 --- /dev/null +++ b/Makefile @@ -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!" \ No newline at end of file