This commit rewrites/removes the docker files used to create the libc++ buildbots. The major changes in this patch are: 1. Delete Dockerfiles used to build compilers. These have moved to github.com/efcs/compiler-images 2. Minimize the llvm-buildbot docker image. Instead of running the buildbots from a committed docker image, the builders now build the image on startup. This means changes to the docker file automatically propogate to the builders (within ~24 hours without restart). 3. Version the compilers used by the builders. This means the bots won't start failing because the apt.llvm.org clang package updated.
112 lines
2.4 KiB
Bash
Executable File
112 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -x
|
|
|
|
readonly BOT_ROOT=/b
|
|
readonly AUTH_FILE=$1
|
|
readonly BOT_ROOT_NAME=$(jq -r ".login" $AUTH_FILE)
|
|
|
|
systemctl daemon-reload
|
|
service buildslave stop
|
|
mkdir -p /b
|
|
rm -rf /b/*
|
|
service buildslave stop
|
|
|
|
pushd /tmp/
|
|
|
|
curl -sSO https://dl.google.com/cloudagents/install-monitoring-agent.sh
|
|
sudo bash install-monitoring-agent.sh
|
|
rm install-monitoring-agent.sh
|
|
|
|
curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh
|
|
sudo bash install-logging-agent.sh
|
|
rm install-logging-agent.sh
|
|
|
|
popd
|
|
|
|
|
|
systemctl set-property buildslave.service TasksMax=100000
|
|
|
|
function setup_numbered_bot() {
|
|
local BOT_NAME=$1
|
|
local BOT_DIR=$2
|
|
mkdir -p $BOT_DIR
|
|
|
|
buildslave stop $BOT_DIR
|
|
chown buildbot $BOT_DIR
|
|
rm -rf $BOT_DIR/*
|
|
|
|
buildslave create-slave --allow-shutdown=signal "$BOT_DIR" "lab.llvm.org:9990" "$BOT_NAME" $(jq -r ".password" $AUTH_FILE)
|
|
|
|
echo "Eric Fiselier <ericwf@google.com>" > $BOT_DIR/info/admin
|
|
|
|
echo "Connecting as $1"
|
|
{
|
|
uname -a | head -n1
|
|
cmake --version | head -n1
|
|
g++ --version | head -n1
|
|
clang++ --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]=\"$BOT_NAME\"
|
|
#SLAVE_USER[1]=\"buildbot\"
|
|
#SLAVE_BASEDIR[1]=\"$BOT_DIR\"
|
|
#SLAVE_OPTIONS[1]=\"\"
|
|
#SLAVE_PREFIXCMD[1]=\"\"" > $BOT_DIR/buildslave.cfg
|
|
|
|
ls $BOT_DIR/
|
|
cat $BOT_DIR/buildbot.tac
|
|
}
|
|
|
|
function try_start_builder {
|
|
local N=$1
|
|
local BOT_DIR="$BOT_ROOT/b$N"
|
|
local BOT_NAME="$BOT_ROOT_NAME$N"
|
|
|
|
systemctl daemon-reload
|
|
service buildslave restart
|
|
setup_numbered_bot "$BOT_NAME" "$BOT_DIR"
|
|
|
|
systemctl daemon-reload
|
|
service buildslave restart
|
|
|
|
chown -R buildbot $BOT_DIR/
|
|
sudo -u buildbot /usr/bin/buildslave start $BOT_DIR/
|
|
|
|
sleep 30
|
|
cat $BOT_DIR/twistd.log
|
|
if grep --quiet "slave is ready" $BOT_DIR/twistd.log; then
|
|
return 0
|
|
fi
|
|
if grep --quiet "configuration update complete" $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 `shuf -i 1-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
|
|
|