blob: d13b32aa92fdbc21682aa84a75f761812e4dd115 [file] [log] [blame]
#!/bin/sh
# steps to take following a release of new code to keep things working.
#
# the following scripts may be created to customize behavior:
#
# site_utils/site_sync_code
#
# - pull code from a source repository
#
# site_utils/site_install_cli
#
# - install or update client code (new "atest" build?)
#
# site_utils/site_restart_apache
#
# - suid helper or similar?
#
# site_utils/site_restart_final
#
# - any finishing touches you may require.
# ---
INIT_SCR=/etc/init.d/autotest
# ---
print_status() {
STATUS=$1
echo "--- $STATUS"
}
fatal() {
echo "*** Fatal error. Giving up."
exit 1
}
# ---
MY_DIR=`dirname $0`
if (! test -f $INIT_SCR)
then
echo "Error: $INIT_SCR must be installed."
exit 1
fi
BECOME_USER=`grep ^BECOME_USER= $INIT_SCR`
if (test "$BECOME_USER" == "")
then
echo "Error: BECOME_USER not defined in $INIT_SCR"
exit 1
fi
BASE_DIR=`grep ^BASE_DIR= $INIT_SCR`
if (test "$BASE_DIR" == "")
then
echo "Error: BASE_DIR not defined in $INIT_SCR"
exit 1
fi
eval $BECOME_USER
eval $BASE_DIR
# --- stop autotest persistent code
print_status "Stopping autotest persistent code"
$INIT_SCR stop
# --- sync code (site-specific)
if (test -x $BASE_DIR/site_utils/site_sync_code)
then
print_status "Syncing code"
su $BECOME_USER -c $BASE_DIR/site_utils/site_sync_code || exit 1
fi
# --- run database migrations
# - AFE
print_status "Running AFE migrations"
( cd $BASE_DIR/frontend &&
su $BECOME_USER -c "python ../database/migrate.py \
--database=AUTOTEST_WEB safesync"
su $BECOME_USER -c "python manage.py syncdb --noinput"
su $BECOME_USER -c "python manage.py syncdb --noinput"
)
# - TKO
print_status "Running TKO migrations"
( cd $BASE_DIR/tko &&
su $BECOME_USER -c "python ../database/migrate.py \
--database=TKO safesync"
)
# - SITE_DB
print_status "Running site_db migrations"
( cd $BASE_DIR/site_db &&
su $BECOME_USER -c "python ../database/migrate.py \
--database=TKO safesync"
)
# - Django syncdb
print_status "Running syncdb on Django interface"
# Due to the way Django creates permissions objects, we sometimes need
# to run syncdb twice.
for i in 1 2; do
( cd $BASE_DIR/frontend &&
su $BECOME_USER -c "python manage.py syncdb --noinput"
)
done
# --- compile GWT
print_status "Compiling GWT code."
( cd $BASE_DIR &&
su $BECOME_USER -c "$BASE_DIR/utils/compile_gwt_clients.py -a" || fatal
)
# --- fix gwt permissions
print_status "Fixing permissions"
( cd $BASE_DIR/frontend/client &&
find | xargs chmod o+r &&
find -type d | xargs chmod o+rx ) || fatal
# --- update cli repository (site-specific)
if (test -x $BASE_DIR/site_utils/site_install_cli)
then
print_status "Updating cli repository"
su $BECOME_USER -c $BASE_DIR/site_utils/site_install_cli || fatal
fi
# --- restart autotest persistent code
print_status "Restarting autotest persistent code"
$INIT_SCR start || fatal
# --- possibly restart Apache (site-specific)
if (test -x $BASE_DIR/site_utils/site_restart_apache)
then
print_status "Restarting Apache"
su $BECOME_USER -c $BASE_DIR/site_utils/site_restart_apache || fatal
fi
# --- do any site-specific finalization
if (test -x $BASE_DIR/site_utils/site_restart_final)
then
print_status "Finalizing release"
su $BECOME_USER -c $BASE_DIR/site_utils/site_restart_final || fatal
fi