From 6b5088207bbaac13631d66113c5e8c10b4560fbc Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 10 Nov 2018 16:16:28 +1100 Subject: [PATCH] autotest: upload failed CI logs to autotest server --- Tools/autotest/apmrover2.py | 3 ++- Tools/autotest/arducopter.py | 6 ++++-- Tools/autotest/arduplane.py | 3 ++- Tools/autotest/ardusub.py | 3 ++- Tools/autotest/balancebot.py | 3 ++- Tools/autotest/common.py | 13 ++++++++++++- 6 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Tools/autotest/apmrover2.py b/Tools/autotest/apmrover2.py index bd1bd0d8ab..3ddc3016ce 100644 --- a/Tools/autotest/apmrover2.py +++ b/Tools/autotest/apmrover2.py @@ -864,7 +864,8 @@ Brakes have negligible effect (with=%0.2fm without=%0.2fm delta=%0.2fm) self.run_test("Download logs", lambda: self.log_download( - self.buildlogs_path("APMrover2-log.bin"))) + self.buildlogs_path("APMrover2-log.bin"), + upload_logs=len(self.fail_list)>0)) # if not drive_left_circuit(self): # self.progress("Failed left circuit") # failed = True diff --git a/Tools/autotest/arducopter.py b/Tools/autotest/arducopter.py index c3547049a0..a1483a2419 100644 --- a/Tools/autotest/arducopter.py +++ b/Tools/autotest/arducopter.py @@ -2403,7 +2403,8 @@ class AutoTestCopter(AutoTest): # Download logs self.run_test("log download", lambda: self.log_download( - self.buildlogs_path("ArduCopter-log.bin"))) + self.buildlogs_path("ArduCopter-log.bin"), + upload_logs=len(self.fail_list)>0)) except pexpect.TIMEOUT: self.progress("Failed with timeout") @@ -2449,7 +2450,8 @@ class AutoTestCopter(AutoTest): # mission ends with disarm so should be ok to download logs now self.run_test("log download", lambda: self.log_download( - self.buildlogs_path("Helicopter-log.bin"))) + self.buildlogs_path("Helicopter-log.bin"), + upload_logs=len(self.fail_list)>0)) except pexpect.TIMEOUT: self.fail_list.append("Failed with timeout") diff --git a/Tools/autotest/arduplane.py b/Tools/autotest/arduplane.py index 489adca5ee..03bb978695 100644 --- a/Tools/autotest/arduplane.py +++ b/Tools/autotest/arduplane.py @@ -759,7 +759,8 @@ class AutoTestPlane(AutoTest): self.run_test("Log download", lambda: self.log_download( - self.buildlogs_path("ArduPlane-log.bin"))) + self.buildlogs_path("ArduPlane-log.bin"), + upload_logs=True)) except pexpect.TIMEOUT: self.progress("Failed with timeout") diff --git a/Tools/autotest/ardusub.py b/Tools/autotest/ardusub.py index 1d6c9fca5a..69110ff7d4 100644 --- a/Tools/autotest/ardusub.py +++ b/Tools/autotest/ardusub.py @@ -196,7 +196,8 @@ class AutoTestSub(AutoTest): self.run_test("Log download", lambda: self.log_download( - self.buildlogs_path("ArduSub-log.bin"))) + self.buildlogs_path("ArduSub-log.bin"), + upload_logs=len(self.fail_list)>0)) except pexpect.TIMEOUT: self.progress("Failed with timeout") diff --git a/Tools/autotest/balancebot.py b/Tools/autotest/balancebot.py index 76b301f565..cc9a3737ed 100644 --- a/Tools/autotest/balancebot.py +++ b/Tools/autotest/balancebot.py @@ -93,7 +93,8 @@ class AutoTestBalanceBot(AutoTestRover): self.run_test("Download logs", lambda: self.log_download( - self.buildlogs_path("APMrover2-log.bin"))) + self.buildlogs_path("APMrover2-log.bin"), + upload_logs=len(self.fail_list)>0)) # if not drive_left_circuit(self): # self.progress("Failed left circuit") # failed = True diff --git a/Tools/autotest/common.py b/Tools/autotest/common.py index 2eba5be42b..802f6ff9aa 100644 --- a/Tools/autotest/common.py +++ b/Tools/autotest/common.py @@ -349,7 +349,7 @@ class AutoTest(ABC): self.mavproxy.send('wp list\n') self.mavproxy.expect('Requesting 0 waypoints') - def log_download(self, filename, timeout=360): + def log_download(self, filename, timeout=360, upload_logs=False): """Download latest log.""" self.mav.wait_heartbeat() self.mavproxy.send("log list\n") @@ -361,6 +361,17 @@ class AutoTest(ABC): self.mavproxy.expect("Finished downloading", timeout=timeout) self.mav.wait_heartbeat() self.mav.wait_heartbeat() + if upload_logs and not os.getenv("AUTOTEST_NO_UPLOAD"): + # optionally upload logs to server so we can see travis failure logs + import subprocess, glob, datetime + logdir=os.path.dirname(filename) + datedir=datetime.datetime.now().strftime("%Y-%m-%d-%H-%M") + flist = glob.glob("logs/*.BIN") + for e in ['BIN','bin','tlog']: + flist += glob.glob(os.path.join(logdir, '*.%s' % e)) + print("Uploading %u logs to http://firmware.ardupilot.org/CI-Logs/%s" % (len(flist), datedir)) + cmd = ['rsync', '-avz'] + flist + ['cilogs@autotest.ardupilot.org::CI-Logs/%s/' % datedir] + subprocess.call(cmd) def show_gps_and_sim_positions(self, on_off): """Allow to display gps and actual position on map."""