opt_parallel= opt_version= opt_mode=both while getopts 'pv:m:?h' c do case $c in p) opt_parallel=1 ;; v) opt_version=$OPTARG ;; m) opt_mode=$OPTARG ;; ?|h) printf "Usage: %s [-p] [-v mono-ver] [-m sonarr|complete]\n" $0 printf " -p run parallel\n" printf " -v run specified mono version\n" printf " -m run only mono-'complete' or 'sonarr' package variants\n" exit 2 esac done # NOTE: # each container has a 1gb tmpfs mounted since it greatly speeds up the normally intensive db operations # make sure that the docker host has enough memory to handle about ~300 MB per container, so 2-3 GB total # excess goes to the swap and will slow down the entire system # Preferred versions MONO_VERSIONS="6.8 6.6 6.4 6.0 5.20 5.18" # Future versions MONO_VERSIONS="$MONO_VERSIONS 6.10=preview-xenial" # Supported versions MONO_VERSIONS="$MONO_VERSIONS 5.16 5.14 5.12 5.10 5.8 5.4" # Legacy unsupported versions MONO_VERSIONS="$MONO_VERSIONS 5.0" #MONO_VERSIONS="$MONO_VERSIONS 4.8=stable-wheezy/snapshots/4.8" if [ "$opt_version" != "" ]; then MONO_VERSIONS="$opt_version" fi mkdir -p ${PWD}/../../_tests_results prepOne() { local MONO_VERSION_PAIR=$1 MONO_VERSION_SPLIT=(${MONO_VERSION_PAIR//=/ }) MONO_VERSION=${MONO_VERSION_SPLIT[0]} MONO_URL=${MONO_VERSION_SPLIT[1]:-"stable-xenial/snapshots/$MONO_VERSION"} echo "Building Test Docker for mono $MONO_VERSION" if [ "$opt_mode" != "sonarr" ]; then docker build -t sonarr-test-$MONO_VERSION --build-arg MONO_VERSION=$MONO_VERSION --build-arg MONO_URL=$MONO_URL --file mono/complete/Dockerfile mono fi if [ "$opt_mode" != "complete" ] && [ "$MONO_VERSION" != "5.0" ]; then docker build -t sonarr-test-$MONO_VERSION-sonarr --build-arg MONO_VERSION=$MONO_VERSION --build-arg MONO_URL=$MONO_URL --file mono/sonarr/Dockerfile mono fi } runOne() { local MONO_VERSION_PAIR=$1 MONO_VERSION_SPLIT=(${MONO_VERSION_PAIR//=/ }) MONO_VERSION=${MONO_VERSION_SPLIT[0]} echo "Running Test Docker for mono $MONO_VERSION" if [ "$opt_mode" != "sonarr" ]; then dockerArgs="--rm" dockerArgs="$dockerArgs -v /${PWD}/../../_tests_linux:/data/_tests_linux:ro" dockerArgs="$dockerArgs -v /${PWD}/../../_output_linux:/data/_output_linux:ro" dockerArgs="$dockerArgs -v /${PWD}/../../_tests_results/mono-$MONO_VERSION:/data/_tests_results" dockerArgs="$dockerArgs --mount type=tmpfs,destination=//data/test,tmpfs-size=1g" docker run $dockerArgs sonarr-test-$MONO_VERSION fi if [ "$opt_mode" != "complete" ] && [ "$MONO_VERSION" != "5.0" ]; then dockerArgs="--rm" dockerArgs="$dockerArgs -v /${PWD}/../../_tests_linux:/data/_tests_linux:ro" dockerArgs="$dockerArgs -v /${PWD}/../../_output_linux:/data/_output_linux:ro" dockerArgs="$dockerArgs -v /${PWD}/../../_tests_results/mono-$MONO_VERSION-sonarr:/data/_tests_results" dockerArgs="$dockerArgs --mount type=tmpfs,destination=//data/test,tmpfs-size=1g" docker run $dockerArgs sonarr-test-$MONO_VERSION-sonarr fi echo "Finished Test Docker for mono $MONO_VERSION" } if [ "$opt_parallel" == "1" ]; then for MONO_VERSION_PAIR in $MONO_VERSIONS; do prepOne "$MONO_VERSION_PAIR" done fi for MONO_VERSION_PAIR in $MONO_VERSIONS; do if [ "$opt_parallel" == "1" ]; then runOne "$MONO_VERSION_PAIR" & else prepOne "$MONO_VERSION_PAIR" runOne "$MONO_VERSION_PAIR" fi done if [ "$opt_parallel" == "1" ]; then echo "Waiting for all runs to finish" wait echo "Finished all runs" fi