0d125cff1b36cce3eca13a33d114b2cd7beab9b7
[arvados-dev.git] / jenkins / arvados-api-server-extras / arvados-api-server-upgrade.sh
1 #!/bin/bash
2
3 set -e
4
5 if [ -e /etc/redhat-release ]; then
6     WWW_OWNER=apache:apache
7 else
8     # Assume we're on a Debian-based system for now.
9     WWW_OWNER=www-data:www-data
10 fi
11
12 NGINX_SERVICE=${NGINX_SERVICE:-$(service --status-all 2>/dev/null \
13     | grep -Eo '\bnginx[^[:space:]]*' || true)}
14 if [ -z "$NGINX_SERVICE" ]; then
15     cat >&2 <<EOF
16 Error: nginx service not found. Aborting.
17 Set NGINX_SERVICE to the name of the service hosting the Rails server.
18 EOF
19     exit 1
20 elif [ "$NGINX_SERVICE" != "$(echo "$NGINX_SERVICE" | head -n 1)" ]; then
21     cat >&2 <<EOF
22 Error: multiple nginx services found. Aborting.
23 Set NGINX_SERVICE to the name of the service hosting the Rails server.
24 EOF
25     exit 1
26 fi
27
28 RELEASE_PATH=/var/www/arvados-api/current
29 SHARED_PATH=/var/www/arvados-api/shared
30 CONFIG_PATH=/etc/arvados/api/
31
32 echo "Assumption: $NGINX_SERVICE is configured to serve $HOSTNAME from /var/www/$HOSTNAME/current"
33 echo "Assumption: /var/www/$HOSTNAME is symlinked to /var/www/arvados-api"
34 echo "Assumption: configuration files are in /etc/arvados/api/"
35 echo "Assumption: $NGINX_SERVICE and passenger run as $WWW_OWNER"
36 echo
37
38 echo "Copying files from $CONFIG_PATH"
39 cp -f $CONFIG_PATH/database.yml $RELEASE_PATH/config/database.yml
40 cp -f $RELEASE_PATH/config/environments/production.rb.example $RELEASE_PATH/config/environments/production.rb
41 cp -f $CONFIG_PATH/application.yml $RELEASE_PATH/config/application.yml
42 cp -f $CONFIG_PATH/omniauth.rb $RELEASE_PATH/config/initializers/omniauth.rb
43 echo "Done."
44
45 # Before we do anything else, make sure some directories and files are in place
46 if [[ ! -e $SHARED_PATH/log ]]; then mkdir -p $SHARED_PATH/log; fi
47 if [[ ! -e $RELEASE_PATH/tmp ]]; then mkdir -p $RELEASE_PATH/tmp; fi
48 if [[ ! -e $RELEASE_PATH/log ]]; then ln -s $SHARED_PATH/log $RELEASE_PATH/log; fi
49 if [[ ! -e $SHARED_PATH/log/production.log ]]; then touch $SHARED_PATH/log/production.log; fi
50
51 echo "Running bundle install"
52 (cd $RELEASE_PATH && RAILS_ENV=production bundle install --path $SHARED_PATH/vendor_bundle)
53 echo "Done."
54
55 echo "Precompiling assets"
56 # precompile assets; thankfully this does not take long
57 (cd $RELEASE_PATH; RAILS_ENV=production bundle exec rake assets:precompile)
58 echo "Done."
59
60 echo "Ensuring directory and file permissions"
61 # Ensure correct ownership of a few files
62 chown "$WWW_OWNER" $RELEASE_PATH/config/environment.rb
63 chown "$WWW_OWNER" $RELEASE_PATH/config.ru
64 chown "$WWW_OWNER" $RELEASE_PATH/config/database.yml
65 chown "$WWW_OWNER" $RELEASE_PATH/Gemfile.lock
66 chown -R "$WWW_OWNER" $RELEASE_PATH/tmp
67 chown -R "$WWW_OWNER" $SHARED_PATH/log
68 chown "$WWW_OWNER" $RELEASE_PATH/db/structure.sql
69 chmod 644 $SHARED_PATH/log/*
70 echo "Done."
71
72 echo "Running sanity check"
73 (cd $RELEASE_PATH && RAILS_ENV=production bundle exec rake config:check)
74 SANITY_CHECK_EXIT_CODE=$?
75 echo "Done."
76
77 if [[ "$SANITY_CHECK_EXIT_CODE" != "0" ]]; then
78   echo "Sanity check failed, aborting. Please roll back to the previous version of the package."
79   echo "The database has not been migrated yet, so reinstalling the previous version is safe."
80   exit $SANITY_CHECK_EXIT_CODE
81 fi
82
83 echo "Starting db:migrate"
84 (cd $RELEASE_PATH && bundle exec rake RAILS_ENV=production  db:migrate)
85 echo "Done."
86
87 echo "Restarting nginx"
88 service "$NGINX_SERVICE" restart
89 echo "Done."