diff --git a/CHANGELOG.md b/CHANGELOG.md index db92adc..19f30dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to the nf-prov plugin will be documented here. See [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [dev] + +- Add `recordCommandLine` option for BCO and WRROC formats + ## [1.7.0] - 2026-01-05 - Add GEXF renderer (#57) diff --git a/src/main/groovy/nextflow/prov/ProvConfig.groovy b/src/main/groovy/nextflow/prov/ProvConfig.groovy index c86b2c6..472bb84 100644 --- a/src/main/groovy/nextflow/prov/ProvConfig.groovy +++ b/src/main/groovy/nextflow/prov/ProvConfig.groovy @@ -108,9 +108,16 @@ class ProvBcoConfig implements ConfigScope { ''') final boolean overwrite + @ConfigOption + @Description(''' + When `true` records the execution command-line in the usability domain (default: `false`). + ''') + final boolean recordCommandLine + ProvBcoConfig(Map opts) { file = opts.file overwrite = opts.overwrite as boolean + recordCommandLine = opts.recordCommandLine as boolean } } @@ -180,9 +187,16 @@ class ProvWrrocConfig implements ConfigScope { ''') final String license + @ConfigOption + @Description(''' + When `true` records the execution command-line in the action description (default: `false`). + ''') + final boolean recordCommandLine + ProvWrrocConfig(Map opts) { file = opts.file overwrite = opts.overwrite as boolean license = opts.license + recordCommandLine = opts.recordCommandLine as boolean } } diff --git a/src/main/groovy/nextflow/prov/renderers/BcoRenderer.groovy b/src/main/groovy/nextflow/prov/renderers/BcoRenderer.groovy index 2ce00c3..7d68e43 100644 --- a/src/main/groovy/nextflow/prov/renderers/BcoRenderer.groovy +++ b/src/main/groovy/nextflow/prov/renderers/BcoRenderer.groovy @@ -46,12 +46,15 @@ class BcoRenderer implements Renderer { private boolean overwrite + private boolean recordCommandLine + @Delegate private PathNormalizer normalizer BcoRenderer(ProvBcoConfig config) { path = (config.file as Path).complete() overwrite = config.overwrite + recordCommandLine = config.recordCommandLine ProvHelper.checkFileOverwrite(path, overwrite) } @@ -85,6 +88,10 @@ class BcoRenderer implements Renderer { final external_data_endpoints = config.navigate('prov.formats.bco.execution_domain.external_data_endpoints', []) as List> final environment_variables = config.navigate('prov.formats.bco.execution_domain.environment_variables', []) as List + if( recordCommandLine && metadata.commandLine ) { + usability.add(0, "Command-line: " + metadata.commandLine) + } + // create BCO manifest final bco = [ "object_id": null, diff --git a/src/main/groovy/nextflow/prov/renderers/WrrocRenderer.groovy b/src/main/groovy/nextflow/prov/renderers/WrrocRenderer.groovy index 310360d..34fa469 100644 --- a/src/main/groovy/nextflow/prov/renderers/WrrocRenderer.groovy +++ b/src/main/groovy/nextflow/prov/renderers/WrrocRenderer.groovy @@ -57,6 +57,8 @@ class WrrocRenderer implements Renderer { private boolean overwrite + private boolean recordCommandLine + @Delegate private PathNormalizer normalizer @@ -66,6 +68,7 @@ class WrrocRenderer implements Renderer { WrrocRenderer(ProvWrrocConfig config) { path = (config.file as Path).complete() overwrite = config.overwrite + recordCommandLine = config.recordCommandLine ProvHelper.checkFileOverwrite(path, overwrite) } @@ -617,11 +620,12 @@ class WrrocRenderer implements Renderer { "startTime" : dateStarted, "endTime" : dateCompleted ], - [ + withoutNulls([ "@id" : "#${session.uniqueId}", "@type" : "CreateAction", "agent" : agent ? ["@id": agent["@id"]] : null, "name" : "Nextflow workflow run ${session.uniqueId}", + "description": recordCommandLine && metadata.commandLine ? "Command-line: " + metadata.commandLine : null, "startTime" : dateStarted, "endTime" : dateCompleted, "instrument": ["@id": mainScriptId], @@ -630,7 +634,7 @@ class WrrocRenderer implements Renderer { *asReferences(inputFiles), ], "result" : asReferences(outputFiles) - ], + ]), agent, organization, *contactPoints,