| 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
|
|
|