--- /dev/null
+#!/bin/bash
+
+set -o nounset
+set -o errexit
+set -o pipefail
+
+#-------------------------------------------------------------------------------
+# Various tests are run using tox such as jjbtest, yamllint, and shellehck.
+#-------------------------------------------------------------------------------
+run_tox() {
+
+ echo "Info : Preparing to run tox for the repo $GERRIT_PROJECT"
+
+ # set and export defaults
+ LINT_TYPE="${LINT_TYPE:-jjbtest}"
+ VERBOSITY=${VERBOSITY:-false}
+ export LINT_TYPE VERBOSITY
+
+ # ensure we are in job build WORKSPACE
+ cd "$WORKSPACE"
+
+ # set DEBIAN_FRONTEND to run apt non-interactively
+ DEBIAN_FRONTEND=noninteractive
+ export DEBIAN_FRONTEND
+
+ # Wait for other apt auto-update process to finish by checking the dpkg lock file.
+ DPKG_LOCK="/var/lib/dpkg/lock-frontend"
+ try=0
+ while sudo lsof "${DPKG_LOCK}" > /dev/null 2>&1 ; do
+ echo "DPKG file locked: ${DPKG_LOCK}."
+ echo " Waiting for another pkg instalaltion process to finish ..."
+ sleep 10
+ if [[ ${try} -gt 120 ]] ; then
+ echo "ERROR: Max number of re-tries reached, exiting..."
+ exit 1
+ fi
+ try=$((try + 1))
+ done
+
+ # install dependencies
+ echo "Info : Install python3.7-minimal python3-distutils virtualenv using apt"
+ redirect_cmd sudo apt update
+ redirect_cmd sudo apt install -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew -y \
+ python3.7-minimal python3-distutils virtualenv
+
+ # create and activate virtualenv
+ echo "Info : Create and activate python virtualenv"
+ redirect_cmd virtualenv -p python3 .venv
+ set +u
+ redirect_cmd source .venv/bin/activate
+ set -u
+
+ # install only tox since the rest of the requirements are installed by tox itself
+ TOX_PACKAGE=$(grep "^tox==" jjb/infra/test-requirements.txt)
+ echo "Info : Install $TOX_PACKAGE"
+ redirect_cmd pip install --force-reinstall "$TOX_PACKAGE"
+
+ # run tox
+ echo "Info : Run $LINT_TYPE using tox"
+ echo "----------------------------------------------------"
+ tox -e "$LINT_TYPE"
+ echo "----------------------------------------------------"
+ echo "Info : Done!"
+
+}
+#-------------------------------------------------------------------------------
+# In some cases, it is useful to see all the output generated by commands so
+# this function makes it possible for users to achieve that by not redirecting
+# output to /dev/null when verbosity is enabled
+#-------------------------------------------------------------------------------
+redirect_cmd() {
+
+ if [[ "$VERBOSITY" == "false" ]]; then
+ "$@" > /dev/null 2>&1
+ else
+ "$@"
+ fi
+
+}
+#-------------------------------------------------------------------------------
+# run tox
+#-------------------------------------------------------------------------------
+
+run_tox "$@"
+
+# vim: set ts=2 sw=2 ft=bash expandtab: