OLD | NEW |
(Empty) | |
| 1 #!/bin/bash |
| 2 # |
| 3 # This is the script that runs inside Docker, once the image has been built, |
| 4 # to execute all tests for the "pull request" project. |
| 5 |
| 6 WORKSPACE_BASE=`pwd` |
| 7 MY_DIR="$(dirname "$0")" |
| 8 TEST_SCRIPT=$MY_DIR/../tests.sh |
| 9 BUILD_DIR=/tmp/protobuf |
| 10 |
| 11 set -e # exit immediately on error |
| 12 set -x # display all commands |
| 13 |
| 14 # The protobuf repository is mounted into our Docker image, but read-only. |
| 15 # We clone into a directory inside Docker (this is faster than cp). |
| 16 rm -rf $BUILD_DIR |
| 17 mkdir -p $BUILD_DIR |
| 18 cd $BUILD_DIR |
| 19 git clone /var/local/jenkins/protobuf |
| 20 cd protobuf |
| 21 |
| 22 # Set up the directory where our test output is going to go. |
| 23 OUTPUT_DIR=`mktemp -d` |
| 24 LOG_OUTPUT_DIR=$OUTPUT_DIR/logs |
| 25 mkdir -p $LOG_OUTPUT_DIR/1/cpp |
| 26 |
| 27 ################################################################################ |
| 28 # cpp build needs to run first, non-parallelized, so that protoc is available |
| 29 # for other builds. |
| 30 |
| 31 # Output filenames to follow the overall scheme used by parallel, ie: |
| 32 # $DIR/logs/1/cpp/stdout |
| 33 # $DIR/logs/1/cpp/stderr |
| 34 # $DIR/logs/1/csharp/stdout |
| 35 # $DIR/logs/1/csharp/stderr |
| 36 # $DIR/logs/1/java_jdk7/stdout |
| 37 # $DIR/logs/1/java_jdk7/stderr |
| 38 CPP_STDOUT=$LOG_OUTPUT_DIR/1/cpp/stdout |
| 39 CPP_STDERR=$LOG_OUTPUT_DIR/1/cpp/stderr |
| 40 |
| 41 # Time the C++ build, so we can put this info in the test output. |
| 42 # It's important that we get /usr/bin/time (which supports -f and -o) and not |
| 43 # the bash builtin "time" which doesn't. |
| 44 TIME_CMD="/usr/bin/time -f %e -o $LOG_OUTPUT_DIR/1/cpp/build_time" |
| 45 |
| 46 $TIME_CMD $TEST_SCRIPT cpp > >(tee $CPP_STDOUT) 2> >(tee $CPP_STDERR >&2) |
| 47 |
| 48 # Other tests are run in parallel. |
| 49 |
| 50 parallel --results $LOG_OUTPUT_DIR --joblog $OUTPUT_DIR/joblog $TEST_SCRIPT :::
\ |
| 51 csharp \ |
| 52 java_jdk7 \ |
| 53 javanano_jdk7 \ |
| 54 java_oracle7 \ |
| 55 javanano_oracle7 \ |
| 56 python \ |
| 57 python_cpp \ |
| 58 ruby21 \ |
| 59 || true # Process test results even if tests fail. |
| 60 |
| 61 cat $OUTPUT_DIR/joblog |
| 62 |
| 63 # The directory that is copied from Docker back into the Jenkins workspace. |
| 64 COPY_FROM_DOCKER=/var/local/git/protobuf/testoutput |
| 65 mkdir -p $COPY_FROM_DOCKER |
| 66 TESTOUTPUT_XML_FILE=$COPY_FROM_DOCKER/testresults.xml |
| 67 |
| 68 # Process all the output files from "parallel" and package them into a single |
| 69 # .xml file with detailed, broken-down test output. |
| 70 python $MY_DIR/make_test_output.py $OUTPUT_DIR > $TESTOUTPUT_XML_FILE |
| 71 |
| 72 ls -l $TESTOUTPUT_XML_FILE |
OLD | NEW |