name: CI on: push: branches: [main] pull_request: branches: [main] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: lint: name: Lint Python runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Install dependencies run: uv sync --project core --group dev - name: Ruff lint run: | uv run --project core ruff check core/ uv run --project core ruff check tools/ - name: Ruff format run: | uv run --project core ruff format --check core/ uv run --project core ruff format --check tools/ test: name: Test Python Framework runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Install dependencies and run tests working-directory: core run: | uv sync uv run pytest tests/ -v --ignore=tests/dummy_agents test-tools: name: Test Tools (${{ matrix.os }}) runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Install dependencies working-directory: tools run: uv sync --extra dev - name: Install Playwright Chromium (Linux) if: runner.os == 'Linux' working-directory: tools run: uv run playwright install --with-deps chromium - name: Install Playwright Chromium (Windows) if: runner.os == 'Windows' working-directory: tools run: uv run playwright install chromium - name: Run tests working-directory: tools run: uv run pytest tests/ -v validate: name: Validate Agent Exports runs-on: ubuntu-latest needs: [lint, test, test-tools] steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Install dependencies working-directory: core run: | uv sync - name: Validate exported agents run: | # Check that agent exports have valid structure if [ ! -d "exports" ]; then echo "No exports/ directory found, skipping validation" exit 0 fi shopt -s nullglob agent_dirs=(exports/*/) shopt -u nullglob if [ ${#agent_dirs[@]} -eq 0 ]; then echo "No agent directories in exports/, skipping validation" exit 0 fi validated=0 for agent_dir in "${agent_dirs[@]}"; do if [ -f "$agent_dir/agent.json" ]; then echo "Validating $agent_dir" uv run python -c "import json; json.load(open('$agent_dir/agent.json'))" validated=$((validated + 1)) fi done if [ "$validated" -eq 0 ]; then echo "No agent.json files found in exports/, skipping validation" else echo "Validated $validated agent(s)" fi