7991: pip build process detects if --no-use-wheel is supported.
[arvados-dev.git] / jenkins / arvados-workbench-extras / arvados-workbench-upgrade.sh
1 #!/bin/bash
2
3 set -e
4
5 if [ -e /etc/redhat-release ]; then
6     WWW_OWNER=nginx:nginx
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-workbench/current
29 SHARED_PATH=/var/www/arvados-workbench/shared
30 CONFIG_PATH=/etc/arvados/workbench/
31
32 echo "Assumption: $NGINX_SERVICE is configured to serve your workbench URL from "
33 echo "            /var/www/arvados-workbench/current"
34 echo "Assumption: configuration files are in /etc/arvados/workbench/"
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/application.yml $RELEASE_PATH/config/application.yml
40 cp -f $RELEASE_PATH/config/environments/production.rb.example $RELEASE_PATH/config/environments/production.rb
41 echo "Done."
42
43 # Before we do anything else, make sure some directories and files are in place
44 if [[ ! -e $SHARED_PATH/log ]]; then mkdir -p $SHARED_PATH/log; fi
45 if [[ ! -e $RELEASE_PATH/tmp ]]; then mkdir -p $RELEASE_PATH/tmp; fi
46 if [[ ! -e $RELEASE_PATH/log ]]; then ln -s $SHARED_PATH/log $RELEASE_PATH/log; fi
47 if [[ ! -e $SHARED_PATH/log/production.log ]]; then touch $SHARED_PATH/log/production.log; fi
48
49 echo "Making sure bundle is installed"
50 set +e
51 which bundle > /dev/null
52 if [[ "$?" != "0" ]]; then
53   gem install bundle
54 fi
55 set -e
56 echo "Done."
57
58 echo "Running bundle install"
59 (cd $RELEASE_PATH && RAILS_ENV=production bundle install --path $SHARED_PATH/vendor_bundle)
60 echo "Done."
61
62 # We do not need to precompile assets, they are already part of the package.
63
64 echo "Ensuring directory and file permissions"
65 chown "$WWW_OWNER" $RELEASE_PATH/config/environment.rb
66 chown "$WWW_OWNER" $RELEASE_PATH/config.ru
67 chown "$WWW_OWNER" $RELEASE_PATH/config/database.yml
68 chown "$WWW_OWNER" $RELEASE_PATH/Gemfile.lock
69 chown -R "$WWW_OWNER" $RELEASE_PATH/tmp
70 chown -R "$WWW_OWNER" $SHARED_PATH/log
71 chown "$WWW_OWNER" $RELEASE_PATH/db/schema.rb
72 chmod 644 $SHARED_PATH/log/*
73 echo "Done."
74
75 echo "Running sanity check"
76 (cd $RELEASE_PATH && RAILS_ENV=production bundle exec rake config:check)
77 SANITY_CHECK_EXIT_CODE=$?
78 echo "Done."
79
80 if [[ "$SANITY_CHECK_EXIT_CODE" != "0" ]]; then
81   echo "Sanity check failed, aborting. Please roll back to the previous version of the package."
82   exit $SANITY_CHECK_EXIT_CODE
83 fi
84
85 # We do not need to run db:migrate because Workbench is stateless
86
87 echo "Restarting nginx"
88 service "$NGINX_SERVICE" restart
89 echo "Done."
90