From 6356ebf679d247bb9eca7a1716823635e3b0643f Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 27 Feb 2026 11:41:30 +0000 Subject: [PATCH 1/5] refactor: replace opaque tuple indexing with destructured names Replace `{ tuple -> tuple[1] }` and similar patterns with named destructuring (e.g. `{ _meta, stats -> stats }`) throughout the main workflow for improved readability. Also rename `ch_dummy_file` to `ch_transcript_fasta_placeholder` to clarify its purpose as a placeholder input for quantification subworkflows. Addresses review feedback from @adamrtalbot in PR #1717. Co-Authored-By: Claude Opus 4.6 --- assets/METRO_MAP.md => docs/dev/metro_map.md | 0 workflows/rnaseq/main.nf | 82 ++++++++++---------- 2 files changed, 41 insertions(+), 41 deletions(-) rename assets/METRO_MAP.md => docs/dev/metro_map.md (100%) diff --git a/assets/METRO_MAP.md b/docs/dev/metro_map.md similarity index 100% rename from assets/METRO_MAP.md rename to docs/dev/metro_map.md diff --git a/workflows/rnaseq/main.nf b/workflows/rnaseq/main.nf index 2348e78f0..7749bae4e 100755 --- a/workflows/rnaseq/main.nf +++ b/workflows/rnaseq/main.nf @@ -103,7 +103,7 @@ workflow RNASEQ { def sample_status_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/sample_status_header.txt", checkIfExists: true) def ch_clustering_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/deseq2_clustering_header.txt", checkIfExists: true) def ch_biotypes_header_multiqc = file("$projectDir/workflows/rnaseq/assets/multiqc/biotypes_header.txt", checkIfExists: true) - def ch_dummy_file = ch_pca_header_multiqc + def ch_transcript_fasta_placeholder = ch_pca_header_multiqc ch_multiqc_files = channel.empty() ch_trim_status = channel.empty() @@ -262,7 +262,7 @@ workflow RNASEQ { ch_unprocessed_bams = ch_genome_bam.join(ch_transcriptome_bam) ch_star_log = ALIGN_STAR.out.log_final ch_unaligned_sequences = ALIGN_STAR.out.fastq - ch_multiqc_files = ch_multiqc_files.mix(ch_star_log.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(ch_star_log.collect{ _meta, log -> log }) if (!params.with_umi && (params.skip_markduplicates || params.use_parabricks_star)) { // The deduplicated stats should take priority for MultiQC, but use @@ -273,9 +273,9 @@ workflow RNASEQ { // skipped, so we also need to add alignment stats here. ch_multiqc_files = ch_multiqc_files - .mix(ALIGN_STAR.out.stats.collect{ tuple -> tuple[1] }) - .mix(ALIGN_STAR.out.flagstat.collect{ tuple -> tuple[1] }) - .mix(ALIGN_STAR.out.idxstats.collect{ tuple -> tuple[1] }) + .mix(ALIGN_STAR.out.stats.collect{ _meta, stats -> stats }) + .mix(ALIGN_STAR.out.flagstat.collect{ _meta, flagstat -> flagstat }) + .mix(ALIGN_STAR.out.idxstats.collect{ _meta, idxstats -> idxstats }) } } @@ -299,13 +299,13 @@ workflow RNASEQ { ch_percent_mapped = ch_percent_mapped.mix(ALIGN_BOWTIE2.out.percent_mapped) ch_unprocessed_bams = ch_genome_bam.map { meta, bam -> [ meta, bam, '' ] } ch_bowtie2_log = ALIGN_BOWTIE2.out.log_final - ch_multiqc_files = ch_multiqc_files.mix(ch_bowtie2_log.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(ch_bowtie2_log.collect{ _meta, log -> log }) if (!params.with_umi && params.skip_markduplicates) { ch_multiqc_files = ch_multiqc_files - .mix(ALIGN_BOWTIE2.out.stats.collect{ tuple -> tuple[1] }) - .mix(ALIGN_BOWTIE2.out.flagstat.collect{ tuple -> tuple[1] }) - .mix(ALIGN_BOWTIE2.out.idxstats.collect{ tuple -> tuple[1] }) + .mix(ALIGN_BOWTIE2.out.stats.collect{ _meta, stats -> stats }) + .mix(ALIGN_BOWTIE2.out.flagstat.collect{ _meta, flagstat -> flagstat }) + .mix(ALIGN_BOWTIE2.out.idxstats.collect{ _meta, idxstats -> idxstats }) } } @@ -324,7 +324,7 @@ workflow RNASEQ { ch_genome_bam_index = ch_genome_bam_index.mix(params.bam_csi_index ? FASTQ_ALIGN_HISAT2.out.csi : FASTQ_ALIGN_HISAT2.out.bai) ch_unprocessed_bams = ch_genome_bam.map { meta, bam -> [ meta, bam, '' ] } ch_unaligned_sequences = FASTQ_ALIGN_HISAT2.out.fastq - ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_HISAT2.out.summary.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(FASTQ_ALIGN_HISAT2.out.summary.collect{ _meta, summary -> summary }) if (!params.with_umi && params.skip_markduplicates) { // The deduplicated stats should take priority for MultiQC, but use @@ -332,9 +332,9 @@ workflow RNASEQ { // will run, those stats will be added later instead to avoid // duplicate flagstat files in MultiQC. ch_multiqc_files = ch_multiqc_files - .mix(FASTQ_ALIGN_HISAT2.out.stats.collect{ tuple -> tuple[1] }) - .mix(FASTQ_ALIGN_HISAT2.out.flagstat.collect{ tuple -> tuple[1] }) - .mix(FASTQ_ALIGN_HISAT2.out.idxstats.collect{ tuple -> tuple[1] }) + .mix(FASTQ_ALIGN_HISAT2.out.stats.collect{ _meta, stats -> stats }) + .mix(FASTQ_ALIGN_HISAT2.out.flagstat.collect{ _meta, flagstat -> flagstat }) + .mix(FASTQ_ALIGN_HISAT2.out.idxstats.collect{ _meta, idxstats -> idxstats }) } } @@ -375,12 +375,12 @@ workflow RNASEQ { params.gtf_extra_attributes, params.use_sentieon_star ) - ch_multiqc_files = ch_multiqc_files.mix(QUANTIFY_RSEM.out.stat.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(QUANTIFY_RSEM.out.stat.collect{ _meta, stat -> stat }) ch_versions = ch_versions.mix(QUANTIFY_RSEM.out.versions) if (!params.skip_qc & !params.skip_deseq2_qc) { DESEQ2_QC_RSEM ( - QUANTIFY_RSEM.out.counts_gene_length_scaled.map { tuple -> tuple[1] }, + QUANTIFY_RSEM.out.counts_gene_length_scaled.map { _meta, counts -> counts }, ch_pca_header_multiqc, ch_clustering_header_multiqc ) @@ -397,7 +397,7 @@ workflow RNASEQ { QUANTIFY_BAM_SALMON ( ch_samplesheet.map { item -> [ [:], item ] }, ch_transcriptome_bam, - ch_dummy_file, + ch_transcript_fasta_placeholder, ch_transcript_fasta, ch_gtf, params.gtf_group_features, @@ -412,7 +412,7 @@ workflow RNASEQ { if (!params.skip_qc & !params.skip_deseq2_qc) { DESEQ2_QC_BAM_SALMON ( - QUANTIFY_BAM_SALMON.out.counts_gene_length_scaled.map { tuple -> tuple[1] }, + QUANTIFY_BAM_SALMON.out.counts_gene_length_scaled.map { _meta, counts -> counts }, ch_pca_header_multiqc, ch_clustering_header_multiqc ) @@ -480,7 +480,7 @@ workflow RNASEQ { PRESEQ_LCEXTRAP ( ch_genome_bam ) - ch_multiqc_files = ch_multiqc_files.mix(PRESEQ_LCEXTRAP.out.lc_extrap.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(PRESEQ_LCEXTRAP.out.lc_extrap.collect{ _meta, lc_extrap -> lc_extrap }) } // @@ -497,10 +497,10 @@ workflow RNASEQ { ) ch_genome_bam = BAM_MARKDUPLICATES_PICARD.out.bam ch_genome_bam_index = params.bam_csi_index ? BAM_MARKDUPLICATES_PICARD.out.csi : BAM_MARKDUPLICATES_PICARD.out.bai - ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.stats.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.flagstat.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.idxstats.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.metrics.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.stats.collect{ _meta, stats -> stats }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.flagstat.collect{ _meta, flagstat -> flagstat }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.idxstats.collect{ _meta, idxstats -> idxstats }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_MARKDUPLICATES_PICARD.out.metrics.collect{ _meta, metrics -> metrics }) } // @@ -527,8 +527,8 @@ workflow RNASEQ { ch_genome_bam .combine(ch_gtf) .combine(biotype_in_gtf) - .filter { tuple -> tuple[-1] } - .map { tuple -> tuple[0.. biotype_ok } + .map { meta, bam, gtf, _biotype_ok -> [ meta, bam, gtf ] } .set { ch_featurecounts } SUBREAD_FEATURECOUNTS ( @@ -539,7 +539,7 @@ workflow RNASEQ { SUBREAD_FEATURECOUNTS.out.counts, ch_biotypes_header_multiqc ) - ch_multiqc_files = ch_multiqc_files.mix(MULTIQC_CUSTOM_BIOTYPE.out.tsv.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(MULTIQC_CUSTOM_BIOTYPE.out.tsv.collect{ _meta, tsv -> tsv }) } // @@ -593,7 +593,7 @@ workflow RNASEQ { SAMTOOLS_SORT_QUALIMAP.out.bam, ch_gtf.map { item -> [ [:], item ] } ) - ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_RNASEQ.out.results.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(QUALIMAP_RNASEQ.out.results.collect{ _meta, results -> results }) } if (!params.skip_dupradar) { @@ -601,7 +601,7 @@ workflow RNASEQ { ch_genome_bam, ch_gtf.map { item -> [ [:], item ] } ) - ch_multiqc_files = ch_multiqc_files.mix(DUPRADAR.out.multiqc.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(DUPRADAR.out.multiqc.collect{ _meta, multiqc -> multiqc }) ch_versions = ch_versions.mix(DUPRADAR.out.versions.first()) } @@ -620,14 +620,14 @@ workflow RNASEQ { ch_gene_bed, rseqc_modules ) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.bamstat_txt.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.inferexperiment_txt.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.innerdistance_freq.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.junctionannotation_log.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.junctionsaturation_rscript.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.readdistribution_txt.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.readduplication_pos_xls.collect{ tuple -> tuple[1] }) - ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.tin_txt.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.bamstat_txt.collect{ _meta, txt -> txt }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.inferexperiment_txt.collect{ _meta, txt -> txt }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.innerdistance_freq.collect{ _meta, freq -> freq }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.junctionannotation_log.collect{ _meta, log -> log }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.junctionsaturation_rscript.collect{ _meta, rscript -> rscript }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.readdistribution_txt.collect{ _meta, txt -> txt }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.readduplication_pos_xls.collect{ _meta, xls -> xls }) + ch_multiqc_files = ch_multiqc_files.mix(BAM_RSEQC.out.tin_txt.collect{ _meta, txt -> txt }) // Compare predicted supplied or Salmon-predicted strand with what we get from RSeQC ch_strand_comparison = BAM_RSEQC.out.inferexperiment_txt @@ -699,13 +699,13 @@ workflow RNASEQ { ch_kraken_reports = KRAKEN2.out.report if (params.contaminant_screening == 'kraken2') { - ch_multiqc_files = ch_multiqc_files.mix(KRAKEN2.out.report.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(KRAKEN2.out.report.collect{ _meta, report -> report }) } else if (params.contaminant_screening == 'kraken2_bracken') { BRACKEN ( ch_kraken_reports, params.kraken_db ) - ch_multiqc_files = ch_multiqc_files.mix(BRACKEN.out.txt.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(BRACKEN.out.txt.collect{ _meta, txt -> txt }) } } else if (params.contaminant_screening == 'sylph') { def sylph_databases = params.sylph_db ? params.sylph_db.split(',').collect{ path -> file(path.trim()) } : [] @@ -722,7 +722,7 @@ workflow RNASEQ { ch_sylph_profile, ch_sylph_taxonomies ) - ch_multiqc_files = ch_multiqc_files.mix(SYLPHTAX_TAXPROF.out.taxprof_output.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(SYLPHTAX_TAXPROF.out.taxprof_output.collect{ _meta, output -> output }) } } @@ -741,7 +741,7 @@ workflow RNASEQ { ch_samplesheet.map { item -> [ [:], item ] }, ch_strand_inferred_filtered_fastq, ch_pseudo_index, - ch_dummy_file, + ch_transcript_fasta_placeholder, ch_gtf, params.gtf_group_features, params.gtf_extra_attributes, @@ -752,12 +752,12 @@ workflow RNASEQ { params.kallisto_quant_fraglen_sd ) ch_counts_gene_length_scaled = QUANTIFY_PSEUDO_ALIGNMENT.out.counts_gene_length_scaled - ch_multiqc_files = ch_multiqc_files.mix(QUANTIFY_PSEUDO_ALIGNMENT.out.multiqc.collect{ tuple -> tuple[1] }) + ch_multiqc_files = ch_multiqc_files.mix(QUANTIFY_PSEUDO_ALIGNMENT.out.multiqc.collect{ _meta, multiqc -> multiqc }) ch_versions = ch_versions.mix(QUANTIFY_PSEUDO_ALIGNMENT.out.versions) if (!params.skip_qc & !params.skip_deseq2_qc) { DESEQ2_QC_PSEUDO ( - ch_counts_gene_length_scaled.map { tuple -> tuple[1] }, + ch_counts_gene_length_scaled.map { _meta, counts -> counts }, ch_pca_header_multiqc, ch_clustering_header_multiqc ) From 360e9792efd0c249c5736ffc3e4978d6a0c17aa8 Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 27 Feb 2026 11:41:45 +0000 Subject: [PATCH 2/5] ci: align GPU workflow with other CI workflows - Remove redundant workflow-level NXF_VER env var (overridden by matrix-level NXF_VER at the job level) - Add latest-everything to NXF version matrix, matching nf-test.yml and nf-test-arm.yml - Add continue-on-error for latest-everything and report step to match other CI workflows Note: NXF version bump from 25.04.0 to 25.04.3 is handled separately in PR #1730. Addresses review feedback from @adamrtalbot in PR #1717. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/nf-test-gpu.yml | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nf-test-gpu.yml b/.github/workflows/nf-test-gpu.yml index edcf485f1..b29fd633d 100644 --- a/.github/workflows/nf-test-gpu.yml +++ b/.github/workflows/nf-test-gpu.yml @@ -25,8 +25,6 @@ env: NXF_ANSI_LOG: false NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity - # renovate: datasource=github-releases depName=nextflow-io/nextflow versioning=semver - NXF_VER: "25.04.0" jobs: get-shards: @@ -80,6 +78,7 @@ jobs: shard: ${{ fromJson(needs.get-shards.outputs.shard) }} NXF_VER: - "25.04.0" + - "latest-everything" filters: [pipeline] steps: @@ -93,7 +92,9 @@ jobs: nvidia-smi -L - name: Run nf-test Action + id: run_nf_test uses: ./.github/actions/nf-test + continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} with: profile: test_gpu,${{ matrix.profile }} shard: ${{ matrix.shard }} @@ -101,6 +102,20 @@ jobs: filters: ${{ matrix.filters }} tags: "gpu" + - name: Report test status + if: ${{ always() }} + run: | + if [[ "${{ steps.run_nf_test.outcome }}" == "failure" ]]; then + echo "::error::Test with ${{ matrix.NXF_VER }} failed" + echo "## Test failed: ${{ matrix.profile }} | ${{ matrix.NXF_VER }} | Shard ${{ matrix.shard }}" >> $GITHUB_STEP_SUMMARY + if [[ "${{ matrix.NXF_VER }}" == "latest-everything" ]]; then + echo "::warning::Test with latest-everything failed but will not cause workflow failure. Please check if the error is expected or if it needs fixing." + fi + if [[ "${{ matrix.NXF_VER }}" != "latest-everything" ]]; then + exit 1 + fi + fi + confirm-pass-gpu: runs-on: - runs-on=${{ github.run_id }}-confirm-pass From bfc090f0b1ea5b2b49429eaa53dbc40cef4649ea Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 27 Feb 2026 10:44:47 +0000 Subject: [PATCH 3/5] ci: bump Nextflow to 25.04.3 to fix conda --mkdir bug Nextflow 25.04.0 passes the obsolete `--mkdir` flag to `conda create`, which fails with recent conda versions. Fixed in nextflow-io/nextflow#5947. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/nf-test-arm.yml | 2 +- .github/workflows/nf-test-gpu.yml | 2 +- .github/workflows/nf-test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nf-test-arm.yml b/.github/workflows/nf-test-arm.yml index 510314f52..0101132b4 100644 --- a/.github/workflows/nf-test-arm.yml +++ b/.github/workflows/nf-test-arm.yml @@ -83,7 +83,7 @@ jobs: - isMain: false profile: "singularity" NXF_VER: - - "25.04.0" + - "25.04.3" - "latest-everything" env: NXF_ANSI_LOG: false diff --git a/.github/workflows/nf-test-gpu.yml b/.github/workflows/nf-test-gpu.yml index b29fd633d..08fa99ad6 100644 --- a/.github/workflows/nf-test-gpu.yml +++ b/.github/workflows/nf-test-gpu.yml @@ -77,7 +77,7 @@ jobs: profile: [docker, singularity] shard: ${{ fromJson(needs.get-shards.outputs.shard) }} NXF_VER: - - "25.04.0" + - "25.04.3" - "latest-everything" filters: [pipeline] diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index 466a2395d..358f9c3b1 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -76,7 +76,7 @@ jobs: - isMain: false profile: "singularity" NXF_VER: - - "25.04.0" + - "25.04.3" - "latest-everything" env: NXF_ANSI_LOG: false From 897bb4cd8161bcf98d7d9fb04befa942b06ee419 Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 27 Feb 2026 10:45:42 +0000 Subject: [PATCH 4/5] docs: add PR #1730 to changelog Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bce753f1..ad2389f9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ Special thanks to the following for their contributions to the release: - [PR #1724](https://github.com/nf-core/rnaseq/pull/1724) - Update umitools modules: remove patches, add conda channel prefixes, update Wave containers - [PR #1725](https://github.com/nf-core/rnaseq/pull/1725) - Refine .nftignore patterns to reinstate tx2gene MD5 checking, remove redundant UNTAR version collection - [PR #1728](https://github.com/nf-core/rnaseq/pull/1728) - Re-render metro map with nf-metro v0.5.4: bolder section labels and number badges for improved visual hierarchy, increased vertical spacing between stacked sections, synchronized animation timing +- [PR #1730](https://github.com/nf-core/rnaseq/pull/1730) - Bump Nextflow from 25.04.0 to 25.04.3 in CI to fix `conda create --mkdir` failure ([nextflow-io/nextflow#5947](https://github.com/nextflow-io/nextflow/issues/5947)) ### Parameters From 618a39bf8d1a28fe705787f2decd9cf15c1ca480 Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Fri, 27 Feb 2026 10:49:18 +0000 Subject: [PATCH 5/5] ci: bump minimum Nextflow version to 25.04.3 Co-Authored-By: Claude Opus 4.6 --- README.md | 2 +- nextflow.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7cd4b47b4..2dce7bae1 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![GitHub Actions Linting Status](https://github.com/nf-core/rnaseq/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-core/rnaseq/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/rnaseq/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.1400710-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.1400710) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-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%A525.04.3-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-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1) [![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/) diff --git a/nextflow.config b/nextflow.config index 51248ab1b..9e77da5c5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -442,7 +442,7 @@ manifest { description = """RNA sequencing analysis pipeline for gene/isoform quantification and extensive quality control.""" mainScript = 'main.nf' defaultBranch = 'master' - nextflowVersion = '!>=25.04.0' + nextflowVersion = '!>=25.04.3' version = '3.23.0' doi = 'https://doi.org/10.5281/zenodo.1400710' }