Files
disbord/Makefile
Travis Vasceannie 3acb779569 chore: remove .env.example and add new files for project structure
- Deleted .env.example file as it is no longer needed.
- Added .gitignore to manage ignored files and directories.
- Introduced CLAUDE.md for AI provider integration documentation.
- Created dev.sh for development setup and scripts.
- Updated Dockerfile and Dockerfile.production for improved build processes.
- Added multiple test files and directories for comprehensive testing.
- Introduced new utility and service files for enhanced functionality.
- Organized codebase with new directories and files for better maintainability.
2025-08-27 23:00:19 -04:00

185 lines
4.7 KiB
Makefile

# Makefile for Discord Quote Bot
.PHONY: help test test-unit test-integration test-performance test-coverage clean install lint format type-check security
# Default target
.DEFAULT_GOAL := help
# Variables
PYTHON := python3
UV := uv
PIP := $(UV) pip
PYTEST := $(UV) run pytest
BLACK := $(UV) run black
ISORT := $(UV) run isort
MYPY := $(UV) run mypy
PYRIGHT := $(UV) run pyright
COVERAGE := $(UV) run coverage
help: ## Show this help message
@echo "Discord Quote Bot - Development Commands"
@echo "========================================"
@echo ""
@echo "Usage: make [target]"
@echo ""
@echo "Available targets:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
install: ## Install all dependencies
$(UV) sync --all-extras
test: ## Run all tests
./run_tests.sh all
test-unit: ## Run unit tests only
$(PYTEST) -m unit -v
test-integration: ## Run integration tests only
$(PYTEST) -m integration -v
test-performance: ## Run performance tests only
$(PYTEST) -m performance -v
test-load: ## Run load tests only
$(PYTEST) -m load -v
test-fast: ## Run fast tests (exclude slow tests)
$(PYTEST) -m "not slow" -v
test-coverage: ## Run tests with coverage report
$(PYTEST) --cov=. --cov-report=html --cov-report=term-missing
@echo "Coverage report available at htmlcov/index.html"
test-watch: ## Run tests in watch mode
ptw -- -v
test-parallel: ## Run tests in parallel
$(PYTEST) -n auto -v
lint: ## Run linting checks
$(BLACK) --check .
$(ISORT) --check-only .
ruff check .
format: ## Format code
$(BLACK) .
$(ISORT) .
ruff check --fix .
type-check: ## Run type checking
$(MYPY) . --ignore-missing-imports
$(PYRIGHT)
security: ## Run security checks
bandit -r . -x tests/
safety check
clean: ## Clean generated files and caches
find . -type f -name '*.pyc' -delete
find . -type d -name '__pycache__' -delete
find . -type d -name '.pytest_cache' -delete
find . -type d -name '.mypy_cache' -delete
find . -type d -name 'htmlcov' -exec rm -rf {} +
find . -type f -name '.coverage' -delete
find . -type f -name 'coverage.xml' -delete
rm -rf build/ dist/ *.egg-info/
docker-build: ## Build Docker image
docker build -t discord-quote-bot:latest .
docker-run: ## Run bot in Docker
docker run --rm -it \
--env-file .env \
--name discord-quote-bot \
discord-quote-bot:latest
docker-test: ## Run tests in Docker
docker run --rm \
--env-file .env.test \
discord-quote-bot:latest \
pytest
migrate: ## Run database migrations
alembic upgrade head
migrate-create: ## Create new migration
@read -p "Enter migration message: " msg; \
alembic revision --autogenerate -m "$$msg"
migrate-rollback: ## Rollback last migration
alembic downgrade -1
db-reset: ## Reset database (CAUTION: Destroys all data)
@echo "WARNING: This will destroy all data in the database!"
@read -p "Are you sure? (y/N): " confirm; \
if [ "$$confirm" = "y" ]; then \
alembic downgrade base; \
alembic upgrade head; \
echo "Database reset complete"; \
else \
echo "Database reset cancelled"; \
fi
run: ## Run the bot locally
$(UV) run python main.py
run-dev: ## Run the bot in development mode with auto-reload
$(UV) run watchmedo auto-restart \
--directory=. \
--pattern="*.py" \
--recursive \
-- python main.py
logs: ## Show bot logs
tail -f logs/bot.log
logs-error: ## Show error logs only
grep ERROR logs/bot.log | tail -50
health: ## Check bot health
@echo "Checking bot health..."
@curl -s http://localhost:8080/health | jq '.' || echo "Health endpoint not available"
metrics: ## Show bot metrics
@echo "Bot metrics:"
@curl -s http://localhost:8080/metrics | head -20 || echo "Metrics endpoint not available"
pre-commit: ## Run pre-commit checks
@echo "Running pre-commit checks..."
@make format
@make lint
@make type-check
@make test-fast
@echo "Pre-commit checks passed!"
ci: ## Run full CI pipeline locally
@echo "Running full CI pipeline..."
@make clean
@make install
@make lint
@make type-check
@make security
@make test-coverage
@echo "CI pipeline complete!"
docs: ## Generate documentation
sphinx-build -b html docs/ docs/_build/html
@echo "Documentation available at docs/_build/html/index.html"
profile: ## Profile bot performance
$(UV) run python -m cProfile -o profile.stats main.py
$(UV) run python -m pstats profile.stats
benchmark: ## Run performance benchmarks
$(PYTEST) tests/performance/test_load_scenarios.py::TestLoadScenarios -v --benchmark-only
check-deps: ## Check for outdated dependencies
$(UV) pip list --outdated
update-deps: ## Update all dependencies
$(UV) pip install --upgrade -r requirements.txt
.PHONY: venv
venv: ## Create virtual environment
$(UV) venv
@echo "Virtual environment created. Activate with: source .venv/bin/activate"