Files
python-sdk/pkg/hanzo-memory/Makefile
T
2025-07-27 03:02:44 -05:00

208 lines
5.2 KiB
Makefile

# Hanzo Memory Service Makefile
# Colors
BLUE := \033[0;34m
GREEN := \033[0;32m
YELLOW := \033[0;33m
RED := \033[0;31m
NC := \033[0m # No Color
# Python version
PYTHON_VERSION := 3.11
# Project paths
PROJECT_ROOT := $(shell pwd)
SRC_DIR := src
TEST_DIR := tests
DATA_DIR := data
INFINITY_DB_PATH := $(DATA_DIR)/infinity_db
# Default target
.DEFAULT_GOAL := help
# Help
.PHONY: help
help: ## Show this help message
@echo "$(BLUE)Hanzo Memory Service$(NC)"
@echo "$(GREEN)Available commands:$(NC)"
@awk 'BEGIN {FS = ":.*##"; printf "\n"} /^[a-zA-Z_-]+:.*?##/ { printf " $(YELLOW)%-15s$(NC) %s\n", $$1, $$2 } /^##@/ { printf "\n$(BLUE)%s$(NC)\n", substr($$0, 5) }' $(MAKEFILE_LIST)
##@ Setup
.PHONY: install-python
install-python: ## Install Python using uv
@echo "$(BLUE)Installing Python $(PYTHON_VERSION)...$(NC)"
@command -v uv >/dev/null 2>&1 || (echo "Installing uv..." && curl -LsSf https://astral.sh/uv/install.sh | sh)
uv python install $(PYTHON_VERSION)
.PHONY: venv
venv: ## Create virtual environment using uv
@echo "$(BLUE)Creating virtual environment...$(NC)"
uv venv
.PHONY: install
install: ## Install dependencies
@echo "$(BLUE)Installing dependencies...$(NC)"
uv pip install -e ".[dev,test,docs]"
.PHONY: setup
setup: venv install dirs ## Complete project setup
@echo "$(GREEN)Setup complete!$(NC)"
.PHONY: dirs
dirs: ## Create necessary directories
@echo "$(BLUE)Creating directories...$(NC)"
@mkdir -p $(DATA_DIR)
@mkdir -p $(INFINITY_DB_PATH)
@mkdir -p logs
@mkdir -p $(SRC_DIR)/hanzo_memory
@mkdir -p $(TEST_DIR)
##@ Development
.PHONY: dev
dev: ## Run development server
@echo "$(BLUE)Starting development server...$(NC)"
uv run uvicorn hanzo_memory.server:app --reload --host 0.0.0.0 --port 4000
.PHONY: mcp
mcp: ## Run MCP server
@echo "$(BLUE)Starting MCP server...$(NC)"
uv run hanzo-memory-mcp
.PHONY: install-mcp
install-mcp: ## Install MCP server to Claude Desktop
@echo "$(BLUE)Installing MCP server to Claude Desktop...$(NC)"
@echo "Add the following to your Claude Desktop config:"
@echo ' "mcpServers": {'
@echo ' "hanzo-memory": {'
@echo ' "command": "uv",'
@echo ' "args": ["run", "hanzo-memory-mcp"],'
@echo ' "cwd": "$(shell pwd)"'
@echo ' }'
@echo ' }'
.PHONY: run
run: ## Run production server
@echo "$(BLUE)Starting production server...$(NC)"
uv run uvicorn hanzo_memory.server:app --host 0.0.0.0 --port 4000
##@ Testing
.PHONY: test
test: ## Run tests
@echo "$(BLUE)Running tests...$(NC)"
uv run pytest -v
.PHONY: test-cov
test-cov: ## Run tests with coverage
@echo "$(BLUE)Running tests with coverage...$(NC)"
uv run pytest --cov=hanzo_memory --cov-report=html --cov-report=term
.PHONY: test-watch
test-watch: ## Run tests in watch mode
@echo "$(BLUE)Running tests in watch mode...$(NC)"
uv run pytest-watch
##@ Code Quality
.PHONY: lint
lint: ## Run linting
@echo "$(BLUE)Running ruff linter...$(NC)"
uv run ruff check $(SRC_DIR) $(TEST_DIR)
.PHONY: format
format: ## Format code
@echo "$(BLUE)Formatting code...$(NC)"
uv run ruff format $(SRC_DIR) $(TEST_DIR)
.PHONY: type-check
type-check: ## Run type checking
@echo "$(BLUE)Running type checker...$(NC)"
uv run mypy $(SRC_DIR)
.PHONY: check
check: lint type-check test ## Run all checks
##@ Build & Package
.PHONY: build
build: clean check ## Build package
@echo "$(BLUE)Building package...$(NC)"
uv build
.PHONY: install-local
install-local: ## Install package locally with uv
@echo "$(BLUE)Installing package locally...$(NC)"
uv pip install .
.PHONY: publish
publish: build ## Build and publish package to PyPI
@echo "$(BLUE)Publishing package to PyPI...$(NC)"
uv run twine upload dist/*
##@ Database
.PHONY: db-init
db-init: ## Initialize InfinityDB
@echo "$(BLUE)Initializing InfinityDB...$(NC)"
uv run python -m hanzo_memory.db.init
.PHONY: db-reset
db-reset: ## Reset InfinityDB (WARNING: destroys all data)
@echo "$(RED)WARNING: This will destroy all data!$(NC)"
@read -p "Are you sure? [y/N] " -n 1 -r; \
echo; \
if [[ $$REPLY =~ ^[Yy]$$ ]]; then \
rm -rf $(INFINITY_DB_PATH)/*; \
$(MAKE) db-init; \
fi
##@ Documentation
.PHONY: docs
docs: ## Build documentation
@echo "$(BLUE)Building documentation...$(NC)"
uv run mkdocs build
.PHONY: docs-serve
docs-serve: ## Serve documentation locally
@echo "$(BLUE)Serving documentation...$(NC)"
uv run mkdocs serve
##@ Cleanup
.PHONY: clean
clean: ## Clean build artifacts
@echo "$(BLUE)Cleaning build artifacts...$(NC)"
@rm -rf build dist *.egg-info
@rm -rf .pytest_cache .ruff_cache .mypy_cache
@rm -rf htmlcov .coverage coverage.xml
@find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
@find . -type f -name "*.pyc" -delete
.PHONY: clean-all
clean-all: clean ## Clean everything including data
@echo "$(RED)Cleaning all data...$(NC)"
@rm -rf $(DATA_DIR)
@rm -rf logs
##@ Docker (Optional)
.PHONY: docker-build
docker-build: ## Build Docker image
@echo "$(BLUE)Building Docker image...$(NC)"
docker build -t hanzo-memory:latest .
.PHONY: docker-run
docker-run: ## Run Docker container
@echo "$(BLUE)Running Docker container...$(NC)"
docker run -p 4000:4000 -v $(PWD)/data:/app/data hanzo-memory:latest
##@ Default target
.PHONY: all
all: setup build test ## Run setup, build, and test
# Make default target
.DEFAULT: help