#!/usr/bin/env bash
set -x

BOT_ROOT=/b
BOT_ROOT_NAME=$1
BOT_PASS=$2

pushd /tmp
curl -sSO https://dl.google.com/cloudagents/install-monitoring-agent.sh
bash install-monitoring-agent.sh
curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh
bash install-logging-agent.sh --structured
popd

apt-get update -y
apt-get upgrade -y

# FIXME(EricWF): Remove this hack. It's only in place to temporarily fix linking libclang_rt from the
# debian packages.
# WARNING: If you're not a buildbot, DO NOT RUN!
apt-get install lld-9
rm /usr/bin/ld
ln -s /usr/bin/lld-9 /usr/bin/ld

systemctl set-property buildslave.service TasksMax=100000

systemctl daemon-reload
service buildslave restart

function setup_numbered_bot {
  local BOT_NAME=$1
  local BOT_DIR=$2
  mkdir -p $BOT_DIR

  buildslave stop $BOT_DIR
  chown buildbot:buildbot $BOT_DIR
  rm -rf $BOT_DIR/*

  buildslave create-slave --allow-shutdown=signal $BOT_DIR lab.llvm.org:9990 \
      $BOT_NAME $BOT_PASS

  echo "Eric Fiselier <ericwf@google.com>" > $BOT_DIR/info/admin

  echo "Connecting as $BOT_BASE_NAME$1"
  {
    uname -a | head -n1
    cmake --version | head -n1
    g++ --version | head -n1
    ld --version | head -n1
    date
    lscpu
  } > $BOT_DIR/info/host


 # echo "SLAVE_RUNNER=/usr/bin/buildslave
 # SLAVE_ENABLED[1]=\"1\"
 # SLAVE_NAME[1]=\"buildslave$1\"
 # SLAVE_USER[1]=\"buildbot\"
 # SLAVE_BASEDIR[1]=\"$BOT_DIR\"
 # SLAVE_OPTIONS[1]=\"\"
 # SLAVE_PREFIXCMD[1]=\"\"" > $BOT_DIR/buildslave.cfg

}

function try_start_builder {
  local $N=$1
  local BOT_DIR=$BOT_ROOT/b$N
  local BOT_NAME=$BOT_ROOT_NAME$N
  setup_numbered_bot $BOT_NAME $BOT_DIR
  /usr/bin/buildslave start $BOT_DIR

  sleep 30
  cat /tmp/twistd.log
  if grep --quiet "slave is ready" $BOT_DIR/twistd.log; then
    return 0
  fi
  if grep "rejecting duplicate slave" $BOT_DIR/twistd.log; then
    return 1
  fi
  echo "Unknown error"
  cat $BOT_DIR/twistd.log
  exit 1
}


for N in 1 2 3 4 5
do
  if try_start_builder $N; then
    break
  fi
  echo "failed to start any buildbot"
  shutdown now
done

# GCE can restart instance after 24h in the middle of the build.
# Gracefully restart before that happen.
sleep 72000
while pkill -SIGHUP buildslave; do sleep 5; done;
shutdown now

echo "Failed to start any buildbot"
shutdown now



