Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
a1c8435
fix: locate the schema, conf and paramsheet includes relative to the …
pinin4fjords Oct 1, 2026
e2bb4e0
docs: add CHANGELOG entry for PR #758 [skip ci]
pinin4fjords Oct 1, 2026
5971945
refactor(config): move the params defaults to conf/params.config [ski…
pinin4fjords Oct 1, 2026
fed217a
feat: build a paramset from overrides, for a pipeline that includes t…
pinin4fjords Oct 1, 2026
fc97021
fix: give the files of a built paramset as strings [skip ci]
pinin4fjords Oct 1, 2026
86188d3
feat: make the pipeline a typed pipeline that can be included in anot…
pinin4fjords Oct 1, 2026
eed655f
fix: allow the profiles that unset exploratory_log2_assays to do so […
pinin4fjords Oct 1, 2026
31b312c
ci: build Nextflow from a commit with pipeline composition, use the p…
pinin4fjords Oct 1, 2026
4a89375
fix(quartonotebook): point the conda environment at the report enviro…
pinin4fjords Oct 1, 2026
0fd5c28
refactor: drop outdir, publish propd and grea through the output bloc…
pinin4fjords Oct 1, 2026
e02883d
chore: use nf-schema 2.7.2-channel.4 [skip ci]
pinin4fjords Oct 1, 2026
5733dc6
fix: give the nf-schema summary the pipeline's own schema [skip ci]
pinin4fjords Oct 1, 2026
14ce7f7
fix: use the parameters_schema option of nf-schema in the nf-schema u…
pinin4fjords Oct 1, 2026
b8640e0
docs: use prefixed process names in troubleshooting example; ro-crate…
pinin4fjords Oct 1, 2026
65c6a13
chore: bump nf-schema to 2.7.2-channel.5; narrow nf-core lint ignores…
pinin4fjords Oct 1, 2026
16e96b8
Trigger CI for review
pinin4fjords Oct 2, 2026
32daba7
ci: give the nf-core lint the patched nf-schema repository; patch the…
pinin4fjords Oct 2, 2026
8152039
Switch the report to the quarto/notebook module [skip ci]
pinin4fjords Oct 5, 2026
23bfce2
Point the report process config at QUARTO_NOTEBOOK [skip ci]
pinin4fjords Oct 5, 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
4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/diff
- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/differentialabundance/tree/master/docs/CONTRIBUTING.md)
- [ ] If necessary, also make a PR on the nf-core/differentialabundance _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository.
- [ ] Make sure your code lints (`nf-core pipelines lint`).
- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir <OUTDIR>`).
- [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir <OUTDIR>`).
- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker -output-dir <OUTDIR>`).
- [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker -output-dir <OUTDIR>`).
- [ ] Usage Documentation in `docs/usage.md` is updated.
- [ ] Output Documentation in `docs/output.md` is updated.
- [ ] `CHANGELOG.md` is updated.
Expand Down
35 changes: 35 additions & 0 deletions .github/actions/build-nextflow/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: "Build Nextflow"
description: "TEMPORARY: builds a Nextflow launcher from a pinned upstream commit and uploads it as an artifact"
# The output {} block needs nextflow-io/nextflow#7646 and #7674, and including rnaseq in another
# pipeline needs #7213. These are merged upstream but not in a release yet. Delete this action, the
# build-nextflow jobs and the custom-install steps in .github/actions/nf-test/action.yml once a
# release contains them.
runs:
using: "composite"
steps:
- name: Check out Nextflow
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: nextflow-io/nextflow
ref: 5272797c4e9b114c94e93a01e540b13c08b6c5a9
path: nextflow-src

- name: Set up Java
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: temurin
java-version: "21"

- name: Build launcher
shell: bash
working-directory: nextflow-src
run: |
make pack
cp build/releases/nextflow-*-dist "${{ runner.temp }}/nextflow"

- name: Upload launcher
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: nextflow-custom
path: ${{ runner.temp }}/nextflow
retention-days: 1
29 changes: 29 additions & 0 deletions .github/actions/nf-test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,38 @@ inputs:
runs:
using: "composite"
steps:
# TEMPORARY: the typed pipeline needs nextflow-io/nextflow#7213, #7646 and #7674, which are not in a
# release yet. Every entry except latest-everything runs the launcher built by the
# build-nextflow job. Restore the plain setup-nextflow step once a release contains them.
- name: Setup Nextflow
if: env.NXF_VERSION == 'latest-everything'
uses: nf-core/setup-nextflow@b4ec1bc7c16a94435159de94a05253542fddf6ef # v3
with:
version: "${{ env.NXF_VERSION }}"

