From 5d74ec3308b2f086db7fc968c6b247641792be01 Mon Sep 17 00:00:00 2001 From: CI Date: Thu, 12 Sep 2024 15:52:47 +0000 Subject: [PATCH] Build branch v0.1 with version v0.1.1 (ff28cec) Build pipeline: viash-hub.demultiplex.v0.1-79dfz Source commit: https://github.com/viash-hub/demultiplex/commit/ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add Source message: Merge main and fix conflicts --- _viash.yaml | 4 +- nextflow.config | 2 +- .../interop_summary_to_csv/.config.vsh.yaml | 14 +-- .../interop_summary_to_csv | 104 +++++++++++------- target/executable/io/untar/.config.vsh.yaml | 14 +-- target/executable/io/untar/untar | 104 +++++++++++------- .../dataflow/combine_samples/.config.vsh.yaml | 12 +- .../nextflow/dataflow/combine_samples/main.nf | 70 ++++++++---- .../dataflow/combine_samples/nextflow.config | 2 +- .../combine_samples/nextflow_schema.json | 8 +- .../.config.vsh.yaml | 12 +- .../gather_fastqs_and_validate/main.nf | 70 ++++++++---- .../nextflow.config | 2 +- target/nextflow/demultiplex/.config.vsh.yaml | 12 +- target/nextflow/demultiplex/main.nf | 70 ++++++++---- target/nextflow/demultiplex/nextflow.config | 2 +- .../interop_summary_to_csv/.config.vsh.yaml | 14 +-- .../io/interop_summary_to_csv/main.nf | 91 ++++++++++----- .../io/interop_summary_to_csv/nextflow.config | 2 +- target/nextflow/io/untar/.config.vsh.yaml | 14 +-- target/nextflow/io/untar/main.nf | 91 ++++++++++----- target/nextflow/io/untar/nextflow.config | 2 +- test_resources | 1 + 23 files changed, 459 insertions(+), 258 deletions(-) create mode 120000 test_resources diff --git a/_viash.yaml b/_viash.yaml index 24b920c..523fcb6 100644 --- a/_viash.yaml +++ b/_viash.yaml @@ -1,5 +1,5 @@ name: demultiplex -version: v0.1.0 +version: v0.1.1 description: | Demultiplexing pipeline license: MIT @@ -12,7 +12,7 @@ info: - path: https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz dest: test_resources -viash_version: 0.9.0-RC6 +viash_version: 0.9.0 config_mods: | .requirements.commands := ['ps'] diff --git a/nextflow.config b/nextflow.config index 137d6e2..ade3a48 100644 --- a/nextflow.config +++ b/nextflow.config @@ -1,6 +1,6 @@ manifest { name = "demultiplex" - version = "v0.1.0" + version = "v0.1.1" defaultBranch = "main" nextflowVersion = "!>=20.12.1-edge" } diff --git a/target/executable/io/interop_summary_to_csv/.config.vsh.yaml b/target/executable/io/interop_summary_to_csv/.config.vsh.yaml index 42f3b90..4069227 100644 --- a/target/executable/io/interop_summary_to_csv/.config.vsh.yaml +++ b/target/executable/io/interop_summary_to_csv/.config.vsh.yaml @@ -1,6 +1,6 @@ name: "interop_summary_to_csv" namespace: "io" -version: "v0.1.0" +version: "v0.1.1" argument_groups: - name: "Input arguments" arguments: @@ -116,7 +116,7 @@ engines: id: "docker" image: "debian:stable-slim" target_registry: "images.viash-hub.com" - target_tag: "v0.1.0" + target_tag: "v0.1.1" namespace_separator: "/" setup: - type: "apt" @@ -140,25 +140,25 @@ build_info: engine: "docker|native" output: "target/executable/io/interop_summary_to_csv" executable: "target/executable/io/interop_summary_to_csv/interop_summary_to_csv" - viash_version: "0.9.0-RC6" - git_commit: "3d229bef584233f228330ff881dad685b92bf1e1" + viash_version: "0.9.0" + git_commit: "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add" git_remote: "https://github.com/viash-hub/demultiplex" package_config: name: "demultiplex" - version: "v0.1.0" + version: "v0.1.1" description: "Demultiplexing pipeline\n" info: test_resources: - path: "https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz" dest: "test_resources" - viash_version: "0.9.0-RC6" + viash_version: "0.9.0" source: "src" target: "target" config_mods: - ".requirements.commands := ['ps']\n" - ".engines += { type: \"native\" }" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + - ".engines[.type == 'docker'].target_tag := 'v0.1.1'" keywords: - "bioinformatics" - "sequence" diff --git a/target/executable/io/interop_summary_to_csv/interop_summary_to_csv b/target/executable/io/interop_summary_to_csv/interop_summary_to_csv index 458947f..3ab3b4b 100755 --- a/target/executable/io/interop_summary_to_csv/interop_summary_to_csv +++ b/target/executable/io/interop_summary_to_csv/interop_summary_to_csv @@ -1,10 +1,10 @@ #!/usr/bin/env bash -# interop_summary_to_csv v0.1.0 +# interop_summary_to_csv v0.1.1 # -# This wrapper script is auto-generated by viash 0.9.0-RC6 and is thus a -# derivative work thereof. This software comes with ABSOLUTELY NO WARRANTY from -# Data Intuitive. +# This wrapper script is auto-generated by viash 0.9.0 and is thus a derivative +# work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data +# Intuitive. # # The component may contain files which fall under a different license. The # authors of this component should specify the license in the header of such @@ -54,24 +54,24 @@ function ViashRemoveFlags { # $1 : Should always be set to ${BASH_SOURCE[0]} # returns : The absolute path of the bash file function ViashSourceDir { - SOURCE="$1" - while [ -h "$SOURCE" ]; do - DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )" - SOURCE="$(readlink "$SOURCE")" - [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" + local source="$1" + while [ -h "$source" ]; do + local dir="$( cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd )" + source="$(readlink "$source")" + [[ $source != /* ]] && source="$dir/$source" done - cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd + cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd } # ViashFindTargetDir: return the path of the '.build.yaml' file, following symlinks # usage : ViashFindTargetDir 'ScriptPath' # $1 : The location from where to start the upward search # returns : The absolute path of the '.build.yaml' file function ViashFindTargetDir { - SOURCE="$1" - while [[ "$SOURCE" != "" && ! -e "$SOURCE/.build.yaml" ]]; do - SOURCE=${SOURCE%/*} + local source="$1" + while [[ "$source" != "" && ! -e "$source/.build.yaml" ]]; do + source=${source%/*} done - echo $SOURCE + echo $source } # see https://en.wikipedia.org/wiki/Syslog#Severity_level VIASH_LOGCODE_EMERGENCY=0 @@ -171,7 +171,7 @@ VIASH_META_TEMP_DIR="$VIASH_TEMP" # ViashHelp: Display helpful explanation about this executable function ViashHelp { - echo "interop_summary_to_csv v0.1.0" + echo "interop_summary_to_csv v0.1.1" echo "" echo "Input arguments:" echo " --input" @@ -205,9 +205,9 @@ function ViashDockerInstallationCheck { fi ViashDebug "Checking whether the Docker daemon is running" - save=$-; set +e - docker_version=$(docker version --format '{{.Client.APIVersion}}' 2> /dev/null) - out=$? + local save=$-; set +e + local docker_version=$(docker version --format '{{.Client.APIVersion}}' 2> /dev/null) + local out=$? [[ $save =~ e ]] && set -e if [ $out -ne 0 ]; then ViashCritical "Docker daemon does not seem to be running. Try one of the following:" @@ -259,9 +259,9 @@ function ViashDockerPull { if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then docker pull $1 && return 0 || return 1 else - save=$-; set +e + local save=$-; set +e docker pull $1 2> /dev/null > /dev/null - out=$? + local out=$? [[ $save =~ e ]] && set -e if [ $out -ne 0 ]; then ViashWarning "Could not pull from '$1'. Docker image doesn't exist or is not accessible." @@ -281,7 +281,8 @@ function ViashDockerPull { # echo $? # returns '1' function ViashDockerPush { ViashNotice "Pushing image to '$1'" - save=$-; set +e + local save=$-; set +e + local out if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then docker push $1 out=$? @@ -305,9 +306,9 @@ function ViashDockerPush { # examples: # ViashDockerPullElseBuild mynewcomponent function ViashDockerPullElseBuild { - save=$-; set +e + local save=$-; set +e ViashDockerPull $1 - out=$? + local out=$? [[ $save =~ e ]] && set -e if [ $out -ne 0 ]; then ViashDockerBuild $@ @@ -469,10 +470,10 @@ tar -C /tmp/ --no-same-owner --no-same-permissions -xvf /tmp/interop.tar.gz && \ mv /tmp/interop-1.3.1-Linux-GNU/bin/index-summary /tmp/interop-1.3.1-Linux-GNU/bin/summary /usr/local/bin/ LABEL org.opencontainers.image.description="Companion container for running component io interop_summary_to_csv" -LABEL org.opencontainers.image.created="2024-06-24T12:57:03Z" +LABEL org.opencontainers.image.created="2024-09-12T15:46:50Z" LABEL org.opencontainers.image.source="https://github.com/viash-hub/demultiplex" -LABEL org.opencontainers.image.revision="3d229bef584233f228330ff881dad685b92bf1e1" -LABEL org.opencontainers.image.version="v0.1.0" +LABEL org.opencontainers.image.revision="ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add" +LABEL org.opencontainers.image.version="v0.1.1" VIASHDOCKER fi @@ -498,6 +499,9 @@ function ViashDockerBuildArgs { # ViashAbsolutePath /foo/bar/.. # returns /foo function ViashAbsolutePath { local thePath + local parr + local outp + local len if [[ ! "$1" =~ ^/ ]]; then thePath="$PWD/$1" else @@ -528,14 +532,17 @@ function ViashAbsolutePath { ) } # ViashDockerAutodetectMount: auto configuring docker mounts from parameters -# $1 : The parameter value -# returns : New parameter -# $VIASH_DIRECTORY_MOUNTS : Added another parameter to be passed to docker +# $1 : The parameter value +# returns : New parameter +# $VIASH_DIRECTORY_MOUNTS : Added another parameter to be passed to docker +# $VIASH_DOCKER_AUTOMOUNT_PREFIX : The prefix to be used for the automounts # examples: # ViashDockerAutodetectMount /path/to/bar # returns '/viash_automount/path/to/bar' # ViashDockerAutodetectMountArg /path/to/bar # returns '--volume="/path/to:/viash_automount/path/to"' function ViashDockerAutodetectMount { - abs_path=$(ViashAbsolutePath "$1") + local abs_path=$(ViashAbsolutePath "$1") + local mount_source + local base_name if [ -d "$abs_path" ]; then mount_source="$abs_path" base_name="" @@ -543,7 +550,7 @@ function ViashDockerAutodetectMount { mount_source=`dirname "$abs_path"` base_name=`basename "$abs_path"` fi - mount_target="/viash_automount$mount_source" + local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source" if [ -z "$base_name" ]; then echo "$mount_target" else @@ -551,7 +558,9 @@ function ViashDockerAutodetectMount { fi } function ViashDockerAutodetectMountArg { - abs_path=$(ViashAbsolutePath "$1") + local abs_path=$(ViashAbsolutePath "$1") + local mount_source + local base_name if [ -d "$abs_path" ]; then mount_source="$abs_path" base_name="" @@ -559,17 +568,22 @@ function ViashDockerAutodetectMountArg { mount_source=`dirname "$abs_path"` base_name=`basename "$abs_path"` fi - mount_target="/viash_automount$mount_source" + local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source" ViashDebug "ViashDockerAutodetectMountArg $1 -> $mount_source -> $mount_target" echo "--volume=\"$mount_source:$mount_target\"" } function ViashDockerStripAutomount { - abs_path=$(ViashAbsolutePath "$1") - echo "${abs_path#/viash_automount}" + local abs_path=$(ViashAbsolutePath "$1") + echo "${abs_path#$VIASH_DOCKER_AUTOMOUNT_PREFIX}" } # initialise variables VIASH_DIRECTORY_MOUNTS=() +# configure default docker automount prefix if it is unset +if [ -z "${VIASH_DOCKER_AUTOMOUNT_PREFIX+x}" ]; then + VIASH_DOCKER_AUTOMOUNT_PREFIX="/viash_automount" +fi + # initialise docker variables VIASH_DOCKER_RUN_ARGS=(-i --rm) @@ -595,7 +609,7 @@ while [[ $# -gt 0 ]]; do shift 1 ;; --version) - echo "interop_summary_to_csv v0.1.0" + echo "interop_summary_to_csv v0.1.1" exit ;; --input) @@ -653,6 +667,18 @@ while [[ $# -gt 0 ]]; do VIASH_MODE='dockerfile' shift 1 ;; + ---docker_run_args) + VIASH_DOCKER_RUN_ARGS+=("$2") + shift 2 + ;; + ---docker_run_args=*) + VIASH_DOCKER_RUN_ARGS+=("$(ViashRemoveFlags "$1")") + shift 1 + ;; + ---docker_image_id) + VIASH_MODE='docker_image_id' + shift 1 + ;; ---debug) VIASH_MODE='debug' shift 1 @@ -707,13 +733,17 @@ if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then # determine docker image id if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then - VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/demultiplex/io/interop_summary_to_csv:v0.1.0' + VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/demultiplex/io/interop_summary_to_csv:v0.1.1' fi # print dockerfile if [ "$VIASH_MODE" == "dockerfile" ]; then ViashDockerfile "$VIASH_ENGINE_ID" exit 0 + + elif [ "$VIASH_MODE" == "docker_image_id" ]; then + echo "$VIASH_DOCKER_IMAGE_ID" + exit 0 # enter docker container elif [[ "$VIASH_MODE" == "debug" ]]; then diff --git a/target/executable/io/untar/.config.vsh.yaml b/target/executable/io/untar/.config.vsh.yaml index e2de2ca..5394451 100644 --- a/target/executable/io/untar/.config.vsh.yaml +++ b/target/executable/io/untar/.config.vsh.yaml @@ -1,6 +1,6 @@ name: "untar" namespace: "io" -version: "v0.1.0" +version: "v0.1.1" argument_groups: - name: "Input arguments" arguments: @@ -130,7 +130,7 @@ engines: id: "docker" image: "debian:stable-slim" target_registry: "images.viash-hub.com" - target_tag: "v0.1.0" + target_tag: "v0.1.1" namespace_separator: "/" setup: - type: "apt" @@ -147,25 +147,25 @@ build_info: engine: "docker|native" output: "target/executable/io/untar" executable: "target/executable/io/untar/untar" - viash_version: "0.9.0-RC6" - git_commit: "3d229bef584233f228330ff881dad685b92bf1e1" + viash_version: "0.9.0" + git_commit: "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add" git_remote: "https://github.com/viash-hub/demultiplex" package_config: name: "demultiplex" - version: "v0.1.0" + version: "v0.1.1" description: "Demultiplexing pipeline\n" info: test_resources: - path: "https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz" dest: "test_resources" - viash_version: "0.9.0-RC6" + viash_version: "0.9.0" source: "src" target: "target" config_mods: - ".requirements.commands := ['ps']\n" - ".engines += { type: \"native\" }" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + - ".engines[.type == 'docker'].target_tag := 'v0.1.1'" keywords: - "bioinformatics" - "sequence" diff --git a/target/executable/io/untar/untar b/target/executable/io/untar/untar index 4db2d58..92877e4 100755 --- a/target/executable/io/untar/untar +++ b/target/executable/io/untar/untar @@ -1,10 +1,10 @@ #!/usr/bin/env bash -# untar v0.1.0 +# untar v0.1.1 # -# This wrapper script is auto-generated by viash 0.9.0-RC6 and is thus a -# derivative work thereof. This software comes with ABSOLUTELY NO WARRANTY from -# Data Intuitive. +# This wrapper script is auto-generated by viash 0.9.0 and is thus a derivative +# work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data +# Intuitive. # # The component may contain files which fall under a different license. The # authors of this component should specify the license in the header of such @@ -54,24 +54,24 @@ function ViashRemoveFlags { # $1 : Should always be set to ${BASH_SOURCE[0]} # returns : The absolute path of the bash file function ViashSourceDir { - SOURCE="$1" - while [ -h "$SOURCE" ]; do - DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )" - SOURCE="$(readlink "$SOURCE")" - [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" + local source="$1" + while [ -h "$source" ]; do + local dir="$( cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd )" + source="$(readlink "$source")" + [[ $source != /* ]] && source="$dir/$source" done - cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd + cd -P "$( dirname "$source" )" >/dev/null 2>&1 && pwd } # ViashFindTargetDir: return the path of the '.build.yaml' file, following symlinks # usage : ViashFindTargetDir 'ScriptPath' # $1 : The location from where to start the upward search # returns : The absolute path of the '.build.yaml' file function ViashFindTargetDir { - SOURCE="$1" - while [[ "$SOURCE" != "" && ! -e "$SOURCE/.build.yaml" ]]; do - SOURCE=${SOURCE%/*} + local source="$1" + while [[ "$source" != "" && ! -e "$source/.build.yaml" ]]; do + source=${source%/*} done - echo $SOURCE + echo $source } # see https://en.wikipedia.org/wiki/Syslog#Severity_level VIASH_LOGCODE_EMERGENCY=0 @@ -171,7 +171,7 @@ VIASH_META_TEMP_DIR="$VIASH_TEMP" # ViashHelp: Display helpful explanation about this executable function ViashHelp { - echo "untar v0.1.0" + echo "untar v0.1.1" echo "" echo "Unpack a .tar file. When the contents of the .tar file is just a single" echo "directory," @@ -215,9 +215,9 @@ function ViashDockerInstallationCheck { fi ViashDebug "Checking whether the Docker daemon is running" - save=$-; set +e - docker_version=$(docker version --format '{{.Client.APIVersion}}' 2> /dev/null) - out=$? + local save=$-; set +e + local docker_version=$(docker version --format '{{.Client.APIVersion}}' 2> /dev/null) + local out=$? [[ $save =~ e ]] && set -e if [ $out -ne 0 ]; then ViashCritical "Docker daemon does not seem to be running. Try one of the following:" @@ -269,9 +269,9 @@ function ViashDockerPull { if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then docker pull $1 && return 0 || return 1 else - save=$-; set +e + local save=$-; set +e docker pull $1 2> /dev/null > /dev/null - out=$? + local out=$? [[ $save =~ e ]] && set -e if [ $out -ne 0 ]; then ViashWarning "Could not pull from '$1'. Docker image doesn't exist or is not accessible." @@ -291,7 +291,8 @@ function ViashDockerPull { # echo $? # returns '1' function ViashDockerPush { ViashNotice "Pushing image to '$1'" - save=$-; set +e + local save=$-; set +e + local out if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then docker push $1 out=$? @@ -315,9 +316,9 @@ function ViashDockerPush { # examples: # ViashDockerPullElseBuild mynewcomponent function ViashDockerPullElseBuild { - save=$-; set +e + local save=$-; set +e ViashDockerPull $1 - out=$? + local out=$? [[ $save =~ e ]] && set -e if [ $out -ne 0 ]; then ViashDockerBuild $@ @@ -475,10 +476,10 @@ RUN apt-get update && \ rm -rf /var/lib/apt/lists/* LABEL org.opencontainers.image.description="Companion container for running component io untar" -LABEL org.opencontainers.image.created="2024-06-24T12:57:03Z" +LABEL org.opencontainers.image.created="2024-09-12T15:46:50Z" LABEL org.opencontainers.image.source="https://github.com/viash-hub/demultiplex" -LABEL org.opencontainers.image.revision="3d229bef584233f228330ff881dad685b92bf1e1" -LABEL org.opencontainers.image.version="v0.1.0" +LABEL org.opencontainers.image.revision="ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add" +LABEL org.opencontainers.image.version="v0.1.1" VIASHDOCKER fi @@ -504,6 +505,9 @@ function ViashDockerBuildArgs { # ViashAbsolutePath /foo/bar/.. # returns /foo function ViashAbsolutePath { local thePath + local parr + local outp + local len if [[ ! "$1" =~ ^/ ]]; then thePath="$PWD/$1" else @@ -534,14 +538,17 @@ function ViashAbsolutePath { ) } # ViashDockerAutodetectMount: auto configuring docker mounts from parameters -# $1 : The parameter value -# returns : New parameter -# $VIASH_DIRECTORY_MOUNTS : Added another parameter to be passed to docker +# $1 : The parameter value +# returns : New parameter +# $VIASH_DIRECTORY_MOUNTS : Added another parameter to be passed to docker +# $VIASH_DOCKER_AUTOMOUNT_PREFIX : The prefix to be used for the automounts # examples: # ViashDockerAutodetectMount /path/to/bar # returns '/viash_automount/path/to/bar' # ViashDockerAutodetectMountArg /path/to/bar # returns '--volume="/path/to:/viash_automount/path/to"' function ViashDockerAutodetectMount { - abs_path=$(ViashAbsolutePath "$1") + local abs_path=$(ViashAbsolutePath "$1") + local mount_source + local base_name if [ -d "$abs_path" ]; then mount_source="$abs_path" base_name="" @@ -549,7 +556,7 @@ function ViashDockerAutodetectMount { mount_source=`dirname "$abs_path"` base_name=`basename "$abs_path"` fi - mount_target="/viash_automount$mount_source" + local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source" if [ -z "$base_name" ]; then echo "$mount_target" else @@ -557,7 +564,9 @@ function ViashDockerAutodetectMount { fi } function ViashDockerAutodetectMountArg { - abs_path=$(ViashAbsolutePath "$1") + local abs_path=$(ViashAbsolutePath "$1") + local mount_source + local base_name if [ -d "$abs_path" ]; then mount_source="$abs_path" base_name="" @@ -565,17 +574,22 @@ function ViashDockerAutodetectMountArg { mount_source=`dirname "$abs_path"` base_name=`basename "$abs_path"` fi - mount_target="/viash_automount$mount_source" + local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source" ViashDebug "ViashDockerAutodetectMountArg $1 -> $mount_source -> $mount_target" echo "--volume=\"$mount_source:$mount_target\"" } function ViashDockerStripAutomount { - abs_path=$(ViashAbsolutePath "$1") - echo "${abs_path#/viash_automount}" + local abs_path=$(ViashAbsolutePath "$1") + echo "${abs_path#$VIASH_DOCKER_AUTOMOUNT_PREFIX}" } # initialise variables VIASH_DIRECTORY_MOUNTS=() +# configure default docker automount prefix if it is unset +if [ -z "${VIASH_DOCKER_AUTOMOUNT_PREFIX+x}" ]; then + VIASH_DOCKER_AUTOMOUNT_PREFIX="/viash_automount" +fi + # initialise docker variables VIASH_DOCKER_RUN_ARGS=(-i --rm) @@ -601,7 +615,7 @@ while [[ $# -gt 0 ]]; do shift 1 ;; --version) - echo "untar v0.1.0" + echo "untar v0.1.1" exit ;; --input) @@ -665,6 +679,18 @@ while [[ $# -gt 0 ]]; do VIASH_MODE='dockerfile' shift 1 ;; + ---docker_run_args) + VIASH_DOCKER_RUN_ARGS+=("$2") + shift 2 + ;; + ---docker_run_args=*) + VIASH_DOCKER_RUN_ARGS+=("$(ViashRemoveFlags "$1")") + shift 1 + ;; + ---docker_image_id) + VIASH_MODE='docker_image_id' + shift 1 + ;; ---debug) VIASH_MODE='debug' shift 1 @@ -719,13 +745,17 @@ if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then # determine docker image id if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then - VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/demultiplex/io/untar:v0.1.0' + VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/demultiplex/io/untar:v0.1.1' fi # print dockerfile if [ "$VIASH_MODE" == "dockerfile" ]; then ViashDockerfile "$VIASH_ENGINE_ID" exit 0 + + elif [ "$VIASH_MODE" == "docker_image_id" ]; then + echo "$VIASH_DOCKER_IMAGE_ID" + exit 0 # enter docker container elif [[ "$VIASH_MODE" == "debug" ]]; then diff --git a/target/nextflow/dataflow/combine_samples/.config.vsh.yaml b/target/nextflow/dataflow/combine_samples/.config.vsh.yaml index e511a40..d424b5c 100644 --- a/target/nextflow/dataflow/combine_samples/.config.vsh.yaml +++ b/target/nextflow/dataflow/combine_samples/.config.vsh.yaml @@ -1,6 +1,6 @@ name: "combine_samples" namespace: "dataflow" -version: "v0.1.0" +version: "v0.1.1" argument_groups: - name: "Input arguments" arguments: @@ -138,25 +138,25 @@ build_info: engine: "native|native" output: "target/nextflow/dataflow/combine_samples" executable: "target/nextflow/dataflow/combine_samples/main.nf" - viash_version: "0.9.0-RC6" - git_commit: "3d229bef584233f228330ff881dad685b92bf1e1" + viash_version: "0.9.0" + git_commit: "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add" git_remote: "https://github.com/viash-hub/demultiplex" package_config: name: "demultiplex" - version: "v0.1.0" + version: "v0.1.1" description: "Demultiplexing pipeline\n" info: test_resources: - path: "https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz" dest: "test_resources" - viash_version: "0.9.0-RC6" + viash_version: "0.9.0" source: "src" target: "target" config_mods: - ".requirements.commands := ['ps']\n" - ".engines += { type: \"native\" }" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + - ".engines[.type == 'docker'].target_tag := 'v0.1.1'" keywords: - "bioinformatics" - "sequence" diff --git a/target/nextflow/dataflow/combine_samples/main.nf b/target/nextflow/dataflow/combine_samples/main.nf index 76581c9..dc6b51e 100644 --- a/target/nextflow/dataflow/combine_samples/main.nf +++ b/target/nextflow/dataflow/combine_samples/main.nf @@ -1,8 +1,8 @@ -// combine_samples v0.1.0 +// combine_samples v0.1.1 // -// This wrapper script is auto-generated by viash 0.9.0-RC6 and is thus a -// derivative work thereof. This software comes with ABSOLUTELY NO WARRANTY from -// Data Intuitive. +// This wrapper script is auto-generated by viash 0.9.0 and is thus a derivative +// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data +// Intuitive. // // The component may contain files which fall under a different license. The // authors of this component should specify the license in the header of such @@ -760,8 +760,11 @@ def runEach(Map args) { def fromState_ = args.fromState def toState_ = args.toState def filter_ = args.filter + def runIf_ = args.runIf def id_ = args.id + assert !runIf_ || runIf_ instanceof Closure: "runEach: must pass a Closure to runIf." + workflow runEachWf { take: input_ch main: @@ -783,7 +786,20 @@ def runEach(Map args) { [new_id] + tup.drop(1) } : filter_ch - def data_ch = id_ch | map{tup -> + def chPassthrough = null + def chRun = null + if (runIf_) { + def idRunIfBranch = id_ch.branch{ tup -> + run: runIf_(tup[0], tup[1], comp_) + passthrough: true + } + chPassthrough = idRunIfBranch.passthrough + chRun = idRunIfBranch.run + } else { + chRun = id_ch + chPassthrough = Channel.empty() + } + def data_ch = chRun | map{tup -> def new_data = tup[1] if (fromState_ instanceof Map) { new_data = fromState_.collectEntries{ key0, key1 -> @@ -821,8 +837,11 @@ def runEach(Map args) { [tup[0], new_state] + tup.drop(3) } : out_ch + + def return_ch = post_ch + | concat(chPassthrough) - post_ch + return_ch } // mix all results @@ -1598,8 +1617,8 @@ def findStates(Map params, Map config) { // construct renameMap if (args.rename_keys) { def renameMap = args.rename_keys.collectEntries{renameString -> - def split = renameString.split(";") - assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey,newKey:oldKey'" + def split = renameString.split(":") + assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey', or 'newKey:oldKey;newKey:oldKey' in case of multiple values" split } @@ -1709,7 +1728,9 @@ def publishStates(Map args) { def yamlFilename = yamlTemplate_ .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) // TODO: do the pathnames in state_ match up with the outputFilenames_? @@ -1780,7 +1801,9 @@ def publishStatesByConfig(Map args) { def yamlTemplate = params.containsKey("output_state") ? params.output_state : '$id.$key.state.yaml' def yamlFilename = yamlTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) def yamlDir = java.nio.file.Paths.get(yamlFilename).getParent() // the processed state is a list of [key, value, inputPath, outputFilename] tuples, where @@ -1822,7 +1845,9 @@ def publishStatesByConfig(Map args) { // instantiate the template def filename = filenameTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) if (par.multiple) { // if the parameter is multiple: true, the filename // should contain a wildcard '*' that is replaced with @@ -2626,30 +2651,31 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { tuple } - def chModifiedFiltered = workflowArgs.filter ? - chModified | filter{workflowArgs.filter(it)} : - chModified def chRun = null def chPassthrough = null if (workflowArgs.runIf) { - def runIfBranch = chModifiedFiltered.branch{ tup -> + def runIfBranch = chModified.branch{ tup -> run: workflowArgs.runIf(tup[0], tup[1]) passthrough: true } chRun = runIfBranch.run chPassthrough = runIfBranch.passthrough } else { - chRun = chModifiedFiltered + chRun = chModified chPassthrough = Channel.empty() } + def chRunFiltered = workflowArgs.filter ? + chRun | filter{workflowArgs.filter(it)} : + chRun + def chArgs = workflowArgs.fromState ? - chRun | map{ + chRunFiltered | map{ def new_data = workflowArgs.fromState(it.take(2)) [it[0], new_data] } : - chRun | map {tup -> tup.take(2)} + chRunFiltered | map {tup -> tup.take(2)} // fill in defaults def chArgsWithDefaults = chArgs @@ -2720,7 +2746,7 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { // | view{"chInitialOutput: ${it.take(3)}"} // join the output [prev_id, new_id, output] with the previous state [prev_id, state, ...] - def chNewState = safeJoin(chInitialOutput, chModifiedFiltered, key_) + def chNewState = safeJoin(chInitialOutput, chRunFiltered, key_) // input tuple format: [join_id, id, output, prev_state, ...] // output tuple format: [join_id, id, new_state, ...] | map{ tup -> @@ -2780,7 +2806,7 @@ meta = [ "config": processConfig(readJsonBlob('''{ "name" : "combine_samples", "namespace" : "dataflow", - "version" : "v0.1.0", + "version" : "v0.1.1", "argument_groups" : [ { "name" : "Input arguments", @@ -2945,13 +2971,13 @@ meta = [ "runner" : "nextflow", "engine" : "native|native", "output" : "target/nextflow/dataflow/combine_samples", - "viash_version" : "0.9.0-RC6", - "git_commit" : "3d229bef584233f228330ff881dad685b92bf1e1", + "viash_version" : "0.9.0", + "git_commit" : "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add", "git_remote" : "https://github.com/viash-hub/demultiplex" }, "package_config" : { "name" : "demultiplex", - "version" : "v0.1.0", + "version" : "v0.1.1", "description" : "Demultiplexing pipeline\n", "info" : { "test_resources" : [ @@ -2961,14 +2987,14 @@ meta = [ } ] }, - "viash_version" : "0.9.0-RC6", + "viash_version" : "0.9.0", "source" : "src", "target" : "target", "config_mods" : [ ".requirements.commands := ['ps']\n", ".engines += { type: \\"native\\" }", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + ".engines[.type == 'docker'].target_tag := 'v0.1.1'" ], "keywords" : [ "bioinformatics", diff --git a/target/nextflow/dataflow/combine_samples/nextflow.config b/target/nextflow/dataflow/combine_samples/nextflow.config index 9b2304b..0c1afc1 100644 --- a/target/nextflow/dataflow/combine_samples/nextflow.config +++ b/target/nextflow/dataflow/combine_samples/nextflow.config @@ -2,7 +2,7 @@ manifest { name = 'dataflow/combine_samples' mainScript = 'main.nf' nextflowVersion = '!>=20.12.1-edge' - version = 'v0.1.0' + version = 'v0.1.1' description = 'Combine fastq files from across samples into one event with a list of fastq files per orientation.' } diff --git a/target/nextflow/dataflow/combine_samples/nextflow_schema.json b/target/nextflow/dataflow/combine_samples/nextflow_schema.json index a927314..245efb4 100644 --- a/target/nextflow/dataflow/combine_samples/nextflow_schema.json +++ b/target/nextflow/dataflow/combine_samples/nextflow_schema.json @@ -57,8 +57,8 @@ "output_forward": { "type": "string", - "description": "Type: List of `file`, required, default: `$id.$key.output_forward_*.output_forward_*`, multiple_sep: `\":\"`. ", - "help_text": "Type: List of `file`, required, default: `$id.$key.output_forward_*.output_forward_*`, multiple_sep: `\":\"`. " + "description": "Type: List of `file`, required, default: `$id.$key.output_forward_*.output_forward_*`, multiple_sep: `\";\"`. ", + "help_text": "Type: List of `file`, required, default: `$id.$key.output_forward_*.output_forward_*`, multiple_sep: `\";\"`. " , "default": "$id.$key.output_forward_*.output_forward_*" } @@ -68,8 +68,8 @@ "output_reverse": { "type": "string", - "description": "Type: List of `file`, default: `$id.$key.output_reverse_*.output_reverse_*`, multiple_sep: `\":\"`. ", - "help_text": "Type: List of `file`, default: `$id.$key.output_reverse_*.output_reverse_*`, multiple_sep: `\":\"`. " + "description": "Type: List of `file`, default: `$id.$key.output_reverse_*.output_reverse_*`, multiple_sep: `\";\"`. ", + "help_text": "Type: List of `file`, default: `$id.$key.output_reverse_*.output_reverse_*`, multiple_sep: `\";\"`. " , "default": "$id.$key.output_reverse_*.output_reverse_*" } diff --git a/target/nextflow/dataflow/gather_fastqs_and_validate/.config.vsh.yaml b/target/nextflow/dataflow/gather_fastqs_and_validate/.config.vsh.yaml index 6574b49..df6678b 100644 --- a/target/nextflow/dataflow/gather_fastqs_and_validate/.config.vsh.yaml +++ b/target/nextflow/dataflow/gather_fastqs_and_validate/.config.vsh.yaml @@ -1,6 +1,6 @@ name: "gather_fastqs_and_validate" namespace: "dataflow" -version: "v0.1.0" +version: "v0.1.1" argument_groups: - name: "Input arguments" arguments: @@ -132,25 +132,25 @@ build_info: engine: "native|native" output: "target/nextflow/dataflow/gather_fastqs_and_validate" executable: "target/nextflow/dataflow/gather_fastqs_and_validate/main.nf" - viash_version: "0.9.0-RC6" - git_commit: "3d229bef584233f228330ff881dad685b92bf1e1" + viash_version: "0.9.0" + git_commit: "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add" git_remote: "https://github.com/viash-hub/demultiplex" package_config: name: "demultiplex" - version: "v0.1.0" + version: "v0.1.1" description: "Demultiplexing pipeline\n" info: test_resources: - path: "https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz" dest: "test_resources" - viash_version: "0.9.0-RC6" + viash_version: "0.9.0" source: "src" target: "target" config_mods: - ".requirements.commands := ['ps']\n" - ".engines += { type: \"native\" }" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + - ".engines[.type == 'docker'].target_tag := 'v0.1.1'" keywords: - "bioinformatics" - "sequence" diff --git a/target/nextflow/dataflow/gather_fastqs_and_validate/main.nf b/target/nextflow/dataflow/gather_fastqs_and_validate/main.nf index 21d740f..6246895 100644 --- a/target/nextflow/dataflow/gather_fastqs_and_validate/main.nf +++ b/target/nextflow/dataflow/gather_fastqs_and_validate/main.nf @@ -1,8 +1,8 @@ -// gather_fastqs_and_validate v0.1.0 +// gather_fastqs_and_validate v0.1.1 // -// This wrapper script is auto-generated by viash 0.9.0-RC6 and is thus a -// derivative work thereof. This software comes with ABSOLUTELY NO WARRANTY from -// Data Intuitive. +// This wrapper script is auto-generated by viash 0.9.0 and is thus a derivative +// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data +// Intuitive. // // The component may contain files which fall under a different license. The // authors of this component should specify the license in the header of such @@ -760,8 +760,11 @@ def runEach(Map args) { def fromState_ = args.fromState def toState_ = args.toState def filter_ = args.filter + def runIf_ = args.runIf def id_ = args.id + assert !runIf_ || runIf_ instanceof Closure: "runEach: must pass a Closure to runIf." + workflow runEachWf { take: input_ch main: @@ -783,7 +786,20 @@ def runEach(Map args) { [new_id] + tup.drop(1) } : filter_ch - def data_ch = id_ch | map{tup -> + def chPassthrough = null + def chRun = null + if (runIf_) { + def idRunIfBranch = id_ch.branch{ tup -> + run: runIf_(tup[0], tup[1], comp_) + passthrough: true + } + chPassthrough = idRunIfBranch.passthrough + chRun = idRunIfBranch.run + } else { + chRun = id_ch + chPassthrough = Channel.empty() + } + def data_ch = chRun | map{tup -> def new_data = tup[1] if (fromState_ instanceof Map) { new_data = fromState_.collectEntries{ key0, key1 -> @@ -821,8 +837,11 @@ def runEach(Map args) { [tup[0], new_state] + tup.drop(3) } : out_ch + + def return_ch = post_ch + | concat(chPassthrough) - post_ch + return_ch } // mix all results @@ -1598,8 +1617,8 @@ def findStates(Map params, Map config) { // construct renameMap if (args.rename_keys) { def renameMap = args.rename_keys.collectEntries{renameString -> - def split = renameString.split(";") - assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey,newKey:oldKey'" + def split = renameString.split(":") + assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey', or 'newKey:oldKey;newKey:oldKey' in case of multiple values" split } @@ -1709,7 +1728,9 @@ def publishStates(Map args) { def yamlFilename = yamlTemplate_ .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) // TODO: do the pathnames in state_ match up with the outputFilenames_? @@ -1780,7 +1801,9 @@ def publishStatesByConfig(Map args) { def yamlTemplate = params.containsKey("output_state") ? params.output_state : '$id.$key.state.yaml' def yamlFilename = yamlTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) def yamlDir = java.nio.file.Paths.get(yamlFilename).getParent() // the processed state is a list of [key, value, inputPath, outputFilename] tuples, where @@ -1822,7 +1845,9 @@ def publishStatesByConfig(Map args) { // instantiate the template def filename = filenameTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) if (par.multiple) { // if the parameter is multiple: true, the filename // should contain a wildcard '*' that is replaced with @@ -2626,30 +2651,31 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { tuple } - def chModifiedFiltered = workflowArgs.filter ? - chModified | filter{workflowArgs.filter(it)} : - chModified def chRun = null def chPassthrough = null if (workflowArgs.runIf) { - def runIfBranch = chModifiedFiltered.branch{ tup -> + def runIfBranch = chModified.branch{ tup -> run: workflowArgs.runIf(tup[0], tup[1]) passthrough: true } chRun = runIfBranch.run chPassthrough = runIfBranch.passthrough } else { - chRun = chModifiedFiltered + chRun = chModified chPassthrough = Channel.empty() } + def chRunFiltered = workflowArgs.filter ? + chRun | filter{workflowArgs.filter(it)} : + chRun + def chArgs = workflowArgs.fromState ? - chRun | map{ + chRunFiltered | map{ def new_data = workflowArgs.fromState(it.take(2)) [it[0], new_data] } : - chRun | map {tup -> tup.take(2)} + chRunFiltered | map {tup -> tup.take(2)} // fill in defaults def chArgsWithDefaults = chArgs @@ -2720,7 +2746,7 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { // | view{"chInitialOutput: ${it.take(3)}"} // join the output [prev_id, new_id, output] with the previous state [prev_id, state, ...] - def chNewState = safeJoin(chInitialOutput, chModifiedFiltered, key_) + def chNewState = safeJoin(chInitialOutput, chRunFiltered, key_) // input tuple format: [join_id, id, output, prev_state, ...] // output tuple format: [join_id, id, new_state, ...] | map{ tup -> @@ -2780,7 +2806,7 @@ meta = [ "config": processConfig(readJsonBlob('''{ "name" : "gather_fastqs_and_validate", "namespace" : "dataflow", - "version" : "v0.1.0", + "version" : "v0.1.1", "argument_groups" : [ { "name" : "Input arguments", @@ -2938,13 +2964,13 @@ meta = [ "runner" : "nextflow", "engine" : "native|native", "output" : "target/nextflow/dataflow/gather_fastqs_and_validate", - "viash_version" : "0.9.0-RC6", - "git_commit" : "3d229bef584233f228330ff881dad685b92bf1e1", + "viash_version" : "0.9.0", + "git_commit" : "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add", "git_remote" : "https://github.com/viash-hub/demultiplex" }, "package_config" : { "name" : "demultiplex", - "version" : "v0.1.0", + "version" : "v0.1.1", "description" : "Demultiplexing pipeline\n", "info" : { "test_resources" : [ @@ -2954,14 +2980,14 @@ meta = [ } ] }, - "viash_version" : "0.9.0-RC6", + "viash_version" : "0.9.0", "source" : "src", "target" : "target", "config_mods" : [ ".requirements.commands := ['ps']\n", ".engines += { type: \\"native\\" }", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + ".engines[.type == 'docker'].target_tag := 'v0.1.1'" ], "keywords" : [ "bioinformatics", diff --git a/target/nextflow/dataflow/gather_fastqs_and_validate/nextflow.config b/target/nextflow/dataflow/gather_fastqs_and_validate/nextflow.config index bb57715..256c85d 100644 --- a/target/nextflow/dataflow/gather_fastqs_and_validate/nextflow.config +++ b/target/nextflow/dataflow/gather_fastqs_and_validate/nextflow.config @@ -2,7 +2,7 @@ manifest { name = 'dataflow/gather_fastqs_and_validate' mainScript = 'main.nf' nextflowVersion = '!>=20.12.1-edge' - version = 'v0.1.0' + version = 'v0.1.1' description = 'From a directory containing fastq files, gather the files per sample \nand validate according to the contents of the sample sheet.\n' } diff --git a/target/nextflow/demultiplex/.config.vsh.yaml b/target/nextflow/demultiplex/.config.vsh.yaml index b41ec74..e2b958b 100644 --- a/target/nextflow/demultiplex/.config.vsh.yaml +++ b/target/nextflow/demultiplex/.config.vsh.yaml @@ -1,5 +1,5 @@ name: "demultiplex" -version: "v0.1.0" +version: "v0.1.1" argument_groups: - name: "Input arguments" arguments: @@ -185,8 +185,8 @@ build_info: engine: "native|native" output: "target/nextflow/demultiplex" executable: "target/nextflow/demultiplex/main.nf" - viash_version: "0.9.0-RC6" - git_commit: "3d229bef584233f228330ff881dad685b92bf1e1" + viash_version: "0.9.0" + git_commit: "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add" git_remote: "https://github.com/viash-hub/demultiplex" dependencies: - "target/nextflow/io/untar" @@ -198,20 +198,20 @@ build_info: - "target/dependencies/vsh/vsh/biobox/v0.1.0/nextflow/multiqc" package_config: name: "demultiplex" - version: "v0.1.0" + version: "v0.1.1" description: "Demultiplexing pipeline\n" info: test_resources: - path: "https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz" dest: "test_resources" - viash_version: "0.9.0-RC6" + viash_version: "0.9.0" source: "src" target: "target" config_mods: - ".requirements.commands := ['ps']\n" - ".engines += { type: \"native\" }" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + - ".engines[.type == 'docker'].target_tag := 'v0.1.1'" keywords: - "bioinformatics" - "sequence" diff --git a/target/nextflow/demultiplex/main.nf b/target/nextflow/demultiplex/main.nf index 44848bb..364faf5 100644 --- a/target/nextflow/demultiplex/main.nf +++ b/target/nextflow/demultiplex/main.nf @@ -1,8 +1,8 @@ -// demultiplex v0.1.0 +// demultiplex v0.1.1 // -// This wrapper script is auto-generated by viash 0.9.0-RC6 and is thus a -// derivative work thereof. This software comes with ABSOLUTELY NO WARRANTY from -// Data Intuitive. +// This wrapper script is auto-generated by viash 0.9.0 and is thus a derivative +// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data +// Intuitive. // // The component may contain files which fall under a different license. The // authors of this component should specify the license in the header of such @@ -760,8 +760,11 @@ def runEach(Map args) { def fromState_ = args.fromState def toState_ = args.toState def filter_ = args.filter + def runIf_ = args.runIf def id_ = args.id + assert !runIf_ || runIf_ instanceof Closure: "runEach: must pass a Closure to runIf." + workflow runEachWf { take: input_ch main: @@ -783,7 +786,20 @@ def runEach(Map args) { [new_id] + tup.drop(1) } : filter_ch - def data_ch = id_ch | map{tup -> + def chPassthrough = null + def chRun = null + if (runIf_) { + def idRunIfBranch = id_ch.branch{ tup -> + run: runIf_(tup[0], tup[1], comp_) + passthrough: true + } + chPassthrough = idRunIfBranch.passthrough + chRun = idRunIfBranch.run + } else { + chRun = id_ch + chPassthrough = Channel.empty() + } + def data_ch = chRun | map{tup -> def new_data = tup[1] if (fromState_ instanceof Map) { new_data = fromState_.collectEntries{ key0, key1 -> @@ -821,8 +837,11 @@ def runEach(Map args) { [tup[0], new_state] + tup.drop(3) } : out_ch + + def return_ch = post_ch + | concat(chPassthrough) - post_ch + return_ch } // mix all results @@ -1598,8 +1617,8 @@ def findStates(Map params, Map config) { // construct renameMap if (args.rename_keys) { def renameMap = args.rename_keys.collectEntries{renameString -> - def split = renameString.split(";") - assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey,newKey:oldKey'" + def split = renameString.split(":") + assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey', or 'newKey:oldKey;newKey:oldKey' in case of multiple values" split } @@ -1709,7 +1728,9 @@ def publishStates(Map args) { def yamlFilename = yamlTemplate_ .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) // TODO: do the pathnames in state_ match up with the outputFilenames_? @@ -1780,7 +1801,9 @@ def publishStatesByConfig(Map args) { def yamlTemplate = params.containsKey("output_state") ? params.output_state : '$id.$key.state.yaml' def yamlFilename = yamlTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) def yamlDir = java.nio.file.Paths.get(yamlFilename).getParent() // the processed state is a list of [key, value, inputPath, outputFilename] tuples, where @@ -1822,7 +1845,9 @@ def publishStatesByConfig(Map args) { // instantiate the template def filename = filenameTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) if (par.multiple) { // if the parameter is multiple: true, the filename // should contain a wildcard '*' that is replaced with @@ -2626,30 +2651,31 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { tuple } - def chModifiedFiltered = workflowArgs.filter ? - chModified | filter{workflowArgs.filter(it)} : - chModified def chRun = null def chPassthrough = null if (workflowArgs.runIf) { - def runIfBranch = chModifiedFiltered.branch{ tup -> + def runIfBranch = chModified.branch{ tup -> run: workflowArgs.runIf(tup[0], tup[1]) passthrough: true } chRun = runIfBranch.run chPassthrough = runIfBranch.passthrough } else { - chRun = chModifiedFiltered + chRun = chModified chPassthrough = Channel.empty() } + def chRunFiltered = workflowArgs.filter ? + chRun | filter{workflowArgs.filter(it)} : + chRun + def chArgs = workflowArgs.fromState ? - chRun | map{ + chRunFiltered | map{ def new_data = workflowArgs.fromState(it.take(2)) [it[0], new_data] } : - chRun | map {tup -> tup.take(2)} + chRunFiltered | map {tup -> tup.take(2)} // fill in defaults def chArgsWithDefaults = chArgs @@ -2720,7 +2746,7 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { // | view{"chInitialOutput: ${it.take(3)}"} // join the output [prev_id, new_id, output] with the previous state [prev_id, state, ...] - def chNewState = safeJoin(chInitialOutput, chModifiedFiltered, key_) + def chNewState = safeJoin(chInitialOutput, chRunFiltered, key_) // input tuple format: [join_id, id, output, prev_state, ...] // output tuple format: [join_id, id, new_state, ...] | map{ tup -> @@ -2779,7 +2805,7 @@ meta = [ "resources_dir": moduleDir.toRealPath().normalize(), "config": processConfig(readJsonBlob('''{ "name" : "demultiplex", - "version" : "v0.1.0", + "version" : "v0.1.1", "argument_groups" : [ { "name" : "Input arguments", @@ -3022,13 +3048,13 @@ meta = [ "runner" : "nextflow", "engine" : "native|native", "output" : "target/nextflow/demultiplex", - "viash_version" : "0.9.0-RC6", - "git_commit" : "3d229bef584233f228330ff881dad685b92bf1e1", + "viash_version" : "0.9.0", + "git_commit" : "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add", "git_remote" : "https://github.com/viash-hub/demultiplex" }, "package_config" : { "name" : "demultiplex", - "version" : "v0.1.0", + "version" : "v0.1.1", "description" : "Demultiplexing pipeline\n", "info" : { "test_resources" : [ @@ -3038,14 +3064,14 @@ meta = [ } ] }, - "viash_version" : "0.9.0-RC6", + "viash_version" : "0.9.0", "source" : "src", "target" : "target", "config_mods" : [ ".requirements.commands := ['ps']\n", ".engines += { type: \\"native\\" }", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + ".engines[.type == 'docker'].target_tag := 'v0.1.1'" ], "keywords" : [ "bioinformatics", diff --git a/target/nextflow/demultiplex/nextflow.config b/target/nextflow/demultiplex/nextflow.config index 6985af3..6a2a01e 100644 --- a/target/nextflow/demultiplex/nextflow.config +++ b/target/nextflow/demultiplex/nextflow.config @@ -2,7 +2,7 @@ manifest { name = 'demultiplex' mainScript = 'main.nf' nextflowVersion = '!>=20.12.1-edge' - version = 'v0.1.0' + version = 'v0.1.1' description = 'Demultiplexing of raw sequencing data' } diff --git a/target/nextflow/io/interop_summary_to_csv/.config.vsh.yaml b/target/nextflow/io/interop_summary_to_csv/.config.vsh.yaml index 740b5cd..e177c45 100644 --- a/target/nextflow/io/interop_summary_to_csv/.config.vsh.yaml +++ b/target/nextflow/io/interop_summary_to_csv/.config.vsh.yaml @@ -1,6 +1,6 @@ name: "interop_summary_to_csv" namespace: "io" -version: "v0.1.0" +version: "v0.1.1" argument_groups: - name: "Input arguments" arguments: @@ -116,7 +116,7 @@ engines: id: "docker" image: "debian:stable-slim" target_registry: "images.viash-hub.com" - target_tag: "v0.1.0" + target_tag: "v0.1.1" namespace_separator: "/" setup: - type: "apt" @@ -140,25 +140,25 @@ build_info: engine: "docker|native" output: "target/nextflow/io/interop_summary_to_csv" executable: "target/nextflow/io/interop_summary_to_csv/main.nf" - viash_version: "0.9.0-RC6" - git_commit: "3d229bef584233f228330ff881dad685b92bf1e1" + viash_version: "0.9.0" + git_commit: "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add" git_remote: "https://github.com/viash-hub/demultiplex" package_config: name: "demultiplex" - version: "v0.1.0" + version: "v0.1.1" description: "Demultiplexing pipeline\n" info: test_resources: - path: "https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz" dest: "test_resources" - viash_version: "0.9.0-RC6" + viash_version: "0.9.0" source: "src" target: "target" config_mods: - ".requirements.commands := ['ps']\n" - ".engines += { type: \"native\" }" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + - ".engines[.type == 'docker'].target_tag := 'v0.1.1'" keywords: - "bioinformatics" - "sequence" diff --git a/target/nextflow/io/interop_summary_to_csv/main.nf b/target/nextflow/io/interop_summary_to_csv/main.nf index 7c7e752..d508f84 100644 --- a/target/nextflow/io/interop_summary_to_csv/main.nf +++ b/target/nextflow/io/interop_summary_to_csv/main.nf @@ -1,8 +1,8 @@ -// interop_summary_to_csv v0.1.0 +// interop_summary_to_csv v0.1.1 // -// This wrapper script is auto-generated by viash 0.9.0-RC6 and is thus a -// derivative work thereof. This software comes with ABSOLUTELY NO WARRANTY from -// Data Intuitive. +// This wrapper script is auto-generated by viash 0.9.0 and is thus a derivative +// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data +// Intuitive. // // The component may contain files which fall under a different license. The // authors of this component should specify the license in the header of such @@ -760,8 +760,11 @@ def runEach(Map args) { def fromState_ = args.fromState def toState_ = args.toState def filter_ = args.filter + def runIf_ = args.runIf def id_ = args.id + assert !runIf_ || runIf_ instanceof Closure: "runEach: must pass a Closure to runIf." + workflow runEachWf { take: input_ch main: @@ -783,7 +786,20 @@ def runEach(Map args) { [new_id] + tup.drop(1) } : filter_ch - def data_ch = id_ch | map{tup -> + def chPassthrough = null + def chRun = null + if (runIf_) { + def idRunIfBranch = id_ch.branch{ tup -> + run: runIf_(tup[0], tup[1], comp_) + passthrough: true + } + chPassthrough = idRunIfBranch.passthrough + chRun = idRunIfBranch.run + } else { + chRun = id_ch + chPassthrough = Channel.empty() + } + def data_ch = chRun | map{tup -> def new_data = tup[1] if (fromState_ instanceof Map) { new_data = fromState_.collectEntries{ key0, key1 -> @@ -821,8 +837,11 @@ def runEach(Map args) { [tup[0], new_state] + tup.drop(3) } : out_ch + + def return_ch = post_ch + | concat(chPassthrough) - post_ch + return_ch } // mix all results @@ -1598,8 +1617,8 @@ def findStates(Map params, Map config) { // construct renameMap if (args.rename_keys) { def renameMap = args.rename_keys.collectEntries{renameString -> - def split = renameString.split(";") - assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey,newKey:oldKey'" + def split = renameString.split(":") + assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey', or 'newKey:oldKey;newKey:oldKey' in case of multiple values" split } @@ -1709,7 +1728,9 @@ def publishStates(Map args) { def yamlFilename = yamlTemplate_ .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) // TODO: do the pathnames in state_ match up with the outputFilenames_? @@ -1780,7 +1801,9 @@ def publishStatesByConfig(Map args) { def yamlTemplate = params.containsKey("output_state") ? params.output_state : '$id.$key.state.yaml' def yamlFilename = yamlTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) def yamlDir = java.nio.file.Paths.get(yamlFilename).getParent() // the processed state is a list of [key, value, inputPath, outputFilename] tuples, where @@ -1822,7 +1845,9 @@ def publishStatesByConfig(Map args) { // instantiate the template def filename = filenameTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) if (par.multiple) { // if the parameter is multiple: true, the filename // should contain a wildcard '*' that is replaced with @@ -2626,30 +2651,31 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { tuple } - def chModifiedFiltered = workflowArgs.filter ? - chModified | filter{workflowArgs.filter(it)} : - chModified def chRun = null def chPassthrough = null if (workflowArgs.runIf) { - def runIfBranch = chModifiedFiltered.branch{ tup -> + def runIfBranch = chModified.branch{ tup -> run: workflowArgs.runIf(tup[0], tup[1]) passthrough: true } chRun = runIfBranch.run chPassthrough = runIfBranch.passthrough } else { - chRun = chModifiedFiltered + chRun = chModified chPassthrough = Channel.empty() } + def chRunFiltered = workflowArgs.filter ? + chRun | filter{workflowArgs.filter(it)} : + chRun + def chArgs = workflowArgs.fromState ? - chRun | map{ + chRunFiltered | map{ def new_data = workflowArgs.fromState(it.take(2)) [it[0], new_data] } : - chRun | map {tup -> tup.take(2)} + chRunFiltered | map {tup -> tup.take(2)} // fill in defaults def chArgsWithDefaults = chArgs @@ -2720,7 +2746,7 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { // | view{"chInitialOutput: ${it.take(3)}"} // join the output [prev_id, new_id, output] with the previous state [prev_id, state, ...] - def chNewState = safeJoin(chInitialOutput, chModifiedFiltered, key_) + def chNewState = safeJoin(chInitialOutput, chRunFiltered, key_) // input tuple format: [join_id, id, output, prev_state, ...] // output tuple format: [join_id, id, new_state, ...] | map{ tup -> @@ -2780,7 +2806,7 @@ meta = [ "config": processConfig(readJsonBlob('''{ "name" : "interop_summary_to_csv", "namespace" : "io", - "version" : "v0.1.0", + "version" : "v0.1.1", "argument_groups" : [ { "name" : "Input arguments", @@ -2921,7 +2947,7 @@ meta = [ "id" : "docker", "image" : "debian:stable-slim", "target_registry" : "images.viash-hub.com", - "target_tag" : "v0.1.0", + "target_tag" : "v0.1.1", "namespace_separator" : "/", "setup" : [ { @@ -2950,13 +2976,13 @@ meta = [ "runner" : "nextflow", "engine" : "docker|native", "output" : "target/nextflow/io/interop_summary_to_csv", - "viash_version" : "0.9.0-RC6", - "git_commit" : "3d229bef584233f228330ff881dad685b92bf1e1", + "viash_version" : "0.9.0", + "git_commit" : "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add", "git_remote" : "https://github.com/viash-hub/demultiplex" }, "package_config" : { "name" : "demultiplex", - "version" : "v0.1.0", + "version" : "v0.1.1", "description" : "Demultiplexing pipeline\n", "info" : { "test_resources" : [ @@ -2966,14 +2992,14 @@ meta = [ } ] }, - "viash_version" : "0.9.0-RC6", + "viash_version" : "0.9.0", "source" : "src", "target" : "target", "config_mods" : [ ".requirements.commands := ['ps']\n", ".engines += { type: \\"native\\" }", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + ".engines[.type == 'docker'].target_tag := 'v0.1.1'" ], "keywords" : [ "bioinformatics", @@ -3115,7 +3141,11 @@ def vdsl3WorkflowFactory(Map args, Map meta, String rawScript) { val = val.join(par.multiple_sep) } if (par.direction == "output" && par.type == "file") { - val = val.replaceAll('\\$id', id).replaceAll('\\$key', key) + val = val + .replaceAll('\\$id', id) + .replaceAll('\\$\\{id\\}', id) + .replaceAll('\\$key', key) + .replaceAll('\\$\\{key\\}', key) } [parName, val] } @@ -3246,7 +3276,8 @@ def _vdsl3ProcessFactory(Map workflowArgs, Map meta, String rawScript) { def createParentStr = meta.config.allArguments .findAll { it.type == "file" && it.direction == "output" && it.create_parent } .collect { par -> - "\${ args.containsKey(\"${par.plainName}\") ? \"mkdir_parent \\\"\" + (args[\"${par.plainName}\"] instanceof String ? args[\"${par.plainName}\"] : args[\"${par.plainName}\"].join('\" \"')) + \"\\\"\" : \"\" }" + def contents = "args[\"${par.plainName}\"] instanceof List ? args[\"${par.plainName}\"].join('\" \"') : args[\"${par.plainName}\"]" + "\${ args.containsKey(\"${par.plainName}\") ? \"mkdir_parent '\" + escapeText(${contents}) + \"'\" : \"\" }" } .join("\n") @@ -3254,8 +3285,8 @@ def _vdsl3ProcessFactory(Map workflowArgs, Map meta, String rawScript) { def inputFileExports = meta.config.allArguments .findAll { it.type == "file" && it.direction.toLowerCase() == "input" } .collect { par -> - def viash_par_contents = "(viash_par_${par.plainName} instanceof List ? viash_par_${par.plainName}.join(\"${par.multiple_sep}\") : viash_par_${par.plainName})" - "\n\${viash_par_${par.plainName}.empty ? \"\" : \"export VIASH_PAR_${par.plainName.toUpperCase()}=\\\"\" + ${viash_par_contents} + \"\\\"\"}" + def contents = "viash_par_${par.plainName} instanceof List ? viash_par_${par.plainName}.join(\"${par.multiple_sep}\") : viash_par_${par.plainName}" + "\n\${viash_par_${par.plainName}.empty ? \"\" : \"export VIASH_PAR_${par.plainName.toUpperCase()}='\" + escapeText(${contents}) + \"'\"}" } // NOTE: if using docker, use /tmp instead of tmpDir! @@ -3292,6 +3323,7 @@ def _vdsl3ProcessFactory(Map workflowArgs, Map meta, String rawScript) { def procStr = """nextflow.enable.dsl=2 | + |def escapeText = { s -> s.toString().replaceAll("'", "'\\\"'\\\"'") } |process $procKey {$drctvStrs |input: | tuple val(id)$inputPaths, val(args), path(resourcesDir, stageAs: ".viash_meta_resources") @@ -3303,10 +3335,9 @@ def _vdsl3ProcessFactory(Map workflowArgs, Map meta, String rawScript) { |$stub |\"\"\" |script:$assertStr - |def escapeText = { s -> s.toString().replaceAll('([`"])', '\\\\\\\\\$1') } |def parInject = args | .findAll{key, value -> value != null} - | .collect{key, value -> "export VIASH_PAR_\${key.toUpperCase()}=\\\"\${escapeText(value)}\\\""} + | .collect{key, value -> "export VIASH_PAR_\${key.toUpperCase()}='\${escapeText(value)}'"} | .join("\\n") |\"\"\" |# meta exports @@ -3391,7 +3422,7 @@ meta["defaults"] = [ "container" : { "registry" : "images.viash-hub.com", "image" : "vsh/demultiplex/io/interop_summary_to_csv", - "tag" : "v0.1.0" + "tag" : "v0.1.1" }, "tag" : "$id" }'''), diff --git a/target/nextflow/io/interop_summary_to_csv/nextflow.config b/target/nextflow/io/interop_summary_to_csv/nextflow.config index 40d040c..096b85d 100644 --- a/target/nextflow/io/interop_summary_to_csv/nextflow.config +++ b/target/nextflow/io/interop_summary_to_csv/nextflow.config @@ -2,7 +2,7 @@ manifest { name = 'io/interop_summary_to_csv' mainScript = 'main.nf' nextflowVersion = '!>=20.12.1-edge' - version = 'v0.1.0' + version = 'v0.1.1' } process.container = 'nextflow/bash:latest' diff --git a/target/nextflow/io/untar/.config.vsh.yaml b/target/nextflow/io/untar/.config.vsh.yaml index d09489c..20cc161 100644 --- a/target/nextflow/io/untar/.config.vsh.yaml +++ b/target/nextflow/io/untar/.config.vsh.yaml @@ -1,6 +1,6 @@ name: "untar" namespace: "io" -version: "v0.1.0" +version: "v0.1.1" argument_groups: - name: "Input arguments" arguments: @@ -130,7 +130,7 @@ engines: id: "docker" image: "debian:stable-slim" target_registry: "images.viash-hub.com" - target_tag: "v0.1.0" + target_tag: "v0.1.1" namespace_separator: "/" setup: - type: "apt" @@ -147,25 +147,25 @@ build_info: engine: "docker|native" output: "target/nextflow/io/untar" executable: "target/nextflow/io/untar/main.nf" - viash_version: "0.9.0-RC6" - git_commit: "3d229bef584233f228330ff881dad685b92bf1e1" + viash_version: "0.9.0" + git_commit: "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add" git_remote: "https://github.com/viash-hub/demultiplex" package_config: name: "demultiplex" - version: "v0.1.0" + version: "v0.1.1" description: "Demultiplexing pipeline\n" info: test_resources: - path: "https://raw.githubusercontent.com/nf-core/test-datasets/demultiplex/testdata/NovaSeq6000/200624_A00834_0183_BHMTFYDRXX.tar.gz" dest: "test_resources" - viash_version: "0.9.0-RC6" + viash_version: "0.9.0" source: "src" target: "target" config_mods: - ".requirements.commands := ['ps']\n" - ".engines += { type: \"native\" }" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + - ".engines[.type == 'docker'].target_tag := 'v0.1.1'" keywords: - "bioinformatics" - "sequence" diff --git a/target/nextflow/io/untar/main.nf b/target/nextflow/io/untar/main.nf index 6e30cdc..38749c3 100644 --- a/target/nextflow/io/untar/main.nf +++ b/target/nextflow/io/untar/main.nf @@ -1,8 +1,8 @@ -// untar v0.1.0 +// untar v0.1.1 // -// This wrapper script is auto-generated by viash 0.9.0-RC6 and is thus a -// derivative work thereof. This software comes with ABSOLUTELY NO WARRANTY from -// Data Intuitive. +// This wrapper script is auto-generated by viash 0.9.0 and is thus a derivative +// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data +// Intuitive. // // The component may contain files which fall under a different license. The // authors of this component should specify the license in the header of such @@ -760,8 +760,11 @@ def runEach(Map args) { def fromState_ = args.fromState def toState_ = args.toState def filter_ = args.filter + def runIf_ = args.runIf def id_ = args.id + assert !runIf_ || runIf_ instanceof Closure: "runEach: must pass a Closure to runIf." + workflow runEachWf { take: input_ch main: @@ -783,7 +786,20 @@ def runEach(Map args) { [new_id] + tup.drop(1) } : filter_ch - def data_ch = id_ch | map{tup -> + def chPassthrough = null + def chRun = null + if (runIf_) { + def idRunIfBranch = id_ch.branch{ tup -> + run: runIf_(tup[0], tup[1], comp_) + passthrough: true + } + chPassthrough = idRunIfBranch.passthrough + chRun = idRunIfBranch.run + } else { + chRun = id_ch + chPassthrough = Channel.empty() + } + def data_ch = chRun | map{tup -> def new_data = tup[1] if (fromState_ instanceof Map) { new_data = fromState_.collectEntries{ key0, key1 -> @@ -821,8 +837,11 @@ def runEach(Map args) { [tup[0], new_state] + tup.drop(3) } : out_ch + + def return_ch = post_ch + | concat(chPassthrough) - post_ch + return_ch } // mix all results @@ -1598,8 +1617,8 @@ def findStates(Map params, Map config) { // construct renameMap if (args.rename_keys) { def renameMap = args.rename_keys.collectEntries{renameString -> - def split = renameString.split(";") - assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey,newKey:oldKey'" + def split = renameString.split(":") + assert split.size() == 2: "Argument 'rename_keys' should be of the form 'newKey:oldKey', or 'newKey:oldKey;newKey:oldKey' in case of multiple values" split } @@ -1709,7 +1728,9 @@ def publishStates(Map args) { def yamlFilename = yamlTemplate_ .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) // TODO: do the pathnames in state_ match up with the outputFilenames_? @@ -1780,7 +1801,9 @@ def publishStatesByConfig(Map args) { def yamlTemplate = params.containsKey("output_state") ? params.output_state : '$id.$key.state.yaml' def yamlFilename = yamlTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) def yamlDir = java.nio.file.Paths.get(yamlFilename).getParent() // the processed state is a list of [key, value, inputPath, outputFilename] tuples, where @@ -1822,7 +1845,9 @@ def publishStatesByConfig(Map args) { // instantiate the template def filename = filenameTemplate .replaceAll('\\$id', id_) + .replaceAll('\\$\\{id\\}', id_) .replaceAll('\\$key', key_) + .replaceAll('\\$\\{key\\}', key_) if (par.multiple) { // if the parameter is multiple: true, the filename // should contain a wildcard '*' that is replaced with @@ -2626,30 +2651,31 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { tuple } - def chModifiedFiltered = workflowArgs.filter ? - chModified | filter{workflowArgs.filter(it)} : - chModified def chRun = null def chPassthrough = null if (workflowArgs.runIf) { - def runIfBranch = chModifiedFiltered.branch{ tup -> + def runIfBranch = chModified.branch{ tup -> run: workflowArgs.runIf(tup[0], tup[1]) passthrough: true } chRun = runIfBranch.run chPassthrough = runIfBranch.passthrough } else { - chRun = chModifiedFiltered + chRun = chModified chPassthrough = Channel.empty() } + def chRunFiltered = workflowArgs.filter ? + chRun | filter{workflowArgs.filter(it)} : + chRun + def chArgs = workflowArgs.fromState ? - chRun | map{ + chRunFiltered | map{ def new_data = workflowArgs.fromState(it.take(2)) [it[0], new_data] } : - chRun | map {tup -> tup.take(2)} + chRunFiltered | map {tup -> tup.take(2)} // fill in defaults def chArgsWithDefaults = chArgs @@ -2720,7 +2746,7 @@ def workflowFactory(Map args, Map defaultWfArgs, Map meta) { // | view{"chInitialOutput: ${it.take(3)}"} // join the output [prev_id, new_id, output] with the previous state [prev_id, state, ...] - def chNewState = safeJoin(chInitialOutput, chModifiedFiltered, key_) + def chNewState = safeJoin(chInitialOutput, chRunFiltered, key_) // input tuple format: [join_id, id, output, prev_state, ...] // output tuple format: [join_id, id, new_state, ...] | map{ tup -> @@ -2780,7 +2806,7 @@ meta = [ "config": processConfig(readJsonBlob('''{ "name" : "untar", "namespace" : "io", - "version" : "v0.1.0", + "version" : "v0.1.1", "argument_groups" : [ { "name" : "Input arguments", @@ -2940,7 +2966,7 @@ meta = [ "id" : "docker", "image" : "debian:stable-slim", "target_registry" : "images.viash-hub.com", - "target_tag" : "v0.1.0", + "target_tag" : "v0.1.1", "namespace_separator" : "/", "setup" : [ { @@ -2962,13 +2988,13 @@ meta = [ "runner" : "nextflow", "engine" : "docker|native", "output" : "target/nextflow/io/untar", - "viash_version" : "0.9.0-RC6", - "git_commit" : "3d229bef584233f228330ff881dad685b92bf1e1", + "viash_version" : "0.9.0", + "git_commit" : "ff28cec6bd0ff4f8e52c6b2cf0c9cc990cf20add", "git_remote" : "https://github.com/viash-hub/demultiplex" }, "package_config" : { "name" : "demultiplex", - "version" : "v0.1.0", + "version" : "v0.1.1", "description" : "Demultiplexing pipeline\n", "info" : { "test_resources" : [ @@ -2978,14 +3004,14 @@ meta = [ } ] }, - "viash_version" : "0.9.0-RC6", + "viash_version" : "0.9.0", "source" : "src", "target" : "target", "config_mods" : [ ".requirements.commands := ['ps']\n", ".engines += { type: \\"native\\" }", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", - ".engines[.type == 'docker'].target_tag := 'v0.1.0'" + ".engines[.type == 'docker'].target_tag := 'v0.1.1'" ], "keywords" : [ "bioinformatics", @@ -3157,7 +3183,11 @@ def vdsl3WorkflowFactory(Map args, Map meta, String rawScript) { val = val.join(par.multiple_sep) } if (par.direction == "output" && par.type == "file") { - val = val.replaceAll('\\$id', id).replaceAll('\\$key', key) + val = val + .replaceAll('\\$id', id) + .replaceAll('\\$\\{id\\}', id) + .replaceAll('\\$key', key) + .replaceAll('\\$\\{key\\}', key) } [parName, val] } @@ -3288,7 +3318,8 @@ def _vdsl3ProcessFactory(Map workflowArgs, Map meta, String rawScript) { def createParentStr = meta.config.allArguments .findAll { it.type == "file" && it.direction == "output" && it.create_parent } .collect { par -> - "\${ args.containsKey(\"${par.plainName}\") ? \"mkdir_parent \\\"\" + (args[\"${par.plainName}\"] instanceof String ? args[\"${par.plainName}\"] : args[\"${par.plainName}\"].join('\" \"')) + \"\\\"\" : \"\" }" + def contents = "args[\"${par.plainName}\"] instanceof List ? args[\"${par.plainName}\"].join('\" \"') : args[\"${par.plainName}\"]" + "\${ args.containsKey(\"${par.plainName}\") ? \"mkdir_parent '\" + escapeText(${contents}) + \"'\" : \"\" }" } .join("\n") @@ -3296,8 +3327,8 @@ def _vdsl3ProcessFactory(Map workflowArgs, Map meta, String rawScript) { def inputFileExports = meta.config.allArguments .findAll { it.type == "file" && it.direction.toLowerCase() == "input" } .collect { par -> - def viash_par_contents = "(viash_par_${par.plainName} instanceof List ? viash_par_${par.plainName}.join(\"${par.multiple_sep}\") : viash_par_${par.plainName})" - "\n\${viash_par_${par.plainName}.empty ? \"\" : \"export VIASH_PAR_${par.plainName.toUpperCase()}=\\\"\" + ${viash_par_contents} + \"\\\"\"}" + def contents = "viash_par_${par.plainName} instanceof List ? viash_par_${par.plainName}.join(\"${par.multiple_sep}\") : viash_par_${par.plainName}" + "\n\${viash_par_${par.plainName}.empty ? \"\" : \"export VIASH_PAR_${par.plainName.toUpperCase()}='\" + escapeText(${contents}) + \"'\"}" } // NOTE: if using docker, use /tmp instead of tmpDir! @@ -3334,6 +3365,7 @@ def _vdsl3ProcessFactory(Map workflowArgs, Map meta, String rawScript) { def procStr = """nextflow.enable.dsl=2 | + |def escapeText = { s -> s.toString().replaceAll("'", "'\\\"'\\\"'") } |process $procKey {$drctvStrs |input: | tuple val(id)$inputPaths, val(args), path(resourcesDir, stageAs: ".viash_meta_resources") @@ -3345,10 +3377,9 @@ def _vdsl3ProcessFactory(Map workflowArgs, Map meta, String rawScript) { |$stub |\"\"\" |script:$assertStr - |def escapeText = { s -> s.toString().replaceAll('([`"])', '\\\\\\\\\$1') } |def parInject = args | .findAll{key, value -> value != null} - | .collect{key, value -> "export VIASH_PAR_\${key.toUpperCase()}=\\\"\${escapeText(value)}\\\""} + | .collect{key, value -> "export VIASH_PAR_\${key.toUpperCase()}='\${escapeText(value)}'"} | .join("\\n") |\"\"\" |# meta exports @@ -3433,7 +3464,7 @@ meta["defaults"] = [ "container" : { "registry" : "images.viash-hub.com", "image" : "vsh/demultiplex/io/untar", - "tag" : "v0.1.0" + "tag" : "v0.1.1" }, "tag" : "$id" }'''), diff --git a/target/nextflow/io/untar/nextflow.config b/target/nextflow/io/untar/nextflow.config index 468dfb4..71336eb 100644 --- a/target/nextflow/io/untar/nextflow.config +++ b/target/nextflow/io/untar/nextflow.config @@ -2,7 +2,7 @@ manifest { name = 'io/untar' mainScript = 'main.nf' nextflowVersion = '!>=20.12.1-edge' - version = 'v0.1.0' + version = 'v0.1.1' description = 'Unpack a .tar file. When the contents of the .tar file is just a single directory,\nput the contents of the directory into the output folder instead of that directory.\n' } diff --git a/test_resources b/test_resources new file mode 120000 index 0000000..6970768 --- /dev/null +++ b/test_resources @@ -0,0 +1 @@ +/work/viash_hub_resources/viash-hub/demultiplex/ebb861b02ab66db004c32fa46573bb1e/200624_A00834_0183_BHMTFYDRXX.tar.gz \ No newline at end of file