#!/usr/bin/env bash # Copyright 2009 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. fatal() { echo $0: $1 1>&2 exit 1 } if [ ! -d go ] ; then fatal "Please run in directory that contains a checked out repo in 'go'" fi if [ ! -f buildcontrol.py ] ; then fatal 'Please include buildcontrol.py in this directory' fi if [ "x$BUILDER" == "x" ] ; then fatal 'Please set $BUILDER to the name of this builder' fi if [ "x$BUILDHOST" == "x" ] ; then fatal 'Please set $BUILDHOST to the hostname of the gobuild server' fi if [ "x$GOARCH" == "x" -o "x$GOOS" == "x" ] ; then fatal 'Please set $GOARCH and $GOOS' fi export PATH=$PATH:`pwd`/candidate/bin export GOBIN=`pwd`/candidate/bin export GOROOT_FINAL=/usr/local/go while true ; do ( cd go || fatal "Cannot cd into 'go'" hg pull -u || fatal "hg sync failed" rev=`python ../buildcontrol.py next $BUILDER` if [ $? -ne 0 ] ; then fatal "Cannot get next revision" fi cd .. || fatal "Cannot cd up" if [ "x$rev" == "x" ] ; then sleep 10 continue fi echo "Cloning for revision $rev" rm -Rf candidate hg clone -r $rev go candidate || fatal "hg clone failed" export GOROOT=`pwd`/candidate mkdir -p candidate/bin || fatal "Cannot create candidate/bin" cd candidate/src || fatal "Cannot cd into candidate/src" echo "Building revision $rev" ALL=all.bash if [ -f all-$GOOS.bash ]; then ALL=all-$GOOS.bash elif [ -f all-$GOARCH.bash ]; then ALL=all-$GOARCH.bash fi ./$ALL > ../log 2>&1 if [ $? -ne 0 ] ; then echo "Recording failure for $rev" python ../../buildcontrol.py record $BUILDER $rev ../log || fatal "Cannot record result" else echo "Recording success for $rev" python ../../buildcontrol.py record $BUILDER $rev ok || fatal "Cannot record result" if [ "$ALL" = "all.bash" ]; then echo "Running benchmarks" cd pkg || fatal "failed to cd to pkg" make bench > ../../benchmarks 2>&1 python ../../../buildcontrol.py benchmarks $BUILDER $rev ../../benchmarks || fatal "Cannot record benchmarks" cd .. || fatal "failed to cd out of pkg" fi # check if we're at a release (via the hg summary) # if so, package the tar.gz and upload to googlecode SUMMARY=$(hg log -l 1 | grep summary\: | awk '{print $2}') if [[ "x${SUMMARY:0:7}" == "xrelease" ]]; then echo "Uploading binary to googlecode" TARBALL="go.$SUMMARY.$BUILDER.tar.gz" ./clean.bash --nopkg # move contents of candidate/ to candidate/go/ for archival cd ../.. || fatal "Cannot cd up" mv candidate go-candidate || fatal "Cannot rename candidate" mkdir candidate || fatal "Cannot mkdir candidate" mv go-candidate candidate/go || fatal "Cannot mv directory" cd candidate || fatal "Cannot cd candidate" # build tarball tar czf ../$TARBALL go || fatal "Cannot create tarball" ../buildcontrol.py upload $BUILDER $SUMMARY ../$TARBALL || fatal "Cannot upload tarball" fi fi sleep 10 ) done