build: Add comprehensive Makefile for development workflow

- Setup and installation targets (setup, install, dev)
- Development targets (test, build, lint, format)
- Maintenance targets (update, status, clean, check-deps)
- Automatic virtual environment management
- Smart upstream update with submodule handling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-21 23:46:46 +02:00
parent f8aed9951d
commit ad35e4f754

136
Makefile Normal file
View File

@@ -0,0 +1,136 @@
# MarkiTect - Advanced Markdown Engine
# Makefile for common development tasks
.PHONY: help setup install test build clean update status dev lint format check-deps
# Default target
help:
@echo "MarkiTect Development Commands"
@echo "=============================="
@echo ""
@echo "Setup & Installation:"
@echo " setup - Initial project setup (venv + install)"
@echo " install - Install package in development mode"
@echo " dev - Install with development dependencies"
@echo ""
@echo "Development:"
@echo " test - Run all tests"
@echo " build - Build the package"
@echo " lint - Run code linting"
@echo " format - Format code"
@echo ""
@echo "Maintenance:"
@echo " update - Update from upstream (git + submodules)"
@echo " status - Show git status for repo and submodules"
@echo " clean - Clean build artifacts"
@echo " check-deps - Check dependency status"
# Python and virtual environment setup
PYTHON := python3
VENV := .venv
VENV_PYTHON := $(VENV)/bin/python
VENV_PIP := $(VENV)/bin/pip
# Setup virtual environment and install package
setup: $(VENV)/bin/activate install
@echo "✅ Project setup complete!"
$(VENV)/bin/activate:
@echo "🔧 Creating virtual environment..."
$(PYTHON) -m venv $(VENV)
$(VENV_PIP) install --upgrade pip setuptools wheel
# Install package in development mode
install: $(VENV)/bin/activate
@echo "📦 Installing MarkiTect in development mode..."
$(VENV_PIP) install -e .
# Install with development dependencies
dev: install
@echo "🛠️ Installing development dependencies..."
$(VENV_PIP) install pytest pytest-cov black flake8 mypy
# Run tests
test: $(VENV)/bin/activate
@echo "🧪 Running tests..."
@if [ -f $(VENV)/bin/pytest ]; then \
$(VENV)/bin/pytest tests/ -v; \
else \
$(VENV_PYTHON) -m pytest tests/ -v 2>/dev/null || \
$(VENV_PYTHON) -m unittest discover tests/ -v; \
fi
# Build the package
build: $(VENV)/bin/activate
@echo "🏗️ Building package..."
$(VENV_PYTHON) -m build 2>/dev/null || \
$(VENV_PIP) install build && $(VENV_PYTHON) -m build
# Code linting
lint: $(VENV)/bin/activate
@echo "🔍 Running linting..."
@if [ -f $(VENV)/bin/flake8 ]; then \
$(VENV)/bin/flake8 markitect/ tests/; \
else \
echo "⚠️ flake8 not installed. Run 'make dev' first."; \
fi
# Code formatting
format: $(VENV)/bin/activate
@echo "✨ Formatting code..."
@if [ -f $(VENV)/bin/black ]; then \
$(VENV)/bin/black markitect/ tests/; \
else \
echo "⚠️ black not installed. Run 'make dev' first."; \
fi
# Update from upstream
update:
@echo "🔄 Updating from upstream..."
@git status --porcelain | grep -q . && echo "⚠️ Working directory not clean. Commit or stash changes first." && exit 1 || true
git pull origin main
git submodule update --remote
@if git status --porcelain | grep -q "wiki"; then \
echo "📝 Committing wiki submodule update..."; \
git add wiki; \
git commit -m "Update wiki submodule to latest"; \
fi
@echo "✅ Update complete!"
# Show git status
status:
@echo "📊 Repository Status"
@echo "==================="
@echo ""
@echo "Main Repository:"
git status --short
@echo ""
@echo "Wiki Submodule:"
@cd wiki && git status --short
@echo ""
@echo "Recent Commits:"
git log --oneline -5
# Clean build artifacts
clean:
@echo "🧹 Cleaning build artifacts..."
rm -rf build/
rm -rf dist/
rm -rf *.egg-info/
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
find . -name "*.pyc" -delete 2>/dev/null || true
@echo "✅ Clean complete!"
# Check dependency status
check-deps: $(VENV)/bin/activate
@echo "📋 Dependency Status"
@echo "==================="
@echo ""
@echo "Python version:"
$(VENV_PYTHON) --version
@echo ""
@echo "Installed packages:"
$(VENV_PIP) list
@echo ""
@echo "Project dependencies:"
$(VENV_PIP) check