From b361b4edfb76cef386be8039610342c702d9a97a Mon Sep 17 00:00:00 2001
From: Craig Tiller <ctiller@google.com>
Date: Wed, 6 Jan 2016 11:44:17 -0800
Subject: [PATCH] Fix building submodules at head

- ensure failure propogates through run_jenkins.sh
- don't try to regenerate projects on non-linux environments
---
 tools/jenkins/run_jenkins.sh | 14 ++++++++----
 tools/run_tests/run_tests.py | 44 +++++++++++++++++++++---------------
 2 files changed, 36 insertions(+), 22 deletions(-)

diff --git a/tools/jenkins/run_jenkins.sh b/tools/jenkins/run_jenkins.sh
index 4bb6c39a1c..9b6ba71948 100755
--- a/tools/jenkins/run_jenkins.sh
+++ b/tools/jenkins/run_jenkins.sh
@@ -54,7 +54,7 @@ if [ "$platform" == "linux" ]
 then
   echo "building $language on Linux"
 
-  ./tools/run_tests/run_tests.py --use_docker -t -l $language -c $config -x report.xml $@ || true
+  ./tools/run_tests/run_tests.py --use_docker -t -l $language -c $config -x report.xml $@ || TESTS_FAILED="true"
 
 elif [ "$platform" == "windows" ]
 then
@@ -63,19 +63,19 @@ then
   # Prevent msbuild from picking up "platform" env variable, which would break the build
   unset platform
 
-  python tools/run_tests/run_tests.py -t -l $language -c $config -x report.xml $@ || true
+  python tools/run_tests/run_tests.py -t -l $language -c $config -x report.xml $@ || TESTS_FAILED="true"
 
 elif [ "$platform" == "macos" ]
 then
   echo "building $language on MacOS"
 
-  ./tools/run_tests/run_tests.py -t -l $language -c $config -x report.xml $@ || true
+  ./tools/run_tests/run_tests.py -t -l $language -c $config -x report.xml $@ || TESTS_FAILED="true"
 
 elif [ "$platform" == "freebsd" ]
 then
   echo "building $language on FreeBSD"
 
-  MAKE=gmake ./tools/run_tests/run_tests.py -t -l $language -c $config -x report.xml $@ || true
+  MAKE=gmake ./tools/run_tests/run_tests.py -t -l $language -c $config -x report.xml $@ || TESTS_FAILED="true"
 
 else
   echo "Unknown platform $platform"
@@ -87,3 +87,9 @@ then
   mkdir -p reports
   echo 'No reports generated.' > reports/index.html
 fi
+
+if [ "$TESTS_FAILED" != "" ]
+then
+  exit 1
+fi
+
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index a7c15d3d2d..857e7b5f5d 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -53,6 +53,7 @@ import jobset
 import report_utils
 import watch_dirs
 
+
 ROOT = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '../..'))
 os.chdir(ROOT)
 
@@ -685,23 +686,30 @@ if args.use_docker:
   sys.exit(0)
 
 # update submodules if necessary
-if args.update_submodules:
-  for spec in args.update_submodules:
-    spec = spec.split(':', 1)
-    if len(spec) == 1:
-      submodule = spec[0]
-      branch = 'master'
-    elif len(spec) == 2:
-      submodule = spec[0]
-      branch = spec[1]
-    cwd = 'third_party/%s' % submodule
-    def git(cmd, cwd=cwd):
-      print 'in %s: git %s' % (cwd, cmd)
-      subprocess.check_call('git %s' % cmd, cwd=cwd, shell=True)
-    git('fetch')
-    git('checkout %s' % branch)
-    git('pull origin %s' % branch)
-  subprocess.check_call('tools/buildgen/generate_projects.sh', shell=True)
+need_to_regenerate_projects = False
+for spec in args.update_submodules:
+  spec = spec.split(':', 1)
+  if len(spec) == 1:
+    submodule = spec[0]
+    branch = 'master'
+  elif len(spec) == 2:
+    submodule = spec[0]
+    branch = spec[1]
+  cwd = 'third_party/%s' % submodule
+  def git(cmd, cwd=cwd):
+    print 'in %s: git %s' % (cwd, cmd)
+    subprocess.check_call('git %s' % cmd, cwd=cwd, shell=True)
+  git('fetch')
+  git('checkout %s' % branch)
+  git('pull origin %s' % branch)
+  if os.path.exists('src/%s/gen_build_yaml.py' % submodule):
+    need_to_regenerate_projects = True
+if need_to_regenerate_projects:
+  if jobset.platform_string() == 'linux':
+    subprocess.check_call('tools/buildgen/generate_projects.sh', shell=True)
+  else:
+    print 'WARNING: may need to regenerate projects, but since we are not on'
+    print '         Linux this step is being skipped. Compilation MAY fail.'
 
 
 # grab config
@@ -962,7 +970,7 @@ def _build_and_run(
       newline_on_success=newline_on_success, travis=args.travis)
   if num_failures:
     return 1
-    
+
   if build_only:
     return 0
 
-- 
GitLab