git-upgrade 2.38 KB
#!/bin/sh

set -e

export RAILS_ENV=production

say(){
  echo -e "\033[33;01m$0: $1\033[m"
}

get_value(){
  ruby -ryaml -e "puts YAML.load_file('config/database.yml')['$RAILS_ENV']['$1']"
}

usage(){
  echo "usage: $0 [OPTIONS]"
  echo
  echo "Options:"
  echo
  echo "  -s, --shell     Opens a shell just after upgrading code and"
  echo "                  database to make manual steps if needed"
  echo
  echo "  -h, --help      Displays the help (this screen)"
  echo
  echo "  -v, --version   Displays Noosfero current version"
  echo
  exit $1
}

version(){
  version=$(ruby -Ilib -rnoosfero -e 'puts Noosfero::VERSION')
  echo "Noosfero version $version"
  exit 0
}

backup(){
  say "Making files backup"
  rake backup

  database=$(get_value database)
  adapter=$(get_value adapter)

  if [ "$adapter" = "postgresql" ]; then
    mkdir -p backups/
    dumpfile=backups/dump-$(date +%Y-%m-%d-%H-%M).sql
    say "Making database backup"
    pg_dump "$database" > "$dumpfile"
  fi
}

stop_service(){
  say "Stopping service"
  ./script/production stop || say "Stop failed, trying to continue anyway"
  sudo /etc/init.d/memcached restart
}

start_service(){
  say "Starting service"
  ./script/production start
}

upgrade_code(){
  say "Upgrading code"
  git pull
  for dir in public/designs/themes/*; do
    (cd $dir && test -e .git/config && git pull)
  done
  rake makemo
}

upgrade_database(){
  say "Upgrading database"

  rake db:migrate

  if test "$shell" = "yes"; then
    echo "################################################"
    echo "# Noosfero upgrade shell                       #"
    echo "################################################"
    echo "#                                              #"
    echo "# If you need to do any manual steps during    #"
    echo "# this upgrade, now is the time.               #"
    echo "#                                              #"
    echo "# After you finish, just exit this shell and   #"
    echo "# the upgrade will proceed                     #"
    echo "################################################"
    export PS1="[Noosfero upgrade] $PS1"
    bash --rcfile config/bashrc
  fi
}

shell=no
while test $# -gt 0; do
  case "$1" in
    --shell)
      shell=yes
      ;;
    --help)
      usage 0
      ;;
    --version)
      version
      ;;
    *)
      usage 1
      ;;
  esac
  shift
done

backup
stop_service
upgrade_code
upgrade_database
start_service