Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
9cf9b84
feat: modernize packaging and pipeline presets
alsmith151 Apr 24, 2026
09a97ee
refactor: remove ibis query layer
alsmith151 Apr 24, 2026
1c66d9a
refactor: migrate intervals to pyranges1
alsmith151 Apr 24, 2026
1f5642f
Modernise PyRanges interval annotation
alsmith151 Apr 24, 2026
45d99be
refactor: modernize viewpoint validation script
alsmith151 Apr 24, 2026
1623d85
chore: relax native environment pins
alsmith151 Apr 24, 2026
0762fe8
refactor: make viewpoint counting script testable
alsmith151 Apr 24, 2026
5e1ab8c
refactor: update workflow presets for snakemake 9
alsmith151 Apr 24, 2026
359451e
feat: add ghcr container build workflow
alsmith151 Apr 24, 2026
82297f7
fix: harden workflow resource and checkpoint handling
alsmith151 Apr 24, 2026
d86224a
fix: include workflow runtime assets
alsmith151 Apr 24, 2026
403bb0f
refactor: modernize track hub generation
alsmith151 Apr 24, 2026
0a80c35
refactor: migrate plotting to plotnado
alsmith151 Apr 24, 2026
8ed857c
docs: refresh installation guidance
alsmith151 Apr 24, 2026
96a3381
chore: prune unused dependencies
alsmith151 Apr 24, 2026
213f5cf
refactor: align hub generation with tracknado extractors
alsmith151 Apr 24, 2026
3c224ba
docs: point plotting customization to plotnado
alsmith151 Apr 24, 2026
9a46b17
feat: modernize pipeline profiles and container docs
alsmith151 Apr 24, 2026
23987f0
test: cover brittle pipeline modernization paths
alsmith151 Apr 24, 2026
c822b22
chore: add plans directory to .gitignore
alsmith151 Apr 24, 2026
dac9765
refactor: remove deduplication module and clean up imports in API files
alsmith151 Apr 24, 2026
14c8781
test: exercise workflow scripts on pipeline outputs
alsmith151 Apr 24, 2026
6e0b42f
chore: add multiqc and pigz to environment dependencies
alsmith151 Apr 24, 2026
b516f03
test: include cooler workflow script output
alsmith151 Apr 24, 2026
fa6b3b3
build: use flash2 conda package
alsmith151 Apr 24, 2026
603f16e
build: remove unused tqdm dependency
alsmith151 Apr 24, 2026
33e3e52
feat: add parquet file handling and update tests for cis and trans stats
alsmith151 Apr 24, 2026
0e24e49
Refactor report generation and update dependencies
alsmith151 Apr 26, 2026
8de8ced
fix: update color scheme for report visualization
alsmith151 Apr 26, 2026
ccbc4d3
refactor: isolate ray behind optional executor
alsmith151 Apr 26, 2026
a076887
build: make differential dependencies optional
alsmith151 Apr 26, 2026
8338fae
feat: add typer-backed pipeline subcommands
alsmith151 Apr 26, 2026
77eb0c8
test: add golden capture pipeline outputs
alsmith151 Apr 26, 2026
69df096
refactor: use clean interaction workflow commands
alsmith151 Apr 26, 2026
7e9a8a0
feat: add plot render command
alsmith151 Apr 26, 2026
af71550
build: split plot and hub extras
alsmith151 Apr 26, 2026
61e8bbd
build: move slurm executor to hpc extra
alsmith151 Apr 26, 2026
aef150b
build: replace ujson with stdlib json
alsmith151 Apr 26, 2026
0ad45ca
build: move config generator to extra
alsmith151 Apr 26, 2026
698a013
refactor: remove tabulate dependency from fastq dedup
alsmith151 Apr 26, 2026
7381212
refactor: simplify api and cli imports
alsmith151 Apr 26, 2026
077192a
refactor: migrate alignments cli to typer
alsmith151 Apr 26, 2026
aa1ad1f
refactor: defer utility cli imports
alsmith151 Apr 26, 2026
4d92488
refactor: merge fastq cli implementations
alsmith151 Apr 26, 2026
285cbd5
refactor: move fastq and genome logic to api
alsmith151 Apr 26, 2026
448728b
refactor: move alignments logic to api
alsmith151 Apr 26, 2026
28d40b6
refactor: move interaction deduplication to api
alsmith151 Apr 26, 2026
5a16830
refactor: modernize fastq genome api typing
alsmith151 Apr 26, 2026
667b81e
refactor: modernize alignments api typing
alsmith151 Apr 26, 2026
4ebeb7d
refactor: modernize interaction dedup typing
alsmith151 Apr 26, 2026
f610407
refactor: modernize annotate typing
alsmith151 Apr 26, 2026
683febe
refactor: consolidate sequence io api
alsmith151 Apr 26, 2026
d565147
refactor: keep sequence api modules domain scoped
alsmith151 Apr 26, 2026
80b14c1
refactor: collapse interaction cli dispatch
alsmith151 Apr 26, 2026
30872a1
build: update ruff lint config
alsmith151 Apr 26, 2026
62fac3d
refactor: modernize io api typing
alsmith151 Apr 26, 2026
3edaf7a
refactor: move interaction pileup to api
alsmith151 Apr 26, 2026
3048cc2
refactor: move interaction storage to api
alsmith151 Apr 26, 2026
bfc219e
refactor: modernize storage api typing
alsmith151 Apr 26, 2026
f0f2e85
refactor: move interaction comparison to api
alsmith151 Apr 26, 2026
8a211c2
refactor: move interaction differential to api
alsmith151 Apr 26, 2026
2876ca8
refactor: modernize statistics api typing
alsmith151 Apr 26, 2026
03b20f0
refactor: modernize interaction count typing
alsmith151 Apr 26, 2026
809c0ed
refactor: migrate cli commands to typer
alsmith151 Apr 26, 2026
ecd0997
refactor: move interaction counting support to api
alsmith151 Apr 27, 2026
f6dd2e2
refactor: tighten pipeline option parsing
alsmith151 Apr 27, 2026
e3b9544
refactor: share cli command helpers
alsmith151 Apr 27, 2026
bb3a22d
refactor: modernize pileup api typing
alsmith151 Apr 27, 2026
2036ff9
refactor: modernize pipeline utility typing
alsmith151 Apr 27, 2026
fc9c9b6
fix: allow missing reporter viewpoints
alsmith151 Apr 27, 2026
97a07e9
refactor: validate interaction count inputs
alsmith151 Apr 27, 2026
d31c112
refactor: validate fastq command inputs
alsmith151 Apr 27, 2026
99e6fb3
refactor: use pathlib paths in validation apis
alsmith151 Apr 27, 2026
803d9d3
refactor: remove api filepath aliases
alsmith151 Apr 27, 2026
302c126
refactor: share cli option annotations
alsmith151 Apr 27, 2026
f1b39cb
refactor: centralize string option validation
alsmith151 Apr 27, 2026
e33e676
fix: resolve typing warnings
alsmith151 Apr 27, 2026
25bf935
refactor: reorganize api domain packages
alsmith151 Apr 27, 2026
9679388
refactor: own interaction cooler storage
alsmith151 Apr 27, 2026
0435e8e
refactor: split interaction counting helpers
alsmith151 Apr 27, 2026
97f68ca
refactor: separate cooler fragment storage
alsmith151 Apr 27, 2026
bc0e852
refactor: clean filter step type aliases
alsmith151 Apr 27, 2026
9bd54aa
refactor: align pipeline filter profile option
alsmith151 Apr 27, 2026
3e61ea5
refactor: migrate api dataframes to polars
alsmith151 Apr 27, 2026
821806e
fix: restore genome digest runtime dependencies
alsmith151 Apr 27, 2026
516d901
refactor: harden snakemake workflow
alsmith151 Apr 28, 2026
b7349fc
fix: skip empty viewpoint counts
alsmith151 Apr 29, 2026
ddbd3aa
refactor: streamline container build workflow for release events
alsmith151 Apr 29, 2026
164637c
ci: modernize release workflows with uv
alsmith151 Apr 29, 2026
df7ce39
ci: use resolvable setup-uv action tag
alsmith151 Apr 29, 2026
7badb6b
ci: avoid duplicate push and pr runs
alsmith151 Apr 29, 2026
9f91e00
ci: add macos test coverage
alsmith151 Apr 29, 2026
8672a27
test: mark workflow golden pipeline tests
alsmith151 Apr 29, 2026
078ef70
ci: share bowtie2 index across test jobs
alsmith151 Apr 29, 2026
6ca2edb
fix: normalize fastq digest stats
alsmith151 Apr 29, 2026
3398c32
fix: stabilize pipeline cli subcommands
alsmith151 Apr 29, 2026
75e3d1a
fix: mark legacy pipeline commands deprecated
alsmith151 Apr 29, 2026
3fcb02d
fix: clarify legacy pipeline command warnings
alsmith151 Apr 29, 2026
6765755
fix: document pipeline alias replacements
alsmith151 Apr 29, 2026
255229b
fix: highlight bare pipeline deprecation
alsmith151 Apr 29, 2026
1914a76
fix: clarify pipeline run help
alsmith151 Apr 29, 2026
baa4d2d
ci: key bowtie2 index cache by version
alsmith151 Apr 29, 2026
34e805d
ci: loosen conda environment pins
alsmith151 Apr 29, 2026
161ffb2
ci: loosen conda environment pins
alsmith151 Apr 29, 2026
d2d6151
fix: avoid broken polars conda build
alsmith151 Apr 29, 2026
8ed5996
ci: keep uv from overwriting conda dependencies
alsmith151 Apr 29, 2026
5ec0ee4
ci: install differential stack from conda
alsmith151 Apr 29, 2026
5d729d3
feat: validate pipeline config
alsmith151 Apr 29, 2026
8575642
feat: validate pipeline config
alsmith151 Apr 29, 2026
fec502f
fix: derive flash combined pair counts
alsmith151 Apr 30, 2026
44c1f4d
chore: slim Docker runtime image
alsmith151 Apr 30, 2026
71767d2
feat: update pre-commit hooks and improve error logging in fastq proc…
alsmith151 May 28, 2026
b4004a9
test: add integration test for differential interactions with real py…
alsmith151 May 28, 2026
daedad7
fix: add missing return type annotations and fix pandas 2.0 deprecati…
alsmith151 May 28, 2026
fb5d705
feat: expose public API via capcruncher.api with lazy loading
alsmith151 May 28, 2026
e02d5b5
refactor: use Polars to read fragment map in count_interactions
alsmith151 May 28, 2026
ef68cb6
refactor: split utils.py into focused submodules (bed, genomics, io)
alsmith151 May 28, 2026
85ccbe3
refactor: consolidate flag coercion and add BED pandera schema
alsmith151 May 28, 2026
420aeda
feat: populate subpackage __init__.py files and expand top-level API
alsmith151 May 28, 2026
ad92cd9
build: add pixi.toml and migrate CI tests job to pixi
alsmith151 May 28, 2026
bcb922f
build: migrate deps to pyproject.toml and drop legacy packaging files
alsmith151 May 28, 2026
952ccbc
ci: update action versions and migrate to uv sync in CD and docs
alsmith151 May 28, 2026
88f0775
chore: update pre-commit hooks and extend gitignore
alsmith151 May 28, 2026
6a00c45
refactor: apply ruff formatting and update import paths across codebase
alsmith151 May 28, 2026
de8ade5
fix: sort imports in api __init__ files to pass ruff I001
alsmith151 May 28, 2026
7b20da7
fix: resolve ty errors and add pixi.lock
alsmith151 May 28, 2026
4ed6b61
fix: resolve ty imports properly instead of suppressing them
alsmith151 May 28, 2026
b874401
fix: exclude .pixi from ruff and gitignore, format api/__init__.py
alsmith151 May 28, 2026
f1eb3ac
refactor: update import statements and enhance error handling in vari…
alsmith151 May 28, 2026
a948d8e
fix: change [project] to [workspace] in pixi.toml
alsmith151 May 28, 2026
f4ca6b6
feat: add flash script and update pytest parallelism in pixi.toml
alsmith151 May 28, 2026
1949bfc
fix: drop invalid BED rows and strip flash2 unsupported arg
alsmith151 May 28, 2026
630b5ff
fix: install pre-commit hooks and fix all linting issues
alsmith151 May 28, 2026
4bbb334
fix: remove fake test binaries and fix pipeline tool invocations
alsmith151 May 28, 2026
9161f79
fix: wire genes track, fix xdist scheduling, and update golden values
alsmith151 May 31, 2026
aed0406
fix: improve logging for missing viewpoints and handle empty output i…
alsmith151 Jun 1, 2026
7142e63
build: modernise packaging — MANIFEST.in, extras, and ray comment
alsmith151 Jun 8, 2026
fd87955
build: sync environment.yml, pixi.toml, and lock files
alsmith151 Jun 8, 2026
94dcb07
build: improve Docker image build and runtime scope
alsmith151 Jun 8, 2026
453b4c1
ci: add install method validation, repo health, and post-publish verify
alsmith151 Jun 8, 2026
406c17c
test: add packaging integrity tests
alsmith151 Jun 8, 2026
c398b53
docs: prioritise Apptainer, add install decision guide
alsmith151 Jun 8, 2026
7be5081
docs: update installation recommendations for HPC clusters and Linux …
alsmith151 Jun 8, 2026
6fd9409
fix(ci): use eWaterCycle/setup-apptainer@v2 — apptainer/install-appta…
alsmith151 Jun 8, 2026
0e5ab8d
fix(docker): remove home-dir cleanup that conflicts with BuildKit cac…
alsmith151 Jun 8, 2026
75719dd
feat: _vs_ separator, design validation, genome profiles, pipeline ru…
alsmith151 Jun 8, 2026
146fd77
feat: update Dockerfile and environment.yml to remove apptainer and a…
alsmith151 Jun 8, 2026
c714087
refactor: simplify pipeline command handling and remove deprecated op…
alsmith151 Jun 8, 2026
d0ed6e7
feat: add pandera and pydantic as dependencies for data validation
alsmith151 Jun 8, 2026
65eab19
feat: expand hpc dependencies for snakemake plugins
alsmith151 Jun 8, 2026
bb8b95d
refactor: update pipeline command syntax for consistency and clarity
alsmith151 Jun 8, 2026
387e2bb
feat: enhance deduplication rule to support flexible input arguments …
alsmith151 Jun 9, 2026
9e1ef89
fix: improve path existence check to handle comma-separated lists of …
alsmith151 Jun 9, 2026
3c3e35d
fix: handle space-separated file lists in run_unix_split command
alsmith151 Jun 10, 2026
d81a245
fix: update summarise function to apply schema overrides for float co…
alsmith151 Jun 10, 2026
6c3f4b5
fix: remove default logger and configure logging for snakemake execution
alsmith151 Jun 10, 2026
3bb8953
chore: move as many pip dependencies as possible to conda based
alsmith151 Jun 10, 2026
7b7b4cc
feat: overhaul pipeline report with richer QC metrics and visual impr…
alsmith151 Jun 10, 2026
78785f4
fix: remove printshellcmds from various profile configurations
alsmith151 Jun 10, 2026
040bbe6
fix: update CSV reading to infer schema length and configure logging …
alsmith151 Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
.git
.github
.codex
.agents
.mypy_cache
.pixi
.pytest_cache
.ruff_cache
.uv-cache
.venv
__pycache__
build
dist
docs
docs/_build
htmlcov
plans
tests
*.egg-info
.coverage
coverage.xml
pixi.lock
uv.lock
CLAUDE.md
*.pyc
*.pyo
*.pyd
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ updates:
directory: "/" # Location of package manifests
schedule:
interval: "monthly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
157 changes: 139 additions & 18 deletions .github/workflows/CD.yml
Original file line number Diff line number Diff line change
@@ -1,31 +1,152 @@
name: CapCruncher CD
name: Publish Python Package

