Add non-zero exit code on app failure

Bug: 129989927
Change-Id: Iaa4e4e01b927898665ad34d100634507c2c071db
diff --git a/tools/run_on_as_app.py b/tools/run_on_as_app.py
index 6f0aa87..e0c812a 100755
--- a/tools/run_on_as_app.py
+++ b/tools/run_on_as_app.py
@@ -841,14 +841,18 @@
 
 def LogResultsForApps(result_per_shrinker_per_app, options):
   print('')
+  app_errors = 0
   for (app, result_per_shrinker) in result_per_shrinker_per_app:
-    LogResultsForApp(app, result_per_shrinker, options)
+    app_errors += (1 if LogResultsForApp(app, result_per_shrinker, options)
+                   else 0)
+  return app_errors
 
 def LogResultsForApp(app, result_per_shrinker, options):
   if options.print_dexsegments:
     LogSegmentsForApp(app, result_per_shrinker, options)
+    return False
   else:
-    LogComparisonResultsForApp(app, result_per_shrinker, options)
+    return LogComparisonResultsForApp(app, result_per_shrinker, options)
 
 def LogSegmentsForApp(app, result_per_shrinker, options):
   for shrinker in SHRINKERS:
@@ -864,7 +868,7 @@
 
 def LogComparisonResultsForApp(app, result_per_shrinker, options):
   print(app.name + ':')
-
+  app_error = False
   if result_per_shrinker.get('status', 'success') != 'success':
     error_message = result_per_shrinker.get('error_message')
     print('  skipped ({})'.format(error_message))
@@ -880,6 +884,7 @@
     result = result_per_shrinker.get(shrinker)
     build_status = result.get('build_status')
     if build_status != 'success':
+      app_error = True
       warn('  {}: {}'.format(shrinker, build_status))
     else:
       print('  {}:'.format(shrinker))
@@ -910,6 +915,7 @@
       if options.monkey:
         monkey_status = result.get('monkey_status')
         if monkey_status != 'success':
+          app_error = True
           warn('    monkey: {}'.format(monkey_status))
         else:
           success('    monkey: {}'.format(monkey_status))
@@ -919,6 +925,7 @@
       for recompilation_result in recompilation_results:
         build_status = recompilation_result.get('build_status')
         if build_status != 'success':
+          app_error = True
           print('    recompilation #{}: {}'.format(i, build_status))
         else:
           dex_size = recompilation_result.get('dex_size')
@@ -945,6 +952,7 @@
         if succeeded:
           success('    tests: succeeded')
         else:
+          app_error = True
           warn(
               '    tests: failed (failures: {}, errors: {}, skipped: {})'
               .format(
@@ -952,6 +960,8 @@
                   instrumentation_test_results.get('errors'),
                   instrumentation_test_results.get('skipped')))
 
+  return app_error
+
 def ParseOptions(argv):
   result = optparse.OptionParser()
   result.add_option('--app',
@@ -1143,7 +1153,7 @@
       result_per_shrinker_per_app.append(
           (app, GetResultsForApp(app, repo, options, temp_dir)))
 
-    LogResultsForApps(result_per_shrinker_per_app, options)
+    return LogResultsForApps(result_per_shrinker_per_app, options)
 
 def success(message):
   CGREEN = '\033[32m'