Skip to content
Open
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
34 changes: 24 additions & 10 deletions modules/nf-core/bclconvert/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,24 @@
# Dockerfile to create container with bcl-convert
# Push to nfcore/bclconvert:<VER>

# Build stage: unpack the RPM file
FROM debian:bullseye-slim AS build
ARG BCLCONVERT_VERSION="4.4.6"

# Install tools needed to extract RPM
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
rpm2cpio \
cpio \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Extract bcl-convert from RPM
COPY bcl-convert-4.4.6-2.el8.x86_64.rpm bcl-convert.rpm
RUN rpm2cpio bcl-convert.rpm | cpio -idmv \
&& rm bcl-convert.rpm

# Final stage: minimal image with only necessary components
FROM debian:bullseye-slim
ARG BCLCONVERT_VERSION="4.4.6"
LABEL org.opencontainers.image.description="Docker image containing bcl-convert"
Expand All @@ -12,20 +30,16 @@ LABEL org.opencontainers.image.vendor="nf-core"
LABEL org.opencontainers.image.license="https://github.com/nf-core/modules/blob/master/modules/nf-core/bclconvert/LICENSE"

# Disclaimer: this container is not provided nor supported by Illumina
# 'ps' command is need by some nextflow executions to collect system stats
# Install procps and clean apt cache
# Install procps (for 'ps' command needed by Nextflow) and rclone (for parallel file transfers)
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
procps \
rpm2cpio \
cpio \
rclone \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Link hostname cmd to fix hardcoded path
RUN ln -s /bin/hostname /usr/bin/hostname
# Install bcl-convert
COPY bcl-convert-4.4.6-2.el8.x86_64.rpm bcl-convert.rpm
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN rpm2cpio bcl-convert.rpm | cpio -idmv \
&& rm bcl-convert.rpm
RUN rm -rf /var/log/bcl-convert && ln -sfT /tmp /var/log/bcl-convert

