mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
208 lines
5.2 KiB
Makefile
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 |