#!/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 # - other arguments are forwarded as is to the setup command. # # Required: # # - access to pg database # # Version 2.14 here=$(dirname $0) project_home=$(cd $here && cd .. && echo $PWD) dbname=$(basename $project_home)_test # this is the same value as conf/dev/odoo.conf if [[ -e "${project_home}/conf/dev/odoo.conf" ]]; then dbowner=$(python -B -c "import ConfigParser ; c = ConfigParser.ConfigParser() ; c.read('${project_home}/conf/dev/odoo.conf') ; print c.get('options', 'db_user')") else dbowner=odoo fi modules_to_install=$(python -B -c "import ConfigParser ; c = ConfigParser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print ','.join(c.get('odoo_scripts', 'module_list', '').split())") fail_on_errors=$(python -B -c "import ConfigParser ; c = ConfigParser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print c.get('odoo_scripts', 'fail_on_errors', 'True')") # color stuff autoload colors if [[ "$terminfo[colors]" -gt 7 ]]; then colors fi for COLOR in RED GREEN YELLOW BLUE MAGENTA CYAN BLACK WHITE; do eval $COLOR='$fg_no_bold[${(L)COLOR}]' eval BOLD_$COLOR='$fg_bold[${(L)COLOR}]' done eval RESET='$reset_color' # argument handling if [[ $# -gt 0 ]]; then echo "[${YELLOW}INFO${RESET}] Using database host $1" PG_HOST=-h$1 ODOO_HOST=--db_host=$1 shift if [[ $# -gt 0 ]]; then echo "[${YELLOW}INFO${RESET}] Using database user $1" PG_USER=-U$1 ODOO_USER=--db_user=$1 dbowner=$1 shift else PG_USER="" ODOO_USER="" fi else PG_HOST="" ODOO_HOST="" PG_USER="" ODOO_USER="" fi # This should be a parameter if it was simple to parse INSTALL_ARGUMENTS="--log-level=${INSTALL_LOG_LEVEL:-warn}" echo "[${YELLOW}INFO${RESET}] Drop any existing database '$dbname'" dropdb $PG_HOST $PG_USER --if-exists $dbname --no-password echo "[${YELLOW}INFO${RESET}] Create database '$dbname' with owner $dbowner" createdb $PG_HOST $PG_USER -O $dbowner $dbname --no-password || { echo ${RED}FATAL${RESET} - Cannot create test database ; exit 1; } unaccent=$(python -B -c "import ConfigParser ; c = ConfigParser.ConfigParser() ; c.read('${project_home}/conf/dev/odoo.conf') ; print c.get('options', 'unaccent', False)") if [[ "$unaccent" == "True" ]]; then psql $PG_HOST $PG_USER $dbname -c "CREATE EXTENSION unaccent;" fi echo "[${YELLOW}INFO${RESET}] Modules to install: $modules_to_install" echo "[${YELLOW}INFO${RESET}] Install those modules" logfile=$(tempfile --suffix=.log) function clean_logfile() { rm $logfile } trap clean_logfile INT TERM $here/start $INSTALL_ARGUMENTS -i $modules_to_install -d $dbname --max-cron=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/' start_status=$pipestatus[1] if [[ $start_status -ne 0 ]]; then echo "[${RED} KO ${RESET}] Cannot install modules (exit ${start_status})" exit $start_status fi criticals=$(grep ' CRITICAL' $logfile -c) errors=$(grep ' ERROR' $logfile -c) if [[ $criticals -gt 0 ]]; then echo "[${RED} KO ${RESET}] Cannot install modules ($criticals CRITICAL messages found)" exit 2 fi if [[ $errors -gt 0 ]]; then if [[ "$fail_on_errors" == "False" ]]; then echo "[${MAGENTA}WARN${RESET}] Cannot install modules ($errors ERROR messages found)" else echo "[${RED} KO ${RESET}] Cannot install modules ($errors ERROR messages found)" exit 1 fi fi echo "[${YELLOW}INFO${RESET}] Run tests on $dbname" $here/run_tests $dbname $ODOO_HOST $ODOO_USER $*