nf-core_modules/modules/custom/dumpsoftwareversions/main.nf
Jose Espinosa-Carrasco 84f2302920
Correct parsing versions with trailing zeros (#795)
* Correct parsing versions with trailing zeros

* Fix test

* Update modules/custom/dumpsoftwareversions/main.nf

Co-authored-by: Harshil Patel <drpatelh@users.noreply.github.com>

* Fix tests and go back to output versions.yml

* Update tests/test_versions_yml.py to use BaseLoader

Co-authored-by: Harshil Patel <drpatelh@users.noreply.github.com>
Co-authored-by: Gregor Sturm <mail@gregor-sturm.de>
2021-10-06 08:16:36 +02:00

106 lines
3.6 KiB
Text

// 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(
'''\\
<style>
#nf-core-versions tbody:nth-child(even) {
background-color: #f2f2f2;
}
</style>
<table class="table" style="width:100%" id="nf-core-versions">
<thead>
<tr>
<th> Process Name </th>
<th> Software </th>
<th> Version </th>
</tr>
</thead>
'''
)
]
for process, tmp_versions in sorted(versions.items()):
html.append("<tbody>")
for i, (tool, version) in enumerate(sorted(tmp_versions.items())):
html.append(
dedent(
f'''\\
<tr>
<td><samp>{process if (i == 0) else ''}</samp></td>
<td><samp>{tool}</samp></td>
<td><samp>{version}</samp></td>
</tr>
'''
)
)
html.append("</tbody>")
html.append("</table>")
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)
"""
}