on:
release:
types: [published]
workflow_dispatch:
inputs:
publish:
description: Publish the built distributions to PyPI.
required: true
default: false
type: boolean

permissions:
contents: read
id-token: write

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false

jobs:
deploy:
source:
runs-on: ubuntu-latest
timeout-minutes: 15

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: astral-sh/setup-uv@v5
with:
enable-cache: true
cache-suffix: release-source
python-version: "3.12"

- name: Build source distribution
run: uv build --sdist

- name: Check distribution metadata
run: uvx twine check --strict dist/*

- name: Upload source distribution
uses: actions/upload-artifact@v4
with:
name: capcruncher-sdist
path: dist/*
if-no-files-found: error

wheels:
name: Build wheel (${{ matrix.name }})
runs-on: ${{ matrix.os }}
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
include:
- name: universal
os: ubuntu-latest
artifact: capcruncher-wheel-any
plat_name: ""
- name: macos-x86_64
os: macos-13
artifact: capcruncher-wheel-macos-x86_64
plat_name: macosx_10_15_x86_64
- name: macos-arm64
os: macos-14
artifact: capcruncher-wheel-macos-arm64
plat_name: macosx_11_0_arm64

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: astral-sh/setup-uv@v5
with:
enable-cache: true
cache-suffix: release-wheel-${{ matrix.name }}
python-version: "3.12"

- name: Build universal wheel
if: matrix.plat_name == ''
run: uv build --wheel

- name: Build macOS wheel
if: matrix.plat_name != ''
run: >
uv build --wheel
-C--build-option=--python-tag
-C--build-option=py3
-C--build-option=--plat-name
-C--build-option=${{ matrix.plat_name }}

- name: Check wheel metadata
run: uvx twine check --strict dist/*

- name: Upload wheel artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: dist/*.whl
if-no-files-found: error

publish:
needs: [source, wheels]
if: github.event_name == 'release' || github.event.inputs.publish == 'true'
runs-on: ubuntu-latest
timeout-minutes: 15
environment:
name: pypi

steps:
- uses: astral-sh/setup-uv@v5
with:
enable-cache: true
cache-suffix: release-publish

- name: Download distribution artifacts
uses: actions/download-artifact@v4
with:
pattern: capcruncher-*
path: dist
merge-multiple: true

- name: Publish distributions to PyPI
run: uv publish --trusted-publishing always dist/*

verify-pypi:
name: Verify PyPI publish
needs: publish
if: github.event_name == 'release' || github.event.inputs.publish == 'true'
runs-on: ubuntu-latest
timeout-minutes: 15

steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build
- name: Build package
run: python -m build
- name: Publish package
uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
with:
user: __token__
password: ${{ secrets.PYPI_TOKEN }}
- uses: astral-sh/setup-uv@v5
with:
python-version: "3.12"

- name: Wait for PyPI propagation
run: sleep 60

- name: Install published package and verify
env:
REF: ${{ github.ref_name }}
run: |
VERSION="${REF#v}"
uv pip install --system "capcruncher==${VERSION}"
capcruncher --version
capcruncher --help
Loading
Loading