Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,32 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## v1.0.1dev - [date]

### `Fixed`

- [#106](https://github.com/nf-core/seqsubmit/pull/106)
- Added support for metatranscriptome submission for ASSEMBLYSUBMIT
- Set retry to assembly_uploader
- [#108](https://github.com/nf-core/seqsubmit/pull/108)
- Added test usecase in test-datasets https://github.com/nf-core/test-datasets/pull/2324 with contamination=0
- [#107](https://github.com/nf-core/seqsubmit/pull/107)
- Fix `GENOMESUBMIT` treating a zero-valued completeness/contamination as a missing one. The branch that decides whether to (re)compute the statistics with CheckM2 tested the samplesheet values for Groovy truthiness, and the number `0` is falsey

```groovy
genome_evaluation_input: !(meta.completeness) || !(meta.contamination) || !(meta.stats_generation_software)
```

A genome with a legitimate value of `0` — a clean bin with 0% contamination — was therefore sent to `GENOME_EVALUATION`, where the supplied values were silently replaced by the recomputed ones. `stats_generation_software` is rewritten to the tool name reported by the module, so the affected rows also ended up with a different value in that column than the rows that kept their samplesheet statistics.

The branch now tests for absence, which is what the samplesheet schema expresses: `nf-schema` converts an empty field to `null`, so genuinely missing statistics still route to `GENOME_EVALUATION` while a provided `0` no longer does. This matches the `RNA_presence` test already used in the same workflow.

- The `genome_coverage` branch (`COVERM_GENOME`) is deliberately unchanged. Its schema field declares `exclusiveMinimum: 0`, so a samplesheet cannot supply `0` there, and an omitted value arrives as `null`, for which the truthiness test and a `null` test behave identically.

### `Dependencies`

### `Deprecated`

## v1.0.0 - 01/08/2026

Initial release of nf-core/seqsubmit, created with the [nf-core](https://nf-co.re/) template.
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ See the [`reads` mode section](docs/usage.md#samplesheet-input) of the usage doc
Example:

```csv
id,fasta,fastq_1,fastq_2,coverage,run_accession,assembler,assembler_version
assembly_1,data/contigs_1.fasta.gz,data/reads_1.fastq.gz,data/reads_2.fastq.gz,,ERR011322,SPAdes,3.15.5
assembly_2,data/contigs_2.fasta.gz,,,42.7,ERR011323,MEGAHIT,1.2.9
id,fasta,fastq_1,fastq_2,coverage,run_accession,assembler,assembler_version,assembly_type
assembly_1,data/contigs_1.fasta.gz,data/reads_1.fastq.gz,data/reads_2.fastq.gz,,ERR011322,SPAdes,3.15.5,metagenome
assembly_2,data/contigs_2.fasta.gz,,,42.7,ERR011323,MEGAHIT,1.2.9,metatranscriptome
```

See the [`metagenomic_assemblies` mode section](docs/usage.md#samplesheet-input-1) of the usage documentation for more details.
Expand Down
2 changes: 2 additions & 0 deletions assets/multiqc_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ custom_data:
title: "Filepath"
Sample:
title: "Sample"
Library:
title: "Library"

genome_metadata:
id: "genome_metadata"
Expand Down
8 changes: 8 additions & 0 deletions assets/schema_input_assembly.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,14 @@
"errorMessage": "Assembler version must be provided and cannot contain spaces",
"description": "Version of the assembler software used to generate the assembly, e.g. 1.0.0",
"meta": ["assembler_version"]
},
"assembly_type": {
"type": "string",
"enum": ["metagenome", "metatranscriptome"],
"errorMessage": "Assembly type should be metagenome or metatranscriptome",
"description": "Assembly type: metagenome or metatranscriptome. Written to the ENA manifest as ASSEMBLY_TYPE 'primary metagenome' or 'metatranscriptome'. Default: metagenome",
"default": "metagenome",
"meta": ["assembly_type"]
}
},
"required": ["id", "fasta", "run_accession", "assembler", "assembler_version"],
Expand Down
10 changes: 9 additions & 1 deletion conf/modules.config
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,15 @@ process {
]
}

withName: 'REGISTERSTUDY|GENERATE_ASSEMBLY_MANIFEST|CREATE_READS_MANIFEST' {
withName: 'REGISTERSTUDY|CREATE_READS_MANIFEST' {
publishDir = [
enabled: false
]
}

withName: 'GENERATE_ASSEMBLY_MANIFEST' {
errorStrategy = { task.exitStatus in (1 + (130..145) + 104 + (175..177)) ? 'retry' : 'finish' }
maxRetries = 3
publishDir = [
enabled: false
]
Expand Down
27 changes: 14 additions & 13 deletions docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -214,21 +214,22 @@ You will need to create a samplesheet with information about the metagenomic ass
Example:

```csv title="samplesheet_assembly.csv"
id,fasta,fastq_1,fastq_2,coverage,run_accession,assembler,assembler_version
assembly_001,data/assembly_001.fasta.gz,data/assembly_001_R1.fastq.gz,data/assembly_001_R2.fastq.gz,,ERR011322,SPAdes,3.15.5
assembly_002,data/assembly_002.fasta.gz,,,42.7,ERR011323,MEGAHIT,1.2.9
id,fasta,fastq_1,fastq_2,coverage,run_accession,assembler,assembler_version,assembly_type
assembly_001,data/assembly_001.fasta.gz,data/assembly_001_R1.fastq.gz,data/assembly_001_R2.fastq.gz,,ERR011322,SPAdes,3.15.5,metagenome
assembly_002,data/assembly_002.fasta.gz,,,42.7,ERR011323,MEGAHIT,1.2.9,metatranscriptome
```

| Column | Required | Description |
| ------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id` | Yes | A unique identifier for this data entry. Must be globally unique within the input dataset. |
| `fasta` | Yes | Path to assembly contigs in FASTA format compressed with `gzip`. |
| `fastq_1` | Conditional | Path to single-end/paired-end forward reads in FASTQ format (optionally gzipped). Required if `coverage` is not provided. |
| `fastq_2` | No | Path to the second read file in FASTQ format for paired-end data used to generate the source metagenomic assembly. Leave empty for single-end reads. |
| `coverage` | Conditional | Estimated sequencing depth of the assembly. If this value is missing, it is computed automatically during pipeline execution when reads are provided. |
| `run_accession` | Yes | ENA run accession for the reads used to generate the metagenomic assembly. Reads must already be submitted to ENA. |
| `assembler` | Yes | Name of the assembler software used to generate the assembly, e.g. MEGAHIT, SPAdes, metaSPAdes, Flye, etc. |
| `assembler_version` | Yes | Version of the assembler software used to generate the assembly, e.g. 1.0.0. |
| Column | Required | Description |
| ------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id` | Yes | A unique identifier for this data entry. Must be globally unique within the input dataset. |
| `fasta` | Yes | Path to assembly contigs in FASTA format compressed with `gzip`. |
| `fastq_1` | Conditional | Path to single-end/paired-end forward reads in FASTQ format (optionally gzipped). Required if `coverage` is not provided. |
| `fastq_2` | No | Path to the second read file in FASTQ format for paired-end data used to generate the source metagenomic assembly. Leave empty for single-end reads. |
| `coverage` | Conditional | Estimated sequencing depth of the assembly. If this value is missing, it is computed automatically during pipeline execution when reads are provided. |
| `run_accession` | Yes | ENA run accession for the reads used to generate the metagenomic assembly. Reads must already be submitted to ENA. |
| `assembler` | Yes | Name of the assembler software used to generate the assembly, e.g. MEGAHIT, SPAdes, metaSPAdes, Flye, etc. |
| `assembler_version` | Yes | Version of the assembler software used to generate the assembly, e.g. 1.0.0. |
| `assembly_type` | No | Sequencing library source: `metagenome` for metagenome assembly (would be used as _'primary metagenome'_ in manifest file following [ENA docs](https://ena-docs.readthedocs.io/en/latest/submit/assembly/metagenome/primary.html)) or `metatranscriptome` for metatranscriptome assembly (woule be used _'metatranscriptome'_ in assembly manifest following [ENA docs](https://ena-docs.readthedocs.io/en/latest/submit/assembly/metatranscriptome.html)). Default: `metagenome` |

Provide either read files (`fastq_1`, optionally `fastq_2`) or a `coverage` value for each row. If `coverage` is missing and reads are provided, the workflow calculates average coverage with CoverM. See the [Methods documentation](docs/methods.md) for more information on how coverage is calculated.

Expand Down
5 changes: 3 additions & 2 deletions modules/local/create_assembly_metadata_csv/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,15 @@ process CREATE_ASSEMBLY_METADATA_CSV {
task.ext.when == null || task.ext.when

script:
def header = 'Runs,Coverage,Assembler,Version,Filepath,Sample'
def header = 'Runs,Coverage,Assembler,Version,Filepath,Sample,Library'
def row = [
meta.run_accession,
meta.coverage,
meta.assembler,
meta.assembler_version,
fasta.name,
'' // Sample column left empty because co-assemblies are not supported
'', // Sample column left empty because co-assemblies are not supported
meta.assembly_type ?: 'metagenome' // it would be applied by schema, but still needed as safe case for tests
].join(',')
"""
cat <<-END_CSV > ${meta.id}_assembly_metadata.csv
Expand Down
6 changes: 5 additions & 1 deletion modules/local/create_assembly_metadata_csv/meta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ input:
- coverage: Assembly coverage value
- assembler: Name of the assembler used
- assembler_version: Version of the assembler
- assembly_type: 'metagenome' or 'metatranscriptome' (optional, default: 'metagenome')
- fasta:
type: file
description: Assembly FASTA file
Expand All @@ -34,7 +35,10 @@ output:
Groovy Map containing sample information (same as input)
- "*.csv":
type: file
description: CSV file containing assembly metadata to be used as input for the assembly_uploader
description: |
CSV file containing assembly metadata to be used as input for the assembly_uploader,
with columns Runs, Coverage, Assembler, Version, Filepath, Sample (empty) and
Library (assembly_type value, defines ASSEMBLY_TYPE in the ENA manifest)
pattern: "*_assembly_metadata.csv"

authors:
Expand Down
6 changes: 4 additions & 2 deletions modules/local/create_assembly_metadata_csv/tests/main.nf.test
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ nextflow_process {
run_accession: 'ERR123456',
coverage: 50.5,
assembler: 'metaspades',
assembler_version: '3.15.5'
assembler_version: '3.15.5',
assembly_type: 'metagenome'
],
file('https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz')
]
Expand Down Expand Up @@ -49,7 +50,8 @@ nextflow_process {
run_accession: 'ERR999999',
coverage: 75.0,
assembler: 'megahit',
assembler_version: '1.2.9'
assembler_version: '1.2.9',
assembly_type: 'metatranscriptome'
],
file('https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/genome/NC_045512.2/GCF_009858895.2_ASM985889v3_genomic.200409.fna.gz')
]
Expand Down
20 changes: 12 additions & 8 deletions modules/local/create_assembly_metadata_csv/tests/main.nf.test.snap
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@
"run_accession": "ERR123456",
"coverage": 50.5,
"assembler": "metaspades",
"assembler_version": "3.15.5"
"assembler_version": "3.15.5",
"assembly_type": "metagenome"
},
"test_sample_assembly_metadata.csv:md5,0ad41b6b4e778fb03fc224bae9ba4529"
"test_sample_assembly_metadata.csv:md5,5627f0b0bc83720dd269e2ea8ac16eff"
]
],
"1": [
Expand All @@ -28,14 +29,15 @@
"run_accession": "ERR123456",
"coverage": 50.5,
"assembler": "metaspades",
"assembler_version": "3.15.5"
"assembler_version": "3.15.5",
"assembly_type": "metagenome"
},
"test_sample_assembly_metadata.csv:md5,0ad41b6b4e778fb03fc224bae9ba4529"
"test_sample_assembly_metadata.csv:md5,5627f0b0bc83720dd269e2ea8ac16eff"
]
]
}
],
"timestamp": "2026-07-07T13:48:39.201846",
"timestamp": "2026-10-15T11:45:01.123968",
"meta": {
"nf-test": "0.9.5",
"nextflow": "26.04.0"
Expand All @@ -51,7 +53,8 @@
"run_accession": "ERR999999",
"coverage": 75.0,
"assembler": "megahit",
"assembler_version": "1.2.9"
"assembler_version": "1.2.9",
"assembly_type": "metatranscriptome"
},
"stub_sample_assembly_metadata.csv:md5,d41d8cd98f00b204e9800998ecf8427e"
]
Expand All @@ -70,14 +73,15 @@
"run_accession": "ERR999999",
"coverage": 75.0,
"assembler": "megahit",
"assembler_version": "1.2.9"
"assembler_version": "1.2.9",
"assembly_type": "metatranscriptome"
},
"stub_sample_assembly_metadata.csv:md5,d41d8cd98f00b204e9800998ecf8427e"
]
]
}
],
"timestamp": "2026-07-07T13:48:46.340926",
"timestamp": "2026-10-15T11:45:06.881317",
"meta": {
"nf-test": "0.9.5",
"nextflow": "26.04.0"
Expand Down
2 changes: 1 addition & 1 deletion modules/local/generate_assembly_manifest/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ channels:
- conda-forge
- bioconda
dependencies:
- "bioconda::assembly_uploader=1.3.5"
- "bioconda::assembly_uploader=1.3.6"
4 changes: 2 additions & 2 deletions modules/local/generate_assembly_manifest/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ process GENERATE_ASSEMBLY_MANIFEST {

conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/assembly_uploader:1.3.5--pyhdfd78af_1':
'quay.io/biocontainers/assembly_uploader:1.3.5--pyhdfd78af_1' }"
'https://depot.galaxyproject.org/singularity/assembly_uploader:1.3.6--pyhdfd78af_0':
'quay.io/biocontainers/assembly_uploader:1.3.6--pyhdfd78af_0' }"

input:
tuple val(meta), path(assembly_fasta), path(data_csv)
Expand Down
2 changes: 1 addition & 1 deletion modules/local/generate_assembly_manifest/meta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ input:
description: |
CSV file containing metadata -
runs (comma-separated and in quotes, example: "SRR1234,SRR5678"),
coverage, assembler, version, filepath and optionally sample.
coverage, assembler, version, filepath, [optionally] sample, [optionally] assembly_type
- assembly_study:
type: value
description: |
Expand Down
Loading
Loading