#!/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=dev@subversion.apache.org echo echo "--------------------------------------------------------------------" date echo results="$(tempfile)" benchdir=/home/neels/svnbench patbin=/home/neels/bin/pat patbase=/home/neels/pat # first update trunk to HEAD and rebuild. # update/build is logged to the cronjob log (via stdout) cd "$patbase/trunk" "$patbin" update if [ "$?" -ne "0" ]; then subject="Failed to update to HEAD." echo "$subject" > "$results" echo "$subject" else rev="$("$patbase"/stable/prefix/bin/svn info "$patbase"/trunk/src | grep Revision)" if [ -z "$rev" ]; then subject="Working copy problem." echo "$subject" > "$results" echo "$subject" else NONMAINTAINER=1 "$patbin" remake if [ "$?" -ne "0" ]; then subject="Failed to build $rev." echo "$subject" > "$results" echo "$subject" else # updating and building succeeded! # run the benchmark: compiled="$("$patbase"/trunk/prefix/bin/svn --version | grep "compiled")" subject="$rev$compiled" cd "$benchdir" # 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 time -p ./run 2>&1 | tee "$results" time -p ./generate_charts 2>&1 | tee -a "$results" fi fi fi if [ -n "$EMAILS" ]; then cat "$results" | mail -s "[svnbench] $subject" $EMAILS else echo "No email addresses configured." fi rm "$results"