- name: Set up Java for custom Nextflow
if: env.NXF_VERSION != 'latest-everything'
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: temurin
java-version: "21"

- name: Download custom Nextflow
if: env.NXF_VERSION != 'latest-everything'
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: nextflow-custom
path: ${{ runner.temp }}/nextflow-custom

- name: Install custom Nextflow
if: env.NXF_VERSION != 'latest-everything'
shell: bash
run: |
mkdir -p "$HOME/.local/bin"
install -m 755 "${{ runner.temp }}/nextflow-custom/nextflow" "$HOME/.local/bin/nextflow"
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
"$HOME/.local/bin/nextflow" -version

- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
Expand Down Expand Up @@ -60,6 +87,8 @@ runs:
shell: bash
env:
NFT_WORKDIR: ${{ env.NFT_WORKDIR }}
# TEMPORARY: patched nf-schema (validateParameters blocks on Channel params), remove once released
NXF_PLUGINS_TEST_REPOSITORY: https://github.com/pinin4fjords/nf-schema/releases/download/2.7.2-channel.5/nf-schema-2.7.2-channel.5-meta.json
run: |
nf-test test \
--profile=+${{ inputs.profile }} \
Expand Down
5 changes: 1 addition & 4 deletions .github/workflows/awsfulltest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,7 @@ jobs:
message = ':x: *differentialabundance/test_full* failed :crying_cat_face:'
}
}
parameters: |
{
"outdir": "s3://${{ vars.AWS_S3_BUCKET }}/differentialabundance/results-${{ steps.revision.outputs.revision }}"
}
outputDir = 's3://${{ vars.AWS_S3_BUCKET }}/differentialabundance/results-${{ steps.revision.outputs.revision }}'
profiles: test_full

- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
Expand Down
6 changes: 2 additions & 4 deletions .github/workflows/awstest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,8 @@ jobs:
compute_env: ${{ vars.TOWER_COMPUTE_ENV }}
revision: ${{ github.sha }}
workdir: s3://${{ vars.AWS_S3_BUCKET }}/work/differentialabundance/work-${{ github.sha }}
parameters: |
{
"outdir": "s3://${{ vars.AWS_S3_BUCKET }}/differentialabundance/results-test-${{ github.sha }}"
}
nextflow_config: |
outputDir = 's3://${{ vars.AWS_S3_BUCKET }}/differentialabundance/results-test-${{ github.sha }}'
profiles: test

- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ jobs:
GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }}
NXF_PLUGINS_TEST_REPOSITORY: https://github.com/pinin4fjords/nf-schema/releases/download/2.7.2-channel.5/nf-schema-2.7.2-channel.5-meta.json
run: nf-core -l lint_log.txt pipelines lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md

- name: Run nf-core pipelines lint --release
Expand All @@ -59,6 +60,7 @@ jobs:
GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }}
NXF_PLUGINS_TEST_REPOSITORY: https://github.com/pinin4fjords/nf-schema/releases/download/2.7.2-channel.5/nf-schema-2.7.2-channel.5-meta.json
run: nf-core -l lint_log.txt pipelines lint --release --dir ${GITHUB_WORKSPACE} --markdown lint_results.md

- name: Save PR number
Expand Down
15 changes: 13 additions & 2 deletions .github/workflows/nf-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,20 @@ jobs:
echo ${{ steps.set-shards.outputs.shard }}
echo ${{ steps.set-shards.outputs.total_shards }}