# Copy bcl-convert executable from build stage
COPY --from=build /usr/bin/bcl-convert /usr/bin/bcl-convert
19 changes: 5 additions & 14 deletions modules/nf-core/bclconvert/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ process BCLCONVERT {
tag {"$meta.lane" ? "$meta.id"+"."+"$meta.lane" : "$meta.id" }
label 'process_high'

container "nf-core/bclconvert:4.4.6"
container "nf-core/bclconvert:4.4.6_1"

input:
tuple val(meta), path(samplesheet), path(run_dir)
Expand All @@ -12,10 +12,10 @@ process BCLCONVERT {
tuple val(meta), path("output/**_S[1-9]*_I?_00?.fastq.gz") , emit: fastq_idx , optional:true
tuple val(meta), path("output/**Undetermined_S0*_R?_00?.fastq.gz"), emit: undetermined , optional:true
tuple val(meta), path("output/**Undetermined_S0*_I?_00?.fastq.gz"), emit: undetermined_idx, optional:true
tuple val(meta), path("output/Reports") , emit: reports
tuple val(meta), path("output/Logs") , emit: logs
tuple val(meta), path("output/InterOp/*.bin") , emit: interop , optional:true
path("versions.yml") , emit: versions
tuple val(meta), path("output/Reports/*") , emit: reports
tuple val(meta), path("output/Logs/*") , emit: logs
tuple val(meta), path("output/InterOp/*.bin") , emit: interop
tuple val("${task.process}"), val('bclconvert'), eval("bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //'"), topic: versions, emit: versions_bclconvert

when:
task.ext.when == null || task.ext.when
Expand Down Expand Up @@ -65,11 +65,6 @@ process BCLCONVERT {
# copy the InterOp folder contents to ensure it gets picked up when using fusion
mkdir -p output/InterOp/
cp -n **/InterOp/*.bin output/InterOp/

cat <<-END_VERSIONS > versions.yml
"${task.process}":
bclconvert: \$(bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //')
END_VERSIONS
"""

stub:
Expand Down Expand Up @@ -102,10 +97,6 @@ process BCLCONVERT {
touch output/InterOp/IndexMetricsOut.bin
touch output/InterOp/QMetricsOut.bin
touch output/InterOp/TileMetricsOut.bin
cat <<-END_VERSIONS > versions.yml
"${task.process}":
bclconvert: \$(bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //')
END_VERSIONS
"""

}
17 changes: 11 additions & 6 deletions modules/nf-core/bclconvert/meta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,18 @@ output:
description: Interop files
pattern: "*.{bin}"
ontologies: []
topics:
versions:
- versions.yml:
type: file
description: File containing software versions
pattern: "versions.yml"
ontologies:
- edam: http://edamontology.org/format_3750 # YAML
- - ${task.process}:
type: string
description: The process the versions were collected from
- bclconvert:
type: string
description: The tool name
- "bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //'":
type: string
description: The command used to generate the version of the tool

authors:
- "@matthdsm"
maintainers:
Expand Down
10 changes: 4 additions & 6 deletions modules/nf-core/bclconvert/tests/main.nf.test
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,11 @@ nextflow_process {
process.out.undetermined.collect { meta, fastq -> file(fastq).name },
process.out.undetermined_idx,
process.out.reports,
process.out.logs.collect { meta, logs -> file(logs).list().sort() },
process.out.logs.collect { meta, logs -> logs.sort() },
process.out.interop.collect { meta, interop ->
interop.findAll { interopfile ->
file(interopfile).name != "IndexMetricsOut.bin" } },
process.out.versions,
path(process.out.versions[0]).yaml
process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
Expand Down Expand Up @@ -76,13 +75,12 @@ nextflow_process {
process.out.undetermined.collect { meta, fastq -> file(fastq).name },
process.out.undetermined_idx,
process.out.reports,
process.out.logs.collect { meta, logs -> file(logs).list().sort() },
process.out.logs.collect { meta, logs -> logs.sort() },
process.out.interop,
process.out.interop.collect { meta, interop ->
interop.findAll { interopfile ->
file(interopfile).name != "IndexMetricsOut.bin" } },
process.out.versions,
path(process.out.versions[0]).yaml
process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
Expand Down
74 changes: 42 additions & 32 deletions modules/nf-core/bclconvert/tests/main.nf.test.snap
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@
],
[
[
"Errors.log",
"FastqComplete.txt",
"Info.log",
"Warnings.log"
"Errors.log:md5,d41d8cd98f00b204e9800998ecf8427e",
"FastqComplete.txt:md5,081aedbb6928d0f348031f9ca49ac468",
"Info.log:md5,bec9273b64edca95b3b53c929dd8fdfc",
"Warnings.log:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
[
Expand Down Expand Up @@ -92,20 +92,21 @@
"TileMetricsOut.bin:md5,21388348d81fa9be326d30ef6d348464"
]
],
[
"versions.yml:md5,a7ddd79ad04a69cb254185a11296f1b6"
],
{
"BCLCONVERT": {
"bclconvert": "4.4.6"
}
"versions_bclconvert": [
[
"BCLCONVERT",
"bclconvert",
"4.4.6"
]
]
}
],
"meta": {
"nf-test": "0.9.2",
"nextflow": "25.04.7"
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
"timestamp": "2025-09-23T10:12:42.943671245"
"timestamp": "2025-12-02T14:58:16.031029"
},
"homo_sapiens illumina [bcl] - stub": {
"content": [
Expand Down Expand Up @@ -188,7 +189,11 @@
]
],
"7": [
"versions.yml:md5,a7ddd79ad04a69cb254185a11296f1b6"
[
"BCLCONVERT",
"bclconvert",
"4.4.6"
]
],
"fastq": [
[
Expand Down Expand Up @@ -267,16 +272,20 @@
"undetermined_idx": [

],
"versions": [
"versions.yml:md5,a7ddd79ad04a69cb254185a11296f1b6"
"versions_bclconvert": [
[
"BCLCONVERT",
"bclconvert",
"4.4.6"
]
]
}
],
"meta": {
"nf-test": "0.9.2",
"nextflow": "25.04.7"
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
"timestamp": "2025-09-23T10:12:55.362214653"
"timestamp": "2025-12-02T14:30:30.75002"
},
"homo_sapiens illumina [bcl]": {
"content": [
Expand Down Expand Up @@ -323,10 +332,10 @@
],
[
[
"Errors.log",
"FastqComplete.txt",
"Info.log",
"Warnings.log"
"Errors.log:md5,d41d8cd98f00b204e9800998ecf8427e",
"FastqComplete.txt:md5,388544f10d63d386a8d20865abf22557",
"Info.log:md5,2f3fa352080124ed5ee62afbdbc999d4",
"Warnings.log:md5,a7ec94ec82336a0e81409fe13b922f4a"
]
],
[
Expand All @@ -339,19 +348,20 @@
"TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c"
]
],
[
"versions.yml:md5,a7ddd79ad04a69cb254185a11296f1b6"
],
{
"BCLCONVERT": {
"bclconvert": "4.4.6"
}
"versions_bclconvert": [
[
"BCLCONVERT",
"bclconvert",
"4.4.6"
]
]
}
],
"meta": {
"nf-test": "0.9.2",
"nextflow": "25.04.7"
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
"timestamp": "2025-09-23T10:12:18.369689549"
"timestamp": "2025-12-02T14:57:47.218447"
}
}
1 change: 0 additions & 1 deletion subworkflows/nf-core/bcl_demultiplex/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ workflow BCL_DEMULTIPLEX {
ch_interop = ch_interop.mix(BCLCONVERT.out.interop)
ch_reports = ch_reports.mix(BCLCONVERT.out.reports)
ch_logs = ch_logs.mix(BCLCONVERT.out.logs)
ch_versions = ch_versions.mix(BCLCONVERT.out.versions.first())
}

// MODULE: bcl2fastq
Expand Down
15 changes: 10 additions & 5 deletions subworkflows/nf-core/bcl_demultiplex/tests/main.nf.test.snap
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,12 @@
"id": "HMTFYDRXX",
"lane": 1
},
"Logs"
[
"Errors.log",
"FastqComplete.txt",
"Info.log",
"Warnings.log"
]
]
],
"reports": [
Expand Down Expand Up @@ -160,15 +165,15 @@

],
"versions": [
"versions.yml:md5,b1427a2b3abad63b04f1dd62c8f40e2e"

]
}
],
"meta": {
"nf-test": "0.9.2",
"nextflow": "25.10.0"
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
"timestamp": "2025-11-04T16:13:41.469897018"
"timestamp": "2025-12-02T14:30:56.578335"
},
"bcl2fastq": {
"content": [
Expand Down
Loading