Repository navigation
Development
hashbrown/ the package
├── cli.py argument parsing + the three pipelines (HashBrown.run_long / run_short)
├── methods.py input discovery, Sample, resource checks, small file utilities
├── nanopore.py Porechop, Filtlong, Flye, Shasta, Medaka
├── illumina.py fastp, SKESA, SPAdes, Polypolish, pyPOLCA
└── assembly_qc.py minimap2 mapping, flagstat + mosdepth QC, QUAST, nucmer dot plots
tests/ pytest suite; conftest.py stubs every external program
validation/ polisher benchmark against a gold standard
docs/wiki/ these pages (published by .github/workflows/wiki.yml)
docs/images/ logo and pipeline diagram (regenerate with make_svgs.py)
recipe/ bioconda recipe
pip install -e ".[test]"
pytest
ruff check .The tests run in seconds without conda: tests/conftest.py builds a folder of fake flye, medaka_consensus,
samtools, … executables that mimic just enough of each program's command line, and the pipeline tests run
the real orchestration end to end against them (including resuming). A change to how a program is called
must update its stub to match the real program's behaviour.
-
ci.yml: ruff + pytest on Linux (Python 3.10–3.13) and macOS, coverage to Codecov (needs theCODECOV_TOKENsecret). -
wiki.yml: pushesdocs/wiki/to the GitHub wiki on every change (create one page in the web UI once, so the wiki repository exists). -
release.yml: on av*tag — checks the tag matcheshashbrown.__version__andpyproject.toml, builds the wheel/sdist, and creates a GitHub release with the matchingCHANGELOG.mdsection.
Releasing: bump the version in hashbrown/__init__.py and pyproject.toml, date the section in
CHANGELOG.md, update CITATION.cff, then git tag v<version> && git push --tags. The tag push also
publishes hashbrown-assembly to PyPI (publish.yml, trusted publishing). Bioconda picks the new
GitHub release up by itself (BiocondaBot's autobump PR); update recipe/meta.yaml's version and tarball
sha256 here to keep the repo copy in step.
- Add the runner in
illumina.py/nanopore.pyand wire it incli.py(choices + dependency map inmethods.py). - Add its stub in
tests/conftest.pyand a pipeline test. - Benchmark it (
validation/benchmark_polishers.sh) — a polisher that adds errors in low-coverage regions does not go in, no matter its reputation. - Document it in
docs/wiki/Methods.mdandCHANGELOG.md, and add it toenvironment.ymlandrecipe/meta.yaml.