|
| 1 | +#!/bin/bash -ex |
| 2 | + |
| 3 | +venv() { |
| 4 | + if ! test -d "$1" ; then |
| 5 | + if command -v virtualenv > /dev/null; then |
| 6 | + virtualenv -p python3 "$1" |
| 7 | + else |
| 8 | + python3 -m venv "$1" |
| 9 | + fi |
| 10 | + fi |
| 11 | + # shellcheck source=/dev/null |
| 12 | + source "$1"/bin/activate |
| 13 | +} |
| 14 | + |
| 15 | +# Set these variables when running the script, e.g.: |
| 16 | +# CONTAINER=podman ./conformance_test.sh |
| 17 | + |
| 18 | +# Which container runtime to use |
| 19 | +# Valid options: docker, singularity |
| 20 | +CONTAINER=${CONTAINER:-docker} |
| 21 | + |
| 22 | +# Comma-separated list of test names that should be excluded from execution |
| 23 | +# Defaults to "docker_entrypoint, inplace_update_on_file_content" |
| 24 | +# EXCLUDE=${EXCLUDE:-"some_default_test_to_exclude"} |
| 25 | + |
| 26 | +# Additional arguments for the pytest command |
| 27 | +# Defaults to none |
| 28 | +# PYTEST_EXTRA= |
| 29 | + |
| 30 | +# The directory where this script resides |
| 31 | +SCRIPT_DIRECTORY="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" |
| 32 | + |
| 33 | +# Download archive from GitHub |
| 34 | + |
| 35 | +rm -Rf main.tar.gz common-workflow-language-main |
| 36 | +wget "https://github.com/common-workflow-language/common-workflow-language/archive/main.tar.gz" |
| 37 | +tar xzf "main.tar.gz" |
| 38 | + |
| 39 | +if [ "${CONTAINER}" == "docker" ]; then |
| 40 | + docker pull docker.io/node:slim |
| 41 | +fi |
| 42 | + |
| 43 | +if [ "${CONTAINER}" == "podman" ]; then |
| 44 | + podman pull docker.io/node:slim |
| 45 | +fi |
| 46 | + |
| 47 | +if [ "${CONTAINER}" == "singularity" ]; then |
| 48 | + export CWL_SINGULARITY_CACHE="$SCRIPT_DIRECTORY/sifcache" |
| 49 | + mkdir --parents "${CWL_SINGULARITY_CACHE}" |
| 50 | +fi |
| 51 | + |
| 52 | +# Setup environment |
| 53 | +venv cwl-conformance-venv |
| 54 | +pip install -U setuptools wheel pip |
| 55 | +pip uninstall -y cwl_upgrader |
| 56 | +pip install cwltool 'cwltest>=2.3' -r "${SCRIPT_DIRECTORY}"/test-requirements.txt "${SCRIPT_DIRECTORY}" |
| 57 | +python -c 'import ruamel.yaml' |
| 58 | + |
| 59 | +CWLTOOL_OPTIONS+=" --parallel" |
| 60 | +unset exclusions |
| 61 | +declare -a exclusions |
| 62 | +if [[ "$CONTAINER" = "singularity" ]]; then |
| 63 | + CWLTOOL_OPTIONS+=" --singularity" |
| 64 | + # This test fails because Singularity and Docker have |
| 65 | + # different views on how to deal with this. |
| 66 | + exclusions+=(docker_entrypoint) |
| 67 | + if [[ "${VERSION}" = "v1.1" ]]; then |
| 68 | + # This fails because of a difference (in Singularity vs Docker) in |
| 69 | + # the way filehandles are passed to processes in the container and |
| 70 | + # wc can tell somehow. |
| 71 | + # See issue #1440 |
| 72 | + exclusions+=(stdin_shorcut) |
| 73 | + fi |
| 74 | +elif [[ "$CONTAINER" = "podman" ]]; then |
| 75 | + CWLTOOL_OPTIONS+=" --podman" |
| 76 | +fi |
| 77 | + |
| 78 | +if [[ -n "${EXCLUDE}" ]] ; then |
| 79 | + EXCLUDE="${EXCLUDE}," |
| 80 | +fi |
| 81 | +if (( "${#exclusions[*]}" > 0 )); then |
| 82 | + EXCLUDE=${EXCLUDE}$(IFS=,; echo "${exclusions[*]}") |
| 83 | +fi |
| 84 | + |
| 85 | +CONFORMANCE_TEST1="${SCRIPT_DIRECTORY}/common-workflow-language-main/v1.0/conformance_test_v1_0_to_v1_1.yaml" |
| 86 | +CONFORMANCE_TEST2="${SCRIPT_DIRECTORY}/common-workflow-language-main/v1.0/conformance_test_v1_0_to_v1_2.yaml" |
| 87 | + |
| 88 | +pushd "${SCRIPT_DIRECTORY}"/common-workflow-language-main/v1.0 |
| 89 | +cp -r v1.0 v1.1 |
| 90 | +cp -r v1.0 v1.2 |
| 91 | +rm v1.1/*.cwl |
| 92 | +rm v1.2/*.cwl |
| 93 | +set +x |
| 94 | +pushd v1.0 ; cwl-upgrader --v1.1-only --dir ../v1.1 --always-write ./*.cwl; popd |
| 95 | +pushd v1.0 ; cwl-upgrader --dir ../v1.2 --always-write ./*.cwl; popd |
| 96 | +set -x |
| 97 | +cp conformance_test_v1.0.yaml "${CONFORMANCE_TEST1}" |
| 98 | +cp conformance_test_v1.0.yaml "${CONFORMANCE_TEST2}" |
| 99 | +sed -i 's=v1.0/=v1.1/=g' "${CONFORMANCE_TEST1}" |
| 100 | +sed -i 's=v1.0/=v1.2/=g' "${CONFORMANCE_TEST2}" |
| 101 | +popd |
| 102 | + |
| 103 | +cp "${CONFORMANCE_TEST1}" "${CONFORMANCE_TEST1%".yaml"}.cwltest.yaml" |
| 104 | +CONFORMANCE_TEST1="${CONFORMANCE_TEST1%".yaml"}.cwltest.yaml" |
| 105 | +cp "${CONFORMANCE_TEST2}" "${CONFORMANCE_TEST2%".yaml"}.cwltest.yaml" |
| 106 | +CONFORMANCE_TEST2="${CONFORMANCE_TEST2%".yaml"}.cwltest.yaml" |
| 107 | + |
| 108 | +export CWLTOOL_OPTIONS |
| 109 | +echo CWLTOOL_OPTIONS="${CWLTOOL_OPTIONS}" |
| 110 | + |
| 111 | +cp "${SCRIPT_DIRECTORY}/tests/cwl-conformance/cwltool-conftest.py" "$(dirname "${CONFORMANCE_TEST1}")/conftest.py" |
| 112 | + |
| 113 | +if [[ -n "${EXCLUDE}" ]] ; then |
| 114 | + EXCLUDE_COMMAND="--cwl-exclude=${EXCLUDE}" |
| 115 | +fi |
| 116 | + |
| 117 | +pushd $(dirname "${CONFORMANCE_TEST1}") |
| 118 | +set +e |
| 119 | +python3 -m pytest "${CONFORMANCE_TEST1}" -n auto -rs --junit-xml="${SCRIPT_DIRECTORY}"/cwltool_v1.0_to_v1.1_"${CONTAINER}".xml -o junit_suite_name=cwltool_$(echo "${CWLTOOL_OPTIONS}" | tr "[:blank:]-" _) ${EXCLUDE_COMMAND} ; RETURN_CODE1=$? |
| 120 | + |
| 121 | +python3 -m pytest "${CONFORMANCE_TEST2}" -n auto -rs --junit-xml="${SCRIPT_DIRECTORY}"/cwltool_v1.0_to_v1.2_"${CONTAINER}".xml -o junit_suite_name=cwltool_$(echo "${CWLTOOL_OPTIONS}" | tr "[:blank:]-" _) ${EXCLUDE_COMMAND} ; RETURN_CODE2=$? |
| 122 | +set -e |
| 123 | +popd |
| 124 | + |
| 125 | +pushd "${SCRIPT_DIRECTORY}"/common-workflow-language-main/v1.0/ |
| 126 | +if |
| 127 | + find v1.1 -type f -print0 | xargs -0 grep cwlVersion | grep -v basename-fields-job.yml | grep --quiet 'v1\.0' |
| 128 | +then RETURN_CODE3=1 |
| 129 | +else RETURN_CODE3=0 |
| 130 | +fi |
| 131 | + |
| 132 | +if |
| 133 | + find v1.2 -type f -print0 | xargs -0 grep cwlVersion | grep -v basename-fields-job.yml | grep --quiet 'v1\.0' |
| 134 | +then RETURN_CODE4=1 |
| 135 | +else RETURN_CODE4=0 |
| 136 | +fi |
| 137 | + |
| 138 | +if |
| 139 | + find v1.2 -type f -print0 | xargs -0 grep cwlVersion | grep -v basename-fields-job.yml | grep --quiet 'v1\.1' |
| 140 | +then RETURN_CODE5=1 |
| 141 | +else RETURN_CODE5=0 |
| 142 | +fi |
| 143 | +popd |
| 144 | + |
| 145 | +# Cleanup |
| 146 | +deactivate |
| 147 | + |
| 148 | +# Exit |
| 149 | +exit $(( RETURN_CODE1 | RETURN_CODE2 | RETURN_CODE3 | RETURN_CODE4 | RETURN_CODE5 )) |
0 commit comments