// 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( '''\\ ''' ) ] for process, tmp_versions in sorted(versions.items()): html.append("") for i, (tool, version) in enumerate(sorted(tmp_versions.items())): html.append( dedent( f'''\\ ''' ) ) html.append("") html.append("
Process Name Software Version
{process if (i == 0) else ''} {tool} {version}
") 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) """ }