pyserveX/Makefile
2025-12-03 12:54:45 +03:00

216 lines
8.2 KiB
Makefile

.PHONY: help install build build-cython clean test lint format run dev-install dev-deps check release-patch release-minor release-major pipeline-check benchmark
PYTHON = python3
POETRY = poetry
PACKAGE_NAME = pyserve
GREEN = \033[0;32m
YELLOW = \033[1;33m
RED = \033[0;31m
CYAN = \033[0;36m
NC = \033[0m
help:
@echo "$(GREEN)╔══════════════════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(GREEN)$(NC) $(GREEN)Available Commands:$(NC) $(GREEN)$(NC)"
@echo "$(GREEN)╠══════════════════════════════════════════════════════════════════════════════╣$(NC)"
@echo "$(YELLOW)Installation:$(NC)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "install" "Installing dependencies"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "dev-install" "Installing development dependencies"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "dev-deps" "Installing additional tools"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "install-package" "Installing package locally"
@echo ""
@echo "$(YELLOW)Building:$(NC)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "build" "Building package (with Cython)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "build-cython" "Building Cython extensions only"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "clean" "Cleaning temporary files"
@echo ""
@echo "$(YELLOW)Testing:$(NC)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "test" "Running tests"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "test-cov" "Running tests with coverage"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "benchmark" "Running performance benchmarks"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "lint" "Checking code with linters"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "format" "Formatting code"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "check" "Lint and test"
@echo ""
@echo "$(YELLOW)Running:$(NC)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "run" "Starting server in development mode"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "run-prod" "Starting server in production mode"
@echo ""
@echo "$(YELLOW)Publishing:$(NC)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "publish-test" "Publishing to Test PyPI"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "publish" "Publishing to PyPI"
@echo ""
@echo "$(YELLOW)Versioning:$(NC)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "version" "Show current version"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "version-patch" "Increase patch version"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "version-minor" "Increase minor version"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "version-major" "Increase major version"
@echo ""
@echo "$(YELLOW)Environment:$(NC)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "shell" "Opening Poetry shell"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "env-info" "Environment information"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "deps-update" "Updating dependencies"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "deps-show" "Dependency tree"
@echo ""
@echo "$(YELLOW)Configuration:$(NC)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "config-create" "Creating config.yaml"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "watch-logs" "Last server logs"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "init" "Project initialized for development"
@echo ""
@echo "$(YELLOW)Release Management:$(NC)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "release-patch" "Create patch release (x.x.X)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "release-minor" "Create minor release (x.X.0)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "release-major" "Create major release (X.0.0)"
@printf " $(YELLOW)%-20s$(CYAN) %s$(NC)\n" "pipeline-check" "Run all pipeline checks locally"
@echo "$(GREEN)╚══════════════════════════════════════════════════════════════════════════════╝$(NC)"
install:
@echo "$(GREEN)Installing dependencies...$(NC)"
$(POETRY) install
dev-install:
@echo "$(GREEN)Installing development dependencies...$(NC)"
$(POETRY) install --with dev
dev-deps:
@echo "$(GREEN)Installing additional tools...$(NC)"
$(POETRY) add --group dev pytest pytest-cov black isort mypy flake8
build: clean build-cython
@echo "$(GREEN)Building package...$(NC)"
$(POETRY) build
build-cython:
@echo "$(GREEN)Building Cython extensions...$(NC)"
$(POETRY) run python scripts/build_cython.py build_ext --inplace || echo "$(YELLOW)Cython build skipped (optional)$(NC)"
clean:
@echo "$(GREEN)Cleaning temporary files...$(NC)"
rm -rf dist/
rm -rf build/
rm -rf *.egg-info/
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete 2>/dev/null || true
find . -type f -name "*.pyo" -delete 2>/dev/null || true
@# Cython artifacts
find $(PACKAGE_NAME) -type f -name "*.c" -delete 2>/dev/null || true
find $(PACKAGE_NAME) -type f -name "*.so" -delete 2>/dev/null || true
find $(PACKAGE_NAME) -type f -name "*.pyd" -delete 2>/dev/null || true
find $(PACKAGE_NAME) -type f -name "*.html" -delete 2>/dev/null || true
test:
@echo "$(GREEN)Running tests...$(NC)"
$(POETRY) run pytest tests/ -v
test-cov:
@echo "$(GREEN)Running tests with coverage...$(NC)"
$(POETRY) run pytest tests/ -v --cov=$(PACKAGE_NAME) --cov-report=html --cov-report=term
lint:
@echo "$(GREEN)Checking code with linters...$(NC)"
$(POETRY) run flake8 $(PACKAGE_NAME)/ --exclude='*.pyx,*.pxd'
$(POETRY) run mypy $(PACKAGE_NAME)/
format:
@echo "$(GREEN)Formatting code...$(NC)"
$(POETRY) run black $(PACKAGE_NAME)/ --exclude='\.pyx$$'
$(POETRY) run isort $(PACKAGE_NAME)/ --skip-glob='*.pyx'
check: lint test
benchmark: build-cython
@echo "$(GREEN)Running benchmarks...$(NC)"
$(POETRY) run python benchmarks/bench_path_matcher.py
run:
@echo "$(GREEN)Starting server in development mode...$(NC)"
$(POETRY) run python run.py --debug
run-prod:
@echo "$(GREEN)Starting server in production mode...$(NC)"
$(POETRY) run $(PACKAGE_NAME)
install-package: build
@echo "$(GREEN)Installing package locally...$(NC)"
$(POETRY) install
publish-test: build
@echo "$(YELLOW)Publishing to Test PyPI...$(NC)"
$(POETRY) publish --repository testpypi
publish: build
@echo "$(RED)Publishing to PyPI...$(NC)"
$(POETRY) publish
version:
@echo "$(GREEN)Current version:$(NC)"
$(POETRY) version
version-patch:
@echo "$(GREEN)Increasing patch version...$(NC)"
$(POETRY) version patch
version-minor:
@echo "$(GREEN)Increasing minor version...$(NC)"
$(POETRY) version minor
version-major:
@echo "$(GREEN)Increasing major version...$(NC)"
$(POETRY) version major
shell:
@echo "$(GREEN)Opening Poetry shell...$(NC)"
$(POETRY) shell
env-info:
@echo "$(GREEN)Environment information:$(NC)"
$(POETRY) env info
deps-update:
@echo "$(GREEN)Updating dependencies...$(NC)"
$(POETRY) update
deps-show:
@echo "$(GREEN)Dependency tree:$(NC)"
$(POETRY) show --tree
config-create:
@if [ ! -f config.yaml ]; then \
echo "$(GREEN)Creating config.yaml from config.example.yaml...$(NC)"; \
cp config.example.yaml config.yaml; \
else \
echo "$(YELLOW)config.yaml already exists$(NC)"; \
fi
watch-logs:
@echo "$(GREEN)Last server logs:$(NC)"
@if [ -f logs/pyserve.log ]; then tail -f logs/pyserve.log; else echo "$(RED)Log file not found$(NC)"; fi
init: dev-install config-create
@echo "$(GREEN)Project initialized for development!$(NC)"
release-patch:
@echo "$(GREEN)Creating patch release...$(NC)"
@./scripts/release.sh patch
release-minor:
@echo "$(GREEN)Creating minor release...$(NC)"
@./scripts/release.sh minor
release-major:
@echo "$(GREEN)Creating major release...$(NC)"
@./scripts/release.sh major
pipeline-check:
@echo "$(GREEN)Checking pipeline locally...$(NC)"
@echo "$(YELLOW)Running lint checks...$(NC)"
@$(MAKE) lint
@echo "$(YELLOW)Running tests...$(NC)"
@$(MAKE) test
@echo "$(YELLOW)Building package...$(NC)"
@$(MAKE) build
@echo "$(GREEN)All pipeline checks passed!$(NC)"
.DEFAULT_GOAL := help