项目文件夹

文件
2026-02-05 18:56:42 +03:00

131 行
3.7 KiB
Makefile

# Excalibur Makefile
# Usage: make [target]
.PHONY: help install config connect start stop shell logs clean-docker
.PHONY: dev-install test test-all test-cov lint format typecheck check clean
# Default target
help:
@echo "Excalibur Commands"
@echo "==================="
@echo ""
@echo "Docker Workflow:"
@echo " make install Build Docker image and install dependencies"
@echo " make config Configure authentication (interactive)"
@echo " make connect Connect to container (main entry point)"
@echo " make start Start container in background"
@echo " make stop Stop container (keeps config)"
@echo " make shell Open new shell in running container"
@echo " make logs View container logs"
@echo " make clean-docker Remove everything including config"
@echo ""
@echo "Development:"
@echo " make dev-install Install dev dependencies locally"
@echo " make test Run all tests"
@echo " make test-cov Run tests with coverage"
@echo " make lint Run linter (ruff)"
@echo " make format Format code (ruff)"
@echo " make typecheck Run type checker (mypy)"
@echo " make check Run all checks (lint + typecheck)"
@echo " make clean Clean build artifacts"
# ============================================================================
# Docker Workflow
# ============================================================================
install:
@echo "Installing local dependencies with uv..."
uv sync
@echo "Building Excalibur Docker image..."
docker compose build --no-cache
config:
@chmod +x scripts/config.sh
@./scripts/config.sh
connect:
@if [ "$$(docker ps -q -f name=excalibur)" ]; then \
echo "Attaching to running container..."; \
docker attach excalibur; \
else \
echo "Starting new container..."; \
if [ -f .env.auth ]; then \
docker compose --env-file .env.auth up -d && docker attach excalibur; \
else \
docker compose up -d && docker attach excalibur; \
fi; \
fi
start:
@if [ -f .env.auth ]; then \
docker compose --env-file .env.auth up -d; \
else \
docker compose up -d; \
fi
stop:
docker compose down
shell:
docker exec -it excalibur /bin/bash
logs:
docker compose logs -f
clean-docker:
docker compose down -v
docker rmi excalibur:latest 2>/dev/null || true
rm -f .env.auth
# ============================================================================
# Local Development
# ============================================================================
dev-install:
uv sync
# ============================================================================
# Testing
# ============================================================================
test:
uv run pytest tests/ -v --ignore=tests/docker/
test-all:
uv run pytest tests/ -v
test-cov:
uv run pytest tests/ -v --ignore=tests/docker/ --cov=excalibur --cov-report=term-missing --cov-report=html
# ============================================================================
# Code Quality
# ============================================================================
lint:
uv run ruff check excalibur/ tests/
format:
uv run ruff format excalibur/ tests/
typecheck:
uv run mypy excalibur/
check: lint typecheck
@echo "All checks passed!"
# ============================================================================
# Cleanup
# ============================================================================
clean:
rm -rf dist/
rm -rf build/
rm -rf *.egg-info/
rm -rf .pytest_cache/
rm -rf .mypy_cache/
rm -rf .ruff_cache/
rm -rf htmlcov/
rm -rf .coverage
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete 2>/dev/null || true