#!/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. setglobal WORKSPACE_BASE = $[pwd] setglobal MY_DIR = $[dirname $0] setglobal TEST_SCRIPT = "$MY_DIR/../tests.sh" setglobal 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. setglobal OUTPUT_DIR = $[mktemp -d] setglobal 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 setglobal CPP_STDOUT = "$LOG_OUTPUT_DIR/1/cpp/stdout" setglobal 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. setglobal 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. TEST_SET is defined in # buildcmds/pull_request{_32}.sh parallel --results $LOG_OUTPUT_DIR --joblog $OUTPUT_DIR/joblog $TEST_SCRIPT ::: \ $TEST_SET \ || true # Process test results even if tests fail. cat $OUTPUT_DIR/joblog # The directory that is copied from Docker back into the Jenkins workspace. setglobal COPY_FROM_DOCKER = '/var/local/git/protobuf/testoutput' mkdir -p $COPY_FROM_DOCKER setglobal 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