114 lines
3.2 KiB
Bash
Executable File
114 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# set location to script directory
|
|
cd "${0%/*}"
|
|
|
|
if [ -z "$CI" ];
|
|
then
|
|
# kill all subprocess on exit so that Bitbucket Pipelines process will not hang
|
|
trap "exit" INT TERM ERR
|
|
trap "kill 0" EXIT
|
|
else echo "CI is set to $CI";
|
|
fi
|
|
|
|
# script should fail when any process returns non zero code
|
|
set -e
|
|
|
|
# handle arguments
|
|
SKIP_SETUP=false
|
|
START_BACKGROUND=false
|
|
courses=()
|
|
|
|
# Parse positional arguments
|
|
while [[ $# -gt 0 ]]
|
|
do
|
|
key="$1"
|
|
|
|
case $key in
|
|
-f|--file)
|
|
shift
|
|
;;
|
|
--start-background)
|
|
START_BACKGROUND=true
|
|
shift
|
|
;;
|
|
--skip-setup)
|
|
SKIP_SETUP=true
|
|
shift
|
|
;;
|
|
--courses)
|
|
shift # Shift past the option
|
|
while [[ $# -gt 0 ]] && ! [[ $1 == "--"* ]]
|
|
do
|
|
courses+=("$1")
|
|
shift # Shift past the value
|
|
done
|
|
;;
|
|
*)
|
|
echo "Unknown option: $key"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo "SKIP_SETUP = ${SKIP_SETUP}"
|
|
|
|
# Prepend "-c" to each item in courses
|
|
for i in "${!courses[@]}"
|
|
do
|
|
courses[$i]="-c ${courses[$i]}"
|
|
done
|
|
|
|
# Join the list with a space
|
|
IFS=' ' course_param="${courses[*]}"
|
|
echo "$course_param"
|
|
|
|
# migrate env vars to the built-in postgres variables
|
|
if [ -z ${PGDATABASE+x} ]; then # var is empty
|
|
PGDATABASE=${POSTGRES_DB:-vbv_lernwelt};
|
|
fi
|
|
if [ -z ${PGHOST+x} ]; then # var is empty
|
|
PGHOST=${POSTGRES_HOST:-localhost};
|
|
fi
|
|
if [ -z ${PGPORT+x} ]; then # var is empty
|
|
PGPORT=${POSTGRES_PORT:-5432}
|
|
fi
|
|
if [ -z ${PGUSER+x} ]; then # var is empty
|
|
PGUSER=${POSTGRES_USER:-postgres}
|
|
fi
|
|
DJANGO_PORT=${DJANGO_PORT:-8000}
|
|
|
|
|
|
if [ "$SKIP_SETUP" = false ]; then
|
|
# TODO: in heroku we must do a `pg:resets` to reset the db
|
|
echo "Check postgres connection"
|
|
psql -d postgres -c "SELECT 1" # use default db to connect to
|
|
echo "Drop all connections to $PGDATABASE"
|
|
psql -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$PGDATABASE' AND pid <> pg_backend_pid();" > /dev/null 2>&1 || true
|
|
echo "Drop database: $PGDATABASE"
|
|
psql -d postgres -c "drop database if exists $PGDATABASE;" # use default db to drop another database, can't drop the currently connected database
|
|
echo "Create database: $PGDATABASE"
|
|
psql -d postgres -c "create database $PGDATABASE;" # use default database, as the set database does not exist currently
|
|
|
|
echo "initialize database for django"
|
|
python server/manage.py createcachetable
|
|
python server/manage.py migrate
|
|
python server/manage.py create_default_users
|
|
echo "python server/manage.py create_default_courses $course_param"
|
|
python server/manage.py create_default_courses $course_param
|
|
python server/manage.py create_default_notifications
|
|
|
|
# make django translations
|
|
(cd server && python manage.py compilemessages)
|
|
else
|
|
# TODO: can we reset important data without resetting the database?
|
|
echo "Skip database setup"
|
|
python server/manage.py cypress_reset
|
|
fi
|
|
|
|
if [ "$START_BACKGROUND" = true ]; then
|
|
cd server && python manage.py runserver "${DJANGO_PORT}" > /dev/null &
|
|
else
|
|
cd server && python manage.py runserver "${DJANGO_PORT}"
|
|
fi
|