Review fixes for the conservation / annotation-store work #553
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: tests | |
| # Fast CI — runs the non-integration suite on every PR and on pushes to | |
| # main-line branches: 1,451 selected of 1,525 collected, the other 74 being | |
| # marked `integration`. | |
| # | |
| # The exclusion is NOT configured here. `pytest.ini` sets | |
| # `addopts = -m "not integration"`, so the command below is byte-for-byte the | |
| # one a contributor runs and the one audits/AUDIT_CHECKLIST.md section 11 | |
| # documents. That was not true until 2026-08-10: this job carried | |
| # `-m "not integration"` and `--ignore=tests/test_smoke_predict.py`, so CI was | |
| # green while the documented command was red, and the difference was invisible | |
| # unless you read this file. | |
| # | |
| # Excluded by the marker, and why they cannot run on a GitHub runner: | |
| # - tests/test_smoke_predict.py — needs ~10 GB of oracle models against a | |
| # 14 GB runner disk. Marked `integration` now, and its fixtures skip | |
| # cleanly when the envs are absent, so no --ignore is required. | |
| # - the rest of the integration suite — hits HuggingFace and ENCODE and | |
| # spawns chorus-mcp; 5–10 min each. | |
| # Maintainers run those on a release host: | |
| # pytest -m integration -v # smoke, CDF download, ChromBPNet, MCP E2E | |
| # pytest -m "" -v # everything, no marker filter | |
| on: | |
| push: | |
| branches: [main, chorus-applications] | |
| pull_request: | |
| workflow_dispatch: | |
| concurrency: | |
| group: tests-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| fast-suite: | |
| name: fast suite (Linux, Python 3.10) | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| shell: bash -el {0} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Miniforge + mamba | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| miniforge-variant: Miniforge3 | |
| miniforge-version: latest | |
| activate-environment: chorus | |
| environment-file: environment.yml | |
| use-mamba: true | |
| auto-update-conda: false | |
| - name: Install chorus (editable) + dev extras | |
| run: | | |
| pip install -e ".[dev]" || pip install -e . | |
| pip install pytest pytest-cov | |
| - name: Show versions | |
| run: | | |
| python -c "import chorus; print('chorus', chorus.__version__)" | |
| python -c "import sys; print('python', sys.version)" | |
| pytest --version | |
| - name: Run fast suite | |
| run: | | |
| # No marker filter and no --ignore, on purpose: pytest.ini owns the | |
| # exclusion, so this is the same command a contributor runs. | |
| # tests/test_default_pytest_run_excludes_integration.py fails if | |
| # either flag comes back or if the two ever drift apart. | |
| pytest tests/ -q --durations=10 | |
| - name: pip-audit (supply-chain — non-blocking advisory) | |
| continue-on-error: true | |
| run: | | |
| pip install pip-audit | |
| # -l skips local editable chorus itself (not on PyPI). We run | |
| # this advisory-only so CI goes green, then inspect the summary | |
| # in the job log to decide whether to bump pins. | |
| pip-audit -l --format columns --desc || true | |
| browser-smoke: | |
| # A reduced render check on every PR. The full 19-report suite belongs to the release | |
| # host (audits/AUDIT_CHECKLIST.md section 7), but running NONE of it in CI is how a | |
| # blank-panel regression reaches main between audits -- which is exactly what happened | |
| # before #135: nothing had ever opened a report in a browser, so a size ceiling was | |
| # standing in for a rendering check. | |
| # | |
| # CHORUS_BROWSER_SMOKE=1 selects the two smallest IGV reports plus the panel-less batch | |
| # table. That is enough to catch the failures that hit every report at once -- IGV not | |
| # painting, the inlined config not parsing, the bundled genome tables going missing -- | |
| # without a 4-minute render of the whole corpus on every push. | |
| name: browser smoke (2 reports) | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| shell: bash -el {0} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Miniforge + mamba | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| miniforge-variant: Miniforge3 | |
| miniforge-version: latest | |
| activate-environment: chorus | |
| environment-file: environment.yml | |
| use-mamba: true | |
| auto-update-conda: false | |
| - name: Install chorus + playwright | |
| run: | | |
| pip install -e . || true | |
| pip install pytest playwright | |
| # --with-deps installs Chromium's shared libraries via apt. On the dev host those | |
| # come from the chorus-browsertest conda env instead, which is why the harness | |
| # assembles LD_LIBRARY_PATH itself rather than trusting the caller. | |
| playwright install --with-deps chromium | |
| - name: Render the smoke subset | |
| env: | |
| CHORUS_BROWSER_SMOKE: "1" | |
| run: | | |
| pytest tests/test_committed_reports_render_in_a_browser.py -m integration -q |