Use this checklist before publishing fp-tools-bio or preparing paper benchmark artifacts.
- Use a clean Python 3.12 environment for release orchestration. Wheels target Python 3.11–3.13 on Windows, macOS, and Linux.
- Confirm editable install:
.venv/bin/python -m pip show fp-tools-bio
.venv/bin/python -m pip checkRun the full local test suite:
.venv/bin/python -m pip install pytest
.venv/bin/python -m pytest -q
.venv/bin/python scripts/smoke_console_scripts.pyRequired coverage before release:
- public console scripts
- YAML config expansion and dry-run behavior
- command
--helpsmoke checks - core-count handling
- progress logging behavior
- stable fixture summaries for existing bigWig/BED test data
GitHub Actions must also complete the full pytest suite in the Linux test job and on Windows for Python 3.11, 3.12, and 3.13. Tests that require Linux-only BAM writing or indexing may skip explicitly; collection errors, separator-only failures, and locale-dependent decoding failures are release blockers.
The Windows full suite includes the portable I/O and launcher regressions; do not run those a second time in the same job. Linux/macOS portable-install jobs retain the focused checks because they do not run the full suite. Wheel, frozen-desktop, runtime, container, documentation-browser, and released download checks exercise different artifacts and remain separate release gates.
Primary current API checks:
.venv/bin/prepare-atac --help
.venv/bin/bulk-footprinting --help
.venv/bin/atac-correct --help
.venv/bin/call-footprints --help
.venv/bin/match-motifs --help
.venv/bin/diff-footprints --help
.venv/bin/normalize-bigwig --help
.venv/bin/plot-aggregate --help
.venv/bin/review-multi-comparisons --help
.venv/bin/run-yaml-workflow --help
.venv/bin/fp-tools-gui --help
.venv/bin/fp-tools-runtime --help
.venv/bin/discover-motifs --help
.venv/bin/summarize-motifs --help
.venv/bin/pseudobulk-fragments --help
.venv/bin/find-signature-fp --help
.venv/bin/sc-footprinting --help
.venv/bin/run-yaml-workflow --config examples/gui_configs/call_footprints_single.yml --dry-runPlatform contract checks:
- Linux CLI and the Linux container support FASTQ preprocessing through the
separate
prepare-ataccommand. bulk-footprintingaccepts only BAM/BAI plus peak BED sample tables on every platform. Native macOS and Windows keepprepare-atac --helpavailable but reject execution before downloads or output creation.- Every GUI and both desktop bundles accept BAM/BAI plus peak BED inputs and
reject
prepare-atac,reads_table, and equivalent extra arguments. - Non-Linux runtime manifests expose the optional MEME component only; Linux manifests also expose raw-read core and HOMER components.
Release wheels are built by cibuildwheel in the manual Publish workflow;
the two Linux architectures run as separate native jobs.
The required artifact set is:
- CPython 3.11, 3.12, and 3.13
- Windows AMD64
- macOS x86_64 and arm64
- manylinux x86_64 and aarch64
Build an sdist locally only for preflight inspection:
.venv/bin/python -m pip install build twine
.venv/bin/python -m build --sdist
.venv/bin/python -m twine check dist/*After uploading, verify a fresh install from PyPI:
python -m venv /tmp/fp-tools-pypi-smoke
/tmp/fp-tools-pypi-smoke/bin/python -m pip install --upgrade pip
/tmp/fp-tools-pypi-smoke/bin/python -m pip install --only-binary=:all: "fp-tools-bio==<version>"
/tmp/fp-tools-pypi-smoke/bin/atac-correct --help >/dev/null
/tmp/fp-tools-pypi-smoke/bin/plot-aggregate --help >/dev/null
/tmp/fp-tools-pypi-smoke/bin/fp-tools-gui --help >/dev/nullThe Desktop bundles workflow must produce and smoke-test a Windows x64
executable and an unsigned Apple Silicon macOS DMG. Both artifacts must use the
fp-tools icon and open the command-backed GUI in a native application window.
The live checks verify the private Streamlit server, native window rendering,
and frozen child-process dispatch. The Mac job must ad-hoc sign and strictly
verify the application bundle, confirm its ARM64 executable, exercise the
documented quarantine-removal command, verify and mount the DMG, and confirm
that the first-launch instruction is included. Release assets include a
SHA-256 checksum manifest. macOS Intel and Linux users install the Python
package instead.
The Container workflow builds and tests the complete environment on
linux/amd64 and linux/arm64, then attaches both loadable image archives and
their checksums to tagged GitHub releases. The publish_version manual input
can rebuild archives for an existing version.
The Managed runtimes workflow attaches pinned core, MEME, and HOMER archives
for Linux, MEME archives for macOS, and the private Windows MEME WSL2 runtime to
the public GitHub release with SHA-256 sidecars. It must verify archive
relocation and a real Windows WSL2 import before release handoff. Its
publish_version manual input can rebuild archives before repeating the
public-consumer smoke.
After the tagged macOS application and managed MEME runtime are both public,
dispatch the Release smoke workflow with the published version. It must start
from an empty runtime cache and complete STREME, JASPAR-to-MEME conversion,
Tomtom, and the packaged motif summarizer twice from the released Apple Silicon
application.
The same Release smoke workflow must pass its two isolated Windows public-EXE
jobs, with default discovery parameters and explicit STREME extra arguments.
Each job verifies the EXE checksum, a fresh managed WSL import, cached reuse,
paths containing spaces, both runtime-option spellings, and all discovery
outputs. Calling STREME by absolute path with --version is not sufficient.
For v0.2.8 onward, attach fp-tools-pbmc-chr22-demo-v1.zip and its SHA-256
sidecar before dispatching Release smoke. The Windows default case and macOS
job also verify the tutorial archive and inputs, corrected command help, and
the complete three-group single-cell workflow through the published desktop
applications. Keep this real-data check separate from synthetic GUI fixtures.
The manual GitHub Actions Publish workflow uses the repository
PYPI_API_TOKEN secret. Do not paste PyPI tokens into chat, shell history, or
committed files. Rotate any token that was exposed outside a secret manager.
The manual GitHub Actions Publish workflow builds and tests every wheel,
checks all artifacts, then uploads the complete set with the configured token.
Do not publish when any platform wheel is absent.
- Confirm
pyproject.tomlversion is correct. - Confirm
project.urlspoint tohttps://github.com/oncologylab/fp-tools. - Confirm README renders correctly on GitHub.
- Validate the MkDocs site locally with
.venv/bin/mkdocs build --clean --strict, then push documentation changes tomain. The GitHub ActionsDocsworkflow deploys GitHub Pages frommain; do not usemkdocs gh-deployor create agh-pagesbranch for this repository. - When Playwright is installed, run
.venv/bin/python scripts/audit_docs.py --site-dir siteto check every documentation and demo page at desktop and mobile widths. - Confirm
LICENSE,CITATION.cff,environment.yml, andDockerfileare present and current. - Confirm
pyproject.toml,src/fp_tools/__init__.py,CITATION.cff, release tag, and example version pins agree.
Do not commit:
- downloaded public data under
data/public/raw/ordata/public/processed/ - benchmark result directories under
benchmarks/results/ - generated paper figures/tables except intentional manuscript previews and small examples
- BAM/BAI fixtures beyond existing local-only test data
Before using outputs in a manuscript:
- freeze the exact public data manifest
- save command logs and environment versions
- validate benchmark manifests with
python benchmarks/scripts/validate_manifests.py --manifest-dir benchmarks/manifests - save metrics tables used by each figure
- label chromosome-4 benchmark results as pilot evidence unless whole-genome or chromosome-held-out validation has been completed
- generate both vector and PNG figure outputs
- write Data Availability and Code Availability notes