Newer
Older
#!/bin/zsh
# vim: set shiftwidth=4 softtabstop=4:
#
# This script will create a database, install some modules and run tests on it
#
# Arguments:
#
# - db host if any (will use socket if nothing is provided)
# - db user
Houzefa Abbasbhay
committed
# - other arguments are forwarded as is to the setup command.
#
# Required:
#
# - access to pg database
#
Houzefa Abbasbhay
committed

szeka.wong
committed
# this is the same value as conf/drone/odoo.conf
if [[ -e "${project_home}/conf/drone/odoo.conf" ]];
then
echo "$DEBUG Reading configuration from ${project_home}/conf/drone/odoo.conf"
dbowner=$(read_configuration_key ${project_home}/conf/drone/odoo.conf options db_user)
unaccent=$(read_configuration_key ${project_home}/conf/drone/odoo.conf options unaccent False)

szeka.wong
committed
elif [[ -e "${project_home}/conf/dev/odoo.conf" ]];

Vincent Hatakeyama
committed
then
echo "$DEBUG Reading configuration from ${project_home}/conf/dev/odoo.conf"
dbowner=$(read_configuration_key ${project_home}/conf/dev/odoo.conf options db_user)
unaccent=$(read_configuration_key ${project_home}/conf/dev/odoo.conf options unaccent False)

Vincent Hatakeyama
committed
else

Vincent Hatakeyama
committed
dbowner=odoo

