[tbb-commits] [tor-browser-bundle/master] Add tools directory with scripts for nightly builds.

mikeperry at torproject.org mikeperry at torproject.org
Sun Mar 30 05:14:00 UTC 2014


commit 784bac5f84c7b4b02e11e74070d57c944d1dc291
Author: Linus Nordberg <linus at nordberg.se>
Date:   Sat Mar 15 16:42:50 2014 +0100

    Add tools directory with scripts for nightly builds.
---
 tools/continuous-builds/README                    |   14 ++++++
 tools/continuous-builds/build-tbb.sh              |   48 +++++++++++++++++++++
 tools/continuous-builds/checkout-tbb.sh           |    8 ++++
 tools/continuous-builds/park-nightly.sh           |   42 ++++++++++++++++++
 tools/continuous-builds/setup-gitian-build-env.sh |    3 ++
 5 files changed, 115 insertions(+)

diff --git a/tools/continuous-builds/README b/tools/continuous-builds/README
new file mode 100644
index 0000000..c60f19f
--- /dev/null
+++ b/tools/continuous-builds/README
@@ -0,0 +1,14 @@
+Nightly builds can be produced and uploaded to a publishing host by
+running build-tbb.sh. The checkout-tbb.sh script can be used to check
+out the latest master before starting a build.
+
+The publishing host should handle uploaded tar file using the
+park-nightly.sh script through the command option in sshd's
+AuthorizedKeysFile.
+
+  command="[ $(hostname) = perdulce ] && ~/park-nightly.sh",no-pty ssh-rsa ...
+
+In order to not grow the disk usage too much on the publishing host,
+the following script can be run by cron:
+https://github.com/boklm/prune-old-builds.
+
diff --git a/tools/continuous-builds/build-tbb.sh b/tools/continuous-builds/build-tbb.sh
new file mode 100755
index 0000000..c44e0fd
--- /dev/null
+++ b/tools/continuous-builds/build-tbb.sh
@@ -0,0 +1,48 @@
+#! /bin/sh
+# usage:
+# build-tbb.sh [TARGET [PUBLISH-HOST [PUBLISH-KEY [BUILDDIR [DESTDIR [N]]]]]]
+#
+# Build TARGET in BUILDDIR, which will end up in DESTDIR
+# Try doing it N times.
+# Upload result to PUBLISH-HOST using SSH key PUBLISH-KEY.
+
+# TODO:
+# - if there's no new commits, don't build but make sure there's a symlink on perdulce
+
+TARGET=$1; [ -z "$TARGET" ] && TARGET=nightly
+PUBLISH_HOST=$2; [ -z "$PUBLISH_HOST" ] && PUBLISH_HOST=perdulce.torproject.org
+PUBLISH_KEY=$3; [ -z "$PUBLISH_KEY" ] && PUBLISH_KEY=~/.ssh/perdulce-upload
+BUILDDIR=$4; [ -z "$BUILDDIR" ] && BUILDDIR=~/usr/src/tor-browser-bundle/gitian
+DESTDIR=$5; [ -z "$DESTDIR" ] && DESTDIR=$BUILDDIR/tbb-$TARGET
+N=$6; [ -z "$N" ] && N=16
+
+logfile=$(date -u +%s).log
+
+. ~/setup-gitian-build-env.sh
+cd $BUILDDIR || exit 1
+status=init
+n=0
+while [ $status != done ]; do
+  n=$(expr $n + 1)
+  printf "%s: Starting build number %d. target=$TARGET.\n" $0 $n | tee -a $logfile
+  date | tee -a $logfile
+  killall qemu-system-i386 qemu-system-x86_64
+  make $TARGET > build-$(date -u +%s).log && status=done
+  printf "%s: Tried building $TARGET %d times. Status: %s.\n" $0 $n $status | tee -a $logfile
+  TARGET=build-nightly
+  [ $n -ge $N ] && break
+done
+
+if [ $status = done ]; then
+  NEWDESTDIR=$DESTDIR-$(date +%F)
+  echo "$0: renaming $DESTDIR -> $NEWDESTDIR" | tee -a $logfile
+  mv $DESTDIR $NEWDESTDIR
+  cd $NEWDESTDIR || exit 3
+  sha256sum *.tar.xz *.zip *.exe > sha256sums.txt
+  gpg -a --clearsign --local-user 0x984496E7 sha256sums.txt || exit 2
+  cd ..
+  D=$(basename $NEWDESTDIR)
+  tar cf - $D/sha256sums* $D/*.tar.xz $D/*.zip $D/*.exe | ssh -i $PUBLISH_KEY $PUBLISH_HOST | tee -a $logfile
+else
+  echo "$0: giving up after $n tries" | tee -a $logfile
+fi
diff --git a/tools/continuous-builds/checkout-tbb.sh b/tools/continuous-builds/checkout-tbb.sh
new file mode 100755
index 0000000..f8a7929
--- /dev/null
+++ b/tools/continuous-builds/checkout-tbb.sh
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+BUILDDIR=$1
+[ -z "$BUILDDIR" ] && BUILDDIR=~/usr/src/tor-browser-bundle/gitian
+
+cd $BUILDDIR || exit 1
+git checkout master
+git pull
diff --git a/tools/continuous-builds/park-nightly.sh b/tools/continuous-builds/park-nightly.sh
new file mode 100755
index 0000000..1ac5b2c
--- /dev/null
+++ b/tools/continuous-builds/park-nightly.sh
@@ -0,0 +1,42 @@
+#! /bin/sh                                                                      
+# usage: park-nightly.sh [DIR]
+
+V=1	#debug is enabled by default for now
+
+if [ "$1" = "-v" ]; then
+  V=1
+  shift
+fi
+
+DIR=$1
+[ -z "$DIR" ] && DIR=~/public_html/builds
+
+DSTDIR=tbb-nightly-$(date +%F)
+[ -z "$V" ] || echo "Aiming to fill up $DSTDIR"
+
+do_check() {
+    [ -z "$1" ] || cd $1 || exit 5
+    [ -z "$V" ] || echo "Verifying sha256sums.txt"
+    gpg -q --verify sha256sums.txt.asc > /dev/null || exit 3
+    [ -z "$V" ] || echo "Checking sha256sums.txt"
+    sha256sum --strict --quiet -c sha256sums.txt || exit 4
+}
+
+if [ -d $DIR/$DSTDIR ] && [ -e $DIR/$DSTDIR/tbb-nightly.stamp ]; then
+    [ -z "$V" ] || echo "Files already here, just doing the checking"
+    do_check $DIR/$DSTDIR
+    exit
+fi
+
+[ -d .staging ] || mkdir .staging
+chmod 700 .staging; cd .staging
+[ -z "$V" ] || echo "Saving files to disk"
+TAROPT=x
+[ -z "$V" ] || TAROPT=${TAROPT}v
+tar $TAROPT -f - || exit 6
+touch $DSTDIR/tbb-nightly.stamp
+
+do_check $DSTDIR || exit 2
+[ -d $DIR/$DSTDIR ] && [ -e $DIR/$DSTDIR/tbb-nightly.stamp ] && rm -rf $DIR/$DSTDIR
+cd ..; mv $DSTDIR $DIR/ || exit 1
+[ -z "$V" ] || echo "All good, all good"
diff --git a/tools/continuous-builds/setup-gitian-build-env.sh b/tools/continuous-builds/setup-gitian-build-env.sh
new file mode 100644
index 0000000..e9f435a
--- /dev/null
+++ b/tools/continuous-builds/setup-gitian-build-env.sh
@@ -0,0 +1,3 @@
+# source me!
+export LC_ALL=C
+export NUM_PROCS=10





More information about the tbb-commits mailing list