Build branch craftbox/v0.3 with version v0.3.2 to craftbox on branch v0.3 (7d520dc)

Build pipeline: viash-hub.craftbox.v0.3.2-tpktm

Source commit: 7d520dc76c

Source message: Bump version to v0.3.2
This commit is contained in:
CI
2026-03-03 15:18:58 +00:00
parent 6c59599998
commit 4ccb4240e0
39 changed files with 743 additions and 581 deletions

View File

@@ -1,3 +1,13 @@
# craftbox 0.3.2
## NEW FEATURES
* `move_files_to_directory`: add support for moving directories (PR #17).
## MINOR CHANGES
* Bump viash to 0.9.7 (PR #18).
# craftbox 0.3.1 # craftbox 0.3.1
## MINOR CHANGES ## MINOR CHANGES

View File

@@ -43,7 +43,7 @@ Viash components in craftbox can be run in various ways:
``` mermaid lang="mermaid ``` mermaid lang="mermaid
flowchart TD flowchart TD
A[craftbox v0.3.1] --> B(Viash Hub Launch) A[craftbox v0.3.2] --> B(Viash Hub Launch)
A --> C(Viash CLI) A --> C(Viash CLI)
A --> D(Nextflow CLI) A --> D(Nextflow CLI)
A --> E(Seqera Cloud) A --> E(Seqera Cloud)
@@ -53,7 +53,7 @@ flowchart TD
### 1. Via the Viash Hub Launch interface ### 1. Via the Viash Hub Launch interface
You can run this component directly from the Viash Hub [Launch You can run this component directly from the Viash Hub [Launch
interface](https://www.viash-hub.com/launch?package=craftbox&version=v0.3.1&component=concat_rtext&runner=Executable). interface](https://www.viash-hub.com/launch?package=craftbox&version=v0.3.2&component=concat_rtext&runner=Executable).
![](docs/viash-hub.png) ![](docs/viash-hub.png)
@@ -63,9 +63,9 @@ You can run this component directly from the command line using the
Viash CLI. Viash CLI.
``` bash ``` bash
viash run vsh://craftbox@v0.3.1/concat_rtext -- --help viash run vsh://craftbox@v0.3.2/concat_rtext -- --help
viash run vsh://craftbox@v0.3.1/concat_rtext -- \ viash run vsh://craftbox@v0.3.2/concat_rtext -- \
--input path/to/input.txt \ --input path/to/input.txt \
--input path/to/compressed.txt.gz \ --input path/to/compressed.txt.gz \
--output path/to/output.txt --output path/to/output.txt
@@ -80,7 +80,7 @@ You can run this component as a Nextflow pipeline.
``` bash ``` bash
nextflow run https://packages.viash-hub.com/vsh/craftbox \ nextflow run https://packages.viash-hub.com/vsh/craftbox \
-revision v0.3.1 \ -revision v0.3.2 \
-main-script target/nextflow/concat_rtext/main.nf \ -main-script target/nextflow/concat_rtext/main.nf \
-latest -resume \ -latest -resume \
-profile docker \ -profile docker \
@@ -109,7 +109,7 @@ component as a dependency:
``` yaml ``` yaml
dependencies: dependencies:
- name: concat_rtext - name: concat_rtext
repository: vsh://craftbox@v0.3.1 repository: vsh://craftbox@v0.3.2
``` ```
**Tip:** See the [Viash **Tip:** See the [Viash

View File

@@ -7,7 +7,7 @@ license <- paste0(package$links$repository, "/blob/main/LICENSE")
contributing <- paste0(package$links$repository, "/blob/main/CONTRIBUTING.md") contributing <- paste0(package$links$repository, "/blob/main/CONTRIBUTING.md")
pkg <- package$name pkg <- package$name
ver <- if (!is.null(package$version)) package$version else "v0.3.1" ver <- if (!is.null(package$version)) package$version else "v0.3.2"
comp <- "concat_rtext" comp <- "concat_rtext"
``` ```
# 🪡📦 `r pkg` # 🪡📦 `r pkg`

View File

@@ -1,5 +1,5 @@
name: craftbox name: craftbox
version: v0.3.1 version: v0.3.2
summary: | summary: |
A collection of custom-tailored scripts and applied utilities built with Viash. A collection of custom-tailored scripts and applied utilities built with Viash.
description: | description: |
@@ -19,7 +19,7 @@ license: MIT
links: links:
issue_tracker: https://github.com/viash-hub/craftbox/issues issue_tracker: https://github.com/viash-hub/craftbox/issues
repository: https://github.com/viash-hub/craftbox repository: https://github.com/viash-hub/craftbox
viash_version: 0.9.4 viash_version: 0.9.7
config_mods: | config_mods: |
.requirements.commands := ['ps'] .requirements.commands := ['ps']
organization: vsh organization: vsh

View File

@@ -1,6 +1,6 @@
manifest { manifest {
name = "craftbox" name = "craftbox"
version = "v0.3.1" version = "v0.3.2"
defaultBranch = "main" defaultBranch = "main"
nextflowVersion = "!>=20.12.1-edge" nextflowVersion = "!>=20.12.1-edge"
} }

View File

@@ -1,39 +1,52 @@
name: move_files_to_directory name: move_files_to_directory
summary: Publish one or multiple files to the same directory summary: Publish one or multiple files or directories to the same output directory.
description: This component copies one or multiple files to the same destination directory, creating the output directory if it doesn't exist. description: |
This component copies one or multiple files or directories
to the same destination directory, creating the output directory if it doesn't
exist.
authors: authors:
- __merge__: /src/_authors/dorien_roosen.yaml - __merge__: /src/_authors/dorien_roosen.yaml
roles: [ maintainer ] roles: [ maintainer ]
arguments:
- name: "--input" argument_groups:
type: file - name: Inputs
direction: input arguments:
required: true - name: "--input"
multiple: true type: file
description: Paths of the files that will be copied into the output directory. direction: input
- name: "--output" required: true
type: file multiple: true
direction: output description: Paths of the files or directories that will be copied into the output directory.
required: true - name: Outputs
description: Path to output directory arguments:
- name: "--keep_symbolic_links" - name: "--output"
alternatives: [-d] type: file
type: boolean_true direction: output
description: Preserve symbolic links. required: true
description: Path to output directory.
- name: Options
arguments:
- name: "--keep_symbolic_links"
type: boolean_true
description: When set, symbolic links are preserved as symbolic links in the output directory. By default, symbolic links are dereferenced and the target file is copied.
resources: resources:
- type: bash_script - type: bash_script
path: script.sh path: script.sh
test_resources: test_resources:
- type: bash_script - type: bash_script
path: test.sh path: test.sh
engines: engines:
- type: docker - type: docker
image: debian:latest image: debian:latest
setup: setup:
- type: apt - type: apt
packages: [procps] packages:
- procps
- type: native
runners: runners:
- type: executable - type: executable
- type: nextflow - type: nextflow

View File

@@ -3,30 +3,37 @@
set -eo pipefail set -eo pipefail
## VIASH START ## VIASH START
par_input="input.txt;input_2.txt" par_input="input.txt;input_dir.zarr"
par_output="output" par_output="output"
par_keep_symbolic_links="false"
## VIASH END ## VIASH END
if [[ ! -d "$par_output" ]]; then if [[ ! -d "$par_output" ]]; then
mkdir -p "$par_output" mkdir -p "$par_output"
fi fi
extra_params=( ) # Set copy flags based on options
if [[ "$par_keep_symbolic_links" == "true" ]]; then
if [ "$par_keep_symbolic_links" == "true" ]; then # -a implies -dR --preserve=all
extra_params+=( "-d" ) # with -d: same as --no-dereference (and --preserve=links)
# and --no-dereference: never follow symbolic links in SOURCE
# and -R, -r, --recursive: copy directories recursively
# --keep-directory-symlink: if the destination already exists and is a
# symbolic link to a directory, follow the symlink and copy into the directory
# it points to, instead of removing the symlink and creating a real directory in its place.
cp_flags="-a --keep-directory-symlink"
else
# -L: always follow symbolic links in SOURCE
cp_flags="-Lr --preserve=all --no-preserve=link --keep-directory-symlink"
fi fi
# Process multiple input files # Process multiple input paths (files or directories)
IFS=";" read -ra input_files <<< "$par_input" IFS=";" read -ra input_paths <<< "$par_input"
for file in "${input_files[@]}"; do for path in "${input_paths[@]}"; do
# Check if the file exists before copying if [[ -e "$path" ]] || [[ -L "$path" ]]; then
if [[ -f "$file" ]]; then cp $cp_flags "$path" "$par_output/"
echo "Copied $path to $par_output/"
cp ${extra_params[@]} "$file" "$par_output/"
echo "Copied $file to $par_output/"
else else
echo "Warning: Input file $file does not exist, skipping" echo "Warning: Input path $path does not exist, skipping"
fi fi
done done

View File

@@ -11,7 +11,7 @@ trap clean_up EXIT
touch "$TMPDIR/test_file.txt" touch "$TMPDIR/test_file.txt"
touch "$TMPDIR/another_file.txt" touch "$TMPDIR/another_file.txt"
./move_files_to_directory \ $meta_executable \
--input "$TMPDIR/test_file.txt" \ --input "$TMPDIR/test_file.txt" \
--input "$TMPDIR/another_file.txt" \ --input "$TMPDIR/another_file.txt" \
--output "$TMPDIR/test_output" --output "$TMPDIR/test_output"
@@ -19,9 +19,23 @@ touch "$TMPDIR/another_file.txt"
[[ ! -d "$TMPDIR/test_output" ]] && echo "It seems no output directory is generated" && exit 1 [[ ! -d "$TMPDIR/test_output" ]] && echo "It seems no output directory is generated" && exit 1
[[ ! -f "$TMPDIR/test_output/test_file.txt" ]] && [[ ! -f test_output/another_file.txt ]] && echo "Output files were not copied to the output directory" && exit 1 [[ ! -f "$TMPDIR/test_output/test_file.txt" ]] && [[ ! -f test_output/another_file.txt ]] && echo "Output files were not copied to the output directory" && exit 1
# Test copying a directory
mkdir -p "$TMPDIR/test_dir"
touch "$TMPDIR/test_dir/file_in_dir.txt"
touch "$TMPDIR/test_dir/another_file_in_dir.txt"
$meta_executable \
--input "$TMPDIR/test_dir" \
--output "$TMPDIR/test_output_dir"
[[ ! -d "$TMPDIR/test_output_dir" ]] && echo "It seems no output directory (test_output_dir) is generated" && exit 1
[[ ! -d "$TMPDIR/test_output_dir/test_dir" ]] && echo "Input directory was not copied to the output directory" && exit 1
[[ ! -f "$TMPDIR/test_output_dir/test_dir/file_in_dir.txt" ]] && echo "Files inside the copied directory are missing" && exit 1
[[ ! -f "$TMPDIR/test_output_dir/test_dir/another_file_in_dir.txt" ]] && echo "Files inside the copied directory are missing" && exit 1
ln -s "$TMPDIR/test_file.txt" "$TMPDIR/symlink.txt" ln -s "$TMPDIR/test_file.txt" "$TMPDIR/symlink.txt"
./move_files_to_directory \ $meta_executable \
--input "$TMPDIR/symlink.txt" \ --input "$TMPDIR/symlink.txt" \
--output "$TMPDIR/test_output_symlink" \ --output "$TMPDIR/test_output_symlink" \
--keep_symbolic_links --keep_symbolic_links

View File

@@ -1,5 +1,5 @@
name: "check_disk_space" name: "check_disk_space"
version: "v0.3.1" version: "v0.3.2"
argument_groups: argument_groups:
- name: "Inputs" - name: "Inputs"
arguments: arguments:
@@ -144,7 +144,7 @@ engines:
id: "docker" id: "docker"
image: "bash:latest" image: "bash:latest"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
entrypoint: [] entrypoint: []
cmd: null cmd: null
@@ -156,12 +156,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/executable/check_disk_space" output: "target/executable/check_disk_space"
executable: "target/executable/check_disk_space/check_disk_space" executable: "target/executable/check_disk_space/check_disk_space"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -177,14 +177,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# check_disk_space v0.3.1 # check_disk_space v0.3.2
# #
# This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative # This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
# work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data # work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
# Intuitive. # Intuitive.
# #
@@ -446,10 +446,10 @@ function ViashDockerfile {
FROM bash:latest FROM bash:latest
ENTRYPOINT [] ENTRYPOINT []
LABEL org.opencontainers.image.description="Companion container for running component check_disk_space" LABEL org.opencontainers.image.description="Companion container for running component check_disk_space"
LABEL org.opencontainers.image.created="2025-11-20T15:16:24Z" LABEL org.opencontainers.image.created="2026-03-03T15:11:57Z"
LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox" LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox"
LABEL org.opencontainers.image.revision="4acf73e0255554766186f4016986782c0d25c309" LABEL org.opencontainers.image.revision="7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
LABEL org.opencontainers.image.version="v0.3.1" LABEL org.opencontainers.image.version="v0.3.2"
VIASHDOCKER VIASHDOCKER
fi fi
@@ -566,7 +566,7 @@ VIASH_DOCKER_RUN_ARGS=(-i --rm)
# ViashHelp: Display helpful explanation about this executable # ViashHelp: Display helpful explanation about this executable
function ViashHelp { function ViashHelp {
echo "check_disk_space v0.3.1" echo "check_disk_space v0.3.2"
echo "" echo ""
echo "Check for available disk space on the system." echo "Check for available disk space on the system."
echo "" echo ""
@@ -648,7 +648,7 @@ while [[ $# -gt 0 ]]; do
shift 1 shift 1
;; ;;
--version) --version)
echo "check_disk_space v0.3.1" echo "check_disk_space v0.3.2"
exit exit
;; ;;
--tmp_space_required) --tmp_space_required)
@@ -783,7 +783,7 @@ if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# determine docker image id # determine docker image id
if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then
VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/check_disk_space:v0.3.1' VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/check_disk_space:v0.3.2'
fi fi
# print dockerfile # print dockerfile

View File

@@ -1,5 +1,5 @@
name: "concat_text" name: "concat_text"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Toni Verbeiren" - name: "Toni Verbeiren"
roles: roles:
@@ -171,7 +171,7 @@ engines:
id: "docker" id: "docker"
image: "alpine:latest" image: "alpine:latest"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apk" - type: "apk"
@@ -189,12 +189,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/executable/concat_text" output: "target/executable/concat_text"
executable: "target/executable/concat_text/concat_text" executable: "target/executable/concat_text/concat_text"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -210,14 +210,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# concat_text v0.3.1 # concat_text v0.3.2
# #
# This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative # This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
# work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data # work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
# Intuitive. # Intuitive.
# #
@@ -454,10 +454,10 @@ RUN apk add --no-cache bash procps file
LABEL org.opencontainers.image.authors="Toni Verbeiren, Dries Schaumont, Robrecht Cannoodt" LABEL org.opencontainers.image.authors="Toni Verbeiren, Dries Schaumont, Robrecht Cannoodt"
LABEL org.opencontainers.image.description="Companion container for running component concat_text" LABEL org.opencontainers.image.description="Companion container for running component concat_text"
LABEL org.opencontainers.image.created="2025-11-20T15:16:24Z" LABEL org.opencontainers.image.created="2026-03-03T15:11:58Z"
LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox" LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox"
LABEL org.opencontainers.image.revision="4acf73e0255554766186f4016986782c0d25c309" LABEL org.opencontainers.image.revision="7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
LABEL org.opencontainers.image.version="v0.3.1" LABEL org.opencontainers.image.version="v0.3.2"
VIASHDOCKER VIASHDOCKER
fi fi
@@ -574,7 +574,7 @@ VIASH_DOCKER_RUN_ARGS=(-i --rm)
# ViashHelp: Display helpful explanation about this executable # ViashHelp: Display helpful explanation about this executable
function ViashHelp { function ViashHelp {
echo "concat_text v0.3.1" echo "concat_text v0.3.2"
echo "" echo ""
echo "Concatenate a number of text files, handle gzipped text files gracefully and" echo "Concatenate a number of text files, handle gzipped text files gracefully and"
echo "optionally gzip the output text file." echo "optionally gzip the output text file."
@@ -645,7 +645,7 @@ while [[ $# -gt 0 ]]; do
shift 1 shift 1
;; ;;
--version) --version)
echo "concat_text v0.3.1" echo "concat_text v0.3.2"
exit exit
;; ;;
--input) --input)
@@ -769,7 +769,7 @@ if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# determine docker image id # determine docker image id
if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then
VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/concat_text:v0.3.1' VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/concat_text:v0.3.2'
fi fi
# print dockerfile # print dockerfile

View File

@@ -1,5 +1,5 @@
name: "csv2fasta" name: "csv2fasta"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Dries Schaumont" - name: "Dries Schaumont"
roles: roles:
@@ -227,7 +227,7 @@ engines:
id: "docker" id: "docker"
image: "python:slim" image: "python:slim"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apt" - type: "apt"
@@ -256,12 +256,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/executable/csv2fasta" output: "target/executable/csv2fasta"
executable: "target/executable/csv2fasta/csv2fasta" executable: "target/executable/csv2fasta/csv2fasta"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -277,14 +277,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# csv2fasta v0.3.1 # csv2fasta v0.3.2
# #
# This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative # This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
# work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data # work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
# Intuitive. # Intuitive.
# #
@@ -458,10 +458,10 @@ RUN pip install --upgrade pip && \
LABEL org.opencontainers.image.authors="Dries Schaumont, Robrecht Cannoodt" LABEL org.opencontainers.image.authors="Dries Schaumont, Robrecht Cannoodt"
LABEL org.opencontainers.image.description="Companion container for running component csv2fasta" LABEL org.opencontainers.image.description="Companion container for running component csv2fasta"
LABEL org.opencontainers.image.created="2025-11-20T15:16:24Z" LABEL org.opencontainers.image.created="2026-03-03T15:11:58Z"
LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox" LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox"
LABEL org.opencontainers.image.revision="4acf73e0255554766186f4016986782c0d25c309" LABEL org.opencontainers.image.revision="7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
LABEL org.opencontainers.image.version="v0.3.1" LABEL org.opencontainers.image.version="v0.3.2"
VIASHDOCKER VIASHDOCKER
fi fi
@@ -578,7 +578,7 @@ VIASH_DOCKER_RUN_ARGS=(-i --rm)
# ViashHelp: Display helpful explanation about this executable # ViashHelp: Display helpful explanation about this executable
function ViashHelp { function ViashHelp {
echo "csv2fasta v0.3.1" echo "csv2fasta v0.3.2"
echo "" echo ""
echo "Convert two columns from a CSV file to FASTA entries. The CSV file can" echo "Convert two columns from a CSV file to FASTA entries. The CSV file can"
echo "contain an optional header and each row (other than the header) becomes" echo "contain an optional header and each row (other than the header) becomes"
@@ -695,7 +695,7 @@ while [[ $# -gt 0 ]]; do
shift 1 shift 1
;; ;;
--version) --version)
echo "csv2fasta v0.3.1" echo "csv2fasta v0.3.2"
exit exit
;; ;;
--input) --input)
@@ -879,7 +879,7 @@ if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# determine docker image id # determine docker image id
if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then
VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/csv2fasta:v0.3.1' VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/csv2fasta:v0.3.2'
fi fi
# print dockerfile # print dockerfile

View File

@@ -1,5 +1,5 @@
name: "move_files_to_directory" name: "move_files_to_directory"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Dorien Roosen" - name: "Dorien Roosen"
roles: roles:
@@ -14,11 +14,12 @@ authors:
href: "https://www.data-intuitive.com" href: "https://www.data-intuitive.com"
role: "Data Scientist" role: "Data Scientist"
argument_groups: argument_groups:
- name: "Arguments" - name: "Inputs"
arguments: arguments:
- type: "file" - type: "file"
name: "--input" name: "--input"
description: "Paths of the files that will be copied into the output directory." description: "Paths of the files or directories that will be copied into the output\
\ directory."
info: null info: null
must_exist: true must_exist: true
create_parent: true create_parent: true
@@ -26,9 +27,11 @@ argument_groups:
direction: "input" direction: "input"
multiple: true multiple: true
multiple_sep: ";" multiple_sep: ";"
- name: "Outputs"
arguments:
- type: "file" - type: "file"
name: "--output" name: "--output"
description: "Path to output directory" description: "Path to output directory."
info: null info: null
must_exist: true must_exist: true
create_parent: true create_parent: true
@@ -36,20 +39,22 @@ argument_groups:
direction: "output" direction: "output"
multiple: false multiple: false
multiple_sep: ";" multiple_sep: ";"
- name: "Options"
arguments:
- type: "boolean_true" - type: "boolean_true"
name: "--keep_symbolic_links" name: "--keep_symbolic_links"
alternatives: description: "When set, symbolic links are preserved as symbolic links in the\
- "-d" \ output directory. By default, symbolic links are dereferenced and the target\
description: "Preserve symbolic links." \ file is copied."
info: null info: null
direction: "input" direction: "input"
resources: resources:
- type: "bash_script" - type: "bash_script"
path: "script.sh" path: "script.sh"
is_executable: true is_executable: true
summary: "Publish one or multiple files to the same directory" summary: "Publish one or multiple files or directories to the same output directory."
description: "This component copies one or multiple files to the same destination\ description: "This component copies one or multiple files or directories\nto the same\
\ directory, creating the output directory if it doesn't exist." \ destination directory, creating the output directory if it doesn't\nexist.\n"
test_resources: test_resources:
- type: "bash_script" - type: "bash_script"
path: "test.sh" path: "test.sh"
@@ -135,7 +140,7 @@ engines:
id: "docker" id: "docker"
image: "debian:latest" image: "debian:latest"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apt" - type: "apt"
@@ -146,18 +151,20 @@ engines:
cmd: null cmd: null
- type: "native" - type: "native"
id: "native" id: "native"
- type: "native"
id: "native"
build_info: build_info:
config: "src/move_files_to_directory/config.vsh.yaml" config: "src/move_files_to_directory/config.vsh.yaml"
runner: "executable" runner: "executable"
engine: "docker|native" engine: "docker|native|native"
output: "target/executable/move_files_to_directory" output: "target/executable/move_files_to_directory"
executable: "target/executable/move_files_to_directory/move_files_to_directory" executable: "target/executable/move_files_to_directory/move_files_to_directory"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -173,14 +180,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# move_files_to_directory v0.3.1 # move_files_to_directory v0.3.2
# #
# This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative # This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
# work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data # work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
# Intuitive. # Intuitive.
# #
@@ -454,10 +454,10 @@ RUN apt-get update && \
LABEL org.opencontainers.image.authors="Dorien Roosen" LABEL org.opencontainers.image.authors="Dorien Roosen"
LABEL org.opencontainers.image.description="Companion container for running component move_files_to_directory" LABEL org.opencontainers.image.description="Companion container for running component move_files_to_directory"
LABEL org.opencontainers.image.created="2025-11-20T15:16:24Z" LABEL org.opencontainers.image.created="2026-03-03T15:11:58Z"
LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox" LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox"
LABEL org.opencontainers.image.revision="4acf73e0255554766186f4016986782c0d25c309" LABEL org.opencontainers.image.revision="7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
LABEL org.opencontainers.image.version="v0.3.1" LABEL org.opencontainers.image.version="v0.3.2"
VIASHDOCKER VIASHDOCKER
fi fi
@@ -574,23 +574,29 @@ VIASH_DOCKER_RUN_ARGS=(-i --rm)
# ViashHelp: Display helpful explanation about this executable # ViashHelp: Display helpful explanation about this executable
function ViashHelp { function ViashHelp {
echo "move_files_to_directory v0.3.1" echo "move_files_to_directory v0.3.2"
echo "" echo ""
echo "This component copies one or multiple files to the same destination directory," echo "This component copies one or multiple files or directories"
echo "creating the output directory if it doesn't exist." echo "to the same destination directory, creating the output directory if it doesn't"
echo "exist."
echo "" echo ""
echo "Arguments:" echo "Inputs:"
echo " --input" echo " --input"
echo " type: file, required parameter, multiple values allowed, file must exist" echo " type: file, required parameter, multiple values allowed, file must exist"
echo " Paths of the files that will be copied into the output directory." echo " Paths of the files or directories that will be copied into the output"
echo " directory."
echo "" echo ""
echo "Outputs:"
echo " --output" echo " --output"
echo " type: file, required parameter, output, file must exist" echo " type: file, required parameter, output, file must exist"
echo " Path to output directory" echo " Path to output directory."
echo "" echo ""
echo " -d, --keep_symbolic_links" echo "Options:"
echo " --keep_symbolic_links"
echo " type: boolean_true" echo " type: boolean_true"
echo " Preserve symbolic links." echo " When set, symbolic links are preserved as symbolic links in the output"
echo " directory. By default, symbolic links are dereferenced and the target"
echo " file is copied."
echo "" echo ""
echo "Viash built in Computational Requirements:" echo "Viash built in Computational Requirements:"
echo " ---cpus=INT" echo " ---cpus=INT"
@@ -613,7 +619,7 @@ function ViashHelp {
echo "" echo ""
echo "Viash built in Engines:" echo "Viash built in Engines:"
echo " ---engine=ENGINE_ID" echo " ---engine=ENGINE_ID"
echo " Specify the engine to use. Options are: docker, native." echo " Specify the engine to use. Options are: docker, native, native."
echo " Default: docker" echo " Default: docker"
} }
@@ -639,7 +645,7 @@ while [[ $# -gt 0 ]]; do
shift 1 shift 1
;; ;;
--version) --version)
echo "move_files_to_directory v0.3.1" echo "move_files_to_directory v0.3.2"
exit exit
;; ;;
--input) --input)
@@ -675,11 +681,6 @@ while [[ $# -gt 0 ]]; do
VIASH_PAR_KEEP_SYMBOLIC_LINKS=true VIASH_PAR_KEEP_SYMBOLIC_LINKS=true
shift 1 shift 1
;; ;;
-d)
[ -n "$VIASH_PAR_KEEP_SYMBOLIC_LINKS" ] && ViashError Bad arguments for option \'-d\': \'$VIASH_PAR_KEEP_SYMBOLIC_LINKS\' \& \'$2\' - you should provide exactly one argument for this option. && exit 1
VIASH_PAR_KEEP_SYMBOLIC_LINKS=true
shift 1
;;
---engine) ---engine)
VIASH_ENGINE_ID="$2" VIASH_ENGINE_ID="$2"
shift 2 shift 2
@@ -753,12 +754,12 @@ done
eval set -- $VIASH_POSITIONAL_ARGS eval set -- $VIASH_POSITIONAL_ARGS
if [ "$VIASH_ENGINE_ID" == "native" ] ; then if [ "$VIASH_ENGINE_ID" == "native" ] || [ "$VIASH_ENGINE_ID" == "native" ] ; then
VIASH_ENGINE_TYPE='native' VIASH_ENGINE_TYPE='native'
elif [ "$VIASH_ENGINE_ID" == "docker" ] ; then elif [ "$VIASH_ENGINE_ID" == "docker" ] ; then
VIASH_ENGINE_TYPE='docker' VIASH_ENGINE_TYPE='docker'
else else
ViashError "Engine '$VIASH_ENGINE_ID' is not recognized. Options are: docker, native." ViashError "Engine '$VIASH_ENGINE_ID' is not recognized. Options are: docker, native, native."
exit 1 exit 1
fi fi
@@ -768,7 +769,7 @@ if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# determine docker image id # determine docker image id
if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then
VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/move_files_to_directory:v0.3.1' VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/move_files_to_directory:v0.3.2'
fi fi
# print dockerfile # print dockerfile
@@ -989,7 +990,7 @@ if [ ! -z "$VIASH_PAR_OUTPUT" ] && [ ! -d "$(dirname "$VIASH_PAR_OUTPUT")" ]; th
mkdir -p "$(dirname "$VIASH_PAR_OUTPUT")" mkdir -p "$(dirname "$VIASH_PAR_OUTPUT")"
fi fi
if [ "$VIASH_ENGINE_ID" == "native" ] ; then if [ "$VIASH_ENGINE_ID" == "native" ] || [ "$VIASH_ENGINE_ID" == "native" ] ; then
if [ "$VIASH_MODE" == "run" ]; then if [ "$VIASH_MODE" == "run" ]; then
VIASH_CMD="bash" VIASH_CMD="bash"
else else
@@ -1114,27 +1115,33 @@ $( if [ ! -z ${VIASH_META_MEMORY_PIB+x} ]; then echo "${VIASH_META_MEMORY_PIB}"
## VIASH END ## VIASH END
if [[ ! -d "\$par_output" ]]; then if [[ ! -d "\$par_output" ]]; then
mkdir -p "\$par_output" mkdir -p "\$par_output"
fi fi
extra_params=( ) # Set copy flags based on options
if [[ "\$par_keep_symbolic_links" == "true" ]]; then
if [ "\$par_keep_symbolic_links" == "true" ]; then # -a implies -dR --preserve=all
extra_params+=( "-d" ) # with -d: same as --no-dereference (and --preserve=links)
# and --no-dereference: never follow symbolic links in SOURCE
# and -R, -r, --recursive: copy directories recursively
# --keep-directory-symlink: if the destination already exists and is a
# symbolic link to a directory, follow the symlink and copy into the directory
# it points to, instead of removing the symlink and creating a real directory in its place.
cp_flags="-a --keep-directory-symlink"
else
# -L: always follow symbolic links in SOURCE
cp_flags="-Lr --preserve=all --no-preserve=link --keep-directory-symlink"
fi fi
# Process multiple input files # Process multiple input paths (files or directories)
IFS=";" read -ra input_files <<< "\$par_input" IFS=";" read -ra input_paths <<< "\$par_input"
for file in "\${input_files[@]}"; do for path in "\${input_paths[@]}"; do
# Check if the file exists before copying if [[ -e "\$path" ]] || [[ -L "\$path" ]]; then
if [[ -f "\$file" ]]; then cp \$cp_flags "\$path" "\$par_output/"
echo "Copied \$path to \$par_output/"
cp \${extra_params[@]} "\$file" "\$par_output/"
echo "Copied \$file to \$par_output/"
else else
echo "Warning: Input file \$file does not exist, skipping" echo "Warning: Input path \$path does not exist, skipping"
fi fi
done done
VIASHMAIN VIASHMAIN

View File

@@ -1,5 +1,5 @@
name: "sync_resources" name: "sync_resources"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Robrecht Cannoodt" - name: "Robrecht Cannoodt"
roles: roles:
@@ -174,7 +174,7 @@ engines:
id: "docker" id: "docker"
image: "alpine:3" image: "alpine:3"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apk" - type: "apk"
@@ -196,12 +196,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/executable/sync_resources" output: "target/executable/sync_resources"
executable: "target/executable/sync_resources/sync_resources" executable: "target/executable/sync_resources/sync_resources"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -217,14 +217,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# sync_resources v0.3.1 # sync_resources v0.3.2
# #
# This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative # This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
# work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data # work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
# Intuitive. # Intuitive.
# #
@@ -455,10 +455,10 @@ RUN rclone config create s3 s3 anonymous=true
RUN rclone config create gs gcs anonymous=true RUN rclone config create gs gcs anonymous=true
LABEL org.opencontainers.image.authors="Robrecht Cannoodt, Dries Schaumont" LABEL org.opencontainers.image.authors="Robrecht Cannoodt, Dries Schaumont"
LABEL org.opencontainers.image.description="Companion container for running component sync_resources" LABEL org.opencontainers.image.description="Companion container for running component sync_resources"
LABEL org.opencontainers.image.created="2025-11-20T15:16:24Z" LABEL org.opencontainers.image.created="2026-03-03T15:11:58Z"
LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox" LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox"
LABEL org.opencontainers.image.revision="4acf73e0255554766186f4016986782c0d25c309" LABEL org.opencontainers.image.revision="7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
LABEL org.opencontainers.image.version="v0.3.1" LABEL org.opencontainers.image.version="v0.3.2"
VIASHDOCKER VIASHDOCKER
fi fi
@@ -575,7 +575,7 @@ VIASH_DOCKER_RUN_ARGS=(-i --rm)
# ViashHelp: Display helpful explanation about this executable # ViashHelp: Display helpful explanation about this executable
function ViashHelp { function ViashHelp {
echo "sync_resources v0.3.1" echo "sync_resources v0.3.2"
echo "" echo ""
echo "Sync a Viash package's test resources to the local filesystem based on the" echo "Sync a Viash package's test resources to the local filesystem based on the"
echo "the \`.info.test_resources\` field in the \`_viash.yaml\` file. This is useful for" echo "the \`.info.test_resources\` field in the \`_viash.yaml\` file. This is useful for"
@@ -654,7 +654,7 @@ while [[ $# -gt 0 ]]; do
shift 1 shift 1
;; ;;
--version) --version)
echo "sync_resources v0.3.1" echo "sync_resources v0.3.2"
exit exit
;; ;;
--input) --input)
@@ -801,7 +801,7 @@ if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# determine docker image id # determine docker image id
if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then
VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/sync_resources:v0.3.1' VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/sync_resources:v0.3.2'
fi fi
# print dockerfile # print dockerfile

View File

@@ -1,5 +1,5 @@
name: "untar" name: "untar"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Dries Schaumont" - name: "Dries Schaumont"
roles: roles:
@@ -164,7 +164,7 @@ engines:
id: "docker" id: "docker"
image: "debian:stable-slim" image: "debian:stable-slim"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apt" - type: "apt"
@@ -181,12 +181,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/executable/untar" output: "target/executable/untar"
executable: "target/executable/untar/untar" executable: "target/executable/untar/untar"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -202,14 +202,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# untar v0.3.1 # untar v0.3.2
# #
# This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative # This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
# work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data # work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
# Intuitive. # Intuitive.
# #
@@ -455,10 +455,10 @@ RUN apt-get update && \
LABEL org.opencontainers.image.authors="Dries Schaumont, Robrecht Cannoodt" LABEL org.opencontainers.image.authors="Dries Schaumont, Robrecht Cannoodt"
LABEL org.opencontainers.image.description="Companion container for running component untar" LABEL org.opencontainers.image.description="Companion container for running component untar"
LABEL org.opencontainers.image.created="2025-11-20T15:16:24Z" LABEL org.opencontainers.image.created="2026-03-03T15:11:57Z"
LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox" LABEL org.opencontainers.image.source="https://github.com/viash-hub/craftbox"
LABEL org.opencontainers.image.revision="4acf73e0255554766186f4016986782c0d25c309" LABEL org.opencontainers.image.revision="7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
LABEL org.opencontainers.image.version="v0.3.1" LABEL org.opencontainers.image.version="v0.3.2"
VIASHDOCKER VIASHDOCKER
fi fi
@@ -575,7 +575,7 @@ VIASH_DOCKER_RUN_ARGS=(-i --rm)
# ViashHelp: Display helpful explanation about this executable # ViashHelp: Display helpful explanation about this executable
function ViashHelp { function ViashHelp {
echo "untar v0.3.1" echo "untar v0.3.2"
echo "" echo ""
echo "Unpack a .tar file. When the contents of the .tar file is just a single" echo "Unpack a .tar file. When the contents of the .tar file is just a single"
echo "directory," echo "directory,"
@@ -646,7 +646,7 @@ while [[ $# -gt 0 ]]; do
shift 1 shift 1
;; ;;
--version) --version)
echo "untar v0.3.1" echo "untar v0.3.2"
exit exit
;; ;;
--input) --input)
@@ -776,7 +776,7 @@ if [[ "$VIASH_ENGINE_TYPE" == "docker" ]]; then
# determine docker image id # determine docker image id
if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then if [[ "$VIASH_ENGINE_ID" == 'docker' ]]; then
VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/untar:v0.3.1' VIASH_DOCKER_IMAGE_ID='images.viash-hub.com/vsh/craftbox/untar:v0.3.2'
fi fi
# print dockerfile # print dockerfile

View File

@@ -1,5 +1,5 @@
name: "check_disk_space" name: "check_disk_space"
version: "v0.3.1" version: "v0.3.2"
argument_groups: argument_groups:
- name: "Inputs" - name: "Inputs"
arguments: arguments:
@@ -144,7 +144,7 @@ engines:
id: "docker" id: "docker"
image: "bash:latest" image: "bash:latest"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
entrypoint: [] entrypoint: []
cmd: null cmd: null
@@ -156,12 +156,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/nextflow/check_disk_space" output: "target/nextflow/check_disk_space"
executable: "target/nextflow/check_disk_space/main.nf" executable: "target/nextflow/check_disk_space/main.nf"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -177,14 +177,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,6 +1,6 @@
// check_disk_space v0.3.1 // check_disk_space v0.3.2
// //
// This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative // This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data // work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
// Intuitive. // Intuitive.
// //
@@ -1350,47 +1350,42 @@ def readCsv(file_path) {
def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''') def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''')
def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''') def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''')
def br = java.nio.file.Files.newBufferedReader(inputFile) java.nio.file.Files.newBufferedReader(inputFile).withCloseable { br ->
def row = 0
def header = null
def line
def row = -1 while (header == null && (line = br.readLine()) != null) {
def header = null if (!line.startsWith("#")) {
while (br.ready() && header == null) { header = splitRegex.split(line, -1).collect { field ->
def line = br.readLine() def m = removeQuote.matcher(field)
row++ m.find() ? m.replaceFirst('$1') : field
if (!line.startsWith("#")) {
header = splitRegex.split(line, -1).collect{field ->
m = removeQuote.matcher(field)
m.find() ? m.replaceFirst('$1') : field
}
}
}
assert header != null: "CSV file should contain a header"
while (br.ready()) {
def line = br.readLine()
row++
if (line == null) {
br.close()
break
}
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect{field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
} }
} }
assert header.size() == data.size(): "Row $row should contain the same number as fields as the header" row++
}
def dataMap = [header, data].transpose().collectEntries().findAll{it.value != null} assert header != null : "CSV file should contain a header"
output.add(dataMap)
while ((line = br.readLine()) != null) {
row++
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect { field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
}
}
assert header.size() == data.size() : "Row $row should contain the same number as fields as the header"
def dataMap = [header, data].transpose().collectEntries().findAll { it.value != null }
output.add(dataMap)
}
} }
} }
@@ -1706,10 +1701,25 @@ process publishFilesProc {
] ]
.transpose() .transpose()
.collectMany{infile, outfile -> .collectMany{infile, outfile ->
if (infile.toString() != outfile.toString()) { def infileString = infile.toString()
def outfileString = outfile.toString()
if (infileString != outfileString) {
/* Trailing slashes are removed from both the source and destination arguments.
From source arguments, this is useful when a source argument may have a trailing slash
and specify a symbolic link to a directory. Without removing the slash, cp will dereference
the symbolic link.
See https://www.gnu.org/software/coreutils/manual/html_node/Trailing-slashes.html#Trailing-slashes-1
For the destination path addding a trailing slash is a problem when publishing directories:
it requires the destination directory to exist. This fails because we only create the parent
directories first.
*/
def regexTrailingSlashes = ~/\/+$/
def infileNoTrailingSlash = infileString - regexTrailingSlashes
def outfileNoTrailingSlash = outfileString - regexTrailingSlashes
[ [
"[ -d \"\$(dirname '${outfile.toString()}')\" ] || mkdir -p \"\$(dirname '${outfile.toString()}')\"", "[ -d \"\$(dirname '${outfileNoTrailingSlash}')\" ] || mkdir -p \"\$(dirname '${outfileNoTrailingSlash}')\"",
"cp -r '${infile.toString()}' '${outfile.toString()}'" "cp -a '${infileNoTrailingSlash}' '${outfileNoTrailingSlash}'"
] ]
} else { } else {
// no need to copy if infile is the same as outfile // no need to copy if infile is the same as outfile
@@ -3031,7 +3041,7 @@ meta = [
"resources_dir": moduleDir.toRealPath().normalize(), "resources_dir": moduleDir.toRealPath().normalize(),
"config": processConfig(readJsonBlob('''{ "config": processConfig(readJsonBlob('''{
"name" : "check_disk_space", "name" : "check_disk_space",
"version" : "v0.3.1", "version" : "v0.3.2",
"argument_groups" : [ "argument_groups" : [
{ {
"name" : "Inputs", "name" : "Inputs",
@@ -3202,7 +3212,7 @@ meta = [
"id" : "docker", "id" : "docker",
"image" : "bash:latest", "image" : "bash:latest",
"target_registry" : "images.viash-hub.com", "target_registry" : "images.viash-hub.com",
"target_tag" : "v0.3.1", "target_tag" : "v0.3.2",
"namespace_separator" : "/" "namespace_separator" : "/"
}, },
{ {
@@ -3215,23 +3225,23 @@ meta = [
"runner" : "nextflow", "runner" : "nextflow",
"engine" : "docker|native", "engine" : "docker|native",
"output" : "target/nextflow/check_disk_space", "output" : "target/nextflow/check_disk_space",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"git_commit" : "4acf73e0255554766186f4016986782c0d25c309", "git_commit" : "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9",
"git_remote" : "https://github.com/viash-hub/craftbox" "git_remote" : "https://github.com/viash-hub/craftbox"
}, },
"package_config" : { "package_config" : {
"name" : "craftbox", "name" : "craftbox",
"version" : "v0.3.1", "version" : "v0.3.2",
"summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n", "summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n",
"description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n", "description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"source" : "src", "source" : "src",
"target" : "target", "target" : "target",
"config_mods" : [ "config_mods" : [
".requirements.commands := ['ps']\n", ".requirements.commands := ['ps']\n",
".engines += { type: \\"native\\" }", ".engines += { type: \\"native\\" }",
".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'",
".engines[.type == 'docker'].target_tag := 'v0.3.1'" ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
], ],
"keywords" : [ "keywords" : [
"scripts", "scripts",
@@ -3685,7 +3695,7 @@ meta["defaults"] = [
"container" : { "container" : {
"registry" : "images.viash-hub.com", "registry" : "images.viash-hub.com",
"image" : "vsh/craftbox/check_disk_space", "image" : "vsh/craftbox/check_disk_space",
"tag" : "v0.3.1" "tag" : "v0.3.2"
}, },
"tag" : "$id" "tag" : "$id"
}'''), }'''),

View File

@@ -2,7 +2,7 @@ manifest {
name = 'check_disk_space' name = 'check_disk_space'
mainScript = 'main.nf' mainScript = 'main.nf'
nextflowVersion = '!>=20.12.1-edge' nextflowVersion = '!>=20.12.1-edge'
version = 'v0.3.1' version = 'v0.3.2'
description = 'Check for available disk space on the system.\n\nThis component is only useful when working with persistent storage environments\nwhere all workflow steps execute on the same instance or share the same\nstorage volume. That is, running thus component on e.g. AWS Batch or\nother cloud-based systems will not work as expected, since each step\ncan run on a different instance and resources will not be shared.\n\nFor distributed environments, consider integrating resource checks directly\ninto the components that will actually consume the storage, rather than\nusing this standalone check.\n' description = 'Check for available disk space on the system.\n\nThis component is only useful when working with persistent storage environments\nwhere all workflow steps execute on the same instance or share the same\nstorage volume. That is, running thus component on e.g. AWS Batch or\nother cloud-based systems will not work as expected, since each step\ncan run on a different instance and resources will not be shared.\n\nFor distributed environments, consider integrating resource checks directly\ninto the components that will actually consume the storage, rather than\nusing this standalone check.\n'
} }

View File

@@ -1,5 +1,5 @@
name: "concat_text" name: "concat_text"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Toni Verbeiren" - name: "Toni Verbeiren"
roles: roles:
@@ -171,7 +171,7 @@ engines:
id: "docker" id: "docker"
image: "alpine:latest" image: "alpine:latest"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apk" - type: "apk"
@@ -189,12 +189,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/nextflow/concat_text" output: "target/nextflow/concat_text"
executable: "target/nextflow/concat_text/main.nf" executable: "target/nextflow/concat_text/main.nf"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -210,14 +210,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,6 +1,6 @@
// concat_text v0.3.1 // concat_text v0.3.2
// //
// This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative // This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data // work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
// Intuitive. // Intuitive.
// //
@@ -1355,47 +1355,42 @@ def readCsv(file_path) {
def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''') def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''')
def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''') def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''')
def br = java.nio.file.Files.newBufferedReader(inputFile) java.nio.file.Files.newBufferedReader(inputFile).withCloseable { br ->
def row = 0
def header = null
def line
def row = -1 while (header == null && (line = br.readLine()) != null) {
def header = null if (!line.startsWith("#")) {
while (br.ready() && header == null) { header = splitRegex.split(line, -1).collect { field ->
def line = br.readLine() def m = removeQuote.matcher(field)
row++ m.find() ? m.replaceFirst('$1') : field
if (!line.startsWith("#")) {
header = splitRegex.split(line, -1).collect{field ->
m = removeQuote.matcher(field)
m.find() ? m.replaceFirst('$1') : field
}
}
}
assert header != null: "CSV file should contain a header"
while (br.ready()) {
def line = br.readLine()
row++
if (line == null) {
br.close()
break
}
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect{field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
} }
} }
assert header.size() == data.size(): "Row $row should contain the same number as fields as the header" row++
}
def dataMap = [header, data].transpose().collectEntries().findAll{it.value != null} assert header != null : "CSV file should contain a header"
output.add(dataMap)
while ((line = br.readLine()) != null) {
row++
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect { field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
}
}
assert header.size() == data.size() : "Row $row should contain the same number as fields as the header"
def dataMap = [header, data].transpose().collectEntries().findAll { it.value != null }
output.add(dataMap)
}
} }
} }
@@ -1711,10 +1706,25 @@ process publishFilesProc {
] ]
.transpose() .transpose()
.collectMany{infile, outfile -> .collectMany{infile, outfile ->
if (infile.toString() != outfile.toString()) { def infileString = infile.toString()
def outfileString = outfile.toString()
if (infileString != outfileString) {
/* Trailing slashes are removed from both the source and destination arguments.
From source arguments, this is useful when a source argument may have a trailing slash
and specify a symbolic link to a directory. Without removing the slash, cp will dereference
the symbolic link.
See https://www.gnu.org/software/coreutils/manual/html_node/Trailing-slashes.html#Trailing-slashes-1
For the destination path addding a trailing slash is a problem when publishing directories:
it requires the destination directory to exist. This fails because we only create the parent
directories first.
*/
def regexTrailingSlashes = ~/\/+$/
def infileNoTrailingSlash = infileString - regexTrailingSlashes
def outfileNoTrailingSlash = outfileString - regexTrailingSlashes
[ [
"[ -d \"\$(dirname '${outfile.toString()}')\" ] || mkdir -p \"\$(dirname '${outfile.toString()}')\"", "[ -d \"\$(dirname '${outfileNoTrailingSlash}')\" ] || mkdir -p \"\$(dirname '${outfileNoTrailingSlash}')\"",
"cp -r '${infile.toString()}' '${outfile.toString()}'" "cp -a '${infileNoTrailingSlash}' '${outfileNoTrailingSlash}'"
] ]
} else { } else {
// no need to copy if infile is the same as outfile // no need to copy if infile is the same as outfile
@@ -3036,7 +3046,7 @@ meta = [
"resources_dir": moduleDir.toRealPath().normalize(), "resources_dir": moduleDir.toRealPath().normalize(),
"config": processConfig(readJsonBlob('''{ "config": processConfig(readJsonBlob('''{
"name" : "concat_text", "name" : "concat_text",
"version" : "v0.3.1", "version" : "v0.3.2",
"authors" : [ "authors" : [
{ {
"name" : "Toni Verbeiren", "name" : "Toni Verbeiren",
@@ -3265,7 +3275,7 @@ meta = [
"id" : "docker", "id" : "docker",
"image" : "alpine:latest", "image" : "alpine:latest",
"target_registry" : "images.viash-hub.com", "target_registry" : "images.viash-hub.com",
"target_tag" : "v0.3.1", "target_tag" : "v0.3.2",
"namespace_separator" : "/", "namespace_separator" : "/",
"setup" : [ "setup" : [
{ {
@@ -3288,23 +3298,23 @@ meta = [
"runner" : "nextflow", "runner" : "nextflow",
"engine" : "docker|native", "engine" : "docker|native",
"output" : "target/nextflow/concat_text", "output" : "target/nextflow/concat_text",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"git_commit" : "4acf73e0255554766186f4016986782c0d25c309", "git_commit" : "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9",
"git_remote" : "https://github.com/viash-hub/craftbox" "git_remote" : "https://github.com/viash-hub/craftbox"
}, },
"package_config" : { "package_config" : {
"name" : "craftbox", "name" : "craftbox",
"version" : "v0.3.1", "version" : "v0.3.2",
"summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n", "summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n",
"description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n", "description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"source" : "src", "source" : "src",
"target" : "target", "target" : "target",
"config_mods" : [ "config_mods" : [
".requirements.commands := ['ps']\n", ".requirements.commands := ['ps']\n",
".engines += { type: \\"native\\" }", ".engines += { type: \\"native\\" }",
".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'",
".engines[.type == 'docker'].target_tag := 'v0.3.1'" ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
], ],
"keywords" : [ "keywords" : [
"scripts", "scripts",
@@ -3798,7 +3808,7 @@ meta["defaults"] = [
"container" : { "container" : {
"registry" : "images.viash-hub.com", "registry" : "images.viash-hub.com",
"image" : "vsh/craftbox/concat_text", "image" : "vsh/craftbox/concat_text",
"tag" : "v0.3.1" "tag" : "v0.3.2"
}, },
"tag" : "$id" "tag" : "$id"
}'''), }'''),

View File

@@ -2,7 +2,7 @@ manifest {
name = 'concat_text' name = 'concat_text'
mainScript = 'main.nf' mainScript = 'main.nf'
nextflowVersion = '!>=20.12.1-edge' nextflowVersion = '!>=20.12.1-edge'
version = 'v0.3.1' version = 'v0.3.2'
description = 'Concatenate a number of text files, handle gzipped text files gracefully and\noptionally gzip the output text file.\n\nThis component is useful for concatening fastq files from different lanes, for instance.\n' description = 'Concatenate a number of text files, handle gzipped text files gracefully and\noptionally gzip the output text file.\n\nThis component is useful for concatening fastq files from different lanes, for instance.\n'
author = 'Toni Verbeiren, Dries Schaumont, Robrecht Cannoodt' author = 'Toni Verbeiren, Dries Schaumont, Robrecht Cannoodt'
} }

View File

@@ -1,5 +1,5 @@
name: "csv2fasta" name: "csv2fasta"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Dries Schaumont" - name: "Dries Schaumont"
roles: roles:
@@ -227,7 +227,7 @@ engines:
id: "docker" id: "docker"
image: "python:slim" image: "python:slim"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apt" - type: "apt"
@@ -256,12 +256,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/nextflow/csv2fasta" output: "target/nextflow/csv2fasta"
executable: "target/nextflow/csv2fasta/main.nf" executable: "target/nextflow/csv2fasta/main.nf"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -277,14 +277,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,6 +1,6 @@
// csv2fasta v0.3.1 // csv2fasta v0.3.2
// //
// This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative // This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data // work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
// Intuitive. // Intuitive.
// //
@@ -1354,47 +1354,42 @@ def readCsv(file_path) {
def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''') def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''')
def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''') def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''')
def br = java.nio.file.Files.newBufferedReader(inputFile) java.nio.file.Files.newBufferedReader(inputFile).withCloseable { br ->
def row = 0
def header = null
def line
def row = -1 while (header == null && (line = br.readLine()) != null) {
def header = null if (!line.startsWith("#")) {
while (br.ready() && header == null) { header = splitRegex.split(line, -1).collect { field ->
def line = br.readLine() def m = removeQuote.matcher(field)
row++ m.find() ? m.replaceFirst('$1') : field
if (!line.startsWith("#")) {
header = splitRegex.split(line, -1).collect{field ->
m = removeQuote.matcher(field)
m.find() ? m.replaceFirst('$1') : field
}
}
}
assert header != null: "CSV file should contain a header"
while (br.ready()) {
def line = br.readLine()
row++
if (line == null) {
br.close()
break
}
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect{field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
} }
} }
assert header.size() == data.size(): "Row $row should contain the same number as fields as the header" row++
}
def dataMap = [header, data].transpose().collectEntries().findAll{it.value != null} assert header != null : "CSV file should contain a header"
output.add(dataMap)
while ((line = br.readLine()) != null) {
row++
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect { field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
}
}
assert header.size() == data.size() : "Row $row should contain the same number as fields as the header"
def dataMap = [header, data].transpose().collectEntries().findAll { it.value != null }
output.add(dataMap)
}
} }
} }
@@ -1710,10 +1705,25 @@ process publishFilesProc {
] ]
.transpose() .transpose()
.collectMany{infile, outfile -> .collectMany{infile, outfile ->
if (infile.toString() != outfile.toString()) { def infileString = infile.toString()
def outfileString = outfile.toString()
if (infileString != outfileString) {
/* Trailing slashes are removed from both the source and destination arguments.
From source arguments, this is useful when a source argument may have a trailing slash
and specify a symbolic link to a directory. Without removing the slash, cp will dereference
the symbolic link.
See https://www.gnu.org/software/coreutils/manual/html_node/Trailing-slashes.html#Trailing-slashes-1
For the destination path addding a trailing slash is a problem when publishing directories:
it requires the destination directory to exist. This fails because we only create the parent
directories first.
*/
def regexTrailingSlashes = ~/\/+$/
def infileNoTrailingSlash = infileString - regexTrailingSlashes
def outfileNoTrailingSlash = outfileString - regexTrailingSlashes
[ [
"[ -d \"\$(dirname '${outfile.toString()}')\" ] || mkdir -p \"\$(dirname '${outfile.toString()}')\"", "[ -d \"\$(dirname '${outfileNoTrailingSlash}')\" ] || mkdir -p \"\$(dirname '${outfileNoTrailingSlash}')\"",
"cp -r '${infile.toString()}' '${outfile.toString()}'" "cp -a '${infileNoTrailingSlash}' '${outfileNoTrailingSlash}'"
] ]
} else { } else {
// no need to copy if infile is the same as outfile // no need to copy if infile is the same as outfile
@@ -3035,7 +3045,7 @@ meta = [
"resources_dir": moduleDir.toRealPath().normalize(), "resources_dir": moduleDir.toRealPath().normalize(),
"config": processConfig(readJsonBlob('''{ "config": processConfig(readJsonBlob('''{
"name" : "csv2fasta", "name" : "csv2fasta",
"version" : "v0.3.1", "version" : "v0.3.2",
"authors" : [ "authors" : [
{ {
"name" : "Dries Schaumont", "name" : "Dries Schaumont",
@@ -3310,7 +3320,7 @@ meta = [
"id" : "docker", "id" : "docker",
"image" : "python:slim", "image" : "python:slim",
"target_registry" : "images.viash-hub.com", "target_registry" : "images.viash-hub.com",
"target_tag" : "v0.3.1", "target_tag" : "v0.3.2",
"namespace_separator" : "/", "namespace_separator" : "/",
"setup" : [ "setup" : [
{ {
@@ -3351,23 +3361,23 @@ meta = [
"runner" : "nextflow", "runner" : "nextflow",
"engine" : "docker|native", "engine" : "docker|native",
"output" : "target/nextflow/csv2fasta", "output" : "target/nextflow/csv2fasta",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"git_commit" : "4acf73e0255554766186f4016986782c0d25c309", "git_commit" : "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9",
"git_remote" : "https://github.com/viash-hub/craftbox" "git_remote" : "https://github.com/viash-hub/craftbox"
}, },
"package_config" : { "package_config" : {
"name" : "craftbox", "name" : "craftbox",
"version" : "v0.3.1", "version" : "v0.3.2",
"summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n", "summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n",
"description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n", "description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"source" : "src", "source" : "src",
"target" : "target", "target" : "target",
"config_mods" : [ "config_mods" : [
".requirements.commands := ['ps']\n", ".requirements.commands := ['ps']\n",
".engines += { type: \\"native\\" }", ".engines += { type: \\"native\\" }",
".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'",
".engines[.type == 'docker'].target_tag := 'v0.3.1'" ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
], ],
"keywords" : [ "keywords" : [
"scripts", "scripts",
@@ -3911,7 +3921,7 @@ meta["defaults"] = [
"container" : { "container" : {
"registry" : "images.viash-hub.com", "registry" : "images.viash-hub.com",
"image" : "vsh/craftbox/csv2fasta", "image" : "vsh/craftbox/csv2fasta",
"tag" : "v0.3.1" "tag" : "v0.3.2"
}, },
"tag" : "$id" "tag" : "$id"
}'''), }'''),

View File

@@ -2,7 +2,7 @@ manifest {
name = 'csv2fasta' name = 'csv2fasta'
mainScript = 'main.nf' mainScript = 'main.nf'
nextflowVersion = '!>=20.12.1-edge' nextflowVersion = '!>=20.12.1-edge'
version = 'v0.3.1' version = 'v0.3.2'
description = 'Convert two columns from a CSV file to FASTA entries. The CSV file can\ncontain an optional header and each row (other than the header) becomes\na single FASTA record. One of the two columns will be used as the names\nfor the FASTA entries, while the other become the sequences. The sequences\ncolumn must only contain characters that are valid IUPAC notation for \nnucleotides or a group thereof (wildcard characters).\n' description = 'Convert two columns from a CSV file to FASTA entries. The CSV file can\ncontain an optional header and each row (other than the header) becomes\na single FASTA record. One of the two columns will be used as the names\nfor the FASTA entries, while the other become the sequences. The sequences\ncolumn must only contain characters that are valid IUPAC notation for \nnucleotides or a group thereof (wildcard characters).\n'
author = 'Dries Schaumont, Robrecht Cannoodt' author = 'Dries Schaumont, Robrecht Cannoodt'
} }

View File

@@ -1,5 +1,5 @@
name: "move_files_to_directory" name: "move_files_to_directory"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Dorien Roosen" - name: "Dorien Roosen"
roles: roles:
@@ -14,11 +14,12 @@ authors:
href: "https://www.data-intuitive.com" href: "https://www.data-intuitive.com"
role: "Data Scientist" role: "Data Scientist"
argument_groups: argument_groups:
- name: "Arguments" - name: "Inputs"
arguments: arguments:
- type: "file" - type: "file"
name: "--input" name: "--input"
description: "Paths of the files that will be copied into the output directory." description: "Paths of the files or directories that will be copied into the output\
\ directory."
info: null info: null
must_exist: true must_exist: true
create_parent: true create_parent: true
@@ -26,9 +27,11 @@ argument_groups:
direction: "input" direction: "input"
multiple: true multiple: true
multiple_sep: ";" multiple_sep: ";"
- name: "Outputs"
arguments:
- type: "file" - type: "file"
name: "--output" name: "--output"
description: "Path to output directory" description: "Path to output directory."
info: null info: null
must_exist: true must_exist: true
create_parent: true create_parent: true
@@ -36,20 +39,22 @@ argument_groups:
direction: "output" direction: "output"
multiple: false multiple: false
multiple_sep: ";" multiple_sep: ";"
- name: "Options"
arguments:
- type: "boolean_true" - type: "boolean_true"
name: "--keep_symbolic_links" name: "--keep_symbolic_links"
alternatives: description: "When set, symbolic links are preserved as symbolic links in the\
- "-d" \ output directory. By default, symbolic links are dereferenced and the target\
description: "Preserve symbolic links." \ file is copied."
info: null info: null
direction: "input" direction: "input"
resources: resources:
- type: "bash_script" - type: "bash_script"
path: "script.sh" path: "script.sh"
is_executable: true is_executable: true
summary: "Publish one or multiple files to the same directory" summary: "Publish one or multiple files or directories to the same output directory."
description: "This component copies one or multiple files to the same destination\ description: "This component copies one or multiple files or directories\nto the same\
\ directory, creating the output directory if it doesn't exist." \ destination directory, creating the output directory if it doesn't\nexist.\n"
test_resources: test_resources:
- type: "bash_script" - type: "bash_script"
path: "test.sh" path: "test.sh"
@@ -135,7 +140,7 @@ engines:
id: "docker" id: "docker"
image: "debian:latest" image: "debian:latest"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apt" - type: "apt"
@@ -146,18 +151,20 @@ engines:
cmd: null cmd: null
- type: "native" - type: "native"
id: "native" id: "native"
- type: "native"
id: "native"
build_info: build_info:
config: "src/move_files_to_directory/config.vsh.yaml" config: "src/move_files_to_directory/config.vsh.yaml"
runner: "nextflow" runner: "nextflow"
engine: "docker|native" engine: "docker|native|native"
output: "target/nextflow/move_files_to_directory" output: "target/nextflow/move_files_to_directory"
executable: "target/nextflow/move_files_to_directory/main.nf" executable: "target/nextflow/move_files_to_directory/main.nf"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -173,14 +180,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,6 +1,6 @@
// move_files_to_directory v0.3.1 // move_files_to_directory v0.3.2
// //
// This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative // This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data // work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
// Intuitive. // Intuitive.
// //
@@ -1353,47 +1353,42 @@ def readCsv(file_path) {
def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''') def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''')
def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''') def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''')
def br = java.nio.file.Files.newBufferedReader(inputFile) java.nio.file.Files.newBufferedReader(inputFile).withCloseable { br ->
def row = 0
def header = null
def line
def row = -1 while (header == null && (line = br.readLine()) != null) {
def header = null if (!line.startsWith("#")) {
while (br.ready() && header == null) { header = splitRegex.split(line, -1).collect { field ->
def line = br.readLine() def m = removeQuote.matcher(field)
row++ m.find() ? m.replaceFirst('$1') : field
if (!line.startsWith("#")) {
header = splitRegex.split(line, -1).collect{field ->
m = removeQuote.matcher(field)
m.find() ? m.replaceFirst('$1') : field
}
}
}
assert header != null: "CSV file should contain a header"
while (br.ready()) {
def line = br.readLine()
row++
if (line == null) {
br.close()
break
}
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect{field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
} }
} }
assert header.size() == data.size(): "Row $row should contain the same number as fields as the header" row++
}
def dataMap = [header, data].transpose().collectEntries().findAll{it.value != null} assert header != null : "CSV file should contain a header"
output.add(dataMap)
while ((line = br.readLine()) != null) {
row++
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect { field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
}
}
assert header.size() == data.size() : "Row $row should contain the same number as fields as the header"
def dataMap = [header, data].transpose().collectEntries().findAll { it.value != null }
output.add(dataMap)
}
} }
} }
@@ -1709,10 +1704,25 @@ process publishFilesProc {
] ]
.transpose() .transpose()
.collectMany{infile, outfile -> .collectMany{infile, outfile ->
if (infile.toString() != outfile.toString()) { def infileString = infile.toString()
def outfileString = outfile.toString()
if (infileString != outfileString) {
/* Trailing slashes are removed from both the source and destination arguments.
From source arguments, this is useful when a source argument may have a trailing slash
and specify a symbolic link to a directory. Without removing the slash, cp will dereference
the symbolic link.
See https://www.gnu.org/software/coreutils/manual/html_node/Trailing-slashes.html#Trailing-slashes-1
For the destination path addding a trailing slash is a problem when publishing directories:
it requires the destination directory to exist. This fails because we only create the parent
directories first.
*/
def regexTrailingSlashes = ~/\/+$/
def infileNoTrailingSlash = infileString - regexTrailingSlashes
def outfileNoTrailingSlash = outfileString - regexTrailingSlashes
[ [
"[ -d \"\$(dirname '${outfile.toString()}')\" ] || mkdir -p \"\$(dirname '${outfile.toString()}')\"", "[ -d \"\$(dirname '${outfileNoTrailingSlash}')\" ] || mkdir -p \"\$(dirname '${outfileNoTrailingSlash}')\"",
"cp -r '${infile.toString()}' '${outfile.toString()}'" "cp -a '${infileNoTrailingSlash}' '${outfileNoTrailingSlash}'"
] ]
} else { } else {
// no need to copy if infile is the same as outfile // no need to copy if infile is the same as outfile
@@ -3034,7 +3044,7 @@ meta = [
"resources_dir": moduleDir.toRealPath().normalize(), "resources_dir": moduleDir.toRealPath().normalize(),
"config": processConfig(readJsonBlob('''{ "config": processConfig(readJsonBlob('''{
"name" : "move_files_to_directory", "name" : "move_files_to_directory",
"version" : "v0.3.1", "version" : "v0.3.2",
"authors" : [ "authors" : [
{ {
"name" : "Dorien Roosen", "name" : "Dorien Roosen",
@@ -3059,37 +3069,44 @@ meta = [
], ],
"argument_groups" : [ "argument_groups" : [
{ {
"name" : "Arguments", "name" : "Inputs",
"arguments" : [ "arguments" : [
{ {
"type" : "file", "type" : "file",
"name" : "--input", "name" : "--input",
"description" : "Paths of the files that will be copied into the output directory.", "description" : "Paths of the files or directories that will be copied into the output directory.",
"must_exist" : true, "must_exist" : true,
"create_parent" : true, "create_parent" : true,
"required" : true, "required" : true,
"direction" : "input", "direction" : "input",
"multiple" : true, "multiple" : true,
"multiple_sep" : ";" "multiple_sep" : ";"
}, }
]
},
{
"name" : "Outputs",
"arguments" : [
{ {
"type" : "file", "type" : "file",
"name" : "--output", "name" : "--output",
"description" : "Path to output directory", "description" : "Path to output directory.",
"must_exist" : true, "must_exist" : true,
"create_parent" : true, "create_parent" : true,
"required" : true, "required" : true,
"direction" : "output", "direction" : "output",
"multiple" : false, "multiple" : false,
"multiple_sep" : ";" "multiple_sep" : ";"
}, }
]
},
{
"name" : "Options",
"arguments" : [
{ {
"type" : "boolean_true", "type" : "boolean_true",
"name" : "--keep_symbolic_links", "name" : "--keep_symbolic_links",
"alternatives" : [ "description" : "When set, symbolic links are preserved as symbolic links in the output directory. By default, symbolic links are dereferenced and the target file is copied.",
"-d"
],
"description" : "Preserve symbolic links.",
"direction" : "input" "direction" : "input"
} }
] ]
@@ -3102,8 +3119,8 @@ meta = [
"is_executable" : true "is_executable" : true
} }
], ],
"summary" : "Publish one or multiple files to the same directory", "summary" : "Publish one or multiple files or directories to the same output directory.",
"description" : "This component copies one or multiple files to the same destination directory, creating the output directory if it doesn't exist.", "description" : "This component copies one or multiple files or directories\nto the same destination directory, creating the output directory if it doesn't\nexist.\n",
"test_resources" : [ "test_resources" : [
{ {
"type" : "bash_script", "type" : "bash_script",
@@ -3205,7 +3222,7 @@ meta = [
"id" : "docker", "id" : "docker",
"image" : "debian:latest", "image" : "debian:latest",
"target_registry" : "images.viash-hub.com", "target_registry" : "images.viash-hub.com",
"target_tag" : "v0.3.1", "target_tag" : "v0.3.2",
"namespace_separator" : "/", "namespace_separator" : "/",
"setup" : [ "setup" : [
{ {
@@ -3217,6 +3234,10 @@ meta = [
} }
] ]
}, },
{
"type" : "native",
"id" : "native"
},
{ {
"type" : "native", "type" : "native",
"id" : "native" "id" : "native"
@@ -3225,25 +3246,25 @@ meta = [
"build_info" : { "build_info" : {
"config" : "/workdir/root/repo/src/move_files_to_directory/config.vsh.yaml", "config" : "/workdir/root/repo/src/move_files_to_directory/config.vsh.yaml",
"runner" : "nextflow", "runner" : "nextflow",
"engine" : "docker|native", "engine" : "docker|native|native",
"output" : "target/nextflow/move_files_to_directory", "output" : "target/nextflow/move_files_to_directory",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"git_commit" : "4acf73e0255554766186f4016986782c0d25c309", "git_commit" : "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9",
"git_remote" : "https://github.com/viash-hub/craftbox" "git_remote" : "https://github.com/viash-hub/craftbox"
}, },
"package_config" : { "package_config" : {
"name" : "craftbox", "name" : "craftbox",
"version" : "v0.3.1", "version" : "v0.3.2",
"summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n", "summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n",
"description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n", "description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"source" : "src", "source" : "src",
"target" : "target", "target" : "target",
"config_mods" : [ "config_mods" : [
".requirements.commands := ['ps']\n", ".requirements.commands := ['ps']\n",
".engines += { type: \\"native\\" }", ".engines += { type: \\"native\\" }",
".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'",
".engines[.type == 'docker'].target_tag := 'v0.3.1'" ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
], ],
"keywords" : [ "keywords" : [
"scripts", "scripts",
@@ -3300,27 +3321,33 @@ $( if [ ! -z ${VIASH_META_MEMORY_PIB+x} ]; then echo "${VIASH_META_MEMORY_PIB}"
## VIASH END ## VIASH END
if [[ ! -d "\\$par_output" ]]; then if [[ ! -d "\\$par_output" ]]; then
mkdir -p "\\$par_output" mkdir -p "\\$par_output"
fi fi
extra_params=( ) # Set copy flags based on options
if [[ "\\$par_keep_symbolic_links" == "true" ]]; then
if [ "\\$par_keep_symbolic_links" == "true" ]; then # -a implies -dR --preserve=all
extra_params+=( "-d" ) # with -d: same as --no-dereference (and --preserve=links)
# and --no-dereference: never follow symbolic links in SOURCE
# and -R, -r, --recursive: copy directories recursively
# --keep-directory-symlink: if the destination already exists and is a
# symbolic link to a directory, follow the symlink and copy into the directory
# it points to, instead of removing the symlink and creating a real directory in its place.
cp_flags="-a --keep-directory-symlink"
else
# -L: always follow symbolic links in SOURCE
cp_flags="-Lr --preserve=all --no-preserve=link --keep-directory-symlink"
fi fi
# Process multiple input files # Process multiple input paths (files or directories)
IFS=";" read -ra input_files <<< "\\$par_input" IFS=";" read -ra input_paths <<< "\\$par_input"
for file in "\\${input_files[@]}"; do for path in "\\${input_paths[@]}"; do
# Check if the file exists before copying if [[ -e "\\$path" ]] || [[ -L "\\$path" ]]; then
if [[ -f "\\$file" ]]; then cp \\$cp_flags "\\$path" "\\$par_output/"
echo "Copied \\$path to \\$par_output/"
cp \\${extra_params[@]} "\\$file" "\\$par_output/"
echo "Copied \\$file to \\$par_output/"
else else
echo "Warning: Input file \\$file does not exist, skipping" echo "Warning: Input path \\$path does not exist, skipping"
fi fi
done done
VIASHMAIN VIASHMAIN
@@ -3705,7 +3732,7 @@ meta["defaults"] = [
"container" : { "container" : {
"registry" : "images.viash-hub.com", "registry" : "images.viash-hub.com",
"image" : "vsh/craftbox/move_files_to_directory", "image" : "vsh/craftbox/move_files_to_directory",
"tag" : "v0.3.1" "tag" : "v0.3.2"
}, },
"tag" : "$id" "tag" : "$id"
}'''), }'''),

View File

@@ -2,8 +2,8 @@ manifest {
name = 'move_files_to_directory' name = 'move_files_to_directory'
mainScript = 'main.nf' mainScript = 'main.nf'
nextflowVersion = '!>=20.12.1-edge' nextflowVersion = '!>=20.12.1-edge'
version = 'v0.3.1' version = 'v0.3.2'
description = 'This component copies one or multiple files to the same destination directory, creating the output directory if it doesn\'t exist.' description = 'This component copies one or multiple files or directories\nto the same destination directory, creating the output directory if it doesn\'t\nexist.\n'
author = 'Dorien Roosen' author = 'Dorien Roosen'
} }

View File

@@ -1,11 +1,11 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "move_files_to_directory", "title": "move_files_to_directory",
"description": "This component copies one or multiple files to the same destination directory, creating the output directory if it doesn't exist.", "description": "This component copies one or multiple files or directories\nto the same destination directory, creating the output directory if it doesn't\nexist.\n",
"type": "object", "type": "object",
"$defs": { "$defs": {
"arguments": { "inputs": {
"title": "Arguments", "title": "Inputs",
"type": "object", "type": "object",
"description": "No description", "description": "No description",
"properties": { "properties": {
@@ -16,19 +16,33 @@
}, },
"format": "path", "format": "path",
"exists": true, "exists": true,
"description": "Paths of the files that will be copied into the output directory.", "description": "Paths of the files or directories that will be copied into the output directory.",
"help_text": "Type: `file`, multiple: `True`, required, direction: `input`. " "help_text": "Type: `file`, multiple: `True`, required, direction: `input`. "
}, }
}
},
"outputs": {
"title": "Outputs",
"type": "object",
"description": "No description",
"properties": {
"output": { "output": {
"type": "string", "type": "string",
"format": "path", "format": "path",
"description": "Path to output directory", "description": "Path to output directory.",
"help_text": "Type: `file`, multiple: `False`, required, default: `\"$id.$key.output\"`, direction: `output`. ", "help_text": "Type: `file`, multiple: `False`, required, default: `\"$id.$key.output\"`, direction: `output`. ",
"default": "$id.$key.output" "default": "$id.$key.output"
}, }
}
},
"options": {
"title": "Options",
"type": "object",
"description": "No description",
"properties": {
"keep_symbolic_links": { "keep_symbolic_links": {
"type": "boolean", "type": "boolean",
"description": "Preserve symbolic links.", "description": "When set, symbolic links are preserved as symbolic links in the output directory",
"help_text": "Type: `boolean_true`, multiple: `False`, default: `false`. ", "help_text": "Type: `boolean_true`, multiple: `False`, default: `false`. ",
"default": false "default": false
} }
@@ -49,7 +63,13 @@
}, },
"allOf": [ "allOf": [
{ {
"$ref": "#/$defs/arguments" "$ref": "#/$defs/inputs"
},
{
"$ref": "#/$defs/outputs"
},
{
"$ref": "#/$defs/options"
}, },
{ {
"$ref": "#/$defs/nextflow input-output arguments" "$ref": "#/$defs/nextflow input-output arguments"

View File

@@ -1,5 +1,5 @@
name: "sync_resources" name: "sync_resources"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Robrecht Cannoodt" - name: "Robrecht Cannoodt"
roles: roles:
@@ -174,7 +174,7 @@ engines:
id: "docker" id: "docker"
image: "alpine:3" image: "alpine:3"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apk" - type: "apk"
@@ -196,12 +196,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/nextflow/sync_resources" output: "target/nextflow/sync_resources"
executable: "target/nextflow/sync_resources/main.nf" executable: "target/nextflow/sync_resources/main.nf"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -217,14 +217,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,6 +1,6 @@
// sync_resources v0.3.1 // sync_resources v0.3.2
// //
// This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative // This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data // work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
// Intuitive. // Intuitive.
// //
@@ -1354,47 +1354,42 @@ def readCsv(file_path) {
def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''') def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''')
def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''') def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''')
def br = java.nio.file.Files.newBufferedReader(inputFile) java.nio.file.Files.newBufferedReader(inputFile).withCloseable { br ->
def row = 0
def header = null
def line
def row = -1 while (header == null && (line = br.readLine()) != null) {
def header = null if (!line.startsWith("#")) {
while (br.ready() && header == null) { header = splitRegex.split(line, -1).collect { field ->
def line = br.readLine() def m = removeQuote.matcher(field)
row++ m.find() ? m.replaceFirst('$1') : field
if (!line.startsWith("#")) {
header = splitRegex.split(line, -1).collect{field ->
m = removeQuote.matcher(field)
m.find() ? m.replaceFirst('$1') : field
}
}
}
assert header != null: "CSV file should contain a header"
while (br.ready()) {
def line = br.readLine()
row++
if (line == null) {
br.close()
break
}
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect{field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
} }
} }
assert header.size() == data.size(): "Row $row should contain the same number as fields as the header" row++
}
def dataMap = [header, data].transpose().collectEntries().findAll{it.value != null} assert header != null : "CSV file should contain a header"
output.add(dataMap)
while ((line = br.readLine()) != null) {
row++
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect { field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
}
}
assert header.size() == data.size() : "Row $row should contain the same number as fields as the header"
def dataMap = [header, data].transpose().collectEntries().findAll { it.value != null }
output.add(dataMap)
}
} }
} }
@@ -1710,10 +1705,25 @@ process publishFilesProc {
] ]
.transpose() .transpose()
.collectMany{infile, outfile -> .collectMany{infile, outfile ->
if (infile.toString() != outfile.toString()) { def infileString = infile.toString()
def outfileString = outfile.toString()
if (infileString != outfileString) {
/* Trailing slashes are removed from both the source and destination arguments.
From source arguments, this is useful when a source argument may have a trailing slash
and specify a symbolic link to a directory. Without removing the slash, cp will dereference
the symbolic link.
See https://www.gnu.org/software/coreutils/manual/html_node/Trailing-slashes.html#Trailing-slashes-1
For the destination path addding a trailing slash is a problem when publishing directories:
it requires the destination directory to exist. This fails because we only create the parent
directories first.
*/
def regexTrailingSlashes = ~/\/+$/
def infileNoTrailingSlash = infileString - regexTrailingSlashes
def outfileNoTrailingSlash = outfileString - regexTrailingSlashes
[ [
"[ -d \"\$(dirname '${outfile.toString()}')\" ] || mkdir -p \"\$(dirname '${outfile.toString()}')\"", "[ -d \"\$(dirname '${outfileNoTrailingSlash}')\" ] || mkdir -p \"\$(dirname '${outfileNoTrailingSlash}')\"",
"cp -r '${infile.toString()}' '${outfile.toString()}'" "cp -a '${infileNoTrailingSlash}' '${outfileNoTrailingSlash}'"
] ]
} else { } else {
// no need to copy if infile is the same as outfile // no need to copy if infile is the same as outfile
@@ -3035,7 +3045,7 @@ meta = [
"resources_dir": moduleDir.toRealPath().normalize(), "resources_dir": moduleDir.toRealPath().normalize(),
"config": processConfig(readJsonBlob('''{ "config": processConfig(readJsonBlob('''{
"name" : "sync_resources", "name" : "sync_resources",
"version" : "v0.3.1", "version" : "v0.3.2",
"authors" : [ "authors" : [
{ {
"name" : "Robrecht Cannoodt", "name" : "Robrecht Cannoodt",
@@ -3263,7 +3273,7 @@ meta = [
"id" : "docker", "id" : "docker",
"image" : "alpine:3", "image" : "alpine:3",
"target_registry" : "images.viash-hub.com", "target_registry" : "images.viash-hub.com",
"target_tag" : "v0.3.1", "target_tag" : "v0.3.2",
"namespace_separator" : "/", "namespace_separator" : "/",
"setup" : [ "setup" : [
{ {
@@ -3293,23 +3303,23 @@ meta = [
"runner" : "nextflow", "runner" : "nextflow",
"engine" : "docker|native", "engine" : "docker|native",
"output" : "target/nextflow/sync_resources", "output" : "target/nextflow/sync_resources",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"git_commit" : "4acf73e0255554766186f4016986782c0d25c309", "git_commit" : "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9",
"git_remote" : "https://github.com/viash-hub/craftbox" "git_remote" : "https://github.com/viash-hub/craftbox"
}, },
"package_config" : { "package_config" : {
"name" : "craftbox", "name" : "craftbox",
"version" : "v0.3.1", "version" : "v0.3.2",
"summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n", "summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n",
"description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n", "description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"source" : "src", "source" : "src",
"target" : "target", "target" : "target",
"config_mods" : [ "config_mods" : [
".requirements.commands := ['ps']\n", ".requirements.commands := ['ps']\n",
".engines += { type: \\"native\\" }", ".engines += { type: \\"native\\" }",
".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'",
".engines[.type == 'docker'].target_tag := 'v0.3.1'" ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
], ],
"keywords" : [ "keywords" : [
"scripts", "scripts",
@@ -3772,7 +3782,7 @@ meta["defaults"] = [
"container" : { "container" : {
"registry" : "images.viash-hub.com", "registry" : "images.viash-hub.com",
"image" : "vsh/craftbox/sync_resources", "image" : "vsh/craftbox/sync_resources",
"tag" : "v0.3.1" "tag" : "v0.3.2"
}, },
"tag" : "$id" "tag" : "$id"
}'''), }'''),

View File

@@ -2,7 +2,7 @@ manifest {
name = 'sync_resources' name = 'sync_resources'
mainScript = 'main.nf' mainScript = 'main.nf'
nextflowVersion = '!>=20.12.1-edge' nextflowVersion = '!>=20.12.1-edge'
version = 'v0.3.1' version = 'v0.3.2'
description = 'Sync a Viash package\'s test resources to the local filesystem based on the\nthe `.info.test_resources` field in the `_viash.yaml` file. This is useful for\ntesting and debugging purposes.\n' description = 'Sync a Viash package\'s test resources to the local filesystem based on the\nthe `.info.test_resources` field in the `_viash.yaml` file. This is useful for\ntesting and debugging purposes.\n'
author = 'Robrecht Cannoodt, Dries Schaumont' author = 'Robrecht Cannoodt, Dries Schaumont'
} }

View File

@@ -1,5 +1,5 @@
name: "untar" name: "untar"
version: "v0.3.1" version: "v0.3.2"
authors: authors:
- name: "Dries Schaumont" - name: "Dries Schaumont"
roles: roles:
@@ -164,7 +164,7 @@ engines:
id: "docker" id: "docker"
image: "debian:stable-slim" image: "debian:stable-slim"
target_registry: "images.viash-hub.com" target_registry: "images.viash-hub.com"
target_tag: "v0.3.1" target_tag: "v0.3.2"
namespace_separator: "/" namespace_separator: "/"
setup: setup:
- type: "apt" - type: "apt"
@@ -181,12 +181,12 @@ build_info:
engine: "docker|native" engine: "docker|native"
output: "target/nextflow/untar" output: "target/nextflow/untar"
executable: "target/nextflow/untar/main.nf" executable: "target/nextflow/untar/main.nf"
viash_version: "0.9.4" viash_version: "0.9.7"
git_commit: "4acf73e0255554766186f4016986782c0d25c309" git_commit: "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9"
git_remote: "https://github.com/viash-hub/craftbox" git_remote: "https://github.com/viash-hub/craftbox"
package_config: package_config:
name: "craftbox" name: "craftbox"
version: "v0.3.1" version: "v0.3.2"
summary: "A collection of custom-tailored scripts and applied utilities built with\ summary: "A collection of custom-tailored scripts and applied utilities built with\
\ Viash.\n" \ Viash.\n"
description: "`craftbox` is a curated collection of custom scripts and utilities\ description: "`craftbox` is a curated collection of custom scripts and utilities\
@@ -202,14 +202,14 @@ package_config:
\ to ensure dependency management and a consistent, reproducible runtime environment.\n\ \ to ensure dependency management and a consistent, reproducible runtime environment.\n\
\ * Unit tested where applicable to ensure components function as expected.\n" \ * Unit tested where applicable to ensure components function as expected.\n"
info: null info: null
viash_version: "0.9.4" viash_version: "0.9.7"
source: "src" source: "src"
target: "target" target: "target"
config_mods: config_mods:
- ".requirements.commands := ['ps']\n" - ".requirements.commands := ['ps']\n"
- ".engines += { type: \"native\" }" - ".engines += { type: \"native\" }"
- ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'" - ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'"
- ".engines[.type == 'docker'].target_tag := 'v0.3.1'" - ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
keywords: keywords:
- "scripts" - "scripts"
- "custom" - "custom"

View File

@@ -1,6 +1,6 @@
// untar v0.3.1 // untar v0.3.2
// //
// This wrapper script is auto-generated by viash 0.9.4 and is thus a derivative // This wrapper script is auto-generated by viash 0.9.7 and is thus a derivative
// work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data // work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
// Intuitive. // Intuitive.
// //
@@ -1354,47 +1354,42 @@ def readCsv(file_path) {
def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''') def splitRegex = java.util.regex.Pattern.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''')
def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''') def removeQuote = java.util.regex.Pattern.compile('''"(.*)"''')
def br = java.nio.file.Files.newBufferedReader(inputFile) java.nio.file.Files.newBufferedReader(inputFile).withCloseable { br ->
def row = 0
def header = null
def line
def row = -1 while (header == null && (line = br.readLine()) != null) {
def header = null if (!line.startsWith("#")) {
while (br.ready() && header == null) { header = splitRegex.split(line, -1).collect { field ->
def line = br.readLine() def m = removeQuote.matcher(field)
row++ m.find() ? m.replaceFirst('$1') : field
if (!line.startsWith("#")) {
header = splitRegex.split(line, -1).collect{field ->
m = removeQuote.matcher(field)
m.find() ? m.replaceFirst('$1') : field
}
}
}
assert header != null: "CSV file should contain a header"
while (br.ready()) {
def line = br.readLine()
row++
if (line == null) {
br.close()
break
}
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect{field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
} }
} }
assert header.size() == data.size(): "Row $row should contain the same number as fields as the header" row++
}
def dataMap = [header, data].transpose().collectEntries().findAll{it.value != null} assert header != null : "CSV file should contain a header"
output.add(dataMap)
while ((line = br.readLine()) != null) {
row++
if (!line.startsWith("#")) {
def predata = splitRegex.split(line, -1)
def data = predata.collect { field ->
if (field == "") {
return null
}
def m = removeQuote.matcher(field)
if (m.find()) {
return m.replaceFirst('$1')
} else {
return field
}
}
assert header.size() == data.size() : "Row $row should contain the same number as fields as the header"
def dataMap = [header, data].transpose().collectEntries().findAll { it.value != null }
output.add(dataMap)
}
} }
} }
@@ -1710,10 +1705,25 @@ process publishFilesProc {
] ]
.transpose() .transpose()
.collectMany{infile, outfile -> .collectMany{infile, outfile ->
if (infile.toString() != outfile.toString()) { def infileString = infile.toString()
def outfileString = outfile.toString()
if (infileString != outfileString) {
/* Trailing slashes are removed from both the source and destination arguments.
From source arguments, this is useful when a source argument may have a trailing slash
and specify a symbolic link to a directory. Without removing the slash, cp will dereference
the symbolic link.
See https://www.gnu.org/software/coreutils/manual/html_node/Trailing-slashes.html#Trailing-slashes-1
For the destination path addding a trailing slash is a problem when publishing directories:
it requires the destination directory to exist. This fails because we only create the parent
directories first.
*/
def regexTrailingSlashes = ~/\/+$/
def infileNoTrailingSlash = infileString - regexTrailingSlashes
def outfileNoTrailingSlash = outfileString - regexTrailingSlashes
[ [
"[ -d \"\$(dirname '${outfile.toString()}')\" ] || mkdir -p \"\$(dirname '${outfile.toString()}')\"", "[ -d \"\$(dirname '${outfileNoTrailingSlash}')\" ] || mkdir -p \"\$(dirname '${outfileNoTrailingSlash}')\"",
"cp -r '${infile.toString()}' '${outfile.toString()}'" "cp -a '${infileNoTrailingSlash}' '${outfileNoTrailingSlash}'"
] ]
} else { } else {
// no need to copy if infile is the same as outfile // no need to copy if infile is the same as outfile
@@ -3035,7 +3045,7 @@ meta = [
"resources_dir": moduleDir.toRealPath().normalize(), "resources_dir": moduleDir.toRealPath().normalize(),
"config": processConfig(readJsonBlob('''{ "config": processConfig(readJsonBlob('''{
"name" : "untar", "name" : "untar",
"version" : "v0.3.1", "version" : "v0.3.2",
"authors" : [ "authors" : [
{ {
"name" : "Dries Schaumont", "name" : "Dries Schaumont",
@@ -3250,7 +3260,7 @@ meta = [
"id" : "docker", "id" : "docker",
"image" : "debian:stable-slim", "image" : "debian:stable-slim",
"target_registry" : "images.viash-hub.com", "target_registry" : "images.viash-hub.com",
"target_tag" : "v0.3.1", "target_tag" : "v0.3.2",
"namespace_separator" : "/", "namespace_separator" : "/",
"setup" : [ "setup" : [
{ {
@@ -3272,23 +3282,23 @@ meta = [
"runner" : "nextflow", "runner" : "nextflow",
"engine" : "docker|native", "engine" : "docker|native",
"output" : "target/nextflow/untar", "output" : "target/nextflow/untar",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"git_commit" : "4acf73e0255554766186f4016986782c0d25c309", "git_commit" : "7d520dc76cb6b3f1eaece9afcc9a3458ca82afe9",
"git_remote" : "https://github.com/viash-hub/craftbox" "git_remote" : "https://github.com/viash-hub/craftbox"
}, },
"package_config" : { "package_config" : {
"name" : "craftbox", "name" : "craftbox",
"version" : "v0.3.1", "version" : "v0.3.2",
"summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n", "summary" : "A collection of custom-tailored scripts and applied utilities built with Viash.\n",
"description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n", "description" : "`craftbox` is a curated collection of custom scripts and utilities designed to tackle context-specific tasks.\n\nEmphasizing the Viash principles, `craftbox` components aim for **reusability**, **reproducibility**, and adherence to **best practices**. Key features generally include:\n\n* **Standalone & Nextflow Ready:** Components are built to run directly via the command line or be smoothly integrated into Nextflow workflows.\n* **Custom Implementations:** Contains scripts and tools developed for particular tasks that may not be found in broader collections.\n* **High Quality Standards (promoted by Viash):**\n * Clear documentation for components and their parameters.\n * Full exposure of underlying script/tool arguments for fine-grained control.\n * Containerized (Docker) to ensure dependency management and a consistent, reproducible runtime environment.\n * Unit tested where applicable to ensure components function as expected.\n",
"viash_version" : "0.9.4", "viash_version" : "0.9.7",
"source" : "src", "source" : "src",
"target" : "target", "target" : "target",
"config_mods" : [ "config_mods" : [
".requirements.commands := ['ps']\n", ".requirements.commands := ['ps']\n",
".engines += { type: \\"native\\" }", ".engines += { type: \\"native\\" }",
".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'", ".engines[.type == 'docker'].target_registry := 'images.viash-hub.com'",
".engines[.type == 'docker'].target_tag := 'v0.3.1'" ".engines[.type == 'docker'].target_tag := 'v0.3.2'"
], ],
"keywords" : [ "keywords" : [
"scripts", "scripts",
@@ -3762,7 +3772,7 @@ meta["defaults"] = [
"container" : { "container" : {
"registry" : "images.viash-hub.com", "registry" : "images.viash-hub.com",
"image" : "vsh/craftbox/untar", "image" : "vsh/craftbox/untar",
"tag" : "v0.3.1" "tag" : "v0.3.2"
}, },
"tag" : "$id" "tag" : "$id"
}'''), }'''),

View File

@@ -2,7 +2,7 @@ manifest {
name = 'untar' name = 'untar'
mainScript = 'main.nf' mainScript = 'main.nf'
nextflowVersion = '!>=20.12.1-edge' nextflowVersion = '!>=20.12.1-edge'
version = 'v0.3.1' version = 'v0.3.2'
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' 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'
author = 'Dries Schaumont, Robrecht Cannoodt' author = 'Dries Schaumont, Robrecht Cannoodt'
} }