Build branch main with version main (5f6516e)
Build pipeline: viash-hub.biobox.main-v9whr
Source commit: 5f6516e9c0
Source message: Bump viash version (#172)
* bump viash version
* fix agat requirements
This commit is contained in:
@@ -982,6 +982,9 @@ test_resources:
|
||||
path: "test_data"
|
||||
info: null
|
||||
status: "enabled"
|
||||
scope:
|
||||
image: "public"
|
||||
target: "public"
|
||||
requirements:
|
||||
commands:
|
||||
- "ps"
|
||||
@@ -1082,16 +1085,16 @@ build_info:
|
||||
engine: "docker|native"
|
||||
output: "target/executable/fastp"
|
||||
executable: "target/executable/fastp/fastp"
|
||||
viash_version: "0.9.0"
|
||||
git_commit: "952ff0843093b538cbfd6fefdecf2e7a0bc9e70b"
|
||||
git_remote: "https://x-access-token:ghs_EwAUAMYJ0K4VBHlAEMs4ZP2OyQYqJM0PSfEO@github.com/viash-hub/biobox"
|
||||
git_tag: "v0.2.0-27-g952ff08"
|
||||
viash_version: "0.9.2"
|
||||
git_commit: "5f6516e9c0d95c84f3d4159a67d3de19d3ae1fde"
|
||||
git_remote: "https://github.com/viash-hub/biobox"
|
||||
git_tag: "v0.2.0-30-g5f6516e"
|
||||
package_config:
|
||||
name: "biobox"
|
||||
version: "main"
|
||||
description: "A collection of bioinformatics tools for working with sequence data.\n"
|
||||
info: null
|
||||
viash_version: "0.9.0"
|
||||
viash_version: "0.9.2"
|
||||
source: "src"
|
||||
target: "target"
|
||||
config_mods:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
# fastp main
|
||||
#
|
||||
# This wrapper script is auto-generated by viash 0.9.0 and is thus a derivative
|
||||
# This wrapper script is auto-generated by viash 0.9.2 and is thus a derivative
|
||||
# work thereof. This software comes with ABSOLUTELY NO WARRANTY from Data
|
||||
# Intuitive.
|
||||
#
|
||||
@@ -172,6 +172,404 @@ VIASH_META_CONFIG="$VIASH_META_RESOURCES_DIR/.config.vsh.yaml"
|
||||
VIASH_META_TEMP_DIR="$VIASH_TEMP"
|
||||
|
||||
|
||||
|
||||
# initialise variables
|
||||
VIASH_MODE='run'
|
||||
VIASH_ENGINE_ID='docker'
|
||||
|
||||
######## Helper functions for setting up Docker images for viash ########
|
||||
# expects: ViashDockerBuild
|
||||
|
||||
# ViashDockerInstallationCheck: check whether Docker is installed correctly
|
||||
#
|
||||
# examples:
|
||||
# ViashDockerInstallationCheck
|
||||
function ViashDockerInstallationCheck {
|
||||
ViashDebug "Checking whether Docker is installed"
|
||||
if [ ! command -v docker &> /dev/null ]; then
|
||||
ViashCritical "Docker doesn't seem to be installed. See 'https://docs.docker.com/get-docker/' for instructions."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ViashDebug "Checking whether the Docker daemon is running"
|
||||
local save=$-; set +e
|
||||
local docker_version=$(docker version --format '{{.Client.APIVersion}}' 2> /dev/null)
|
||||
local out=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -ne 0 ]; then
|
||||
ViashCritical "Docker daemon does not seem to be running. Try one of the following:"
|
||||
ViashCritical "- Try running 'dockerd' in the command line"
|
||||
ViashCritical "- See https://docs.docker.com/config/daemon/"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerRemoteTagCheck: check whether a Docker image is available
|
||||
# on a remote. Assumes `docker login` has been performed, if relevant.
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# exit code $? : whether or not the image was found
|
||||
# examples:
|
||||
# ViashDockerRemoteTagCheck python:latest
|
||||
# echo $? # returns '0'
|
||||
# ViashDockerRemoteTagCheck sdaizudceahifu
|
||||
# echo $? # returns '1'
|
||||
function ViashDockerRemoteTagCheck {
|
||||
docker manifest inspect $1 > /dev/null 2> /dev/null
|
||||
}
|
||||
|
||||
# ViashDockerLocalTagCheck: check whether a Docker image is available locally
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# exit code $? : whether or not the image was found
|
||||
# examples:
|
||||
# docker pull python:latest
|
||||
# ViashDockerLocalTagCheck python:latest
|
||||
# echo $? # returns '0'
|
||||
# ViashDockerLocalTagCheck sdaizudceahifu
|
||||
# echo $? # returns '1'
|
||||
function ViashDockerLocalTagCheck {
|
||||
[ -n "$(docker images -q $1)" ]
|
||||
}
|
||||
|
||||
# ViashDockerPull: pull a Docker image
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# exit code $? : whether or not the image was found
|
||||
# examples:
|
||||
# ViashDockerPull python:latest
|
||||
# echo $? # returns '0'
|
||||
# ViashDockerPull sdaizudceahifu
|
||||
# echo $? # returns '1'
|
||||
function ViashDockerPull {
|
||||
ViashNotice "Checking if Docker image is available at '$1'"
|
||||
if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then
|
||||
docker pull $1 && return 0 || return 1
|
||||
else
|
||||
local save=$-; set +e
|
||||
docker pull $1 2> /dev/null > /dev/null
|
||||
local out=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -ne 0 ]; then
|
||||
ViashWarning "Could not pull from '$1'. Docker image doesn't exist or is not accessible."
|
||||
fi
|
||||
return $out
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerPush: push a Docker image
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# exit code $? : whether or not the image was found
|
||||
# examples:
|
||||
# ViashDockerPush python:latest
|
||||
# echo $? # returns '0'
|
||||
# ViashDockerPush sdaizudceahifu
|
||||
# echo $? # returns '1'
|
||||
function ViashDockerPush {
|
||||
ViashNotice "Pushing image to '$1'"
|
||||
local save=$-; set +e
|
||||
local out
|
||||
if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then
|
||||
docker push $1
|
||||
out=$?
|
||||
else
|
||||
docker push $1 2> /dev/null > /dev/null
|
||||
out=$?
|
||||
fi
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -eq 0 ]; then
|
||||
ViashNotice "Container '$1' push succeeded."
|
||||
else
|
||||
ViashError "Container '$1' push errored. You might not be logged in or have the necessary permissions."
|
||||
fi
|
||||
return $out
|
||||
}
|
||||
|
||||
# ViashDockerPullElseBuild: pull a Docker image, else build it
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# ViashDockerBuild : a Bash function which builds a docker image, takes image identifier as argument.
|
||||
# examples:
|
||||
# ViashDockerPullElseBuild mynewcomponent
|
||||
function ViashDockerPullElseBuild {
|
||||
local save=$-; set +e
|
||||
ViashDockerPull $1
|
||||
local out=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -ne 0 ]; then
|
||||
ViashDockerBuild $@
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerSetup: create a Docker image, according to specified docker setup strategy
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# $2 : docker setup strategy, see DockerSetupStrategy.scala
|
||||
# examples:
|
||||
# ViashDockerSetup mynewcomponent alwaysbuild
|
||||
function ViashDockerSetup {
|
||||
local image_id="$1"
|
||||
local setup_strategy="$2"
|
||||
if [ "$setup_strategy" == "alwaysbuild" -o "$setup_strategy" == "build" -o "$setup_strategy" == "b" ]; then
|
||||
ViashDockerBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "alwayspull" -o "$setup_strategy" == "pull" -o "$setup_strategy" == "p" ]; then
|
||||
ViashDockerPull $image_id
|
||||
elif [ "$setup_strategy" == "alwayspullelsebuild" -o "$setup_strategy" == "pullelsebuild" ]; then
|
||||
ViashDockerPullElseBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "alwayspullelsecachedbuild" -o "$setup_strategy" == "pullelsecachedbuild" ]; then
|
||||
ViashDockerPullElseBuild $image_id $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "alwayscachedbuild" -o "$setup_strategy" == "cachedbuild" -o "$setup_strategy" == "cb" ]; then
|
||||
ViashDockerBuild $image_id $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [[ "$setup_strategy" =~ ^ifneedbe ]]; then
|
||||
local save=$-; set +e
|
||||
ViashDockerLocalTagCheck $image_id
|
||||
local outCheck=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $outCheck -eq 0 ]; then
|
||||
ViashInfo "Image $image_id already exists"
|
||||
elif [ "$setup_strategy" == "ifneedbebuild" ]; then
|
||||
ViashDockerBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "ifneedbecachedbuild" ]; then
|
||||
ViashDockerBuild $image_id $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "ifneedbepull" ]; then
|
||||
ViashDockerPull $image_id
|
||||
elif [ "$setup_strategy" == "ifneedbepullelsebuild" ]; then
|
||||
ViashDockerPullElseBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "ifneedbepullelsecachedbuild" ]; then
|
||||
ViashDockerPullElseBuild $image_id $(ViashDockerBuildArgs "$engine_id")
|
||||
else
|
||||
ViashError "Unrecognised Docker strategy: $setup_strategy"
|
||||
exit 1
|
||||
fi
|
||||
elif [ "$setup_strategy" == "push" -o "$setup_strategy" == "forcepush" -o "$setup_strategy" == "alwayspush" ]; then
|
||||
ViashDockerPush "$image_id"
|
||||
elif [ "$setup_strategy" == "pushifnotpresent" -o "$setup_strategy" == "gentlepush" -o "$setup_strategy" == "maybepush" ]; then
|
||||
local save=$-; set +e
|
||||
ViashDockerRemoteTagCheck $image_id
|
||||
local outCheck=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $outCheck -eq 0 ]; then
|
||||
ViashNotice "Container '$image_id' exists, doing nothing."
|
||||
else
|
||||
ViashNotice "Container '$image_id' does not yet exist."
|
||||
ViashDockerPush "$image_id"
|
||||
fi
|
||||
elif [ "$setup_strategy" == "donothing" -o "$setup_strategy" == "meh" ]; then
|
||||
ViashNotice "Skipping setup."
|
||||
else
|
||||
ViashError "Unrecognised Docker strategy: $setup_strategy"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerCheckCommands: Check whether a docker container has the required commands
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# $@ : commands to verify being present
|
||||
# examples:
|
||||
# ViashDockerCheckCommands bash:4.0 bash ps foo
|
||||
function ViashDockerCheckCommands {
|
||||
local image_id="$1"
|
||||
shift 1
|
||||
local commands="$@"
|
||||
local save=$-; set +e
|
||||
local missing # mark 'missing' as local in advance, otherwise the exit code of the command will be missing and always be '0'
|
||||
missing=$(docker run --rm --entrypoint=sh "$image_id" -c "for command in $commands; do command -v \$command >/dev/null 2>&1; if [ \$? -ne 0 ]; then echo \$command; exit 1; fi; done")
|
||||
local outCheck=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $outCheck -ne 0 ]; then
|
||||
ViashError "Docker container '$image_id' does not contain command '$missing'."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerBuild: build a docker image
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# $... : additional arguments to pass to docker build
|
||||
# $VIASH_META_TEMP_DIR : temporary directory to store dockerfile & optional resources in
|
||||
# $VIASH_META_NAME : name of the component
|
||||
# $VIASH_META_RESOURCES_DIR : directory containing the resources
|
||||
# $VIASH_VERBOSITY : verbosity level
|
||||
# exit code $? : whether or not the image was built successfully
|
||||
function ViashDockerBuild {
|
||||
local image_id="$1"
|
||||
shift 1
|
||||
|
||||
# create temporary directory to store dockerfile & optional resources in
|
||||
local tmpdir=$(mktemp -d "$VIASH_META_TEMP_DIR/dockerbuild-$VIASH_META_NAME-XXXXXX")
|
||||
local dockerfile="$tmpdir/Dockerfile"
|
||||
function clean_up {
|
||||
rm -rf "$tmpdir"
|
||||
}
|
||||
trap clean_up EXIT
|
||||
|
||||
# store dockerfile and resources
|
||||
ViashDockerfile "$VIASH_ENGINE_ID" > "$dockerfile"
|
||||
|
||||
# generate the build command
|
||||
local docker_build_cmd="docker build -t '$image_id' $@ '$VIASH_META_RESOURCES_DIR' -f '$dockerfile'"
|
||||
|
||||
# build the container
|
||||
ViashNotice "Building container '$image_id' with Dockerfile"
|
||||
ViashInfo "$docker_build_cmd"
|
||||
local save=$-; set +e
|
||||
if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then
|
||||
eval $docker_build_cmd
|
||||
else
|
||||
eval $docker_build_cmd &> "$tmpdir/docker_build.log"
|
||||
fi
|
||||
|
||||
# check exit code
|
||||
local out=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -ne 0 ]; then
|
||||
ViashError "Error occurred while building container '$image_id'"
|
||||
if [ $VIASH_VERBOSITY -lt $VIASH_LOGCODE_INFO ]; then
|
||||
ViashError "Transcript: --------------------------------"
|
||||
cat "$tmpdir/docker_build.log"
|
||||
ViashError "End of transcript --------------------------"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
######## End of helper functions for setting up Docker images for viash ########
|
||||
|
||||
# ViashDockerFile: print the dockerfile to stdout
|
||||
# $1 : engine identifier
|
||||
# return : dockerfile required to run this component
|
||||
# examples:
|
||||
# ViashDockerFile
|
||||
function ViashDockerfile {
|
||||
local engine_id="$1"
|
||||
|
||||
if [[ "$engine_id" == "docker" ]]; then
|
||||
cat << 'VIASHDOCKER'
|
||||
FROM quay.io/biocontainers/fastp:0.23.4--hadf994f_2
|
||||
ENTRYPOINT []
|
||||
RUN fastp --version 2>&1 | sed 's# #: "#;s#$#"#' > /var/software_versions.txt
|
||||
|
||||
LABEL org.opencontainers.image.authors="Robrecht Cannoodt"
|
||||
LABEL org.opencontainers.image.description="Companion container for running component fastp"
|
||||
LABEL org.opencontainers.image.created="2025-03-06T09:19:40Z"
|
||||
LABEL org.opencontainers.image.source="https://github.com/OpenGene/fastp"
|
||||
LABEL org.opencontainers.image.revision="5f6516e9c0d95c84f3d4159a67d3de19d3ae1fde"
|
||||
LABEL org.opencontainers.image.version="main"
|
||||
|
||||
VIASHDOCKER
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerBuildArgs: return the arguments to pass to docker build
|
||||
# $1 : engine identifier
|
||||
# return : arguments to pass to docker build
|
||||
function ViashDockerBuildArgs {
|
||||
local engine_id="$1"
|
||||
|
||||
if [[ "$engine_id" == "docker" ]]; then
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashAbsolutePath: generate absolute path from relative path
|
||||
# borrowed from https://stackoverflow.com/a/21951256
|
||||
# $1 : relative filename
|
||||
# return : absolute path
|
||||
# examples:
|
||||
# ViashAbsolutePath some_file.txt # returns /path/to/some_file.txt
|
||||
# ViashAbsolutePath /foo/bar/.. # returns /foo
|
||||
function ViashAbsolutePath {
|
||||
local thePath
|
||||
local parr
|
||||
local outp
|
||||
local len
|
||||
if [[ ! "$1" =~ ^/ ]]; then
|
||||
thePath="$PWD/$1"
|
||||
else
|
||||
thePath="$1"
|
||||
fi
|
||||
echo "$thePath" | (
|
||||
IFS=/
|
||||
read -a parr
|
||||
declare -a outp
|
||||
for i in "${parr[@]}"; do
|
||||
case "$i" in
|
||||
''|.) continue ;;
|
||||
..)
|
||||
len=${#outp[@]}
|
||||
if ((len==0)); then
|
||||
continue
|
||||
else
|
||||
unset outp[$((len-1))]
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
len=${#outp[@]}
|
||||
outp[$len]="$i"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
echo /"${outp[*]}"
|
||||
)
|
||||
}
|
||||
# ViashDockerAutodetectMount: auto configuring docker mounts from parameters
|
||||
# $1 : The parameter value
|
||||
# returns : New parameter
|
||||
# $VIASH_DIRECTORY_MOUNTS : Added another parameter to be passed to docker
|
||||
# $VIASH_DOCKER_AUTOMOUNT_PREFIX : The prefix to be used for the automounts
|
||||
# examples:
|
||||
# ViashDockerAutodetectMount /path/to/bar # returns '/viash_automount/path/to/bar'
|
||||
# ViashDockerAutodetectMountArg /path/to/bar # returns '--volume="/path/to:/viash_automount/path/to"'
|
||||
function ViashDockerAutodetectMount {
|
||||
local abs_path=$(ViashAbsolutePath "$1")
|
||||
local mount_source
|
||||
local base_name
|
||||
if [ -d "$abs_path" ]; then
|
||||
mount_source="$abs_path"
|
||||
base_name=""
|
||||
else
|
||||
mount_source=`dirname "$abs_path"`
|
||||
base_name=`basename "$abs_path"`
|
||||
fi
|
||||
local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source"
|
||||
if [ -z "$base_name" ]; then
|
||||
echo "$mount_target"
|
||||
else
|
||||
echo "$mount_target/$base_name"
|
||||
fi
|
||||
}
|
||||
function ViashDockerAutodetectMountArg {
|
||||
local abs_path=$(ViashAbsolutePath "$1")
|
||||
local mount_source
|
||||
local base_name
|
||||
if [ -d "$abs_path" ]; then
|
||||
mount_source="$abs_path"
|
||||
base_name=""
|
||||
else
|
||||
mount_source=`dirname "$abs_path"`
|
||||
base_name=`basename "$abs_path"`
|
||||
fi
|
||||
local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source"
|
||||
ViashDebug "ViashDockerAutodetectMountArg $1 -> $mount_source -> $mount_target"
|
||||
echo "--volume=\"$mount_source:$mount_target\""
|
||||
}
|
||||
function ViashDockerStripAutomount {
|
||||
local abs_path=$(ViashAbsolutePath "$1")
|
||||
echo "${abs_path#$VIASH_DOCKER_AUTOMOUNT_PREFIX}"
|
||||
}
|
||||
# initialise variables
|
||||
VIASH_DIRECTORY_MOUNTS=()
|
||||
|
||||
# configure default docker automount prefix if it is unset
|
||||
if [ -z "${VIASH_DOCKER_AUTOMOUNT_PREFIX+x}" ]; then
|
||||
VIASH_DOCKER_AUTOMOUNT_PREFIX="/viash_automount"
|
||||
fi
|
||||
|
||||
# initialise docker variables
|
||||
VIASH_DOCKER_RUN_ARGS=(-i --rm)
|
||||
|
||||
|
||||
# ViashHelp: Display helpful explanation about this executable
|
||||
function ViashHelp {
|
||||
echo "fastp main"
|
||||
@@ -747,404 +1145,32 @@ function ViashHelp {
|
||||
echo " min: 1"
|
||||
echo " One in (--overrepresentation_sampling) reads will be computed for"
|
||||
echo " overrepresentation analysis (1~10000), smaller is slower, default is 20."
|
||||
echo ""
|
||||
echo "Viash built in Computational Requirements:"
|
||||
echo " ---cpus=INT"
|
||||
echo " Number of CPUs to use"
|
||||
echo " ---memory=STRING"
|
||||
echo " Amount of memory to use. Examples: 4GB, 3MiB."
|
||||
echo ""
|
||||
echo "Viash built in Docker:"
|
||||
echo " ---setup=STRATEGY"
|
||||
echo " Setup the docker container. Options are: alwaysbuild, alwayscachedbuild, ifneedbebuild, ifneedbecachedbuild, alwayspull, alwayspullelsebuild, alwayspullelsecachedbuild, ifneedbepull, ifneedbepullelsebuild, ifneedbepullelsecachedbuild, push, pushifnotpresent, donothing."
|
||||
echo " Default: ifneedbepullelsecachedbuild"
|
||||
echo " ---dockerfile"
|
||||
echo " Print the dockerfile to stdout."
|
||||
echo " ---docker_run_args=ARG"
|
||||
echo " Provide runtime arguments to Docker. See the documentation on \`docker run\` for more information."
|
||||
echo " ---docker_image_id"
|
||||
echo " Print the docker image id to stdout."
|
||||
echo " ---debug"
|
||||
echo " Enter the docker container for debugging purposes."
|
||||
echo ""
|
||||
echo "Viash built in Engines:"
|
||||
echo " ---engine=ENGINE_ID"
|
||||
echo " Specify the engine to use. Options are: docker, native."
|
||||
echo " Default: docker"
|
||||
}
|
||||
|
||||
# initialise variables
|
||||
VIASH_MODE='run'
|
||||
VIASH_ENGINE_ID='docker'
|
||||
|
||||
######## Helper functions for setting up Docker images for viash ########
|
||||
# expects: ViashDockerBuild
|
||||
|
||||
# ViashDockerInstallationCheck: check whether Docker is installed correctly
|
||||
#
|
||||
# examples:
|
||||
# ViashDockerInstallationCheck
|
||||
function ViashDockerInstallationCheck {
|
||||
ViashDebug "Checking whether Docker is installed"
|
||||
if [ ! command -v docker &> /dev/null ]; then
|
||||
ViashCritical "Docker doesn't seem to be installed. See 'https://docs.docker.com/get-docker/' for instructions."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ViashDebug "Checking whether the Docker daemon is running"
|
||||
local save=$-; set +e
|
||||
local docker_version=$(docker version --format '{{.Client.APIVersion}}' 2> /dev/null)
|
||||
local out=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -ne 0 ]; then
|
||||
ViashCritical "Docker daemon does not seem to be running. Try one of the following:"
|
||||
ViashCritical "- Try running 'dockerd' in the command line"
|
||||
ViashCritical "- See https://docs.docker.com/config/daemon/"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerRemoteTagCheck: check whether a Docker image is available
|
||||
# on a remote. Assumes `docker login` has been performed, if relevant.
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# exit code $? : whether or not the image was found
|
||||
# examples:
|
||||
# ViashDockerRemoteTagCheck python:latest
|
||||
# echo $? # returns '0'
|
||||
# ViashDockerRemoteTagCheck sdaizudceahifu
|
||||
# echo $? # returns '1'
|
||||
function ViashDockerRemoteTagCheck {
|
||||
docker manifest inspect $1 > /dev/null 2> /dev/null
|
||||
}
|
||||
|
||||
# ViashDockerLocalTagCheck: check whether a Docker image is available locally
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# exit code $? : whether or not the image was found
|
||||
# examples:
|
||||
# docker pull python:latest
|
||||
# ViashDockerLocalTagCheck python:latest
|
||||
# echo $? # returns '0'
|
||||
# ViashDockerLocalTagCheck sdaizudceahifu
|
||||
# echo $? # returns '1'
|
||||
function ViashDockerLocalTagCheck {
|
||||
[ -n "$(docker images -q $1)" ]
|
||||
}
|
||||
|
||||
# ViashDockerPull: pull a Docker image
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# exit code $? : whether or not the image was found
|
||||
# examples:
|
||||
# ViashDockerPull python:latest
|
||||
# echo $? # returns '0'
|
||||
# ViashDockerPull sdaizudceahifu
|
||||
# echo $? # returns '1'
|
||||
function ViashDockerPull {
|
||||
ViashNotice "Checking if Docker image is available at '$1'"
|
||||
if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then
|
||||
docker pull $1 && return 0 || return 1
|
||||
else
|
||||
local save=$-; set +e
|
||||
docker pull $1 2> /dev/null > /dev/null
|
||||
local out=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -ne 0 ]; then
|
||||
ViashWarning "Could not pull from '$1'. Docker image doesn't exist or is not accessible."
|
||||
fi
|
||||
return $out
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerPush: push a Docker image
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# exit code $? : whether or not the image was found
|
||||
# examples:
|
||||
# ViashDockerPush python:latest
|
||||
# echo $? # returns '0'
|
||||
# ViashDockerPush sdaizudceahifu
|
||||
# echo $? # returns '1'
|
||||
function ViashDockerPush {
|
||||
ViashNotice "Pushing image to '$1'"
|
||||
local save=$-; set +e
|
||||
local out
|
||||
if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then
|
||||
docker push $1
|
||||
out=$?
|
||||
else
|
||||
docker push $1 2> /dev/null > /dev/null
|
||||
out=$?
|
||||
fi
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -eq 0 ]; then
|
||||
ViashNotice "Container '$1' push succeeded."
|
||||
else
|
||||
ViashError "Container '$1' push errored. You might not be logged in or have the necessary permissions."
|
||||
fi
|
||||
return $out
|
||||
}
|
||||
|
||||
# ViashDockerPullElseBuild: pull a Docker image, else build it
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# ViashDockerBuild : a Bash function which builds a docker image, takes image identifier as argument.
|
||||
# examples:
|
||||
# ViashDockerPullElseBuild mynewcomponent
|
||||
function ViashDockerPullElseBuild {
|
||||
local save=$-; set +e
|
||||
ViashDockerPull $1
|
||||
local out=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -ne 0 ]; then
|
||||
ViashDockerBuild $@
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerSetup: create a Docker image, according to specified docker setup strategy
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# $2 : docker setup strategy, see DockerSetupStrategy.scala
|
||||
# examples:
|
||||
# ViashDockerSetup mynewcomponent alwaysbuild
|
||||
function ViashDockerSetup {
|
||||
local image_id="$1"
|
||||
local setup_strategy="$2"
|
||||
if [ "$setup_strategy" == "alwaysbuild" -o "$setup_strategy" == "build" -o "$setup_strategy" == "b" ]; then
|
||||
ViashDockerBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "alwayspull" -o "$setup_strategy" == "pull" -o "$setup_strategy" == "p" ]; then
|
||||
ViashDockerPull $image_id
|
||||
elif [ "$setup_strategy" == "alwayspullelsebuild" -o "$setup_strategy" == "pullelsebuild" ]; then
|
||||
ViashDockerPullElseBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "alwayspullelsecachedbuild" -o "$setup_strategy" == "pullelsecachedbuild" ]; then
|
||||
ViashDockerPullElseBuild $image_id $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "alwayscachedbuild" -o "$setup_strategy" == "cachedbuild" -o "$setup_strategy" == "cb" ]; then
|
||||
ViashDockerBuild $image_id $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [[ "$setup_strategy" =~ ^ifneedbe ]]; then
|
||||
local save=$-; set +e
|
||||
ViashDockerLocalTagCheck $image_id
|
||||
local outCheck=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $outCheck -eq 0 ]; then
|
||||
ViashInfo "Image $image_id already exists"
|
||||
elif [ "$setup_strategy" == "ifneedbebuild" ]; then
|
||||
ViashDockerBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "ifneedbecachedbuild" ]; then
|
||||
ViashDockerBuild $image_id $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "ifneedbepull" ]; then
|
||||
ViashDockerPull $image_id
|
||||
elif [ "$setup_strategy" == "ifneedbepullelsebuild" ]; then
|
||||
ViashDockerPullElseBuild $image_id --no-cache $(ViashDockerBuildArgs "$engine_id")
|
||||
elif [ "$setup_strategy" == "ifneedbepullelsecachedbuild" ]; then
|
||||
ViashDockerPullElseBuild $image_id $(ViashDockerBuildArgs "$engine_id")
|
||||
else
|
||||
ViashError "Unrecognised Docker strategy: $setup_strategy"
|
||||
exit 1
|
||||
fi
|
||||
elif [ "$setup_strategy" == "push" -o "$setup_strategy" == "forcepush" -o "$setup_strategy" == "alwayspush" ]; then
|
||||
ViashDockerPush "$image_id"
|
||||
elif [ "$setup_strategy" == "pushifnotpresent" -o "$setup_strategy" == "gentlepush" -o "$setup_strategy" == "maybepush" ]; then
|
||||
local save=$-; set +e
|
||||
ViashDockerRemoteTagCheck $image_id
|
||||
local outCheck=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $outCheck -eq 0 ]; then
|
||||
ViashNotice "Container '$image_id' exists, doing nothing."
|
||||
else
|
||||
ViashNotice "Container '$image_id' does not yet exist."
|
||||
ViashDockerPush "$image_id"
|
||||
fi
|
||||
elif [ "$setup_strategy" == "donothing" -o "$setup_strategy" == "meh" ]; then
|
||||
ViashNotice "Skipping setup."
|
||||
else
|
||||
ViashError "Unrecognised Docker strategy: $setup_strategy"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerCheckCommands: Check whether a docker container has the required commands
|
||||
#
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# $@ : commands to verify being present
|
||||
# examples:
|
||||
# ViashDockerCheckCommands bash:4.0 bash ps foo
|
||||
function ViashDockerCheckCommands {
|
||||
local image_id="$1"
|
||||
shift 1
|
||||
local commands="$@"
|
||||
local save=$-; set +e
|
||||
local missing # mark 'missing' as local in advance, otherwise the exit code of the command will be missing and always be '0'
|
||||
missing=$(docker run --rm --entrypoint=sh "$image_id" -c "for command in $commands; do command -v \$command >/dev/null 2>&1; if [ \$? -ne 0 ]; then echo \$command; exit 1; fi; done")
|
||||
local outCheck=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $outCheck -ne 0 ]; then
|
||||
ViashError "Docker container '$image_id' does not contain command '$missing'."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerBuild: build a docker image
|
||||
# $1 : image identifier with format `[registry/]image[:tag]`
|
||||
# $... : additional arguments to pass to docker build
|
||||
# $VIASH_META_TEMP_DIR : temporary directory to store dockerfile & optional resources in
|
||||
# $VIASH_META_NAME : name of the component
|
||||
# $VIASH_META_RESOURCES_DIR : directory containing the resources
|
||||
# $VIASH_VERBOSITY : verbosity level
|
||||
# exit code $? : whether or not the image was built successfully
|
||||
function ViashDockerBuild {
|
||||
local image_id="$1"
|
||||
shift 1
|
||||
|
||||
# create temporary directory to store dockerfile & optional resources in
|
||||
local tmpdir=$(mktemp -d "$VIASH_META_TEMP_DIR/dockerbuild-$VIASH_META_NAME-XXXXXX")
|
||||
local dockerfile="$tmpdir/Dockerfile"
|
||||
function clean_up {
|
||||
rm -rf "$tmpdir"
|
||||
}
|
||||
trap clean_up EXIT
|
||||
|
||||
# store dockerfile and resources
|
||||
ViashDockerfile "$VIASH_ENGINE_ID" > "$dockerfile"
|
||||
|
||||
# generate the build command
|
||||
local docker_build_cmd="docker build -t '$image_id' $@ '$VIASH_META_RESOURCES_DIR' -f '$dockerfile'"
|
||||
|
||||
# build the container
|
||||
ViashNotice "Building container '$image_id' with Dockerfile"
|
||||
ViashInfo "$docker_build_cmd"
|
||||
local save=$-; set +e
|
||||
if [ $VIASH_VERBOSITY -ge $VIASH_LOGCODE_INFO ]; then
|
||||
eval $docker_build_cmd
|
||||
else
|
||||
eval $docker_build_cmd &> "$tmpdir/docker_build.log"
|
||||
fi
|
||||
|
||||
# check exit code
|
||||
local out=$?
|
||||
[[ $save =~ e ]] && set -e
|
||||
if [ $out -ne 0 ]; then
|
||||
ViashError "Error occurred while building container '$image_id'"
|
||||
if [ $VIASH_VERBOSITY -lt $VIASH_LOGCODE_INFO ]; then
|
||||
ViashError "Transcript: --------------------------------"
|
||||
cat "$tmpdir/docker_build.log"
|
||||
ViashError "End of transcript --------------------------"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
######## End of helper functions for setting up Docker images for viash ########
|
||||
|
||||
# ViashDockerFile: print the dockerfile to stdout
|
||||
# $1 : engine identifier
|
||||
# return : dockerfile required to run this component
|
||||
# examples:
|
||||
# ViashDockerFile
|
||||
function ViashDockerfile {
|
||||
local engine_id="$1"
|
||||
|
||||
if [[ "$engine_id" == "docker" ]]; then
|
||||
cat << 'VIASHDOCKER'
|
||||
FROM quay.io/biocontainers/fastp:0.23.4--hadf994f_2
|
||||
ENTRYPOINT []
|
||||
RUN fastp --version 2>&1 | sed 's# #: "#;s#$#"#' > /var/software_versions.txt
|
||||
|
||||
LABEL org.opencontainers.image.authors="Robrecht Cannoodt"
|
||||
LABEL org.opencontainers.image.description="Companion container for running component fastp"
|
||||
LABEL org.opencontainers.image.created="2024-12-03T10:34:04Z"
|
||||
LABEL org.opencontainers.image.source="https://github.com/OpenGene/fastp"
|
||||
LABEL org.opencontainers.image.revision="952ff0843093b538cbfd6fefdecf2e7a0bc9e70b"
|
||||
LABEL org.opencontainers.image.version="main"
|
||||
|
||||
VIASHDOCKER
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashDockerBuildArgs: return the arguments to pass to docker build
|
||||
# $1 : engine identifier
|
||||
# return : arguments to pass to docker build
|
||||
function ViashDockerBuildArgs {
|
||||
local engine_id="$1"
|
||||
|
||||
if [[ "$engine_id" == "docker" ]]; then
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
# ViashAbsolutePath: generate absolute path from relative path
|
||||
# borrowed from https://stackoverflow.com/a/21951256
|
||||
# $1 : relative filename
|
||||
# return : absolute path
|
||||
# examples:
|
||||
# ViashAbsolutePath some_file.txt # returns /path/to/some_file.txt
|
||||
# ViashAbsolutePath /foo/bar/.. # returns /foo
|
||||
function ViashAbsolutePath {
|
||||
local thePath
|
||||
local parr
|
||||
local outp
|
||||
local len
|
||||
if [[ ! "$1" =~ ^/ ]]; then
|
||||
thePath="$PWD/$1"
|
||||
else
|
||||
thePath="$1"
|
||||
fi
|
||||
echo "$thePath" | (
|
||||
IFS=/
|
||||
read -a parr
|
||||
declare -a outp
|
||||
for i in "${parr[@]}"; do
|
||||
case "$i" in
|
||||
''|.) continue ;;
|
||||
..)
|
||||
len=${#outp[@]}
|
||||
if ((len==0)); then
|
||||
continue
|
||||
else
|
||||
unset outp[$((len-1))]
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
len=${#outp[@]}
|
||||
outp[$len]="$i"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
echo /"${outp[*]}"
|
||||
)
|
||||
}
|
||||
# ViashDockerAutodetectMount: auto configuring docker mounts from parameters
|
||||
# $1 : The parameter value
|
||||
# returns : New parameter
|
||||
# $VIASH_DIRECTORY_MOUNTS : Added another parameter to be passed to docker
|
||||
# $VIASH_DOCKER_AUTOMOUNT_PREFIX : The prefix to be used for the automounts
|
||||
# examples:
|
||||
# ViashDockerAutodetectMount /path/to/bar # returns '/viash_automount/path/to/bar'
|
||||
# ViashDockerAutodetectMountArg /path/to/bar # returns '--volume="/path/to:/viash_automount/path/to"'
|
||||
function ViashDockerAutodetectMount {
|
||||
local abs_path=$(ViashAbsolutePath "$1")
|
||||
local mount_source
|
||||
local base_name
|
||||
if [ -d "$abs_path" ]; then
|
||||
mount_source="$abs_path"
|
||||
base_name=""
|
||||
else
|
||||
mount_source=`dirname "$abs_path"`
|
||||
base_name=`basename "$abs_path"`
|
||||
fi
|
||||
local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source"
|
||||
if [ -z "$base_name" ]; then
|
||||
echo "$mount_target"
|
||||
else
|
||||
echo "$mount_target/$base_name"
|
||||
fi
|
||||
}
|
||||
function ViashDockerAutodetectMountArg {
|
||||
local abs_path=$(ViashAbsolutePath "$1")
|
||||
local mount_source
|
||||
local base_name
|
||||
if [ -d "$abs_path" ]; then
|
||||
mount_source="$abs_path"
|
||||
base_name=""
|
||||
else
|
||||
mount_source=`dirname "$abs_path"`
|
||||
base_name=`basename "$abs_path"`
|
||||
fi
|
||||
local mount_target="$VIASH_DOCKER_AUTOMOUNT_PREFIX$mount_source"
|
||||
ViashDebug "ViashDockerAutodetectMountArg $1 -> $mount_source -> $mount_target"
|
||||
echo "--volume=\"$mount_source:$mount_target\""
|
||||
}
|
||||
function ViashDockerStripAutomount {
|
||||
local abs_path=$(ViashAbsolutePath "$1")
|
||||
echo "${abs_path#$VIASH_DOCKER_AUTOMOUNT_PREFIX}"
|
||||
}
|
||||
# initialise variables
|
||||
VIASH_DIRECTORY_MOUNTS=()
|
||||
|
||||
# configure default docker automount prefix if it is unset
|
||||
if [ -z "${VIASH_DOCKER_AUTOMOUNT_PREFIX+x}" ]; then
|
||||
VIASH_DOCKER_AUTOMOUNT_PREFIX="/viash_automount"
|
||||
fi
|
||||
|
||||
# initialise docker variables
|
||||
VIASH_DOCKER_RUN_ARGS=(-i --rm)
|
||||
|
||||
# initialise array
|
||||
VIASH_POSITIONAL_ARGS=''
|
||||
|
||||
|
||||
Reference in New Issue
Block a user