Vincent Hatakeyama
committed
fi
modules_to_install=${ODOO_SCRIPTS_MODULE_LIST-$(read_odoo_scripts_expandable_configuration_key module_list)}
echo "$DEBUG module_list=$modules_to_install"
modules_to_tests=${ODOO_SCRIPTS_MODULE_LIST-$(read_odoo_scripts_expandable_configuration_key module_list_tests)}
echo "$DEBUG module_list_tests=$modules_to_tests"
if [[ -z "$modules_to_tests" ]];
then
echo "$INFO No module to tests"
exit 0
fi
fail_on_errors=${ODOO_SCRIPTS_FAIL_ON_ERRORS-$(read_odoo_scripts_configuration_key fail_on_errors True)}
# argument handling
if [[ $# -gt 0 ]];
then
echo "$INFO Using database host $1"
PG_HOST=-h$1
ODOO_HOST=--db_host=$1
shift
if [[ $# -gt 0 ]];
then
echo "$INFO Using database user $1"
PG_USER=-U$1
ODOO_USER=--db_user=$1
dbowner=$1
shift
if [[ $# -gt 0 ]];
then
dbname=$1
shift
else
dbname=$(basename $project_home)_test
fi
PG_HOST=""
ODOO_HOST=""
PG_USER=""
ODOO_USER=""
fi

Vincent Hatakeyama
committed
# This should be a parameter if it was simple to parse
INSTALL_ARGUMENTS="--log-level=${INSTALL_LOG_LEVEL:-warn}"
if [[ -n "$ODOO_WITHOUT_DEMO" ]];
then
INSTALL_ARGUMENTS="$INSTALL_ARGUMENTS --without-demo=$ODOO_WITHOUT_DEMO"
fi
if [[ -z "$ODOO_NO_DROP" ]];
then
echo "$INFO Drop any existing database '$dbname'"
dropdb $PG_HOST $PG_USER --if-exists $dbname --no-password
echo "$INFO Create database '$dbname' with owner $dbowner"
createdb $PG_HOST $PG_USER -O $dbowner $dbname --no-password || { echo "$FATAL Cannot create test database" ; exit 1; }
# Add extensions
typeset -a extensions
extensions+=($(read_odoo_scripts_configuration_key pg.extensions))
for extension in $extensions; do
echo "$INFO Create extension $extension in '$dbname'"
psql $PG_HOST $PG_USER $dbname -c "CREATE EXTENSION IF NOT EXISTS $extension;"
done
echo "$INFO Modules to install: $modules_to_install"
echo "$INFO Install those modules"
logfile=$(tempfile --suffix=.log)

Vincent Hatakeyama
committed
function clean_logfile() {
rm $logfile
}
trap clean_logfile INT TERM
$here/start $INSTALL_ARGUMENTS -i $modules_to_install -d $dbname --max-cron-threads=0 --stop-after-init $* $ODOO_HOST $ODOO_USER 2>&1 | tee $logfile | sed -e 's/\(.*\) \(INFO\) \(.*\)/\o033[2m\1\o033[22m \o033[32m\o033[7m\2\o033[27m \3\o033[39m/' -e 's/\(.*\) \(DEBUG\) \(.*\)/\o033[2m\1\o033[22m \o033[33m\o033[7m\2\o033[27m \2\o033[39m/' -e 's/\(.*\) \(WARNING\) \(.*\)/\o033[2m\1\o033[22m \o033[33m\o033[7m\2\o033[27m \3\o033[39m/' -e 's/\(.*\) \(ERROR\) \(.*\)/\o033[2m\1\o033[22m \o033[31m\o033[7m\2\o033[27m \3\o033[0m/' -e 's/ FAILED/ \o033[41m\o033[97m\o033[1mFAILED\o033[0m/' -e 's/ FAIL\(.*\)/ \o033[41m\o033[97m\o033[1mFAIL\o033[49m\o033[31m\1\o033[0m/' -e 's/\(.*\) \(CRITICAL\) \(.*\)/\o033[2m\1\o033[22m \o033[33m\o033[7m\2\o033[27m \3\o033[39m/' -e 's/\(.*\) \(TEST\) \(.*\) \(ERROR\)\(.*\)/\o033[2m\1\o033[22m \o033[34m\o033[7m\2\o033[27m \3\o033[0m \o033[41m\o033[97m\o033[1m\4\o033[49m\o033[31m\5\o033[0m/' -e 's/\(.*\) \(TEST\) \(.*\) \(OK\)/\o033[2m\1\o033[22m \o033[34m\o033[7m\2\o033[27m \3\o033[0m \o033[32m\o033[7m\4\o033[27m\o033[39m/' -e 's/\(.*\) \(TEST\) \(.*\)/\o033[2m\1\o033[22m \o033[34m\o033[7m\2\o033[27m \3 \o033[0m/'

Vincent Hatakeyama
committed
if [[ $start_status -ne 0 ]];
then
echo "$KO Cannot install modules (exit ${start_status})"

Vincent Hatakeyama
committed
exit $start_status
fi
criticals=$(grep ' CRITICAL' -F $logfile -c)
# exclude ALTER COLUMN xxx set not null that are not real errors
errors=$(grep ' ERROR' -F $logfile | grep -E -v "(ALTER COLUMN \"\w*\" SET NOT NULL|unable to set NOT NULL on column)" -c)
warnings=$(grep ' WARNING' -F $logfile -c)

Vincent Hatakeyama
committed
if [[ $criticals -gt 0 ]];
then
echo "$KO Cannot install modules ($criticals CRITICAL messages found)"

Vincent Hatakeyama
committed
exit 2
fi

Vincent Hatakeyama
committed

Vincent Hatakeyama
committed
if [[ $errors -gt 0 ]];

Vincent Hatakeyama
committed
if [[ "$fail_on_errors" == "False" ]];
then
echo "$WARN Install modules with $errors ERROR messages"

Vincent Hatakeyama
committed
else
echo "$KO Cannot install modules ($errors ERROR messages found)"

Vincent Hatakeyama
committed
exit 1

Vincent Hatakeyama
committed
fi

Vincent Hatakeyama
committed
if [[ $warnings -gt 0 ]];
then
if [[ "${FAIL_ON_WARNING:-False}" == "False" ]];
then
echo "$WARN Modules installed ($warnings WARNING messages)"

Vincent Hatakeyama
committed
else
echo "$KO Cannot install modules ($warnings WARNING messages found)"

Vincent Hatakeyama
committed
exit 1
fi
else
echo "$OK Modules installed"

Vincent Hatakeyama
committed
fi
echo "$INFO Run tests on $dbname"
$here/run_tests $dbname $ODOO_HOST $ODOO_USER $*