2013-03-18 01:15:50 -03:00
#!/bin/bash
2014-10-13 02:07:32 -03:00
export PATH = $HOME /.local/bin:/usr/local/bin:$HOME /prefix/bin:$HOME /APM/px4/gcc-arm-none-eabi-4_7-2014q2/bin:$PATH
2013-03-18 01:15:50 -03:00
export PYTHONUNBUFFERED = 1
2013-06-18 04:01:31 -03:00
export PYTHONPATH = $HOME /APM
2013-03-18 01:15:50 -03:00
cd $HOME /APM || exit 1
test -n " $FORCEBUILD " || {
( cd APM && git fetch > /dev/null 2>& 1)
2014-01-20 04:54:35 -04:00
2013-03-29 06:00:42 -03:00
newtags = $( cd APM && git fetch --tags | wc -l)
2013-03-18 01:15:50 -03:00
oldhash = $( cd APM && git rev-parse origin/master)
newhash = $( cd APM && git rev-parse HEAD)
2014-01-20 04:54:35 -04:00
newtagspx4 = $( cd PX4Firmware && git fetch --tags | wc -l)
oldhashpx4 = $( cd PX4Firmware && git rev-parse origin/master)
newhashpx4 = $( cd PX4Firmware && git rev-parse HEAD)
newtagsnuttx = $( cd PX4NuttX && git fetch --tags | wc -l)
oldhashnuttx = $( cd PX4NuttX && git rev-parse origin/master)
newhashnuttx = $( cd PX4NuttX && git rev-parse HEAD)
2014-11-27 16:29:29 -04:00
newtagsuavcan = $( cd uavcan && git fetch --tags | wc -l)
oldhashuavcan = $( cd uavcan && git rev-parse origin/master)
newhashuavcan = $( cd uavcan && git rev-parse HEAD)
2014-12-27 06:40:41 -04:00
if [ " $oldhash " = " $newhash " -a " $newtags " = "0" -a " $oldhashpx4 " = " $newhashpx4 " -a " $newtagspx4 " = "0" -a " $oldhashnuttx " = " $newhashnuttx " -a " $newtagsnuttx " = "0" -a " $oldhashuavcan " = " $newhashuavcan " -a " $newtagsuavcan " = "0" ] ; then
2013-03-18 01:15:50 -03:00
echo " no change $oldhash $newhash `date` " >> build.log
exit 0
fi
}
############################
# grab a lock file. Not atomic, but close :)
# tries to cope with NFS
lock_file( ) {
lck = " $1 "
pid = ` cat " $lck " 2> /dev/null`
if test -f " $lck " && kill -0 $pid 2> /dev/null; then
LOCKAGE = $(( $( date +%s) - $( stat -c '%Y' "build.lck" ) ))
test $LOCKAGE -gt 7200 && {
echo " old lock file $lck is valid for $pid with age $LOCKAGE seconds "
}
return 1
fi
/bin/rm -f " $lck "
echo " $$ " > " $lck "
return 0
}
lock_file build.lck || {
exit 1
}
#ulimit -m 500000
#ulimit -s 500000
#ulimit -t 1800
#ulimit -v 500000
(
date
report( ) {
d = " $1 "
old = " $2 "
new = " $3 "
cat <<EOF | mail -s 'build failed' drones-discuss@googlegroups.com
A build of $d failed at ` date`
You can view the build logs at http://autotest.diydrones.com/
A log of the commits since the last attempted build is below
` git log $old $new `
EOF
}
report_pull_failure( ) {
d = " $1 "
git show origin/master | mail -s 'APM pull failed' drones-discuss@googlegroups.com
exit 1
}
oldhash = $( cd APM && git rev-parse HEAD)
pushd APM
git pull || report_pull_failure
git clean -f -f -x -d -d
git tag autotest-$( date '+%Y-%m-%d-%H%M%S' ) -m "test tag `date`"
cp ../config.mk .
popd
2013-03-23 02:19:23 -03:00
rsync -a APM/Tools/autotest/web-firmware/ buildlogs/binaries/
2013-08-30 00:32:23 -03:00
pushd PX4Firmware
git fetch origin
git reset --hard origin/master
2014-01-20 04:54:35 -04:00
for v in ArduPlane ArduCopter APMrover2; do
git tag -d $v -beta || true
git tag -d $v -stable || true
done
git fetch origin --tags
2013-09-05 22:46:19 -03:00
git show
2013-08-30 00:32:23 -03:00
popd
pushd PX4NuttX
2013-03-18 01:15:50 -03:00
git fetch origin
git reset --hard origin/master
2014-01-20 04:54:35 -04:00
for v in ArduPlane ArduCopter APMrover2; do
git tag -d $v -beta || true
git tag -d $v -stable || true
done
git fetch origin --tags
2013-09-05 22:46:19 -03:00
git show
2013-03-18 01:15:50 -03:00
popd
2014-11-27 16:29:29 -04:00
pushd uavcan
git fetch origin
git reset --hard origin/master
for v in ArduPlane ArduCopter APMrover2; do
git tag -d $v -beta || true
git tag -d $v -stable || true
done
git fetch origin --tags
git show
popd
2013-07-16 00:23:48 -03:00
echo "Updating pymavlink"
pushd mavlink/pymavlink
2013-09-05 22:46:19 -03:00
git fetch origin
git reset --hard origin/master
git show
2013-07-16 00:23:48 -03:00
python setup.py build install --user
popd
echo "Updating MAVProxy"
pushd MAVProxy
2013-09-05 22:46:19 -03:00
git fetch origin
git reset --hard origin/master
git show
2013-07-16 00:23:48 -03:00
python setup.py build install --user
popd
2013-03-18 01:15:50 -03:00
githash = $( cd APM && git rev-parse HEAD)
hdate = $( date +"%Y-%m-%d-%H:%m" )
for d in ArduPlane ArduCopter APMrover2; do
pushd APM/$d
rm -rf ../../buildlogs/$d .build
( date && TMPDIR = ../../buildlogs make) > ../../buildlogs/$d .txt 2>& 1
status = $?
if [ $status != 0 ] ; then
report $d $oldhash $newhash
fi
popd
2013-03-18 03:47:26 -03:00
APM/Tools/scripts/frame_sizes.py buildlogs/$d .build > buildlogs/$d .framesizes.txt
2013-03-18 01:15:50 -03:00
(
avr-size buildlogs/$d .build/$d .elf
avr-nm --size-sort --print-size -C buildlogs/$d .build/$d .elf
) > buildlogs/$d .sizes.txt
done
mkdir -p " buildlogs/history/ $hdate "
2014-11-13 02:27:02 -04:00
( cd buildlogs && cp -f *.txt *.flashlog *.tlog *.km[ lz] *.gpx *.html *.png *.bin *.BIN *.elf " history/ $hdate / " )
2013-03-18 01:15:50 -03:00
echo $githash > " buildlogs/history/ $hdate /githash.txt "
2013-05-29 23:19:50 -03:00
( cd APM && Tools/scripts/build_parameters.sh)
2013-03-18 01:15:50 -03:00
2013-08-14 19:58:56 -03:00
( cd APM && Tools/scripts/build_docs.sh)
2013-09-13 00:22:00 -03:00
killall -9 JSBSim || /bin/true
2014-11-13 02:27:02 -04:00
# raise core limit
ulimit -c 10000000
2015-02-19 06:49:43 -04:00
timelimit 12000 APM/Tools/autotest/autotest.py --timeout= 11500 > buildlogs/autotest-output.txt 2>& 1
2013-03-18 01:15:50 -03:00
) >> build.log 2>& 1