From a6f2c740436a5c65245bcb82553aa350ec070f4a Mon Sep 17 00:00:00 2001 From: mapo9 Date: Wed, 26 Aug 2026 09:46:43 +0000 Subject: [PATCH 1/4] add seq_type to anarcii module --- modules/nf-core/anarcii/main.nf | 2 ++ modules/nf-core/anarcii/meta.yml | 5 +++++ modules/nf-core/anarcii/tests/main.nf.test | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/modules/nf-core/anarcii/main.nf b/modules/nf-core/anarcii/main.nf index 966a5142958d..71337400edeb 100644 --- a/modules/nf-core/anarcii/main.nf +++ b/modules/nf-core/anarcii/main.nf @@ -9,6 +9,7 @@ process ANARCII { input: tuple val(meta), path(fasta) + val seq_type output: tuple val(meta), path("*.csv"), emit: anarcii @@ -22,6 +23,7 @@ process ANARCII { def prefix = task.ext.prefix ?: "${meta.id}" """ anarcii \\ + -t ${seq_type} \\ ${args}\\ -o ${prefix}.csv \\ ${fasta} diff --git a/modules/nf-core/anarcii/meta.yml b/modules/nf-core/anarcii/meta.yml index 0c0bd345f5ce..c0c44d51e911 100644 --- a/modules/nf-core/anarcii/meta.yml +++ b/modules/nf-core/anarcii/meta.yml @@ -27,6 +27,11 @@ input: pattern: "*.fasta" ontologies: - edam: http://edamontology.org/format_1929 + - seq_type: + type: string + description: | + Receptor type to number, passed to ANARCII's `-t` flag. Selects the model used for alignment. + pattern: "antibody|tcr|vnar|vhh|shark|unknown" output: anarcii: - - meta: diff --git a/modules/nf-core/anarcii/tests/main.nf.test b/modules/nf-core/anarcii/tests/main.nf.test index 15ee9c4237ce..952db0d77e5e 100644 --- a/modules/nf-core/anarcii/tests/main.nf.test +++ b/modules/nf-core/anarcii/tests/main.nf.test @@ -18,6 +18,7 @@ nextflow_process { [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/anarcii/anarcii_vdjdb.fasta', checkIfExists: true), ] + input[1] = 'tcr' """ } } @@ -30,6 +31,8 @@ nextflow_process { assert "Score" in anarciiResults.columnNames assert "Query start" in anarciiResults.columnNames assert "Query end" in anarciiResults.columnNames + // A mismatched seq_type leaves sequences unnumbered as chain "F" instead of failing + assert anarciiResults.columns["Chain"].every { it in ["A", "B"] } } } @@ -44,6 +47,7 @@ nextflow_process { [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/anarcii/anarcii_vdjdb.fasta', checkIfExists: true), ] + input[1] = 'tcr' """ } } From 385d1a6911d2d6ba34ed0aefcb39fcc45d06db1d Mon Sep 17 00:00:00 2001 From: mapo9 Date: Wed, 26 Aug 2026 10:05:43 +0000 Subject: [PATCH 2/4] add missing snapshot test and update snapshot --- modules/nf-core/anarcii/tests/main.nf.test | 1 + .../nf-core/anarcii/tests/main.nf.test.snap | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/modules/nf-core/anarcii/tests/main.nf.test b/modules/nf-core/anarcii/tests/main.nf.test index 952db0d77e5e..518f6f156956 100644 --- a/modules/nf-core/anarcii/tests/main.nf.test +++ b/modules/nf-core/anarcii/tests/main.nf.test @@ -33,6 +33,7 @@ nextflow_process { assert "Query end" in anarciiResults.columnNames // A mismatched seq_type leaves sequences unnumbered as chain "F" instead of failing assert anarciiResults.columns["Chain"].every { it in ["A", "B"] } + assert snapshot(sanitizeOutput(process.out)).match() } } diff --git a/modules/nf-core/anarcii/tests/main.nf.test.snap b/modules/nf-core/anarcii/tests/main.nf.test.snap index 7c6d258b896a..aa7c03e83425 100644 --- a/modules/nf-core/anarcii/tests/main.nf.test.snap +++ b/modules/nf-core/anarcii/tests/main.nf.test.snap @@ -1,4 +1,30 @@ { + "human - fasta": { + "content": [ + { + "anarcii": [ + [ + { + "id": "test" + }, + "test.csv:md5,f87cd1e8b2c16452d9ea3737c22cec13" + ] + ], + "versions_anarcii": [ + [ + "ANARCII", + "anarcii", + "2.0.5" + ] + ] + } + ], + "timestamp": "2026-08-26T10:02:00.155888645", + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } + }, "human - fasta - stub": { "content": [ { From 1f8f413354e3dad0e3265de4aadda8207d99199a Mon Sep 17 00:00:00 2001 From: mapo9 Date: Wed, 26 Aug 2026 11:15:46 +0000 Subject: [PATCH 3/4] snapshot stable anarcii fields instead of the output md5 ANARCII's Score column drifts with thread count, so a whole-file md5 is not portable across machines and failed in CI. --- modules/nf-core/anarcii/tests/main.nf.test | 10 +- .../nf-core/anarcii/tests/main.nf.test.snap | 211 ++++++++++++++++-- 2 files changed, 203 insertions(+), 18 deletions(-) diff --git a/modules/nf-core/anarcii/tests/main.nf.test b/modules/nf-core/anarcii/tests/main.nf.test index 518f6f156956..b7f4210056a6 100644 --- a/modules/nf-core/anarcii/tests/main.nf.test +++ b/modules/nf-core/anarcii/tests/main.nf.test @@ -33,7 +33,15 @@ nextflow_process { assert "Query end" in anarciiResults.columnNames // A mismatched seq_type leaves sequences unnumbered as chain "F" instead of failing assert anarciiResults.columns["Chain"].every { it in ["A", "B"] } - assert snapshot(sanitizeOutput(process.out)).match() + // Score drifts with thread count, so the file md5 is not portable across machines + assert snapshot( + anarciiResults.columnNames.sort(), + anarciiResults.columns["Name"], + anarciiResults.columns["Chain"], + anarciiResults.columns["Query start"], + anarciiResults.columns["Query end"], + process.out.versions_anarcii + ).match() } } diff --git a/modules/nf-core/anarcii/tests/main.nf.test.snap b/modules/nf-core/anarcii/tests/main.nf.test.snap index aa7c03e83425..1e69ba6b1934 100644 --- a/modules/nf-core/anarcii/tests/main.nf.test.snap +++ b/modules/nf-core/anarcii/tests/main.nf.test.snap @@ -1,25 +1,202 @@ { "human - fasta": { "content": [ - { - "anarcii": [ - [ - { - "id": "test" - }, - "test.csv:md5,f87cd1e8b2c16452d9ea3737c22cec13" - ] - ], - "versions_anarcii": [ - [ - "ANARCII", - "anarcii", - "2.0.5" - ] + [ + "1", + "10", + "100", + "101", + "102", + "103", + "104", + "105", + "106", + "107", + "108", + "109", + "11", + "110", + "111", + "111A", + "111B", + "112", + "112A", + "112B", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "12", + "120", + "121", + "122", + "123", + "124", + "125", + "126", + "127", + "128", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "2", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "3", + "30", + "31", + "32", + "33", + "34", + "35", + "36", + "37", + "38", + "39", + "4", + "40", + "41", + "42", + "43", + "44", + "45", + "46", + "47", + "48", + "49", + "5", + "50", + "51", + "52", + "53", + "54", + "55", + "56", + "57", + "58", + "59", + "6", + "60", + "61", + "62", + "63", + "64", + "65", + "66", + "67", + "68", + "69", + "7", + "70", + "71", + "72", + "73", + "74", + "75", + "76", + "77", + "78", + "79", + "8", + "80", + "81", + "82", + "83", + "84", + "85", + "86", + "87", + "88", + "89", + "9", + "90", + "91", + "92", + "93", + "94", + "95", + "96", + "97", + "98", + "99", + "Chain", + "Name", + "Query end", + "Query start", + "Score" + ], + [ + "298|TRA", + "298|TRB", + "299|TRA", + "299|TRB", + "300|TRA", + "300|TRB", + "301|TRA", + "301|TRB", + "302|TRA", + "302|TRB" + ], + [ + "A", + "B", + "A", + "B", + "A", + "B", + "A", + "B", + "A", + "B" + ], + [ + 20, + 19, + 19, + 19, + 20, + 19, + 18, + 19, + 18, + 19 + ], + [ + 133, + 133, + 132, + 131, + 135, + 137, + 130, + 130, + 130, + 133 + ], + [ + [ + "ANARCII", + "anarcii", + "2.0.5" ] - } + ] ], - "timestamp": "2026-08-26T10:02:00.155888645", + "timestamp": "2026-08-26T11:14:14.316916324", "meta": { "nf-test": "0.9.5", "nextflow": "25.10.4" From 4f0af78fc04f32da6ccb315c5c443bbbad30ebe7 Mon Sep 17 00:00:00 2001 From: mapo9 Date: Thu, 27 Aug 2026 08:43:22 +0000 Subject: [PATCH 4/4] allow singularity_pull_docker_container override in anarcii container The clause was missing since the module was merged; the repo-wide apptainer sweep in #11260 only rewrote the engine test. --- modules/nf-core/anarcii/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/anarcii/main.nf b/modules/nf-core/anarcii/main.nf index 71337400edeb..afca576c33a7 100644 --- a/modules/nf-core/anarcii/main.nf +++ b/modules/nf-core/anarcii/main.nf @@ -3,7 +3,7 @@ process ANARCII { label 'process_single' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine in ['singularity', 'apptainer'] + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/c5/c56cb3320588978063f0893876f4f2b6f088dadc75628f60a746ee54e72350a6/data' : 'community.wave.seqera.io/library/python_pip_anarcii:4e5c3ffabd22d3fc'}"