Index: third_party/protobuf/jenkins/pull_request_in_docker.sh |
diff --git a/third_party/protobuf/jenkins/pull_request_in_docker.sh b/third_party/protobuf/jenkins/pull_request_in_docker.sh |
new file mode 100755 |
index 0000000000000000000000000000000000000000..887f97c59ba3ae8f0197b8226e22a2535fc4a9dc |
--- /dev/null |
+++ b/third_party/protobuf/jenkins/pull_request_in_docker.sh |
@@ -0,0 +1,72 @@ |
+#!/bin/bash |
+# |
+# This is the script that runs inside Docker, once the image has been built, |
+# to execute all tests for the "pull request" project. |
+ |
+WORKSPACE_BASE=`pwd` |
+MY_DIR="$(dirname "$0")" |
+TEST_SCRIPT=$MY_DIR/../tests.sh |
+BUILD_DIR=/tmp/protobuf |
+ |
+set -e # exit immediately on error |
+set -x # display all commands |
+ |
+# The protobuf repository is mounted into our Docker image, but read-only. |
+# We clone into a directory inside Docker (this is faster than cp). |
+rm -rf $BUILD_DIR |
+mkdir -p $BUILD_DIR |
+cd $BUILD_DIR |
+git clone /var/local/jenkins/protobuf |
+cd protobuf |
+ |
+# Set up the directory where our test output is going to go. |
+OUTPUT_DIR=`mktemp -d` |
+LOG_OUTPUT_DIR=$OUTPUT_DIR/logs |
+mkdir -p $LOG_OUTPUT_DIR/1/cpp |
+ |
+################################################################################ |
+# cpp build needs to run first, non-parallelized, so that protoc is available |
+# for other builds. |
+ |
+# Output filenames to follow the overall scheme used by parallel, ie: |
+# $DIR/logs/1/cpp/stdout |
+# $DIR/logs/1/cpp/stderr |
+# $DIR/logs/1/csharp/stdout |
+# $DIR/logs/1/csharp/stderr |
+# $DIR/logs/1/java_jdk7/stdout |
+# $DIR/logs/1/java_jdk7/stderr |
+CPP_STDOUT=$LOG_OUTPUT_DIR/1/cpp/stdout |
+CPP_STDERR=$LOG_OUTPUT_DIR/1/cpp/stderr |
+ |
+# Time the C++ build, so we can put this info in the test output. |
+# It's important that we get /usr/bin/time (which supports -f and -o) and not |
+# the bash builtin "time" which doesn't. |
+TIME_CMD="/usr/bin/time -f %e -o $LOG_OUTPUT_DIR/1/cpp/build_time" |
+ |
+$TIME_CMD $TEST_SCRIPT cpp > >(tee $CPP_STDOUT) 2> >(tee $CPP_STDERR >&2) |
+ |
+# Other tests are run in parallel. |
+ |
+parallel --results $LOG_OUTPUT_DIR --joblog $OUTPUT_DIR/joblog $TEST_SCRIPT ::: \ |
+ csharp \ |
+ java_jdk7 \ |
+ javanano_jdk7 \ |
+ java_oracle7 \ |
+ javanano_oracle7 \ |
+ python \ |
+ python_cpp \ |
+ ruby21 \ |
+ || true # Process test results even if tests fail. |
+ |
+cat $OUTPUT_DIR/joblog |
+ |
+# The directory that is copied from Docker back into the Jenkins workspace. |
+COPY_FROM_DOCKER=/var/local/git/protobuf/testoutput |
+mkdir -p $COPY_FROM_DOCKER |
+TESTOUTPUT_XML_FILE=$COPY_FROM_DOCKER/testresults.xml |
+ |
+# Process all the output files from "parallel" and package them into a single |
+# .xml file with detailed, broken-down test output. |
+python $MY_DIR/make_test_output.py $OUTPUT_DIR > $TESTOUTPUT_XML_FILE |
+ |
+ls -l $TESTOUTPUT_XML_FILE |