#!/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