changeset 7901:ac6cc1b8a07e

scripts: new maintainer script validate-minimum-dependency-versions Automate what we can. This script could be added later to an encompassing script 'prepare-for-release' (which would also do other release-related steps). The trick '2> >(tee "$log" >&2)' sends the error output to the console while at the same time writing to a file. It uses bash-specific syntax (process substitution: >(...) ) See https://stackoverflow.com/a/692407/2941347 . Includes contributions by Mads Kiilerich.
author Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
date Sun, 27 Oct 2019 20:51:04 +0100
parents 4dad662fe6fd
children 37ac2ac0a9ae
files scripts/validate-minimum-dependency-versions
diffstat 1 files changed, 55 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/validate-minimum-dependency-versions	Sun Oct 27 20:51:04 2019 +0100
@@ -0,0 +1,55 @@
+#!/bin/bash
+# Test that installation of all dependencies works fine if versions are set to
+# the minimum ones.
+
+set -e
+
+if [ -n "$VIRTUAL_ENV" ]; then
+    echo "This script will create its own virtualenv - please don't run it inside an existing one." >&2
+    exit 1
+fi
+
+cd "$(hg root)"
+
+venv=build/minimum-dependency-versions-venv
+log=build/minimum-dependency-versions.log
+min_requirements=build/minimum-dependency-versions-requirements.txt
+echo "virtualenv: $venv"
+echo "log: $log"
+echo "minimum requirements file: $min_requirements"
+
+# clean up previous runs
+rm -rf "$venv" "$log"
+mkdir -p "$venv"
+
+# Make a light weight parsing of setup.py and dev_requirements.txt,
+# finding all >= requirements and dumping into a custom requirements.txt
+# while fixating the requirement at the lower bound.
+sed -n 's/.*"\(.*\)>=\(.*\)".*/\1==\2/p' setup.py > "$min_requirements"
+sed 's/>=/==/p' dev_requirements.txt >> "$min_requirements"
+
+virtualenv -p "$(command -v python2)" "$venv"
+source "$venv/bin/activate"
+pip install --upgrade pip setuptools
+pip install -e . -r "$min_requirements" python-ldap python-pam 2> >(tee "$log" >&2)
+
+# Strip out the known Python 2.7 deprecation message.
+sed -i '/DEPRECATION: Python 2\.7 will reach the end of its life/d' "$log"
+
+# Treat any message on stderr as a problem, for the caller to interpret.
+if [ -s "$log" ]; then
+    echo
+    echo "Error: pip detected following problems:"
+    cat "$log"
+    echo
+    exit 1
+fi
+
+freeze_txt=build/minimum-dependency-versions.txt
+pip freeze > $freeze_txt
+echo "Installation of minimum packages was successful, providing a set of packages as in $freeze_txt . Now running test suite..."
+
+pytest
+
+echo "Test suite execution was successful."
+echo "You can now do additional validation using virtual env '$venv'."