Skip to content

Instantly share code, notes, and snippets.

@pote
Forked from git2samus/run_monaqasat_tests
Created July 12, 2013 20:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pote/5987345 to your computer and use it in GitHub Desktop.
Save pote/5987345 to your computer and use it in GitHub Desktop.
#!/bin/bash -l
shopt -s nullglob
enqueue() {
for rev; do
echo -n "$rev" > "$(mktemp "$queuedir/$(date +%s).XXXXXX")"
done
}
run_tests_for() {
local name=$1 command=$2
local previous_logs=("$LOGSDIR"/*-"$revision"-"$name".log)
if ! ((${#previous_logs[@]})); then
bundle exec 'rake db:reset && rake db:test:prepare' || exit
echo "running $name"
{ bundle exec "$command" 2>"$lockdir/stderr"
echo; echo; echo "STDERR:"; echo
cat "$lockdir/stderr"; echo
} | tee "$lockdir/$date-$revision-$name.log"
echo "done"
mv "$lockdir/$date-$revision-$name.log" "$LOGSDIR/$date-$revision-$name.log"
echo " log: $LOGSDIR/$date-$revision-$name.log"
else
echo "logs for $name on revision $revision already exist, skipping."
fi
}
echo "starting..."
echo " pid: $$"
# setup rvm and cwd to project's dir
rvm rvmrc trust "$WORKSPACE" && cd "$WORKSPACE" || exit
echo " saving logs to: ${LOGSDIR:=$PWD}"
lockdir=/tmp/monaqasat_tests.lock
queuedir=$lockdir/queue
# atomic lock acquisition
if mkdir "$lockdir"; then
# remove lock on exit
trap 'rm -rf "$lockdir"' 0
# dir to save scheduled runs
mkdir -p "$queuedir"
# enqueue current args or schedule master
enqueue "${@:-origin/master}"
while true; do
queue=("$queuedir"/*)
if ((${#queue[@]})); then
rev=$(<"${queue[0]}")
# refresh repository
GIT_SSH=ssh-wrapper git fetch && git checkout -f "$rev" || exit
# update gems
bundle install || exit
# run tests
date=$(date +%Y-%m-%d) revision=$(git rev-parse HEAD)
run_tests_for rspec 'rspec spec'
run_tests_for cucumber 'cucumber --require features'
# remove scheduled run and search again
rm "${queue[0]}"
else
break
fi
done
else
if (($#)); then
echo "lock found, scheduling..."
enqueue "$@"
else
echo "cannot acquire lock, aborting." >&2
fi
exit
fi
echo "finished."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment