diff --git a/conductor-setup.sh b/conductor-setup.sh new file mode 100755 index 00000000..c5a3f81a --- /dev/null +++ b/conductor-setup.sh @@ -0,0 +1,109 @@ +#!/bin/bash +set -e + +echo "🚀 Setting up Graphiti workspace..." + +# Check if uv is installed +if ! command -v uv &> /dev/null; then + echo "❌ Error: 'uv' is not installed. Please install uv first:" + echo " curl -LsSf https://astral.sh/uv/install.sh | sh" + exit 1 +fi + +# Check Python version +python_version=$(python3 --version 2>&1 | awk '{print $2}') +required_version="3.10" +if ! python3 -c "import sys; exit(0 if sys.version_info >= (3, 10) else 1)"; then + echo "❌ Error: Python 3.10 or higher is required (found: $python_version)" + exit 1 +fi + +echo "✓ Prerequisites check passed" + +# Copy necessary files from root repo +echo "📄 Copying project files from root repo..." +cp "$CONDUCTOR_ROOT_PATH/pyproject.toml" . +cp "$CONDUCTOR_ROOT_PATH/uv.lock" . +cp "$CONDUCTOR_ROOT_PATH/README.md" . +if [ -f "$CONDUCTOR_ROOT_PATH/pytest.ini" ]; then + cp "$CONDUCTOR_ROOT_PATH/pytest.ini" . +fi +if [ -f "$CONDUCTOR_ROOT_PATH/conftest.py" ]; then + cp "$CONDUCTOR_ROOT_PATH/conftest.py" . +fi +if [ -f "$CONDUCTOR_ROOT_PATH/py.typed" ]; then + cp "$CONDUCTOR_ROOT_PATH/py.typed" . +fi + +# Create symlink to source code instead of copying +echo "🔗 Creating symlinks to source code..." +ln -sf "$CONDUCTOR_ROOT_PATH/graphiti_core" graphiti_core +ln -sf "$CONDUCTOR_ROOT_PATH/tests" tests +ln -sf "$CONDUCTOR_ROOT_PATH/examples" examples + +# Install dependencies +echo "📦 Installing dependencies with uv..." +uv sync --frozen --extra dev + +# Create workspace-specific Makefile +echo "📝 Creating workspace Makefile..." +cat > Makefile << 'EOF' +.PHONY: install format lint test all check + +# Define variables - using virtualenv directly instead of uv run +PYTHON = .venv/bin/python +PYTEST = .venv/bin/pytest +RUFF = .venv/bin/ruff +PYRIGHT = .venv/bin/pyright + +# Default target +all: format lint test + +# Install dependencies +install: + @echo "Dependencies already installed via conductor-setup.sh" + @echo "Run './conductor-setup.sh' to reinstall" + +# Format code +format: + $(RUFF) check --select I --fix + $(RUFF) format + +# Lint code +lint: + $(RUFF) check + $(PYRIGHT) ./graphiti_core + +# Run tests +test: + DISABLE_FALKORDB=1 DISABLE_KUZU=1 DISABLE_NEPTUNE=1 $(PYTEST) -m "not integration" + +# Run format, lint, and test +check: format lint test +EOF + +# Handle environment variables +if [ -f "$CONDUCTOR_ROOT_PATH/.env" ]; then + echo "🔗 Linking .env file from root repo..." + ln -sf "$CONDUCTOR_ROOT_PATH/.env" .env + echo "✓ Environment file linked" +else + echo "⚠️ No .env file found in root repo" + echo " Copy $CONDUCTOR_ROOT_PATH/.env.example to $CONDUCTOR_ROOT_PATH/.env" + echo " and add your API keys, then rerun setup" + exit 1 +fi + +# Check for required environment variable +if ! grep -q "OPENAI_API_KEY=.*[^[:space:]]" .env 2>/dev/null; then + echo "⚠️ Warning: OPENAI_API_KEY not set in .env file" + echo " This is required for most Graphiti functionality" +fi + +echo "✅ Workspace setup complete!" +echo "" +echo "Available commands:" +echo " make test - Run unit tests" +echo " make lint - Lint and type check code" +echo " make format - Format code with ruff" +echo " make check - Run all checks (format, lint, test)" diff --git a/conductor.json b/conductor.json new file mode 100644 index 00000000..095f1816 --- /dev/null +++ b/conductor.json @@ -0,0 +1,7 @@ +{ + "scripts": { + "setup": "./conductor-setup.sh", + "run": "make test" + }, + "runScriptMode": "nonconcurrent" +}