nf-core_modules/modules/custom/dumpsoftwareversions/main.nf
Harshil Patel b2c2d4deb4
Add custom/dumpsoftwareversions modules for nf-core pipeline template (#761)
* Add custom/dumpsoftwareversions modules for nf-core pipeline template

* Remove md5sums due to differing NF versions
2021-09-29 14:27:00 +01:00

105 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_yaml
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)
with open("$versions") as f:
versions = yaml.safe_load(f)
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(versions)
}
with open("software_versions.yml", 'w') as f:
yaml.dump(versions, f, default_flow_style=False)
with open("software_versions_mqc.yml", 'w') as f:
yaml.dump(versions_mqc, f, default_flow_style=False)
yaml_version = {}
yaml_version["${getProcessName(task.process)}"] = {
'python': platform.python_version(),
'yaml': yaml.__version__
}
with open('versions.yml', 'w') as f:
yaml.dump(yaml_version, f, default_flow_style=False)
"""
}