From 6eb995a2991abef3fc2d8784596b2958d0a644ae Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Tue, 25 Nov 2025 18:09:15 +0000 Subject: [PATCH 1/5] Fix arm64 profile configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Simplify arm64 profile to use pre-built ARM containers from conf/arm.config - Remove Wave dependency from arm64 profile (containers already configured) - Update documentation to reference arm64 profile instead of arm - Fix STAR_ALIGN and STAR_GENOMEGENERATE ARM container references - Remove incorrect arm.config include from emulate_amd64 profile 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- conf/arm.config | 4 ++-- docs/usage.md | 10 +++++----- nextflow.config | 11 ++--------- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/conf/arm.config b/conf/arm.config index bb5b222c3..134c9777e 100644 --- a/conf/arm.config +++ b/conf/arm.config @@ -197,11 +197,11 @@ process { } withName: 'STAR_ALIGN' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/40/40d803371e50330de0773c7cc50315e2c3b4b41dcf123823adeb0a07d71654c1/data' : 'community.wave.seqera.io/library/htslib_samtools_star_gawk:ae438e9a604351a4' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/10/101ea47973178f85ff66a34de6a7462aaf99d947d3924c27ce8a2d5a63009065/data' : 'community.wave.seqera.io/library/htslib_samtools_star_gawk:de8c848656c2c4c5' } } withName: 'STAR_GENOMEGENERATE' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/40/40d803371e50330de0773c7cc50315e2c3b4b41dcf123823adeb0a07d71654c1/data' : 'community.wave.seqera.io/library/htslib_samtools_star_gawk:ae438e9a604351a4' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/10/101ea47973178f85ff66a34de6a7462aaf99d947d3924c27ce8a2d5a63009065/data' : 'community.wave.seqera.io/library/htslib_samtools_star_gawk:de8c848656c2c4c5' } } withName: 'STRINGTIE_STRINGTIE' { diff --git a/docs/usage.md b/docs/usage.md index ba215ebfe..e3a3dfa20 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -182,7 +182,7 @@ If you would like to reduce the number of reads used in the analysis, for exampl ## Alignment options :::note -The `--aligner hisat2` option is not currently supported using ARM architecture ('-profile arm') +The `--aligner hisat2` option is not currently supported using ARM architecture ('-profile arm64') ::: By default, the pipeline uses [STAR](https://github.com/alexdobin/STAR) (i.e. `--aligner star_salmon`) to map the raw FastQ reads to the reference genome, project the alignments onto the transcriptome and to perform the downstream BAM-level quantification with [Salmon](https://salmon.readthedocs.io/en/latest/salmon.html). STAR is fast but requires a lot of memory to run, typically around 38GB for the Human GRCh37 reference genome. Both `--aligner star_salmon` and `--aligner star_rsem` use STAR for alignment, so you should use the [HISAT2](https://ccb.jhu.edu/software/hisat2/index.shtml) aligner (i.e. `--aligner hisat2`) if you have memory limitations. @@ -415,7 +415,7 @@ By default, the input GTF file will be filtered to ensure that sequence names co ## Contamination screening options :::note -The `--contaminant_screening` option is not currently available using ARM architecture ('-profile arm') +The `--contaminant_screening` option is not currently available using ARM architecture ('-profile arm64') ::: The pipeline provides the option to scan unaligned reads for contamination from other species using [Kraken2](https://ccb.jhu.edu/software/kraken2/), with the possibility of applying corrections from [Bracken](https://ccb.jhu.edu/software/bracken/). Since running Bracken is not computationally expensive, we recommend always using it to refine the abundance estimates generated by Kraken2. @@ -508,7 +508,7 @@ nextflow run \ --outdir \ --gtf \ --fasta \ - -profile docker,arm + -profile docker,arm64 ``` This will use ARM-compatible containers, and apply a small number of overrides to Conda definitions to support ARM operations. @@ -574,8 +574,8 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow ` 24.03.0-edge` or later). - `conda` - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. -- `arm` - - A configuration profile that will set `docker.runOptions` appropriately for ARM architectures, and apply overrides supplying ARM-compatible containers and Conda environments. See [Running on Linux ARM architectures](#running-on-linux-arm-architectures). +- `arm64` + - A configuration profile that applies overrides supplying ARM-compatible containers and Conda environments. See [Running on Linux ARM architectures](#running-on-linux-arm-architectures). ### `-resume` diff --git a/nextflow.config b/nextflow.config index 707255aab..aadddf8a8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -193,18 +193,11 @@ profiles { } arm64 { process.arch = 'arm64' - // TODO https://github.com/nf-core/modules/issues/6694 - // For now if you're using arm64 you have to use wave for the sake of the maintainers - // wave profile - apptainer.ociAutoPull = true - singularity.ociAutoPull = true - wave.enabled = true - wave.freeze = true - wave.strategy = 'conda,container' + includeConfig 'conf/arm.config' } emulate_amd64 { + // Run AMD64 containers on ARM hardware using emulation (slower but more compatible) docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' - includeConfig 'conf/arm.config' } singularity { singularity.enabled = true From 73756c3a395a93a2b52a4bd0dc848ff9cb9aa7cb Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Tue, 25 Nov 2025 18:10:10 +0000 Subject: [PATCH 2/5] Add PR #1630 to CHANGELOG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06395a190..3926f3a5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Special thanks to the following for their contributions to the release: - [PR #1620](https://github.com/nf-core/rnaseq/pull/1620) - Fix bigwig strand labeling for reverse-stranded libraries ([#1591](https://github.com/nf-core/rnaseq/issues/1591)) - [PR #1621](https://github.com/nf-core/rnaseq/pull/1621) - Optimize qualimap performance with multi-threaded name sorting - [PR #1628](https://github.com/nf-core/rnaseq/pull/1628) - Template update for nf-core/tools v3.5.1 +- [PR #1630](https://github.com/nf-core/rnaseq/pull/1630) - Fix arm64 profile to use pre-built ARM containers and update documentation ## [[3.21.0](https://github.com/nf-core/rnaseq/releases/tag/3.21.0)] - 2025-09-18 From 1a79f0fe8c10af45083cf40b730feb97a36ac0dd Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Tue, 25 Nov 2025 18:13:07 +0000 Subject: [PATCH 3/5] Remove outdated ARM limitation notes for hisat2 and kraken2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both hisat2 and kraken2/bracken have ARM containers configured in conf/arm.config, so the documentation warnings were incorrect. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- docs/usage.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index e3a3dfa20..495929a5c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -181,10 +181,6 @@ If you would like to reduce the number of reads used in the analysis, for exampl ## Alignment options -:::note -The `--aligner hisat2` option is not currently supported using ARM architecture ('-profile arm64') -::: - By default, the pipeline uses [STAR](https://github.com/alexdobin/STAR) (i.e. `--aligner star_salmon`) to map the raw FastQ reads to the reference genome, project the alignments onto the transcriptome and to perform the downstream BAM-level quantification with [Salmon](https://salmon.readthedocs.io/en/latest/salmon.html). STAR is fast but requires a lot of memory to run, typically around 38GB for the Human GRCh37 reference genome. Both `--aligner star_salmon` and `--aligner star_rsem` use STAR for alignment, so you should use the [HISAT2](https://ccb.jhu.edu/software/hisat2/index.shtml) aligner (i.e. `--aligner hisat2`) if you have memory limitations. You also have the option to pseudoalign and quantify your data directly with [Salmon](https://salmon.readthedocs.io/en/latest/salmon.html) or [Kallisto](https://pachterlab.github.io/kallisto/) by specifying `salmon` or `kallisto` to the `--pseudo_aligner` parameter. The selected pseudoaligner will then be run in addition to the standard alignment workflow defined by `--aligner`, mainly because it allows you to obtain QC metrics with respect to the genomic alignments. However, you can provide the `--skip_alignment` parameter if you would like to run Salmon or Kallisto in isolation. By default, the pipeline will use the genome fasta and gtf file to generate the transcripts fasta file, and then to build the Salmon index. You can override these parameters using the `--transcript_fasta` and `--salmon_index` parameters, respectively. @@ -414,10 +410,6 @@ By default, the input GTF file will be filtered to ensure that sequence names co ## Contamination screening options -:::note -The `--contaminant_screening` option is not currently available using ARM architecture ('-profile arm64') -::: - The pipeline provides the option to scan unaligned reads for contamination from other species using [Kraken2](https://ccb.jhu.edu/software/kraken2/), with the possibility of applying corrections from [Bracken](https://ccb.jhu.edu/software/bracken/). Since running Bracken is not computationally expensive, we recommend always using it to refine the abundance estimates generated by Kraken2. It is important to note that the accuracy of Kraken2 is [highly dependent on the database](https://doi.org/10.1099/mgen.0.000949) used. Specifically, it is [crucial](https://doi.org/10.1128/mbio.01607-23) to ensure that the host genome is included in the database. If you are particularly concerned about certain contaminants, it may be beneficial to use a smaller, more focused database containing primarily those contaminants instead of the full standard database. Various pre-built databases [are available for download](https://benlangmead.github.io/aws-indexes/k2), and instructions for building a custom database can be found in the [Kraken2 documentation](https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown). Additionally, genomes of contaminants detected in previous sequencing experiments are available on the [OpenContami website](https://openlooper.hgc.jp/opencontami/help/help_oct.php). @@ -496,7 +488,7 @@ You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-c ### Running on Linux ARM architectures :::warning -Please note that the ARM profile is experimental. It is expected to function correctly in all cases unless explicitly indicated otherwise—currently, exceptions include the use of the hisat2 aligner and contaminant screening via kraken2. However, because testing is presently conducted manually, we cannot guarantee its reliability. +Please note that the ARM profile is experimental. However, because testing is presently conducted manually, we cannot guarantee its reliability. ::: The pipeline can be executed in an ARM compatible mode by specifying the ARM profile, for example: From 0eecbbed188fd117dea8b5418b6bd21c2edc5167 Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Tue, 25 Nov 2025 18:45:29 +0000 Subject: [PATCH 4/5] Add ARM containers for FQ_LINT and UMICOLLAPSE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All open-source modules now have ARM container definitions. Only Sentieon modules (proprietary) remain without ARM support. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- conf/arm.config | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/conf/arm.config b/conf/arm.config index 134c9777e..be7c46b85 100644 --- a/conf/arm.config +++ b/conf/arm.config @@ -64,6 +64,10 @@ process { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b00189d4f7eed55199354a3dff8a9a535e1dfb3a2f4c97f5d0bf9e388105795e/data' : 'community.wave.seqera.io/library/fq:0.12.0--ad6857b304869ce9' } } + withName: 'FQ_LINT' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b00189d4f7eed55199354a3dff8a9a535e1dfb3a2f4c97f5d0bf9e388105795e/data' : 'wave.seqera.io/wt/5025f86b9f4b/wave/build:fq--cb6900526ed3c4ad' } + } + withName: 'GFFREAD' { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/9e/9e6db95013607b07689e38ee37a654d029236de77fdfde97fe1866f45d01e064/data' : 'community.wave.seqera.io/library/gffread:0.12.7--1577aa7c95340d9f' } } @@ -232,6 +236,10 @@ process { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/38/389312a4a6022c5f5d2510dfa9bedb0491b36c8a27e8d842c05de00bc3b5be76/data' : 'community.wave.seqera.io/library/ucsc-bedgraphtobigwig:469--1db18e1b19f8e5f1' } } + withName: 'UMICOLLAPSE' { + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/4c/4c8b7641b14c16d52ea08c1ced6a8be4a686c9502de648228dc406d9642a9572/data' : 'community.wave.seqera.io/library/umicollapse:1.1.0--d406900dbf84ec60' } + } + withName: 'UMITOOLS_DEDUP' { container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ba/ba7c02244236db73a56ff1eb880b16c2dd53679834e1b72bb096e1f633e35644/data' : 'community.wave.seqera.io/library/umi_tools:1.1.5--b2721816f7a92564' } } From 817ac88df049433c532cd3855dde94695e18e49f Mon Sep 17 00:00:00 2001 From: Jonathan Manning Date: Tue, 25 Nov 2025 19:05:11 +0000 Subject: [PATCH 5/5] Fix FQ_LINT container to use community.wave.seqera.io MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- conf/arm.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/arm.config b/conf/arm.config index be7c46b85..9f2ed3f1f 100644 --- a/conf/arm.config +++ b/conf/arm.config @@ -65,7 +65,7 @@ process { } withName: 'FQ_LINT' { - container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b00189d4f7eed55199354a3dff8a9a535e1dfb3a2f4c97f5d0bf9e388105795e/data' : 'wave.seqera.io/wt/5025f86b9f4b/wave/build:fq--cb6900526ed3c4ad' } + container = { workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b00189d4f7eed55199354a3dff8a9a535e1dfb3a2f4c97f5d0bf9e388105795e/data' : 'community.wave.seqera.io/library/fq:0.12.0--ad6857b304869ce9' } } withName: 'GFFREAD' {