#!/bin/bash

case `id` in
*root*)
        ;;
*)
        exec echo Must be run as root
        ;;
esac

chruby_version=0.3.9
chruby=chruby-${chruby_version}
set -x
set -eE -o functrace

report_failure() {
  local lineno=$2
  local fn=$3
  local exitstatus=$4
  local msg=$5
  local lineno_fns=${1% 0}
  if [[ $lineno_fns != "0" ]] ; then
    lineno="${lineno} ${lineno_fns}"
  fi
  if [[ $exitstatus == 0 ]] ; then
    echo "${BASH_SOURCE[1]}: Finished!"
  else
    echo "${BASH_SOURCE[1]}:${fn}[${lineno}] Failed with status ${exitstatus}: $msg"
  fi
}

trap 'report_failure "${BASH_LINENO[*]}" "$LINENO" "${FUNCNAME[*]:-script}" "$?" "$BASH_COMMAND"' ERR


id
pwd
export DEBIAN_FRONTEND=noninteractive
find /tmp/got-apt-update -mtime -1 || ( apt-get update && touch /tmp/got-apt-update )
apt install --yes -q build-essential ruby ruby-dev sqlite3 libsqlite3-dev nodejs git git-core
apt install --yes -q gcc autoconf bison libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev
apt install --yes -q libgdbm3
# useful when debugging
apt install --yes -q silversearcher-ag vim exuberant-ctags
apt install --yes -q unattended-upgrades
unattended-upgrade
# The following is not required for testing, install if you are doing manual tests with extra gems
# apt install --yes -q mysql-client mysql-server libmysqlclient-dev
# apt install --yes -q libcurl4-openssl-dev libncurses5-dev libxml2-dev libxslt1-dev
(
  echo Install chruby
  [ -s ${chruby}.tar.gz ] || wget -q -O ${chruby}.tar.gz https://github.com/postmodern/chruby/archive/v${chruby_version}.tar.gz
  [ -d ${chruby} ] || tar -xzf ${chruby}.tar.gz
  cd ${chruby}/
  ./scripts/setup.sh
  cat > /etc/profile.d/chruby.sh <<'EOF'
if [ -n "$BASH_VERSION" ] || [ -n "$ZSH_VERSION" ]; then
  source /usr/local/share/chruby/chruby.sh
  #source /usr/local/share/chruby/auto
fi
EOF
  chmod a+r /etc/profile.d/chruby.sh
)

(
  [ -d ruby-build ] || git clone https://github.com/rbenv/ruby-build.git
  which ruby-build || PREFIX=/usr/local ./ruby-build/install.sh

  mkdir -p /opt/rubies
  for v in 2.2.2
  do
    [ -x /opt/rubies/$v/bin/ruby ] || ( ruby-build $v /opt/rubies/$v )
    [ -x /opt/rubies/${v}/bin/bundle ] || ( /opt/rubies/${v}/bin/gem install bundler -v '<2.0' )
  done
  
  for v in 2.3.8 2.4.10 2.5.9 2.5.0 2.6.6 2.6.7 2.7.1 2.7.3 3.0.1
  do
    [ -x /opt/rubies/$v/bin/ruby ] || ( ruby-build $v /opt/rubies/$v )
    [ -x /opt/rubies/$v/bin/bundle ] || ( /opt/rubies/$v/bin/gem install bundler )
  done
)

echo Setup system ruby
which bundle || gem install bundler || gem install bundler -v '<2.0'
which bundle || gem install bundler -v '< 2.0'
bundle --version
set +x
cat <<EOF

Now test by running the following commands:

  vagrant ssh
  cd /vagrant

  chruby RUBY_VERSION
  or
  chruby system # for system version 2.3.1

  ./test/test_with_railsapp

  exit

EOF
exit
