#!/bin/bash # # ==================================================================== # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # ==================================================================== # # This is the cronjob as run on our ASF box aka svn-qavm. # It uses neels' mad bash script magic called 'pat' to update and # build the latest trunk, invokes a benchmark and sends as mail. # # A word on 'pat': this is a grown-out-of-proportions bash script that holds # all the small and large tasks that I do while developing on Subversion. # While it works for me, it's not particularly beautifully coded -- # wouldn't publish it in Subversion's trunk, but if you want to find out # what it does: http://hofmeyr.de/pat/ #EMAILS=your@ema.il add@ress.es EMAILS="" if [ "$USER" = "neels" ]; then # I don't want to keep editing files after every update. ~Neels EMAILS=dev@subversion.apache.org fi echo echo "--------------------------------------------------------------------" date echo results="$(tempfile)" # first update trunk to HEAD and rebuild. # update/build is logged to the cronjob log (via stdout) cd /home/neels/pat/trunk /home/neels/bin/pat update if [ "$?" -ne "0" ]; then subject="Failed to update to HEAD." echo "$subject" > "$results" echo "$subject" else rev="$(/home/neels/pat/stable/prefix/bin/svn info /home/neels/pat/trunk/src | grep Revision)" if [ -z "$rev" ]; then subject="Working copy problem." echo "$subject" > "$results" echo "$subject" else NONMAINTAINER=1 /home/neels/bin/pat remake if [ "$?" -ne "0" ]; then subject="Failed to build $rev." echo "$subject" > "$results" echo "$subject" else # updating and building succeeded! # run the benchmark: compiled="$(/home/neels/pat/trunk/prefix/bin/svn --version | grep "compiled")" subject="$rev$compiled" cd /home/neels/svnbench/ # make more or less sure that runs don't leak into each other via # I/O caching. sync # basically, just run it. But also, I want to # - append output to stdout, for cronjob logging. # - send output as mail, but only this run's output less update&build "$(which time)" -p ./run 2>&1 | tee "$results" fi fi fi if [ -n "$EMAILS" ]; then cat "$results" | mail -s "[svnbench] $subject" $EMAILS else echo "No email addresses configured." fi rm "$results"