#!/bin/sh # build_test - a build testing script # # Copyright (C) 2008 by Xorcom # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Setup: # # 0. Copy this script under build_tools/ and # # chmod +x build_tools/builder # # 1. Make sure you have git and sqlite3 installed. If the sqlite3 binary # is called differently, fix the line "SQLITE=" in the script or in # build_tools/test_build.conf . # # 2. Run: # # ./build_tools/test_kernel_git init /path/to/some/dir # # /path/to/some/dir must exist . This will download a recent kernel # git repository to /path/to/some/dir/linux-2.6 . Use # './build_tools/test_kernel_git update' to pull a fresh update there. # # 3. Run: # # ./build_tools/builder init # # # Usage: # # ./build_tools build # # The past results are in a sqlite database in the logs subdirectory. For # a simple list of results: # # ./build_tools report # # You can also look at the build log for a specific build in the logs # directory. BIN_DIR=`dirname $0` BASE_DIR=`dirname $BIN_DIR` SQLITE=sqlite3 HOSTS="localhost" LOGS_DIR="$BASE_DIR/logs" DB=$LOGS_DIR/builds.db BUILD_SCRIPT=$BIN_DIR/test_kernel_git KERNELS_localhost="2.6.12 2.6.18 2.6.25" usage() { me=`basename $0` echo "$me: test building Zaptel/DAHDI with various kernels" echo "" echo "Usage: $0 command " echo " init Create results directory and database." echo " build [] Run the test builds. The default list: " echo " $KERNELS_localhost" echo " report [] Print all results [matching ]" echo " Default is to print all the resaults." echo "" echo "Filters:" echo " failed: Only failed tests." echo " fail_type Where fail_type matches ." echo " 2.6* Only builds for a matching kernel version." echo " Else: Match a string from the build name, which " echo " is essentially the time it started." echo "" } set -e if [ -r $BIN_DIR/test_build.conf ]; then . $BIN_DIR/test_build.conf; fi # Runs the test script, logs the result, and fails if the test command # has failed. build_and_check() { test_name="$1" test_cmd="$2" log_file="$3" results_str="$4" fail_type='' set +e $BUILD_SCRIPT $test_cmd >$log_file 2>&1 rc=$? set -e if [ $rc != 0 ]; then fail_type="$test_name" echo "$results_str, $rc, '$fail_type', '$log_file');" | $SQLITE $DB fi return $rc } build_zaptel() { build_name="$1" host="$2" kvers="$3" log_base="build__${build_name}__${host}__${kvers}" log_base_full="$LOGS_DIR/$log_base" log_file="$log_base_full.log" results_str="INSERT INTO results VALUES ('$build_name', '$host', '$kvers'" # Due to 'set -e' a failed test exists the script. build_and_check setver "setver $kvers" "$log_file" "$results_str" build_and_check clean "test clean" "$log_file" "$results_str" build_and_check build "build" "$log_file" "$results_str" # If we got here, all was well. echo "$results_str, 0, 'complete', '$log_file');" | $SQLITE $DB } case "$1" in init) mkdir -p $LOGS_DIR cat <&2 "$0: Unknown command '$1'. Aborting." exit 1 esac