Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
9a08e39
update docs for looper upgrade
jpsmith5 Feb 4, 2026
6f146c1
update R package to eliminate optigrab dependency and for looper update
jpsmith5 Feb 4, 2026
69f3021
update schema for pipestat integration
jpsmith5 Feb 4, 2026
10bc3c9
update pipelines for pipestat and looper updates
jpsmith5 Feb 4, 2026
2204f92
update requirements to reflect pipestat and looper changes
jpsmith5 Feb 4, 2026
a2992ee
fix pipe errors
jpsmith5 Feb 4, 2026
875fee5
update usage
jpsmith5 Feb 4, 2026
8d0af98
update examples
jpsmith5 Feb 4, 2026
b50f2a0
update interfaces for pipestat and looper changes
jpsmith5 Feb 4, 2026
f114a0b
add updated looper config for K562 example
jpsmith5 Feb 4, 2026
08c837f
add Time and Success to project level output
jpsmith5 Feb 17, 2026
a499ace
add pipestat config argument
jpsmith5 Feb 17, 2026
fa5b6f7
add pipestat arguments
jpsmith5 Feb 17, 2026
df4c027
update requirements
jpsmith5 Feb 17, 2026
eb3d0e6
Fix smoothWig bugs. See #100
nsheff Feb 18, 2026
bdf06e6
Merge pull request #101 from databio/wig-fix
jpsmith5 Feb 18, 2026
9e5972b
update conda environment file
jpsmith5 Feb 18, 2026
a48a8da
addresses #99; if 0 would be present, simply skip that row/gene
jpsmith5 Feb 18, 2026
72bbe4f
addresses #90; should capture prealignment information properly now; …
jpsmith5 Feb 18, 2026
4de2acc
closes #72; addresses the messaging concerns, but this function is de…
jpsmith5 Feb 18, 2026
7642d05
addresses #83; updates to looper masked this bug; should now fail the…
jpsmith5 Feb 18, 2026
71338f4
addresses #93; can now check for a custom named environment or the ac…
jpsmith5 Feb 18, 2026
365adc3
fix issues with checking native when conda env is already active and …
jpsmith5 Feb 18, 2026
d59edc8
fix base checks
jpsmith5 Feb 18, 2026
a47c1ca
modify requirements
jpsmith5 Feb 18, 2026
30aa0ba
add customization for library strandedness; see #96. only current cav…
jpsmith5 Feb 18, 2026
3d52fb5
update instructions regarding UMI length parameters; closes #95
jpsmith5 Feb 18, 2026
ed62367
update bulker crate version
jpsmith5 Feb 18, 2026
533b081
move cutadapt reporting to a little helper function to clean up multi…
jpsmith5 Feb 18, 2026
fccc613
move pipeline name to top level
jpsmith5 Feb 18, 2026
5cbab48
looper needs name as top-level but pipestat needs it in properties
jpsmith5 Feb 18, 2026
601bcc7
fix issues with the cutadapt helper function calls
jpsmith5 Feb 18, 2026
6b244ac
cutsToWigProcess now redirects its wig output to a temp file (_exact.…
jpsmith5 Feb 18, 2026
7034931
fix missing R2 reporting metrics
jpsmith5 Feb 18, 2026
4b7f783
add pipeline name to project properties
jpsmith5 Feb 19, 2026
ce3c678
pause R2 trimmed check until file is made
jpsmith5 Feb 19, 2026
9523b84
handle restarts involving the unmap fastq file better
jpsmith5 Feb 19, 2026
afd3c66
add testing
jpsmith5 Feb 24, 2026
6bf1f80
add tests data
jpsmith5 Feb 24, 2026
3b3d361
add setuptools to requirements for Python 3.12+ compatibility
jpsmith5 Feb 24, 2026
4fbd5e7
update requirements
jpsmith5 Feb 24, 2026
e5b6d3c
add boolean option to arguments
jpsmith5 Feb 25, 2026
1021d02
confirm tests
jpsmith5 Feb 25, 2026
796bec0
update tests
jpsmith5 Feb 25, 2026
484a6a0
add bulker crate manifest and bump version to 1.0.12
nsheff Mar 5, 2026
9151800
update tests, changelog, final last fixes
nsheff Mar 6, 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
81 changes: 81 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Tests

on:
push:
branches: [master, dev, looper-update]
pull_request:
branches: [master, dev]
workflow_dispatch:
inputs:
run_integration:
description: "Run integration tests (requires self-hosted runner)"
required: false
default: "false"

jobs:
# --------------------------------------------------------------------------
# Tier 1: Unit tests — no genome data or bioinformatics tools required.
# Runs on every push and pull request.
# --------------------------------------------------------------------------
unit-tests:
name: Unit tests (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.11", "3.12"]

steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install Python dependencies
run: pip install -r requirements.txt pytest

- name: Run unit tests
run: pytest tests/test_unit.py -v --tb=short

# --------------------------------------------------------------------------
# Tier 2: Integration tests — full pipeline runs.
# Requires a self-hosted runner with genome indices and tools installed.
# Triggered manually via workflow_dispatch or by setting
# RUN_INTEGRATION_TESTS=true in the environment.
# --------------------------------------------------------------------------
integration-tests:
name: Integration tests (${{ matrix.scenario }})
if: >
github.event_name == 'workflow_dispatch' &&
github.event.inputs.run_integration == 'true'
runs-on: self-hosted
strategy:
fail-fast: false
matrix:
scenario:
- se_basic
- pe_basic
- se_groseq
- se_umi
- pe_umi
- se_fastp
- se_fastx
- se_fqdedup
- se_scale
- se_no_complexity
- se_nofifo
- se_coverage

steps:
- uses: actions/checkout@v4

- name: Install Python dependencies
run: pip install -r requirements.txt pytest

- name: Run integration test for ${{ matrix.scenario }}
env:
RUN_INTEGRATION_TESTS: "true"
run: >
pytest tests/test_integration.py -v --tb=short
-k "${{ matrix.scenario }}"
49 changes: 48 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,52 @@
test:
python pipelines/peppro.py -P 3 -M 100 -O peppro_test -R -S test -G hg38 -Q single -C peppro.yaml --genome-size hs --prealignments rCRSd human_repeats -I examples/data/test_R1.fq.gz
python pipelines/peppro.py -P 3 -M 100 -O peppro_test -R -S test -G hg38 \
-Q single -C peppro.yaml \
--protocol PRO \
--prealignment-names rCRSd human_repeats \
--genome-index $$(refgenie seek hg38/bowtie2_index --seek-key dir) \
--chrom-sizes $$(refgenie seek hg38/fasta --seek-key chrom_sizes) \
--pipestat-schema peppro_output_schema.yaml \
-I examples/data/test_r1.fq.gz

# -----------------------------------------------------------------------
# Test suite targets
# -----------------------------------------------------------------------

# Run only unit tests (no genome data or external tools required)
test-unit:
pytest tests/test_unit.py -v --tb=short

# Run a single integration scenario (e.g. make test-se SCENARIO=se_basic)
SCENARIO ?= se_basic
test-scenario:
RUN_INTEGRATION_TESTS=true pytest tests/test_integration.py -v --tb=short -k "$(SCENARIO)"

# Run all SE integration scenarios
test-se:
RUN_INTEGRATION_TESTS=true pytest tests/test_integration.py -v --tb=short \
-k "se_basic or se_groseq or se_umi or se_fastp or se_fastx or se_fqdedup or se_scale or se_no_complexity or se_nofifo or se_coverage"

# Run all PE integration scenarios
test-pe:
RUN_INTEGRATION_TESTS=true pytest tests/test_integration.py -v --tb=short \
-k "pe_basic or pe_umi"

# Run recovery regression tests
test-recovery:
RUN_INTEGRATION_TESTS=true pytest tests/test_integration.py -v --tb=short \
-k "recovery"

# Run all integration tests (SE + PE + recovery)
test-integration:
RUN_INTEGRATION_TESTS=true pytest tests/test_integration.py -v --tb=short

# Run both unit and integration tests
test-all:
RUN_INTEGRATION_TESTS=true pytest tests/ -v --tb=short

# Regenerate test FASTQ data files from the source R1 read file
test-data:
bash tests/scripts/generate_test_data.sh

docker:
docker build -t databio/peppro -f containers/peppro.Dockerfile .
Expand Down
4 changes: 2 additions & 2 deletions PEPPROr/DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
Package: PEPPROr
Title: Functions and libraries to analyze pro-seq (or gro-seq) data
Version: 0.0.2.0000
Version: 0.0.3.0000
Authors@R: person("Jason", "Smith", email = "jasonsmith@virginia.edu", role = c("aut", "cre"))
Maintainer: Jason Smith <jasonsmith@virginia.edu>
Description: Installs required libraries to calculate the fraction of reads in features, to plot library complexity curves, TSS enrichments, and fragment length distributions.
Depends: R (>= 3.5.1), data.table, pepr, ggplot2, optigrab, GenomicDistributions
Depends: R (>= 3.5.1), data.table, pepr, ggplot2, GenomicDistributions
License: BSD 2-Clause "Simplified" License
Encoding: UTF-8
LazyData: true
Expand Down
2 changes: 1 addition & 1 deletion PEPPROr/R/PEPPROr.R
Original file line number Diff line number Diff line change
Expand Up @@ -2361,7 +2361,7 @@ calcCountsTable = function(project, results_subdir) {
#' @export
createAssetsSummary <- function(project, output_dir, results_subdir) {
# Convenience
project_name <- config(project)$name
project_name <- pepr::config(project)$name

# Create assets_summary file
project_samples <- pepr::sampleTable(project)$sample_name
Expand Down
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,30 @@

PEPPRO is a pipeline designed to process PRO-seq (and GRO-seq) data. For more information see: http://peppro.databio.org/

## Install

```bash
pip install piper pipestat looper
```

**Note:** The pypiper PyPI package is `piper` (not `pypiper`, which is an unrelated package).

## Testing

Unit tests need no special setup:

```bash
pytest tests/test_unit.py -v
```

Integration tests require bioinformatics tools via [bulker](https://bulker.io). Use the wrapper script:

```bash
bash tests/scripts/test-integration.sh
```

This runs `bulker exec databio/peppro:1.1.0` to provide samtools, bowtie2, bedtools, etc. Do NOT run integration tests without bulker — they will fail with missing tools.

## Docs

Develop docs with:
Expand Down
Loading