// Import generic module functions
include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions'
params.options = [:]
options = initOptions(params.options)
process CUSTOM_DUMPSOFTWAREVERSIONS {
label 'process_low'
publishDir "${params.outdir}",
mode: params.publish_dir_mode,
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', meta:[:], publish_by_meta:[]) }
// Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container
conda (params.enable_conda ? "bioconda::multiqc=1.11" : null)
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
container "https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0"
} else {
container "quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0"
}
input:
path versions
output:
path "software_versions.yml" , emit: yml
path "software_versions_mqc.yml", emit: mqc_yml
path "versions.yml" , emit: versions
script:
"""
#!/usr/bin/env python
import yaml
import platform
from textwrap import dedent
def _make_versions_html(versions):
html = [
dedent(
'''\\
Process Name |
Software |
Version |
'''
)
]
for process, tmp_versions in sorted(versions.items()):
html.append("")
for i, (tool, version) in enumerate(sorted(tmp_versions.items())):
html.append(
dedent(
f'''\\
{process if (i == 0) else ''} |
{tool} |
{version} |
'''
)
)
html.append("")
html.append("
")
return "\\n".join(html)
module_versions = {}
module_versions["${getProcessName(task.process)}"] = {
'python': platform.python_version(),
'yaml': yaml.__version__
}
with open("$versions") as f:
workflow_versions = yaml.load(f, Loader=yaml.BaseLoader) | module_versions
workflow_versions["Workflow"] = {
"Nextflow": "$workflow.nextflow.version",
"$workflow.manifest.name": "$workflow.manifest.version"
}
versions_mqc = {
'id': 'software_versions',
'section_name': '${workflow.manifest.name} Software Versions',
'section_href': 'https://github.com/${workflow.manifest.name}',
'plot_type': 'html',
'description': 'are collected at run time from the software output.',
'data': _make_versions_html(workflow_versions)
}
with open("software_versions.yml", 'w') as f:
yaml.dump(workflow_versions, f, default_flow_style=False)
with open("software_versions_mqc.yml", 'w') as f:
yaml.dump(versions_mqc, f, default_flow_style=False)
with open('versions.yml', 'w') as f:
yaml.dump(module_versions, f, default_flow_style=False)
"""
}