# Northern Thailand Ping River Monitor - Makefile .PHONY: help install install-dev test test-coverage lint format clean run run-api docker-build docker-run docs # Default target help: @echo "Northern Thailand Ping River Monitor - Available Commands:" @echo "" @echo "Setup:" @echo " install Install production dependencies" @echo " install-dev Install development dependencies" @echo "" @echo "Development:" @echo " test Run all tests" @echo " test-cov Run tests with coverage report" @echo " lint Run code linting" @echo " format Format code with black and isort" @echo " clean Clean up temporary files" @echo "" @echo "Running:" @echo " run Run the monitor in continuous mode" @echo " run-api Run the web API server" @echo " run-test Run a single test cycle" @echo " run-status Show system status" @echo "" @echo "Alerting:" @echo " alert-check Check water levels and send alerts" @echo " alert-test Send test Matrix message" @echo "" @echo "Distribution:" @echo " build-exe Build standalone executable" @echo " package Build and create distribution package" @echo "" @echo "Docker:" @echo " docker-build Build Docker image" @echo " docker-run Run with Docker Compose" @echo " docker-stop Stop Docker services" @echo "" @echo "Database:" @echo " setup-postgres Setup PostgreSQL database" @echo " test-postgres Test PostgreSQL connection" @echo " encode-password URL encode password for connection string" @echo " migrate-sqlite Migrate SQLite data to PostgreSQL" @echo " migrate-fast Fast migration with 10K batch size" @echo " analyze-sqlite Analyze SQLite database structure (dry run)" @echo "" @echo "Documentation:" @echo " docs Generate documentation" # Installation install: uv sync --no-dev install-dev: uv sync uv run pre-commit install # Testing test: uv run python test_integration.py uv run python test_station_management.py test-cov: uv run pytest --cov=src --cov-report=html --cov-report=term # Code quality lint: uv run flake8 src/ --max-line-length=100 uv run mypy src/ format: uv run black src/ *.py uv run isort src/ *.py # Cleanup clean: find . -type f -name "*.pyc" -delete find . -type d -name "__pycache__" -delete find . -type f -name "*.log" -delete rm -rf .pytest_cache/ rm -rf .mypy_cache/ rm -rf htmlcov/ rm -rf dist/ rm -rf build/ rm -rf *.egg-info/ # Running run: uv run python run.py run-api: uv run python run.py --web-api run-test: uv run python run.py --test run-status: uv run python run.py --status # Alerting alert-check: uv run python run.py --alert-check alert-test: uv run python run.py --alert-test # Docker docker-build: docker build -t ping-river-monitor . docker-run: docker-compose -f docker-compose.victoriametrics.yml up -d docker-stop: docker-compose -f docker-compose.victoriametrics.yml down docker-logs: docker-compose -f docker-compose.victoriametrics.yml logs -f # Documentation docs: cd docs && make html # Database management db-migrate: uv run python scripts/migrate_geolocation.py # Monitoring health-check: curl -f http://localhost:8000/health || exit 1 metrics: curl -s http://localhost:8000/metrics | jq . # Development helpers dev-setup: install-dev cp .env.example .env @echo "Development environment set up!" @echo "Edit .env file with your configuration" # Production deployment deploy-check: uv run python run.py --test @echo "Deployment check passed!" # Database management setup-postgres: uv run python scripts/setup_postgres.py test-postgres: uv run python -c "from scripts.setup_postgres import test_postgres_connection; from src.config import Config; config = Config.get_database_config(); test_postgres_connection(config['connection_string'])" encode-password: uv run python scripts/encode_password.py migrate-sqlite: uv run python scripts/migrate_sqlite_to_postgres.py migrate-fast: uv run python scripts/migrate_sqlite_to_postgres.py --fast analyze-sqlite: uv run python scripts/migrate_sqlite_to_postgres.py --dry-run # Distribution build-exe: uv run python build_simple.py package: build-exe @echo "Creating distribution package..." @if exist dist\ping-river-monitor-distribution.zip del dist\ping-river-monitor-distribution.zip @cd dist && powershell -Command "Compress-Archive -Path * -DestinationPath ping-river-monitor-distribution.zip -Force" @echo "✅ Distribution package created: dist/ping-river-monitor-distribution.zip" # Git helpers git-setup: git remote add origin https://git.b4l.co.th/B4L/Northern-Thailand-Ping-River-Monitor.git @echo "Git remote configured!" # Quick start quick-start: install dev-setup run-test @echo "Quick start completed!" @echo "Run 'make run-api' to start the web interface" # Gitea Actions validate-workflows: @echo "Validating Gitea Actions workflows..." @for file in .gitea/workflows/*.yml; do \ echo "Checking $$file..."; \ uv run python -c "import yaml; yaml.safe_load(open('$$file', encoding='utf-8'))" || exit 1; \ done @echo "✅ All workflows are valid" workflow-test: @echo "Testing workflow components locally..." make test make lint make format @echo "✅ Workflow test completed"