refactor: move to src/ layout, organize package + tests into layer folders #744
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: test | |
| on: | |
| pull_request: | |
| push: | |
| branches: [master] | |
| jobs: | |
| test: | |
| name: test (${{ matrix.os }}) | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Ubuntu is the required gate (blocks merges). macOS + Windows run on | |
| # every code-change PR to surface platform regressions, but stay | |
| # non-blocking (continue-on-error below) until each has been green | |
| # across several merges — the fast test suite exercises the native | |
| # kuzu/ladybug graph layer, which had never been run on these OSes | |
| # before this matrix. Promote an OS to a hard gate by dropping it from | |
| # the continue-on-error expression once it is reliably green. | |
| # | |
| # macos-15-intel (x86_64) is the only runner that proves the graph-only | |
| # install/boot path AND the lexical-search fallback (search_lexical): the | |
| # PEP 508 markers in pyproject.toml gate the vector trio | |
| # (cocoindex[lancedb]/lancedb/sentence-transformers) off on Intel, so this | |
| # leg installs graph-only and every vector test file skips via | |
| # pytest.importorskip. This is the only CI coverage for the graph-only / | |
| # lexical path (the rest of the matrix is arm64/x64-with-vectors). NOTE: | |
| # macos-13 (the previous Intel label) was retired by GitHub on 2025-12-04, | |
| # which is why this leg previously hung "pending indefinitely"; | |
| # macos-15-intel is its supported replacement, available until 2027-08. | |
| # Cross-platform graph-only boot is also covered by | |
| # tests/test_graph_only_boot.py (blocks the vector modules in-process). | |
| os: [ubuntu-latest, macos-latest, macos-15-intel, windows-latest] | |
| continue-on-error: ${{ matrix.os != 'ubuntu-latest' }} | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - uses: dorny/paths-filter@v3 | |
| id: changes | |
| with: | |
| filters: | | |
| docs: | |
| - '**/*.md' | |
| - '**/*.mdc' | |
| - 'docs/**' | |
| - 'propose/**' | |
| - 'plans/**' | |
| - 'skills/**' | |
| - '.claude/**' | |
| - 'CLAUDE.md' | |
| - 'README.md' | |
| - 'CODEBASE_REQUIREMENTS.md' | |
| - '.github/CODEOWNERS' | |
| code: | |
| - '**/*.py' | |
| - 'pyproject.toml' | |
| - 'pytest.ini' | |
| - 'mcp.json.example' | |
| - '.gitignore' | |
| - '.github/workflows/**' | |
| - 'tests/fixtures/**' | |
| - 'tests/bank-chat-system/**' | |
| - 'tests/pytest.ini' | |
| - uses: actions/setup-python@v5 | |
| if: steps.changes.outputs.code == 'true' | |
| with: | |
| python-version: "3.11" | |
| - name: Install dependencies | |
| if: steps.changes.outputs.code == 'true' | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[dev]" | |
| - name: Check generated edge navigation doc | |
| if: steps.changes.outputs.code == 'true' | |
| run: python scripts/generate_edge_navigation.py --check | |
| - name: Cache HuggingFace models | |
| if: steps.changes.outputs.code == 'true' && matrix.os != 'macos-15-intel' | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/huggingface | |
| key: hf-${{ hashFiles('**/pyproject.toml') }}-v1 | |
| restore-keys: | | |
| hf-${{ hashFiles('**/pyproject.toml') }}- | |
| hf- | |
| - name: Run tests | |
| if: steps.changes.outputs.code == 'true' | |
| env: | |
| JAVA_CODEBASE_RAG_RUN_HEAVY: "0" | |
| HF_TOKEN: ${{ secrets.HF_TOKEN }} | |
| TRANSFORMERS_CACHE: ~/.cache/huggingface | |
| HF_HOME: ~/.cache/huggingface | |
| # Process isolation: run each test file in its own fresh worker process. | |
| # Running the full suite in a single process accumulates native runtimes | |
| # (cocoindex + lancedb Tokio, plus kuzu's scheduler and torch) that corrupt | |
| # the heap, crashing kuzu's NodeTableScanState::scanNext with a SIGSEGV ~53%. | |
| # `--dist loadfile` keeps each file in one worker, so no cross-file state | |
| # accumulates. Verified: 771 passed / 9 skipped, no segfault. | |
| run: pytest tests -n auto --dist loadfile -v | |
| - name: Skip tests (docs-only) | |
| if: steps.changes.outputs.code != 'true' | |
| run: echo "Docs-only change; pytest skipped." |