Skip to content

Review fixes for the conservation / annotation-store work #553

Review fixes for the conservation / annotation-store work

Review fixes for the conservation / annotation-store work #553

Workflow file for this run

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