# TEMPORARY: builds the Nextflow used by every nf-test job, see .github/actions/build-nextflow
build-nextflow:
name: build-nextflow
needs: [nf-test-changes]
if: ${{ needs.nf-test-changes.outputs.total_shards != '0' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- uses: ./.github/actions/build-nextflow

nf-test:
name: "${{ matrix.profile }} | ${{ matrix.NXF_VER }} | ${{ matrix.shard }}/${{ needs.nf-test-changes.outputs.total_shards }}"
needs: [nf-test-changes]
needs: [nf-test-changes, build-nextflow]
if: ${{ needs.nf-test-changes.outputs.total_shards != '0' }}
runs-on: # use self-hosted runners
- runs-on=${{ github.run_id }}-nf-test
Expand All @@ -80,7 +91,7 @@ jobs:
- isMain: false
profile: "singularity"
NXF_VER:
- "25.10.4"
- "26.09.0-edge"
- "latest-everything"
env:
NXF_ANSI_LOG: false
Expand Down
147 changes: 147 additions & 0 deletions .nf-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,164 @@ lint:
files_exist:
- assets/multiqc_config.yml
files_unchanged:
- .github/PULL_REQUEST_TEMPLATE.md
- .github/workflows/linting.yml
- assets/nf-core-differentialabundance_logo_light.png
- docs/images/nf-core-differentialabundance_logo_light.png
- docs/images/nf-core-differentialabundance_logo_dark.png
multiqc_config: false
# Pipeline parameters and their defaults are declared in the typed `params {}` block of main.nf,
# which `nextflow config` (used by the lint) does not see. Each parameter is ignored individually.
nextflow_config:
- params.outdir
- params.input
- config_defaults:
- params.logo_file
- params.css_file
- params.citations_file
- params.report_file
- params.paramsheet
- params.affy_background
- params.affy_bgversion
- params.affy_build_annotation
- params.affy_destructive
- params.affy_file_name_col
- params.affy_rm_extra
- params.affy_rm_mask
- params.affy_rm_outliers
- params.decoupler_methods
- params.decoupler_min_n
- params.deseq2_alpha
- params.deseq2_alt_hypothesis
- params.deseq2_fit_type
- params.deseq2_independent_filtering
- params.deseq2_lfc_threshold
- params.deseq2_min_replicates_for_replace
- params.deseq2_minmu
- params.deseq2_p_adjust_method
- params.deseq2_sf_type
- params.deseq2_shrink_lfc
- params.deseq2_test
- params.deseq2_use_t
- params.deseq2_vs_blind
- params.deseq2_vs_method
- params.deseq2_vst_nsub
- params.differential_feature_id_column
- params.differential_max_pval
- params.differential_max_qval
- params.differential_method
- params.differential_min_fold_change
- params.differential_palette_name
- params.differential_subset_to_contrast_samples
- params.dream_adjust_method
- params.dream_apply_voom
- params.dream_confint
- params.dream_ddf
- params.dream_lfc
- params.dream_p_value
- params.dream_proportion
- params.dream_reml
- params.dream_robust
- params.dream_stdev_coef_lim
- params.dream_trend
- params.dream_winsor_tail_p
- params.exploratory_assay_names
- params.exploratory_clustering_method
- params.exploratory_cor_method
- params.exploratory_final_assay
- params.exploratory_log2_assays
- params.exploratory_mad_threshold
- params.exploratory_main_variable
- params.exploratory_n_features
- params.exploratory_palette_name
- params.exploratory_whisker_distance
- params.features_gtf_feature_type
- params.features_gtf_table_first_field
- params.features_id_col
- params.features_metadata_cols
- params.features_name_col
- params.features_type
- params.filtering_min_proportion_not_na
- params.filtering_min_samples
- params.functional_method
- params.gprofiler2_background_file
- params.gprofiler2_correction_method
- params.gprofiler2_domain_scope
- params.gprofiler2_evcodes
- params.gprofiler2_max_qval
- params.gprofiler2_measure_underrepresentation
- params.gprofiler2_min_diff
- params.gprofiler2_palette_name
- params.gprofiler2_significant
- params.grea_permutation
- params.grea_set_max
- params.grea_set_min
- params.gsea_make_sets
- params.gsea_median
- params.gsea_metric
- params.gsea_norm
- params.gsea_nperm
- params.gsea_num
- params.gsea_order
- params.gsea_permute
- params.gsea_plot_top_x
- params.gsea_rnd_type
- params.gsea_save_rnd_lists
- params.gsea_scoring_scheme
- params.gsea_set_max
- params.gsea_set_min
- params.gsea_sort
- params.gsea_zip_report
- params.limma_adjust_method
- params.limma_confint
- params.limma_lfc
- params.limma_method
- params.limma_p_value
- params.limma_proportion
- params.limma_robust
- params.limma_stdev_coef_lim
- params.limma_trend
- params.limma_use_voom
- params.limma_winsor_tail_p
- params.observations_id_col
- params.observations_type
- params.propd_fdr
- params.propd_moderated
- params.propd_number_of_cutoffs
- params.propd_permutation
- params.propd_save_adjacency
- params.propd_save_pairwise
- params.propd_save_pairwise_full
- params.propd_save_rdata
- params.proteus_measurecol_prefix
- params.proteus_norm_function
- params.proteus_palette_name
- params.proteus_plotmv_loess
- params.proteus_plotsd_method
- params.round_digits
- params.shinyngs_build_app
- params.shinyngs_deploy_to_shinyapps_io
- params.sizefactors_from_controls
- params.skip_reports
- params.study_abundance_type
- params.study_name
- params.study_type
- params.validate_params
# Every schema default is declared in main.nf rather than nextflow.config, so the schema/config
# comparison has nothing to compare.
schema_params: false
# Tests pass no `outdir` because the pipeline publishes with `-output-dir`.
nf_test_content:
- tests/default.nf.test
- tests/test_affy.nf.test
- tests/test_many.nf.test
- tests/test_maxquant.nf.test
- tests/test_nogtf.nf.test
- tests/test_rnaseq_deseq2.nf.test
- tests/test_rnaseq_dream.nf.test
- tests/test_rnaseq_limma.nf.test
- tests/test_rnaseq_propd_grea.nf.test
- tests/test_soft.nf.test
nf_core_version: 4.0.2
repository_type: pipeline
template:
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- [[#758](https://github.com/nf-core/differentialabundance/pull/758)] - Make the pipeline a typed pipeline (`params {}` block, `output {}` block, files of a run as optional values) that can be included in another pipeline with Nextflow pipeline composition, with its own files located relative to the pipeline and the config params defaults in `conf/params.config`; the `--outdir` param is replaced by Nextflow's `-output-dir`, and the propd and grea results are published through the output block. ([@pinin4fjords](https://github.com/pinin4fjords))
- [[#748](https://github.com/nf-core/differentialabundance/pull/748)] - Update `shinyngs` modules to 3.2.0 and modernise the Quarto report to use shinyngs 3.x plotting helpers, replacing hand-written PCA, clustering heatmap, top-gene boxplot, scree, upset, volcano and biotype code and reducing the report's container dependencies. ([@pinin4fjords](https://github.com/pinin4fjords)).

### Fixed

- [[#758](https://github.com/nf-core/differentialabundance/pull/758)] - Apply the `cache = 'deep'` setting to the processes of the differential filter and functional enrichment subworkflows, which its selectors never matched, and allow profiles to unset `exploratory_log2_assays`. ([@pinin4fjords](https://github.com/pinin4fjords))
- [[#747](https://github.com/nf-core/differentialabundance/pull/747)] - Fix silent contrast/result ordering mismatch in shinyngs Shiny app caused by `.sort().reverse()` in `collectFile` closures decoupling CSV row order from differential result file order. ([@jozsefkun](https://github.com/jozsefkun), review by [@pinin4fjords](https://github.com/pinin4fjords))

## v2.0.0 - 2026-05-26
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
[![GitHub Actions Linting Status](https://github.com/nf-core/differentialabundance/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/differentialabundance/actions/workflows/linting.yml)[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/differentialabundance/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)
[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)
[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.7568000-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7568000)
[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.10.4-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)
[![Nextflow](https://img.shields.io/badge/version-%E2%89%A526.09.0--edge-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)
[![nf-core template version](https://img.shields.io/badge/nf--core_template-4.0.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/4.0.2)
[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)
[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)
Expand Down Expand Up @@ -60,7 +60,7 @@ nextflow run nf-core/differentialabundance \
--contrasts contrasts.yaml \
--matrix assay_matrix.tsv \
--gtf mouse.gtf \
--outdir <OUTDIR>
-output-dir <OUTDIR>
```

> [!WARNING]
Expand All @@ -75,7 +75,7 @@ nextflow run nf-core/differentialabundance \
--contrasts contrasts.yaml \
--matrix assay_matrix.tsv \
--gtf mouse.gtf \
--outdir <OUTDIR>
-output-dir <OUTDIR>
```

> [!NOTE]
Expand All @@ -93,7 +93,7 @@ nextflow run nf-core/differentialabundance \
--matrix assay_matrix.tsv \
--gtf mouse.gtf \
--gene_sets_files gene_sets.gmt \
--outdir <OUTDIR>
-output-dir <OUTDIR>
```

Affymetrix microarray:
Expand All @@ -104,7 +104,7 @@ nextflow run nf-core/differentialabundance \
--input samplesheet.csv \
--contrasts contrasts.yaml \
--affy_cel_files_archive cel_files.tar \
--outdir <OUTDIR>
-output-dir <OUTDIR>
```

For full usage examples, analysis profiles, paramsheet-based multi-run mode, and input specifics (rnaseq counts, Affymetrix, MaxQuant, GEO SOFT), see the [usage documentation](https://nf-co.re/differentialabundance/usage) and the [parameter documentation](https://nf-co.re/differentialabundance/parameters).
Expand Down
Loading