diff --git a/bin/conda_versions.py b/bin/conda_versions.py new file mode 100644 index 0000000..92be7d0 --- /dev/null +++ b/bin/conda_versions.py @@ -0,0 +1,37 @@ +"""Scrape versions of conda packages.""" + +from collections import namedtuple +import subprocess + + +try: + import pandas as pd +except ImportError: + pass + + +PackageInfo = namedtuple( + 'PackageInfo', ('Name', 'Version', 'Build', 'Channel')) + + +def scrape_data(as_dataframe=False, include=None): + """Return versions of conda packages in base environment.""" + cmd = """ +. ~/conda/etc/profile.d/mamba.sh; +micromamba activate; +micromamba list; + """ + proc = subprocess.run(cmd, shell=True, check=True, capture_output=True) + versions = dict() + for line in proc.stdout.splitlines()[3:]: + items = line.decode().strip().split() + if len(items) == 3: + # sometimes channel isn't listed :/ + items.append("") + if include is None or items[0] in include: + versions[items[0]] = PackageInfo(*items) + if as_dataframe: + versions = pd.DataFrame.from_records( + list(versions.values()), + columns=PackageInfo._fields) + return versions diff --git a/bin/report.py b/bin/report.py index c8d85c5..259d286 100755 --- a/bin/report.py +++ b/bin/report.py @@ -4,7 +4,8 @@ import argparse from aplanat.components import fastcat -from aplanat.report import HTMLReport +from aplanat.report import WFReport +import conda_versions def main(): @@ -12,29 +13,31 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument("report", help="Report output file") parser.add_argument("summaries", nargs='+', help="Read summary file.") + parser.add_argument( + "--revision", default='unknown', + help="git branch/tag of the executed workflow") + parser.add_argument( + "--commit", default='unknown', + help="git commit of the executed workflow") args = parser.parse_args() - report = HTMLReport( - "Workflow Template Sequencing report", - ("Results generated through the wf-template nextflow " - "workflow by Oxford Nanopore Technologies")) + report = WFReport( + "Workflow Template Sequencing report", "wf-template", + revision=args.revision, commit=args.commit) report.add_section( section=fastcat.full_report(args.summaries)) - report.markdown(''' -### About - -**Oxford Nanopore Technologies products are not intended for use for health -assessment or to diagnose, treat, mitigate, cure or prevent any disease or -condition.** - -This report was produced using the -[epi2me-labs/wf-template](https://github.com/epi2me-labs/wf-template). The -workflow can be run using `nextflow epi2me-labs/wf-template --help` - ---- + section = report.add_section() + section.markdown(''' +### Software versions +The table below highlights versions of key software used within the analysis. ''') + req = [ + 'python', 'aplanat', 'pysam', 'fastcat'] + versions = conda_versions.scrape_data( + as_dataframe=True, include=req) + section.table(versions[['Name', 'Version', 'Build']], index=False) # write report report.write(args.report) diff --git a/environment.yaml b/environment.yaml index 873af7e..9cfcee2 100644 --- a/environment.yaml +++ b/environment.yaml @@ -5,7 +5,7 @@ channels: - conda-forge - defaults dependencies: - - python==3.6.* + - python==3.8.* - aplanat >=0.3.5 - pysam - fastcat