|
|
|
@ -1,14 +1,8 @@ |
|
|
|
|
#!/bin/bash |
|
|
|
|
# |
|
|
|
|
# Build and runs tests for the protobuf project. The tests as written here are |
|
|
|
|
# used by both Jenkins and Travis, though some specialized logic is required to |
|
|
|
|
# handle the differences between them. |
|
|
|
|
|
|
|
|
|
on_travis() { |
|
|
|
|
if [ "$TRAVIS" == "true" ]; then |
|
|
|
|
"$@" |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
# Build and runs tests for the protobuf project. We use this script to run |
|
|
|
|
# tests on kokoro (Ubuntu and MacOS). It can run locally as well but you |
|
|
|
|
# will need to make sure the required compilers/tools are available. |
|
|
|
|
|
|
|
|
|
# For when some other test needs the C++ main build, including protoc and |
|
|
|
|
# libprotobuf. |
|
|
|
@ -18,15 +12,6 @@ internal_build_cpp() { |
|
|
|
|
return |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
if [[ $(uname -s) == "Linux" && "$TRAVIS" == "true" ]]; then |
|
|
|
|
# Install GCC 4.8 to replace the default GCC 4.6. We need 4.8 for more |
|
|
|
|
# decent C++ 11 support in order to compile conformance tests. |
|
|
|
|
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y |
|
|
|
|
sudo apt-get update -qq |
|
|
|
|
sudo apt-get install -qq g++-4.8 |
|
|
|
|
export CXX="g++-4.8" CC="gcc-4.8" |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
# Initialize any submodules. |
|
|
|
|
git submodule update --init --recursive |
|
|
|
|
|
|
|
|
@ -43,8 +28,6 @@ build_cpp() { |
|
|
|
|
|
|
|
|
|
# The benchmark code depends on cmake, so test if it is installed before |
|
|
|
|
# trying to do the build. |
|
|
|
|
# NOTE: The travis macOS images say they have cmake, but the xcode8.1 image |
|
|
|
|
# appears to be missing it: https://github.com/travis-ci/travis-ci/issues/6996 |
|
|
|
|
if [[ $(type cmake 2>/dev/null) ]]; then |
|
|
|
|
# Verify benchmarking code can build successfully. |
|
|
|
|
cd benchmarks && make cpp-benchmark && cd .. |
|
|
|
@ -121,10 +104,6 @@ build_golang() { |
|
|
|
|
# Add protoc to the path so that the examples build finds it. |
|
|
|
|
export PATH="`pwd`/src:$PATH" |
|
|
|
|
|
|
|
|
|
# Install Go and the Go protobuf compiler plugin. |
|
|
|
|
on_travis sudo apt-get update -qq |
|
|
|
|
on_travis sudo apt-get install -qq golang |
|
|
|
|
|
|
|
|
|
export GOPATH="$HOME/gocode" |
|
|
|
|
mkdir -p "$GOPATH/src/github.com/google" |
|
|
|
|
rm -f "$GOPATH/src/github.com/google/protobuf" |
|
|
|
@ -139,27 +118,17 @@ use_java() { |
|
|
|
|
version=$1 |
|
|
|
|
case "$version" in |
|
|
|
|
jdk7) |
|
|
|
|
on_travis sudo apt-get install openjdk-7-jdk |
|
|
|
|
export PATH=/usr/lib/jvm/java-7-openjdk-amd64/bin:$PATH |
|
|
|
|
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 |
|
|
|
|
;; |
|
|
|
|
oracle7) |
|
|
|
|
if [ "$TRAVIS" == "true" ]; then |
|
|
|
|
sudo apt-get install python-software-properties # for apt-add-repository |
|
|
|
|
echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 select true" | \ |
|
|
|
|
sudo debconf-set-selections |
|
|
|
|
yes | sudo apt-add-repository ppa:webupd8team/java |
|
|
|
|
yes | sudo apt-get install oracle-java7-installer |
|
|
|
|
fi; |
|
|
|
|
export PATH=/usr/lib/jvm/java-7-oracle/bin:$PATH |
|
|
|
|
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 |
|
|
|
|
;; |
|
|
|
|
esac |
|
|
|
|
|
|
|
|
|
if [ "$TRAVIS" != "true" ]; then |
|
|
|
|
MAVEN_LOCAL_REPOSITORY=/var/maven_local_repository |
|
|
|
|
MVN="$MVN -e -X --offline -Dmaven.repo.local=$MAVEN_LOCAL_REPOSITORY" |
|
|
|
|
fi; |
|
|
|
|
MAVEN_LOCAL_REPOSITORY=/var/maven_local_repository |
|
|
|
|
MVN="$MVN -e -X --offline -Dmaven.repo.local=$MAVEN_LOCAL_REPOSITORY" |
|
|
|
|
|
|
|
|
|
which java |
|
|
|
|
java -version |
|
|
|
@ -190,12 +159,6 @@ build_java_with_conformance_tests() { |
|
|
|
|
cd conformance && make test_java && cd .. |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
build_javanano() { |
|
|
|
|
# Java build needs `protoc`. |
|
|
|
|
internal_build_cpp |
|
|
|
|
cd javanano && $MVN test && cd .. |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
build_java_jdk7() { |
|
|
|
|
use_java jdk7 |
|
|
|
|
build_java_with_conformance_tests |
|
|
|
@ -213,38 +176,6 @@ build_java_compatibility() { |
|
|
|
|
./test.sh 3.0.0-beta-4 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
build_javanano_jdk7() { |
|
|
|
|
use_java jdk7 |
|
|
|
|
build_javanano |
|
|
|
|
} |
|
|
|
|
build_javanano_oracle7() { |
|
|
|
|
use_java oracle7 |
|
|
|
|
build_javanano |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
internal_install_python_deps() { |
|
|
|
|
if [ "$TRAVIS" != "true" ]; then |
|
|
|
|
return; |
|
|
|
|
fi |
|
|
|
|
# Install tox (OS X doesn't have pip). |
|
|
|
|
if [ $(uname -s) == "Darwin" ]; then |
|
|
|
|
brew upgrade python |
|
|
|
|
python3 -m pip install tox |
|
|
|
|
else |
|
|
|
|
sudo pip install tox |
|
|
|
|
fi |
|
|
|
|
# Only install Python2.6/3.x on Linux. |
|
|
|
|
if [ $(uname -s) == "Linux" ]; then |
|
|
|
|
sudo apt-get install -y python-software-properties # for apt-add-repository |
|
|
|
|
sudo apt-add-repository -y ppa:fkrull/deadsnakes |
|
|
|
|
sudo apt-get update -qq |
|
|
|
|
sudo apt-get install -y python3.3 python3.3-dev |
|
|
|
|
sudo apt-get install -y python3.4 python3.4-dev |
|
|
|
|
sudo apt-get install -y python3.5 python3.5-dev |
|
|
|
|
sudo apt-get install -y python3.6 python3.6-dev |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
build_objectivec_ios() { |
|
|
|
|
# Reused the build script that takes care of configuring and ensuring things |
|
|
|
|
# are up to date. The OS X test runs the objc conformance test, so skip it |
|
|
|
@ -279,9 +210,7 @@ build_objectivec_cocoapods_integration() { |
|
|
|
|
|
|
|
|
|
build_python() { |
|
|
|
|
internal_build_cpp |
|
|
|
|
internal_install_python_deps |
|
|
|
|
cd python |
|
|
|
|
# Only test Python 2.6/3.x on Linux |
|
|
|
|
if [ $(uname -s) == "Linux" ]; then |
|
|
|
|
envlist=py\{27,33,34,35,36\}-python |
|
|
|
|
else |
|
|
|
@ -293,11 +222,9 @@ build_python() { |
|
|
|
|
|
|
|
|
|
build_python_cpp() { |
|
|
|
|
internal_build_cpp |
|
|
|
|
internal_install_python_deps |
|
|
|
|
export LD_LIBRARY_PATH=../src/.libs # for Linux |
|
|
|
|
export DYLD_LIBRARY_PATH=../src/.libs # for OS X |
|
|
|
|
cd python |
|
|
|
|
# Only test Python 3.x on Linux |
|
|
|
|
if [ $(uname -s) == "Linux" ]; then |
|
|
|
|
envlist=py\{27,33,34,35,36\}-cpp |
|
|
|
|
else |
|
|
|
@ -325,18 +252,24 @@ build_ruby22() { |
|
|
|
|
internal_build_cpp # For conformance tests. |
|
|
|
|
cd ruby && bash travis-test.sh ruby-2.2 && cd .. |
|
|
|
|
} |
|
|
|
|
build_jruby() { |
|
|
|
|
build_ruby23() { |
|
|
|
|
internal_build_cpp # For conformance tests. |
|
|
|
|
cd ruby && bash travis-test.sh ruby-2.3 && cd .. |
|
|
|
|
} |
|
|
|
|
build_ruby24() { |
|
|
|
|
internal_build_cpp # For conformance tests. |
|
|
|
|
# TODO(xiaofeng): Upgrade to jruby-9.x. There are some broken jests to be |
|
|
|
|
# fixed. |
|
|
|
|
cd ruby && bash travis-test.sh jruby-1.7 && cd .. |
|
|
|
|
cd ruby && bash travis-test.sh ruby-2.4 && cd .. |
|
|
|
|
} |
|
|
|
|
build_ruby25() { |
|
|
|
|
internal_build_cpp # For conformance tests. |
|
|
|
|
cd ruby && bash travis-test.sh ruby-2.5.0 && cd .. |
|
|
|
|
} |
|
|
|
|
build_ruby_all() { |
|
|
|
|
build_ruby21 |
|
|
|
|
build_ruby22 |
|
|
|
|
# TODO(teboring): Disable jruby test temperarily for it randomly fails. |
|
|
|
|
# https://grpc-testing.appspot.com/job/protobuf_pull_request/735/consoleFull. |
|
|
|
|
# build_jruby |
|
|
|
|
build_ruby23 |
|
|
|
|
build_ruby24 |
|
|
|
|
build_ruby25 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
build_javascript() { |
|
|
|
@ -617,14 +550,6 @@ build_php_all() { |
|
|
|
|
build_php_compatibility |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# Note: travis currently does not support testing more than one language so the |
|
|
|
|
# .travis.yml cheats and claims to only be cpp. If they add multiple language |
|
|
|
|
# support, this should probably get updated to install steps and/or |
|
|
|
|
# rvm/gemfile/jdk/etc. entries rather than manually doing the work. |
|
|
|
|
|
|
|
|
|
# .travis.yml uses matrix.exclude to block the cases where app-get can't be |
|
|
|
|
# use to install things. |
|
|
|
|
|
|
|
|
|
# -------- main -------- |
|
|
|
|
|
|
|
|
|
if [ "$#" -ne 1 ]; then |
|
|
|
@ -635,8 +560,6 @@ Usage: $0 { cpp | |
|
|
|
|
java_jdk7 | |
|
|
|
|
java_oracle7 | |
|
|
|
|
java_compatibility | |
|
|
|
|
javanano_jdk7 | |
|
|
|
|
javanano_oracle7 | |
|
|
|
|
objectivec_ios | |
|
|
|
|
objectivec_ios_debug | |
|
|
|
|
objectivec_ios_release | |
|
|
|
@ -665,4 +588,5 @@ fi |
|
|
|
|
|
|
|
|
|
set -e # exit immediately on error |
|
|
|
|
set -x # display all commands |
|
|
|
|
cd $(dirname $0) |
|
|
|
|
eval "build_$1" |
|
|
|
|