File: run-tests.sh

package info (click to toggle)
django-qr-code 4.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,108 kB
  • sloc: python: 3,914; sh: 107; makefile: 20
file content (97 lines) | stat: -rwxr-xr-x 3,534 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env bash

# Move to project root dir.
cd "$(dirname "$0")/.." && scripts_dir="$(pwd)/scripts"

output_folder_name=tests_result
if [ -d "${output_folder_name}" ]; then
    mv "${output_folder_name}" "${output_folder_name}.back"
fi
mkdir -p "${output_folder_name}"
log_file_name=log.txt

if [ $? -ne 0 ]; then
    echo
    echo --- Failed type checking. Abort tests!
    exit 1
else
    echo
    echo --- Type checking OK!
    echo
fi

echo "--- Tests started on $(date)on $(hostname) ($(uname -a))"
echo "--- Computer: $(hostname) ($(uname -a), CPU: $(nproc --all)"
echo "--- CPU: $(nproc --all)"
echo "--- RAM: $(free -h)"

python_versions=("3.10 3.11 3.12 3.13")
django_versions=("4.2.21 5.2.1")

for python_version in ${python_versions[@]}
do
    DOCKER_COMPOSE_COMMAND="docker compose -f docker-compose.yml"
    if [ -n "$GITHUB_ACTION" ]; then
        DOCKER_COMPOSE_EXEC_COMMAND="${DOCKER_COMPOSE_COMMAND} exec -T django-qr-code"
    else
        DOCKER_COMPOSE_EXEC_COMMAND="${DOCKER_COMPOSE_COMMAND} exec django-qr-code"
    fi

    ${DOCKER_COMPOSE_COMMAND} down
    build_cmd="${DOCKER_COMPOSE_COMMAND} build --build-arg PYTHON_VERSION=${python_version}"
    echo --- Build test container for Python ${python_version}: "${build_cmd}"
    ${build_cmd}

    ${DOCKER_COMPOSE_COMMAND} up -d

    for django_version in ${django_versions[@]}
    do
        echo --- Testing against: Python ${python_version} and Django ${django_version}

        echo --- Force Django version
        ${DOCKER_COMPOSE_EXEC_COMMAND} pip install --upgrade "django~=${django_version}" || (echo "pip install - Python: ${python_version}, Django: ${django_version}" >> ${output_folder_name}/fail.flag)
        echo Output code for tests with Python ${python_version} and Django ${django_version}: $?

        echo --- Setup test environment
        ${DOCKER_COMPOSE_EXEC_COMMAND} python manage.py collectstatic --noinput || (echo "collectstatic - Python: ${python_version}, Django: ${django_version}" >> ${output_folder_name}/fail.flag)

        # Run tests
        (${DOCKER_COMPOSE_EXEC_COMMAND} python -Wd manage.py test || (echo "test - Python: ${python_version}, Django: ${django_version}" >> ${output_folder_name}/fail.flag)) | tee "${output_folder_name}/python_${python_version}-django_${django_version}-${log_file_name}"
     done

    echo "--- Run type checking"
    ${DOCKER_COMPOSE_EXEC_COMMAND} pip install -r requirements-dev.txt || (echo "pip install - Python: ${python_version}" >> ${output_folder_name}/fail.flag)
    ${DOCKER_COMPOSE_EXEC_COMMAND} mypy qr_code || (echo "mypy - Python: ${python_version}" >> ${output_folder_name}/fail.flag)

    echo --- Stop containers and remove them.
    ${DOCKER_COMPOSE_COMMAND} down
done

echo
echo --- End of tests at $(date)
echo

success=false
if [ -f "${output_folder_name}/fail.flag" ]; then
  success=false
  error_msg=$(<"${output_folder_name}/fail.flag")
  rm -f "${output_folder_name}/fail.flag"
  echo "--- Fail to run some of the tests! Error(s) in:"
  echo "${error_msg}"
  cat "${output_folder_name}/"*${log_file_name} | grep "FAILED"
else
  cat "${output_folder_name}/"*${log_file_name} | grep "FAILED" || success=true
fi

echo ""
echo "--- Test results:"
cat "${output_folder_name}/"*${log_file_name} | grep "Ran "
cat "${output_folder_name}/"*${log_file_name} | grep -A 40 -B 1 "ERROR:"
cat "${output_folder_name}/"*${log_file_name} | grep -A 20 -B 1 "FAILURE:"

if [ "${success}" == "false" ]; then
  echo --- Tests failed!
  exit 2
else
  echo --- Tests success!
fi