1 #!/bin/sh 2 3 # steps to take following a release of new code to keep things working. 4 # 5 # the following scripts may be created to customize behavior: 6 # 7 # site_utils/site_sync_code 8 # 9 # - pull code from a source repository 10 # 11 # site_utils/site_install_cli 12 # 13 # - install or update client code (new "atest" build?) 14 # 15 # site_utils/site_restart_apache 16 # 17 # - suid helper or similar? 18 # 19 # site_utils/site_restart_final 20 # 21 # - any finishing touches you may require. 22 23 # --- 24 25 INIT_SCR=/etc/init.d/autotest 26 27 # --- 28 29 print_status() { 30 STATUS=$1 31 32 echo "--- $STATUS" 33 } 34 35 fatal() { 36 echo "*** Fatal error. Giving up." 37 exit 1 38 } 39 40 # --- 41 42 MY_DIR=`dirname $0` 43 44 if (! test -f $INIT_SCR) 45 then 46 echo "Error: $INIT_SCR must be installed." 47 exit 1 48 fi 49 50 BECOME_USER=`grep ^BECOME_USER= $INIT_SCR` 51 52 if (test "$BECOME_USER" == "") 53 then 54 echo "Error: BECOME_USER not defined in $INIT_SCR" 55 exit 1 56 fi 57 58 BASE_DIR=`grep ^BASE_DIR= $INIT_SCR` 59 60 if (test "$BASE_DIR" == "") 61 then 62 echo "Error: BASE_DIR not defined in $INIT_SCR" 63 exit 1 64 fi 65 66 eval $BECOME_USER 67 eval $BASE_DIR 68 69 # --- stop autotest persistent code 70 71 print_status "Stopping autotest persistent code" 72 $INIT_SCR stop 73 74 # --- sync code (site-specific) 75 76 if (test -x $BASE_DIR/site_utils/site_sync_code) 77 then 78 print_status "Syncing code" 79 su $BECOME_USER -c $BASE_DIR/site_utils/site_sync_code || exit 1 80 fi 81 82 # --- run database migrations 83 84 # - AFE 85 86 print_status "Running AFE migrations" 87 ( cd $BASE_DIR/frontend && 88 su $BECOME_USER -c "python ../database/migrate.py \ 89 --database=AUTOTEST_WEB safesync" 90 su $BECOME_USER -c "python manage.py syncdb --noinput" 91 su $BECOME_USER -c "python manage.py syncdb --noinput" 92 ) 93 94 # - TKO 95 96 print_status "Running TKO migrations" 97 ( cd $BASE_DIR/tko && 98 su $BECOME_USER -c "python ../database/migrate.py \ 99 --database=TKO safesync" 100 ) 101 102 # - SITE_DB 103 104 print_status "Running site_db migrations" 105 ( cd $BASE_DIR/site_db && 106 su $BECOME_USER -c "python ../database/migrate.py \ 107 --database=TKO safesync" 108 ) 109 110 # - Django syncdb 111 112 print_status "Running syncdb on Django interface" 113 # Due to the way Django creates permissions objects, we sometimes need 114 # to run syncdb twice. 115 for i in 1 2; do 116 ( cd $BASE_DIR/frontend && 117 su $BECOME_USER -c "python manage.py syncdb --noinput" 118 ) 119 done 120 121 # --- compile GWT 122 123 print_status "Compiling GWT code." 124 ( cd $BASE_DIR && 125 su $BECOME_USER -c "$BASE_DIR/utils/compile_gwt_clients.py -a" || fatal 126 ) 127 128 # --- fix gwt permissions 129 130 print_status "Fixing permissions" 131 ( cd $BASE_DIR/frontend/client && 132 find | xargs chmod o+r && 133 find -type d | xargs chmod o+rx ) || fatal 134 135 # --- update cli repository (site-specific) 136 137 if (test -x $BASE_DIR/site_utils/site_install_cli) 138 then 139 print_status "Updating cli repository" 140 su $BECOME_USER -c $BASE_DIR/site_utils/site_install_cli || fatal 141 fi 142 143 # --- restart autotest persistent code 144 145 print_status "Restarting autotest persistent code" 146 $INIT_SCR start || fatal 147 148 # --- possibly restart Apache (site-specific) 149 150 if (test -x $BASE_DIR/site_utils/site_restart_apache) 151 then 152 print_status "Restarting Apache" 153 su $BECOME_USER -c $BASE_DIR/site_utils/site_restart_apache || fatal 154 fi 155 156 # --- do any site-specific finalization 157 158 if (test -x $BASE_DIR/site_utils/site_restart_final) 159 then 160 print_status "Finalizing release" 161 su $BECOME_USER -c $BASE_DIR/site_utils/site_restart_final || fatal 162 fi 163