|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function warn() { echo "$@" >&2; } |
|
function die() { echo "$@" >&2; exit 1; } |
|
set -o pipefail |
|
|
|
configf="$1" |
|
[ -e "$configf" ] || die "usage: $0 configfile" |
|
configname=$(basename $configf | sed 's/\.config$//') |
|
|
|
source "$configf" |
|
|
|
|
|
git clone [email protected]:moses-smt/mosesdecoder.git /tmp/moses |
|
cd /tmp/moses |
|
./scripts/other/beautify.py --format --skip-perltidy |
|
git commit -am "daily automatic beautifier" |
|
git push |
|
rm -rf /tmp/moses |
|
cd - |
|
|
|
[ -z "$MCC_SCAN_BRANCHES" ] \ |
|
&& die "Bad config $configf; does not define MCC_SCAN_BRANCHES" |
|
|
|
|
|
USE_TEMPDIR=$MCC_TEMPDIR |
|
[ -d "$USE_TEMPDIR" ] || USE_TEMPDIR=./tmp |
|
|
|
LOGDIR=$MCC_LOGDIR |
|
[ -d "$LOGDIR" ] || LOGDIR=. |
|
|
|
|
|
LOGDIR=$(readlink -f "$LOGDIR") |
|
[ -d "$LOGDIR" ] || die "Fatal: confusing readlink for $LOGDIR" |
|
|
|
|
|
WORKDIR=$MCC_WORKDIR |
|
[ -d "$WORKDIR" ] || WORKDIR=$USE_TEMPDIR/workdir |
|
|
|
MYDIR=$(pwd) |
|
|
|
|
|
GITREPO="$MCC_GITREPO" |
|
[ -n "$GITREPO" ] || GITREPO=/home/obo/moses-at-google-code |
|
|
|
|
|
REGTEST_ARCHIVE="$MCC_REGTEST_ARCHIVE" |
|
[ -n "$REGTEST_ARCHIVE" ] \ |
|
|| REGTEST_ARCHIVE="git://github.com/moses-smt/moses-regression-tests.git" |
|
|
|
if [ ! -d "$WORKDIR" ]; then |
|
mkdir "$WORKDIR" || die "Failed to create workdir $WORKDIR" |
|
warn "Cloning $GITREPO into $WORKDIR" |
|
git clone $GITREPO $WORKDIR \ |
|
|| die "Failed to git clone into workdir $WORKDIR" |
|
else |
|
( cd "$WORKDIR" && git fetch ) \ |
|
|| die "Failed to update our clone at $WORKDIR" |
|
fi |
|
|
|
mkdir -p $LOGDIR/logs/$configname \ |
|
|| die "Failed to create dir $LOGDIR/logs/$configname" |
|
|
|
|
|
function run_single_test () { |
|
commit=$1 |
|
first_char=$(echo $commit | grep -o '^.') |
|
longlog="$LOGDIR/logs/$configname/$first_char/$commit.log" |
|
warn "Testing commit $commit" |
|
|
|
|
|
ccversion=$(svnversion 2>/dev/null) |
|
[ ! -z "$ccversion" ] || ccversion=$(git show 2>&1 | head -n 1) |
|
[ ! -z "$ccversion" ] || ccversion="unknown" |
|
|
|
|
|
echo "#### Moses Cruise Control Log for commit $commit" > $longlog |
|
date >> $longlog |
|
echo "## Cruise Control version" >> $longlog |
|
echo $ccversion >> $longlog |
|
echo "## Parameters" >> $longlog |
|
cat $MYDIR/$configf >> $longlog |
|
echo "## Envinronment" >> $longlog |
|
uname -a >> $longlog |
|
env >> $longlog |
|
|
|
git checkout --force $commit 2>/dev/null || die "Failed to checkout commit $commit" |
|
|
|
err="" |
|
|
|
cd regression-testing |
|
|
|
|
|
|
|
regtest_dir=$PWD/moses-reg-test-data |
|
if [ -e $regtest_dir ]; then |
|
(cd $regtest_dir; git pull) &> /dev/null || |
|
die "Failed to update regression testing data" |
|
else |
|
git clone $REGTEST_ARCHIVE $regtest_dir &> /dev/null || |
|
die "Failed to clone regression testing data" |
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cd .. |
|
|
|
|
|
echo "## test build with different configurations" >> $longlog |
|
for configArgs in "${ALTERNATIVE_CONFIGURE_ARGS[@]}" |
|
do |
|
echo "building with args: $configArgs" >> $longlog |
|
./bjam clean -a $configArgs >> $longlog 2>&1 || warn "bjam clean failed, suspicious" |
|
done |
|
|
|
echo "## ./bjam clean" >> $longlog |
|
./bjam clean -a $MCC_CONFIGURE_ARGS --with-regtest=$regtest_dir >> $longlog 2>&1 || warn "bjam clean failed, suspicious" |
|
|
|
echo "## ./bjam $MCC_CONFIGURE_ARGS" >> $longlog |
|
if [ -z "$err" ]; then |
|
./bjam $MCC_CONFIGURE_ARGS >> $longlog 2>&1 || err="bjam" |
|
fi |
|
|
|
echo "## regression tests" >> $longlog |
|
if [ -z "$err" ]; then |
|
./bjam $MCC_CONFIGURE_ARGS --with-regtest=$regtest_dir >> $longlog 2>&1 || err="regression tests" |
|
fi |
|
|
|
if [ -z "$err" ] && [ "$MCC_RUN_EMS" = "yes" ]; then |
|
echo "## EMS" >> $longlog |
|
if [ ! -f "giza-pp.ok" ]; then |
|
svn checkout http://giza-pp.googlecode.com/svn/trunk/ giza-pp \ |
|
|| die "Failed to fetch Giza++" |
|
cd giza-pp && make || die "Failed to compile Giza++" |
|
mkdir -p bin |
|
ln -s ../GIZA++-v2/GIZA++ ../GIZA++-v2/snt2cooc.out ../mkcls-v2/mkcls bin/ |
|
cd .. |
|
touch giza-pp.ok |
|
fi |
|
./bjam $MCC_CONFIGURE_ARGS" || err="bjam" |
|
srilm_dir=$(echo $MCC_CONFIGURE_ARGS | sed -r 's/.*--with-srilm=([^ ]+) .*/\1/') |
|
mach_type=$($srilm_dir/sbin/machine-type) |
|
mkdir -p "$WORKDIR/ems_workdir" |
|
rm -rf "$WORKDIR/ems_workdir/"* # clean any previous experiments |
|
cat $MYDIR/config.ems \ |
|
| sed \ |
|
-e "s |
|
-e "s#SRILMDIR#$srilm_dir#" \ |
|
-e "s#MACHINE_TYPE#$mach_type#" \ |
|
> ./config.ems |
|
scripts/ems/experiment.perl \ |
|
-no-graph -exec -config $(pwd)/config.ems &>> $longlog \ |
|
|| die "Running EMS failed" |
|
[ -f $WORKDIR/ems_workdir/steps/1/REPORTING_report.1.DONE ] || err="ems" |
|
fi |
|
|
|
echo "## Finished" >> $longlog |
|
date >> $longlog |
|
|
|
if [ -z "$err" ]; then |
|
status="OK" |
|
else |
|
git reset --hard HEAD |
|
status="FAIL:$err" |
|
fi |
|
echo "## Status: $status" >> $longlog |
|
|
|
nicedate=$(date +"%Y%m%d-%H%M%S") |
|
echo "$commit$status$configname$ccversion$nicedate" \ |
|
>> "$LOGDIR/brief.log" |
|
|
|
if [ -z "$err" ]; then |
|
touch "$LOGDIR/logs/$configname/$first_char/$commit.OK" |
|
else |
|
return 1; |
|
fi |
|
} |
|
|
|
cd $WORKDIR || die "Failed to chdir to $WORKDIR" |
|
|
|
|
|
for i in $MCC_SCAN_BRANCHES; do |
|
git rev-list $i > "$LOGDIR/logs/$configname/$(echo -n $i | sed 's/^.*\///').revlist" |
|
done |
|
|
|
|
|
for i in $(git rev-list $MCC_SCAN_BRANCHES); do |
|
first_char=$(echo $i | grep -o '^.') |
|
mkdir -p "$LOGDIR/logs/$configname/$first_char" |
|
[ -f "$LOGDIR/logs/$configname/$first_char/$i.info" ] && break; |
|
git show $i | $MYDIR/shorten_info.pl > "$LOGDIR/logs/$configname/$first_char/$i.info" |
|
done |
|
|
|
|
|
for i in $MCC_SCAN_BRANCHES; do |
|
warn "On branch $i" |
|
git rev-list $i \ |
|
| while read commit; do |
|
first_char=$(echo $commit | grep -o '^.') |
|
test_done="$LOGDIR/logs/$configname/$first_char/$commit.log" |
|
if [ ! -e "$test_done" ]; then |
|
run_single_test $commit && warn "Commit $commit test ok, stopping" && break |
|
warn "Commit $commit test failed, continuing" |
|
else |
|
warn "Reached a previously tested commit ($commit), stopping" |
|
break |
|
fi |
|
done |
|
done |
|
|