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
25INIT_SCR=/etc/init.d/autotest
26
27# ---
28
29print_status() {
30  STATUS=$1
31
32  echo "--- $STATUS"
33}
34
35fatal() {
36  echo "*** Fatal error.  Giving up."
37  exit 1
38}
39
40# ---
41
42MY_DIR=`dirname $0`
43
44if (! test -f $INIT_SCR)
45then
46  echo "Error: $INIT_SCR must be installed."
47  exit 1
48fi
49
50BECOME_USER=`grep ^BECOME_USER= $INIT_SCR`
51
52if (test "$BECOME_USER" == "")
53then
54  echo "Error: BECOME_USER not defined in $INIT_SCR"
55  exit 1
56fi
57
58BASE_DIR=`grep ^BASE_DIR= $INIT_SCR`
59
60if (test "$BASE_DIR" == "")
61then
62  echo "Error: BASE_DIR not defined in $INIT_SCR"
63  exit 1
64fi
65
66eval $BECOME_USER
67eval $BASE_DIR
68
69# --- stop autotest persistent code
70
71print_status "Stopping autotest persistent code"
72$INIT_SCR stop
73
74# --- sync code (site-specific)
75
76if (test -x $BASE_DIR/site_utils/site_sync_code)
77then
78  print_status "Syncing code"
79  su $BECOME_USER -c $BASE_DIR/site_utils/site_sync_code || exit 1
80fi
81
82# --- run database migrations
83
84# - AFE
85
86print_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
96print_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
104print_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
112print_status "Running syncdb on Django interface"
113# Due to the way Django creates permissions objects, we sometimes need
114# to run syncdb twice.
115for i in 1 2; do
116  ( cd $BASE_DIR/frontend &&
117    su $BECOME_USER -c "python manage.py syncdb --noinput"
118  )
119done
120
121# --- compile GWT
122
123print_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
130print_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
137if (test -x $BASE_DIR/site_utils/site_install_cli)
138then
139  print_status "Updating cli repository"
140  su $BECOME_USER -c $BASE_DIR/site_utils/site_install_cli || fatal
141fi
142
143# --- restart autotest persistent code
144
145print_status "Restarting autotest persistent code"
146$INIT_SCR start || fatal
147
148# --- possibly restart Apache (site-specific)
149
150if (test -x $BASE_DIR/site_utils/site_restart_apache)
151then
152  print_status "Restarting Apache"
153  su $BECOME_USER -c $BASE_DIR/site_utils/site_restart_apache || fatal
154fi
155
156# --- do any site-specific finalization
157
158if (test -x $BASE_DIR/site_utils/site_restart_final)
159then
160  print_status "Finalizing release"
161  su $BECOME_USER -c $BASE_DIR/site_utils/site_restart_final || fatal
162fi
163