1*6777b538SAndroid Build Coastguard Worker#!/bin/bash 2*6777b538SAndroid Build Coastguard Worker# 3*6777b538SAndroid Build Coastguard Worker# Build and run tests for the protobuf project. We use this script to run 4*6777b538SAndroid Build Coastguard Worker# tests on kokoro (Ubuntu and MacOS). It can run locally as well but you 5*6777b538SAndroid Build Coastguard Worker# need to make sure the required compilers/tools are available. 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Workerinternal_build_cpp() { 8*6777b538SAndroid Build Coastguard Worker if [ -f src/protoc ]; then 9*6777b538SAndroid Build Coastguard Worker # Already built. 10*6777b538SAndroid Build Coastguard Worker return 11*6777b538SAndroid Build Coastguard Worker fi 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker # Initialize any submodules. 14*6777b538SAndroid Build Coastguard Worker git submodule update --init --recursive 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker ./autogen.sh 17*6777b538SAndroid Build Coastguard Worker ./configure CXXFLAGS="-fPIC -std=c++11" # -fPIC is needed for python cpp test. 18*6777b538SAndroid Build Coastguard Worker # See python/setup.py for more details 19*6777b538SAndroid Build Coastguard Worker make -j$(nproc) 20*6777b538SAndroid Build Coastguard Worker} 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Workerbuild_cpp() { 23*6777b538SAndroid Build Coastguard Worker internal_build_cpp 24*6777b538SAndroid Build Coastguard Worker make check -j$(nproc) || (cat src/test-suite.log; false) 25*6777b538SAndroid Build Coastguard Worker cd conformance && make test_cpp && cd .. 26*6777b538SAndroid Build Coastguard Worker} 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Workerbuild_cpp_tcmalloc() { 29*6777b538SAndroid Build Coastguard Worker internal_build_cpp 30*6777b538SAndroid Build Coastguard Worker ./configure LIBS=-ltcmalloc && make clean && make \ 31*6777b538SAndroid Build Coastguard Worker PTHREAD_CFLAGS='-pthread -DGOOGLE_PROTOBUF_HEAP_CHECK_DRACONIAN' \ 32*6777b538SAndroid Build Coastguard Worker check 33*6777b538SAndroid Build Coastguard Worker cd src 34*6777b538SAndroid Build Coastguard Worker PPROF_PATH=/usr/bin/google-pprof HEAPCHECK=strict ./protobuf-test 35*6777b538SAndroid Build Coastguard Worker} 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Workerbuild_cpp_distcheck() { 38*6777b538SAndroid Build Coastguard Worker grep -q -- "-Og" src/Makefile.am && 39*6777b538SAndroid Build Coastguard Worker echo "The -Og flag is incompatible with Clang versions older than 4.0." && 40*6777b538SAndroid Build Coastguard Worker exit 1 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker # Initialize any submodules. 43*6777b538SAndroid Build Coastguard Worker git submodule update --init --recursive 44*6777b538SAndroid Build Coastguard Worker ./autogen.sh 45*6777b538SAndroid Build Coastguard Worker ./configure 46*6777b538SAndroid Build Coastguard Worker make dist 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker # List all files that should be included in the distribution package. 49*6777b538SAndroid Build Coastguard Worker git ls-files | grep "^\(java\|python\|objectivec\|csharp\|ruby\|php\|cmake\|examples\|src/google/protobuf/.*\.proto\)" |\ 50*6777b538SAndroid Build Coastguard Worker grep -v ".gitignore" | grep -v "java/lite/proguard.pgcfg" |\ 51*6777b538SAndroid Build Coastguard Worker grep -v "python/compatibility_tests" | grep -v "python/docs" | grep -v "python/.repo-metadata.json" |\ 52*6777b538SAndroid Build Coastguard Worker grep -v "python/protobuf_distutils" | grep -v "csharp/compatibility_tests" > dist.lst 53*6777b538SAndroid Build Coastguard Worker # Unzip the dist tar file. 54*6777b538SAndroid Build Coastguard Worker DIST=`ls *.tar.gz` 55*6777b538SAndroid Build Coastguard Worker tar -xf $DIST 56*6777b538SAndroid Build Coastguard Worker cd ${DIST//.tar.gz} 57*6777b538SAndroid Build Coastguard Worker # Check if every file exists in the dist tar file. 58*6777b538SAndroid Build Coastguard Worker FILES_MISSING="" 59*6777b538SAndroid Build Coastguard Worker for FILE in $(<../dist.lst); do 60*6777b538SAndroid Build Coastguard Worker [ -f "$FILE" ] || { 61*6777b538SAndroid Build Coastguard Worker echo "$FILE is not found!" 62*6777b538SAndroid Build Coastguard Worker FILES_MISSING="$FILE $FILES_MISSING" 63*6777b538SAndroid Build Coastguard Worker } 64*6777b538SAndroid Build Coastguard Worker done 65*6777b538SAndroid Build Coastguard Worker cd .. 66*6777b538SAndroid Build Coastguard Worker if [ ! -z "$FILES_MISSING" ]; then 67*6777b538SAndroid Build Coastguard Worker echo "Missing files in EXTRA_DIST: $FILES_MISSING" 68*6777b538SAndroid Build Coastguard Worker exit 1 69*6777b538SAndroid Build Coastguard Worker fi 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Worker # Do the regular dist-check for C++. 72*6777b538SAndroid Build Coastguard Worker make distcheck -j$(nproc) 73*6777b538SAndroid Build Coastguard Worker} 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Workerbuild_dist_install() { 76*6777b538SAndroid Build Coastguard Worker # Create a symlink pointing to python2 and put it at the beginning of $PATH. 77*6777b538SAndroid Build Coastguard Worker # This is necessary because the googletest build system involves a Python 78*6777b538SAndroid Build Coastguard Worker # script that is not compatible with Python 3. More recent googletest 79*6777b538SAndroid Build Coastguard Worker # versions have fixed this, but they have also removed the autotools build 80*6777b538SAndroid Build Coastguard Worker # system support that we rely on. This is a temporary workaround to keep the 81*6777b538SAndroid Build Coastguard Worker # googletest build working when the default python binary is Python 3. 82*6777b538SAndroid Build Coastguard Worker mkdir tmp || true 83*6777b538SAndroid Build Coastguard Worker pushd tmp 84*6777b538SAndroid Build Coastguard Worker ln -s /usr/bin/python2 ./python 85*6777b538SAndroid Build Coastguard Worker popd 86*6777b538SAndroid Build Coastguard Worker PATH=$PWD/tmp:$PATH 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker # Initialize any submodules. 89*6777b538SAndroid Build Coastguard Worker git submodule update --init --recursive 90*6777b538SAndroid Build Coastguard Worker ./autogen.sh 91*6777b538SAndroid Build Coastguard Worker ./configure 92*6777b538SAndroid Build Coastguard Worker make dist 93*6777b538SAndroid Build Coastguard Worker 94*6777b538SAndroid Build Coastguard Worker # Unzip the dist tar file and install it. 95*6777b538SAndroid Build Coastguard Worker DIST=`ls *.tar.gz` 96*6777b538SAndroid Build Coastguard Worker tar -xf $DIST 97*6777b538SAndroid Build Coastguard Worker pushd ${DIST//.tar.gz} 98*6777b538SAndroid Build Coastguard Worker ./configure && make check -j4 && make install 99*6777b538SAndroid Build Coastguard Worker 100*6777b538SAndroid Build Coastguard Worker export LD_LIBRARY_PATH=/usr/local/lib 101*6777b538SAndroid Build Coastguard Worker 102*6777b538SAndroid Build Coastguard Worker # Try to install Java 103*6777b538SAndroid Build Coastguard Worker pushd java 104*6777b538SAndroid Build Coastguard Worker use_java jdk11 105*6777b538SAndroid Build Coastguard Worker $MVN install 106*6777b538SAndroid Build Coastguard Worker popd 107*6777b538SAndroid Build Coastguard Worker 108*6777b538SAndroid Build Coastguard Worker # Try to install Python 109*6777b538SAndroid Build Coastguard Worker python3 -m venv venv 110*6777b538SAndroid Build Coastguard Worker source venv/bin/activate 111*6777b538SAndroid Build Coastguard Worker pushd python 112*6777b538SAndroid Build Coastguard Worker python3 setup.py clean build sdist 113*6777b538SAndroid Build Coastguard Worker pip3 install dist/protobuf-*.tar.gz 114*6777b538SAndroid Build Coastguard Worker popd 115*6777b538SAndroid Build Coastguard Worker deactivate 116*6777b538SAndroid Build Coastguard Worker rm -rf python/venv 117*6777b538SAndroid Build Coastguard Worker} 118*6777b538SAndroid Build Coastguard Worker 119*6777b538SAndroid Build Coastguard Workerbuild_csharp() { 120*6777b538SAndroid Build Coastguard Worker # Required for conformance tests and to regenerate protos. 121*6777b538SAndroid Build Coastguard Worker internal_build_cpp 122*6777b538SAndroid Build Coastguard Worker NUGET=/usr/local/bin/nuget.exe 123*6777b538SAndroid Build Coastguard Worker 124*6777b538SAndroid Build Coastguard Worker # Disable some unwanted dotnet options 125*6777b538SAndroid Build Coastguard Worker export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true 126*6777b538SAndroid Build Coastguard Worker export DOTNET_CLI_TELEMETRY_OPTOUT=true 127*6777b538SAndroid Build Coastguard Worker 128*6777b538SAndroid Build Coastguard Worker # TODO(jtattermusch): is this still needed with "first time experience" 129*6777b538SAndroid Build Coastguard Worker # disabled? 130*6777b538SAndroid Build Coastguard Worker # Perform "dotnet new" once to get the setup preprocessing out of the 131*6777b538SAndroid Build Coastguard Worker # way. That spews a lot of output (including backspaces) into logs 132*6777b538SAndroid Build Coastguard Worker # otherwise, and can cause problems. It doesn't matter if this step 133*6777b538SAndroid Build Coastguard Worker # is performed multiple times; it's cheap after the first time anyway. 134*6777b538SAndroid Build Coastguard Worker # (It also doesn't matter if it's unnecessary, which it will be on some 135*6777b538SAndroid Build Coastguard Worker # systems. It's necessary on Jenkins in order to avoid unprintable 136*6777b538SAndroid Build Coastguard Worker # characters appearing in the JUnit output.) 137*6777b538SAndroid Build Coastguard Worker mkdir dotnettmp 138*6777b538SAndroid Build Coastguard Worker (cd dotnettmp; dotnet new > /dev/null) 139*6777b538SAndroid Build Coastguard Worker rm -rf dotnettmp 140*6777b538SAndroid Build Coastguard Worker 141*6777b538SAndroid Build Coastguard Worker # Check that the protos haven't broken C# codegen. 142*6777b538SAndroid Build Coastguard Worker # TODO(jonskeet): Fail if regenerating creates any changes. 143*6777b538SAndroid Build Coastguard Worker csharp/generate_protos.sh 144*6777b538SAndroid Build Coastguard Worker 145*6777b538SAndroid Build Coastguard Worker csharp/buildall.sh 146*6777b538SAndroid Build Coastguard Worker cd conformance && make test_csharp && cd .. 147*6777b538SAndroid Build Coastguard Worker 148*6777b538SAndroid Build Coastguard Worker # Run csharp compatibility test between 3.0.0 and the current version. 149*6777b538SAndroid Build Coastguard Worker csharp/compatibility_tests/v3.0.0/test.sh 3.0.0 150*6777b538SAndroid Build Coastguard Worker 151*6777b538SAndroid Build Coastguard Worker # Regression test for https://github.com/protocolbuffers/protobuf/issues/9526 152*6777b538SAndroid Build Coastguard Worker # - all line endings in .proto and .cs (and .csproj) files should be LF. 153*6777b538SAndroid Build Coastguard Worker if git ls-files --eol csharp | grep -E '\.cs|\.proto' | grep -v w/lf 154*6777b538SAndroid Build Coastguard Worker then 155*6777b538SAndroid Build Coastguard Worker echo "The files listed above have mixed or CRLF line endings; please change to LF." 156*6777b538SAndroid Build Coastguard Worker exit 1 157*6777b538SAndroid Build Coastguard Worker fi 158*6777b538SAndroid Build Coastguard Worker} 159*6777b538SAndroid Build Coastguard Worker 160*6777b538SAndroid Build Coastguard Workerbuild_golang() { 161*6777b538SAndroid Build Coastguard Worker # Go build needs `protoc`. 162*6777b538SAndroid Build Coastguard Worker internal_build_cpp 163*6777b538SAndroid Build Coastguard Worker # Add protoc to the path so that the examples build finds it. 164*6777b538SAndroid Build Coastguard Worker export PATH="`pwd`/src:$PATH" 165*6777b538SAndroid Build Coastguard Worker 166*6777b538SAndroid Build Coastguard Worker export GOPATH="$HOME/gocode" 167*6777b538SAndroid Build Coastguard Worker mkdir -p "$GOPATH/src/github.com/protocolbuffers" 168*6777b538SAndroid Build Coastguard Worker mkdir -p "$GOPATH/src/github.com/golang" 169*6777b538SAndroid Build Coastguard Worker rm -f "$GOPATH/src/github.com/protocolbuffers/protobuf" 170*6777b538SAndroid Build Coastguard Worker rm -f "$GOPATH/src/github.com/golang/protobuf" 171*6777b538SAndroid Build Coastguard Worker ln -s "`pwd`" "$GOPATH/src/github.com/protocolbuffers/protobuf" 172*6777b538SAndroid Build Coastguard Worker export PATH="$GOPATH/bin:$PATH" 173*6777b538SAndroid Build Coastguard Worker (cd $GOPATH/src/github.com/golang && git clone https://github.com/golang/protobuf.git && cd protobuf && git checkout v1.3.5) 174*6777b538SAndroid Build Coastguard Worker go install github.com/golang/protobuf/protoc-gen-go 175*6777b538SAndroid Build Coastguard Worker 176*6777b538SAndroid Build Coastguard Worker cd examples && PROTO_PATH="-I../src -I." make gotest && cd .. 177*6777b538SAndroid Build Coastguard Worker} 178*6777b538SAndroid Build Coastguard Worker 179*6777b538SAndroid Build Coastguard Workeruse_java() { 180*6777b538SAndroid Build Coastguard Worker version=$1 181*6777b538SAndroid Build Coastguard Worker case "$version" in 182*6777b538SAndroid Build Coastguard Worker jdk17) 183*6777b538SAndroid Build Coastguard Worker export PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH 184*6777b538SAndroid Build Coastguard Worker export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 185*6777b538SAndroid Build Coastguard Worker ;; 186*6777b538SAndroid Build Coastguard Worker jdk11) 187*6777b538SAndroid Build Coastguard Worker export PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin:$PATH 188*6777b538SAndroid Build Coastguard Worker export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 189*6777b538SAndroid Build Coastguard Worker ;; 190*6777b538SAndroid Build Coastguard Worker jdk8) 191*6777b538SAndroid Build Coastguard Worker export PATH=/usr/lib/jvm/java-8-openjdk-amd64/bin:$PATH 192*6777b538SAndroid Build Coastguard Worker export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 193*6777b538SAndroid Build Coastguard Worker ;; 194*6777b538SAndroid Build Coastguard Worker jdk7) 195*6777b538SAndroid Build Coastguard Worker export PATH=/usr/lib/jvm/java-7-openjdk-amd64/bin:$PATH 196*6777b538SAndroid Build Coastguard Worker export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 197*6777b538SAndroid Build Coastguard Worker ;; 198*6777b538SAndroid Build Coastguard Worker oracle7) 199*6777b538SAndroid Build Coastguard Worker export PATH=/usr/lib/jvm/java-7-oracle/bin:$PATH 200*6777b538SAndroid Build Coastguard Worker export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 201*6777b538SAndroid Build Coastguard Worker ;; 202*6777b538SAndroid Build Coastguard Worker esac 203*6777b538SAndroid Build Coastguard Worker 204*6777b538SAndroid Build Coastguard Worker MAVEN_LOCAL_REPOSITORY=/var/maven_local_repository 205*6777b538SAndroid Build Coastguard Worker MVN="$MVN -e --quiet -Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$MAVEN_LOCAL_REPOSITORY" 206*6777b538SAndroid Build Coastguard Worker 207*6777b538SAndroid Build Coastguard Worker which java 208*6777b538SAndroid Build Coastguard Worker java -version 209*6777b538SAndroid Build Coastguard Worker $MVN -version 210*6777b538SAndroid Build Coastguard Worker} 211*6777b538SAndroid Build Coastguard Worker 212*6777b538SAndroid Build Coastguard Worker# --batch-mode suppresses download progress output that spams the logs. 213*6777b538SAndroid Build Coastguard WorkerMVN="mvn --batch-mode" 214*6777b538SAndroid Build Coastguard Worker 215*6777b538SAndroid Build Coastguard Workerinternal_build_java() { 216*6777b538SAndroid Build Coastguard Worker version=$1 217*6777b538SAndroid Build Coastguard Worker dir=java_$version 218*6777b538SAndroid Build Coastguard Worker # Java build needs `protoc`. 219*6777b538SAndroid Build Coastguard Worker internal_build_cpp 220*6777b538SAndroid Build Coastguard Worker cp -r java $dir 221*6777b538SAndroid Build Coastguard Worker cd $dir && $MVN clean 222*6777b538SAndroid Build Coastguard Worker # Skip tests here - callers will decide what tests they want to run 223*6777b538SAndroid Build Coastguard Worker $MVN install -Dmaven.test.skip=true 224*6777b538SAndroid Build Coastguard Worker} 225*6777b538SAndroid Build Coastguard Worker 226*6777b538SAndroid Build Coastguard Workerbuild_java() { 227*6777b538SAndroid Build Coastguard Worker version=$1 228*6777b538SAndroid Build Coastguard Worker internal_build_java $version 229*6777b538SAndroid Build Coastguard Worker # Skip the Kotlin tests on Oracle 7 230*6777b538SAndroid Build Coastguard Worker if [ "$version" == "oracle7" ]; then 231*6777b538SAndroid Build Coastguard Worker $MVN test -pl bom,lite,core,util 232*6777b538SAndroid Build Coastguard Worker else 233*6777b538SAndroid Build Coastguard Worker $MVN test 234*6777b538SAndroid Build Coastguard Worker fi 235*6777b538SAndroid Build Coastguard Worker cd ../.. 236*6777b538SAndroid Build Coastguard Worker} 237*6777b538SAndroid Build Coastguard Worker 238*6777b538SAndroid Build Coastguard Worker# The conformance tests are hard-coded to work with the $ROOT/java directory. 239*6777b538SAndroid Build Coastguard Worker# So this can't run in parallel with two different sets of tests. 240*6777b538SAndroid Build Coastguard Workerbuild_java_with_conformance_tests() { 241*6777b538SAndroid Build Coastguard Worker # Java build needs `protoc`. 242*6777b538SAndroid Build Coastguard Worker internal_build_cpp 243*6777b538SAndroid Build Coastguard Worker # This local installation avoids the problem caused by a new version not yet in Maven Central 244*6777b538SAndroid Build Coastguard Worker cd java/bom && $MVN install 245*6777b538SAndroid Build Coastguard Worker cd ../.. 246*6777b538SAndroid Build Coastguard Worker cd java/core && $MVN test && $MVN install 247*6777b538SAndroid Build Coastguard Worker cd ../lite && $MVN test && $MVN install 248*6777b538SAndroid Build Coastguard Worker cd ../util && $MVN test && $MVN install && $MVN package assembly:single 249*6777b538SAndroid Build Coastguard Worker if [ "$version" == "jdk8" ]; then 250*6777b538SAndroid Build Coastguard Worker cd ../kotlin && $MVN test && $MVN install 251*6777b538SAndroid Build Coastguard Worker cd ../kotlin-lite && $MVN test && $MVN install 252*6777b538SAndroid Build Coastguard Worker fi 253*6777b538SAndroid Build Coastguard Worker cd ../.. 254*6777b538SAndroid Build Coastguard Worker cd conformance && make test_java && cd .. 255*6777b538SAndroid Build Coastguard Worker} 256*6777b538SAndroid Build Coastguard Worker 257*6777b538SAndroid Build Coastguard Workerbuild_java_jdk7() { 258*6777b538SAndroid Build Coastguard Worker use_java jdk7 259*6777b538SAndroid Build Coastguard Worker build_java_with_conformance_tests 260*6777b538SAndroid Build Coastguard Worker} 261*6777b538SAndroid Build Coastguard Worker 262*6777b538SAndroid Build Coastguard Workerbuild_java_oracle7() { 263*6777b538SAndroid Build Coastguard Worker use_java oracle7 264*6777b538SAndroid Build Coastguard Worker build_java oracle7 265*6777b538SAndroid Build Coastguard Worker} 266*6777b538SAndroid Build Coastguard Worker 267*6777b538SAndroid Build Coastguard Workerbuild_java_jdk8() { 268*6777b538SAndroid Build Coastguard Worker use_java jdk8 269*6777b538SAndroid Build Coastguard Worker build_java_with_conformance_tests 270*6777b538SAndroid Build Coastguard Worker} 271*6777b538SAndroid Build Coastguard Worker 272*6777b538SAndroid Build Coastguard Workerbuild_java_jdk11() { 273*6777b538SAndroid Build Coastguard Worker use_java jdk11 274*6777b538SAndroid Build Coastguard Worker build_java 275*6777b538SAndroid Build Coastguard Worker} 276*6777b538SAndroid Build Coastguard Worker 277*6777b538SAndroid Build Coastguard Workerbuild_java_jdk17() { 278*6777b538SAndroid Build Coastguard Worker use_java jdk17 279*6777b538SAndroid Build Coastguard Worker build_java 280*6777b538SAndroid Build Coastguard Worker} 281*6777b538SAndroid Build Coastguard Worker 282*6777b538SAndroid Build Coastguard Workerbuild_java_linkage_monitor() { 283*6777b538SAndroid Build Coastguard Worker # Linkage Monitor checks compatibility with other Google libraries 284*6777b538SAndroid Build Coastguard Worker # https://github.com/GoogleCloudPlatform/cloud-opensource-java/tree/master/linkage-monitor 285*6777b538SAndroid Build Coastguard Worker 286*6777b538SAndroid Build Coastguard Worker use_java jdk11 287*6777b538SAndroid Build Coastguard Worker internal_build_cpp 288*6777b538SAndroid Build Coastguard Worker 289*6777b538SAndroid Build Coastguard Worker # Linkage Monitor uses $HOME/.m2 local repository 290*6777b538SAndroid Build Coastguard Worker MVN="mvn -e -B -Dhttps.protocols=TLSv1.2" 291*6777b538SAndroid Build Coastguard Worker cd java 292*6777b538SAndroid Build Coastguard Worker # Installs the snapshot version locally 293*6777b538SAndroid Build Coastguard Worker $MVN install -Dmaven.test.skip=true 294*6777b538SAndroid Build Coastguard Worker 295*6777b538SAndroid Build Coastguard Worker # Linkage Monitor uses the snapshot versions installed in $HOME/.m2 to verify compatibility 296*6777b538SAndroid Build Coastguard Worker JAR=linkage-monitor-latest-all-deps.jar 297*6777b538SAndroid Build Coastguard Worker curl -v -O "https://storage.googleapis.com/cloud-opensource-java-linkage-monitor/${JAR}" 298*6777b538SAndroid Build Coastguard Worker # Fails if there's new linkage errors compared with baseline 299*6777b538SAndroid Build Coastguard Worker java -jar $JAR com.google.cloud:libraries-bom 300*6777b538SAndroid Build Coastguard Worker} 301*6777b538SAndroid Build Coastguard Worker 302*6777b538SAndroid Build Coastguard Workerbuild_objectivec_ios() { 303*6777b538SAndroid Build Coastguard Worker # Reused the build script that takes care of configuring and ensuring things 304*6777b538SAndroid Build Coastguard Worker # are up to date. The OS X test runs the objc conformance test, so skip it 305*6777b538SAndroid Build Coastguard Worker # here. 306*6777b538SAndroid Build Coastguard Worker objectivec/DevTools/full_mac_build.sh \ 307*6777b538SAndroid Build Coastguard Worker --core-only --skip-xcode-osx --skip-xcode-tvos --skip-objc-conformance "$@" 308*6777b538SAndroid Build Coastguard Worker} 309*6777b538SAndroid Build Coastguard Worker 310*6777b538SAndroid Build Coastguard Workerbuild_objectivec_ios_debug() { 311*6777b538SAndroid Build Coastguard Worker build_objectivec_ios --skip-xcode-release 312*6777b538SAndroid Build Coastguard Worker} 313*6777b538SAndroid Build Coastguard Worker 314*6777b538SAndroid Build Coastguard Workerbuild_objectivec_ios_release() { 315*6777b538SAndroid Build Coastguard Worker build_objectivec_ios --skip-xcode-debug 316*6777b538SAndroid Build Coastguard Worker} 317*6777b538SAndroid Build Coastguard Worker 318*6777b538SAndroid Build Coastguard Workerbuild_objectivec_osx() { 319*6777b538SAndroid Build Coastguard Worker # Reused the build script that takes care of configuring and ensuring things 320*6777b538SAndroid Build Coastguard Worker # are up to date. 321*6777b538SAndroid Build Coastguard Worker objectivec/DevTools/full_mac_build.sh \ 322*6777b538SAndroid Build Coastguard Worker --core-only --skip-xcode-ios --skip-xcode-tvos 323*6777b538SAndroid Build Coastguard Worker} 324*6777b538SAndroid Build Coastguard Worker 325*6777b538SAndroid Build Coastguard Workerbuild_objectivec_tvos() { 326*6777b538SAndroid Build Coastguard Worker # Reused the build script that takes care of configuring and ensuring things 327*6777b538SAndroid Build Coastguard Worker # are up to date. The OS X test runs the objc conformance test, so skip it 328*6777b538SAndroid Build Coastguard Worker # here. 329*6777b538SAndroid Build Coastguard Worker objectivec/DevTools/full_mac_build.sh \ 330*6777b538SAndroid Build Coastguard Worker --core-only --skip-xcode-ios --skip-xcode-osx --skip-objc-conformance "$@" 331*6777b538SAndroid Build Coastguard Worker} 332*6777b538SAndroid Build Coastguard Worker 333*6777b538SAndroid Build Coastguard Workerbuild_objectivec_tvos_debug() { 334*6777b538SAndroid Build Coastguard Worker build_objectivec_tvos --skip-xcode-release 335*6777b538SAndroid Build Coastguard Worker} 336*6777b538SAndroid Build Coastguard Worker 337*6777b538SAndroid Build Coastguard Workerbuild_objectivec_tvos_release() { 338*6777b538SAndroid Build Coastguard Worker build_objectivec_tvos --skip-xcode-debug 339*6777b538SAndroid Build Coastguard Worker} 340*6777b538SAndroid Build Coastguard Worker 341*6777b538SAndroid Build Coastguard Workerbuild_python() { 342*6777b538SAndroid Build Coastguard Worker internal_build_cpp 343*6777b538SAndroid Build Coastguard Worker cd python 344*6777b538SAndroid Build Coastguard Worker tox --skip-missing-interpreters 345*6777b538SAndroid Build Coastguard Worker cd .. 346*6777b538SAndroid Build Coastguard Worker} 347*6777b538SAndroid Build Coastguard Worker 348*6777b538SAndroid Build Coastguard Workerbuild_python_version() { 349*6777b538SAndroid Build Coastguard Worker internal_build_cpp 350*6777b538SAndroid Build Coastguard Worker cd python 351*6777b538SAndroid Build Coastguard Worker envlist=$1 352*6777b538SAndroid Build Coastguard Worker tox -e $envlist 353*6777b538SAndroid Build Coastguard Worker cd .. 354*6777b538SAndroid Build Coastguard Worker} 355*6777b538SAndroid Build Coastguard Worker 356*6777b538SAndroid Build Coastguard Workerbuild_python37() { 357*6777b538SAndroid Build Coastguard Worker build_python_version py37-python 358*6777b538SAndroid Build Coastguard Worker} 359*6777b538SAndroid Build Coastguard Worker 360*6777b538SAndroid Build Coastguard Workerbuild_python38() { 361*6777b538SAndroid Build Coastguard Worker build_python_version py38-python 362*6777b538SAndroid Build Coastguard Worker} 363*6777b538SAndroid Build Coastguard Worker 364*6777b538SAndroid Build Coastguard Workerbuild_python39() { 365*6777b538SAndroid Build Coastguard Worker build_python_version py39-python 366*6777b538SAndroid Build Coastguard Worker} 367*6777b538SAndroid Build Coastguard Worker 368*6777b538SAndroid Build Coastguard Workerbuild_python310() { 369*6777b538SAndroid Build Coastguard Worker build_python_version py310-python 370*6777b538SAndroid Build Coastguard Worker} 371*6777b538SAndroid Build Coastguard Worker 372*6777b538SAndroid Build Coastguard Workerbuild_python_cpp() { 373*6777b538SAndroid Build Coastguard Worker internal_build_cpp 374*6777b538SAndroid Build Coastguard Worker export LD_LIBRARY_PATH=../src/.libs # for Linux 375*6777b538SAndroid Build Coastguard Worker export DYLD_LIBRARY_PATH=../src/.libs # for OS X 376*6777b538SAndroid Build Coastguard Worker cd python 377*6777b538SAndroid Build Coastguard Worker tox --skip-missing-interpreters 378*6777b538SAndroid Build Coastguard Worker cd .. 379*6777b538SAndroid Build Coastguard Worker} 380*6777b538SAndroid Build Coastguard Worker 381*6777b538SAndroid Build Coastguard Workerbuild_python_cpp_version() { 382*6777b538SAndroid Build Coastguard Worker internal_build_cpp 383*6777b538SAndroid Build Coastguard Worker export LD_LIBRARY_PATH=../src/.libs # for Linux 384*6777b538SAndroid Build Coastguard Worker export DYLD_LIBRARY_PATH=../src/.libs # for OS X 385*6777b538SAndroid Build Coastguard Worker cd python 386*6777b538SAndroid Build Coastguard Worker envlist=$1 387*6777b538SAndroid Build Coastguard Worker tox -e $envlist 388*6777b538SAndroid Build Coastguard Worker cd .. 389*6777b538SAndroid Build Coastguard Worker} 390*6777b538SAndroid Build Coastguard Worker 391*6777b538SAndroid Build Coastguard Workerbuild_python37_cpp() { 392*6777b538SAndroid Build Coastguard Worker build_python_cpp_version py37-cpp 393*6777b538SAndroid Build Coastguard Worker} 394*6777b538SAndroid Build Coastguard Worker 395*6777b538SAndroid Build Coastguard Workerbuild_python38_cpp() { 396*6777b538SAndroid Build Coastguard Worker build_python_cpp_version py38-cpp 397*6777b538SAndroid Build Coastguard Worker} 398*6777b538SAndroid Build Coastguard Worker 399*6777b538SAndroid Build Coastguard Workerbuild_python39_cpp() { 400*6777b538SAndroid Build Coastguard Worker build_python_cpp_version py39-cpp 401*6777b538SAndroid Build Coastguard Worker} 402*6777b538SAndroid Build Coastguard Worker 403*6777b538SAndroid Build Coastguard Workerbuild_python310_cpp() { 404*6777b538SAndroid Build Coastguard Worker build_python_cpp_version py310-cpp 405*6777b538SAndroid Build Coastguard Worker} 406*6777b538SAndroid Build Coastguard Worker 407*6777b538SAndroid Build Coastguard Workerbuild_ruby23() { 408*6777b538SAndroid Build Coastguard Worker internal_build_cpp # For conformance tests. 409*6777b538SAndroid Build Coastguard Worker cd ruby && bash travis-test.sh ruby-2.3.8 && cd .. 410*6777b538SAndroid Build Coastguard Worker} 411*6777b538SAndroid Build Coastguard Workerbuild_ruby24() { 412*6777b538SAndroid Build Coastguard Worker internal_build_cpp # For conformance tests. 413*6777b538SAndroid Build Coastguard Worker cd ruby && bash travis-test.sh ruby-2.4 && cd .. 414*6777b538SAndroid Build Coastguard Worker} 415*6777b538SAndroid Build Coastguard Workerbuild_ruby25() { 416*6777b538SAndroid Build Coastguard Worker internal_build_cpp # For conformance tests. 417*6777b538SAndroid Build Coastguard Worker cd ruby && bash travis-test.sh ruby-2.5.1 && cd .. 418*6777b538SAndroid Build Coastguard Worker} 419*6777b538SAndroid Build Coastguard Workerbuild_ruby26() { 420*6777b538SAndroid Build Coastguard Worker internal_build_cpp # For conformance tests. 421*6777b538SAndroid Build Coastguard Worker cd ruby && bash travis-test.sh ruby-2.6.0 && cd .. 422*6777b538SAndroid Build Coastguard Worker} 423*6777b538SAndroid Build Coastguard Workerbuild_ruby27() { 424*6777b538SAndroid Build Coastguard Worker internal_build_cpp # For conformance tests. 425*6777b538SAndroid Build Coastguard Worker cd ruby && bash travis-test.sh ruby-2.7.0 && cd .. 426*6777b538SAndroid Build Coastguard Worker} 427*6777b538SAndroid Build Coastguard Workerbuild_ruby30() { 428*6777b538SAndroid Build Coastguard Worker internal_build_cpp # For conformance tests. 429*6777b538SAndroid Build Coastguard Worker cd ruby && bash travis-test.sh ruby-3.0.2 && cd .. 430*6777b538SAndroid Build Coastguard Worker} 431*6777b538SAndroid Build Coastguard Workerbuild_ruby31() { 432*6777b538SAndroid Build Coastguard Worker internal_build_cpp # For conformance tests. 433*6777b538SAndroid Build Coastguard Worker cd ruby && bash travis-test.sh ruby-3.1.0 && cd .. 434*6777b538SAndroid Build Coastguard Worker} 435*6777b538SAndroid Build Coastguard Worker 436*6777b538SAndroid Build Coastguard Workerbuild_jruby92() { 437*6777b538SAndroid Build Coastguard Worker internal_build_cpp # For conformance tests. 438*6777b538SAndroid Build Coastguard Worker internal_build_java jdk8 && cd .. # For Maven protobuf jar with local changes 439*6777b538SAndroid Build Coastguard Worker cd ruby && bash travis-test.sh jruby-9.2.20.1 && cd .. 440*6777b538SAndroid Build Coastguard Worker} 441*6777b538SAndroid Build Coastguard Worker 442*6777b538SAndroid Build Coastguard Workerbuild_jruby93() { 443*6777b538SAndroid Build Coastguard Worker internal_build_cpp # For conformance tests. 444*6777b538SAndroid Build Coastguard Worker internal_build_java jdk8 && cd .. # For Maven protobuf jar with local changes 445*6777b538SAndroid Build Coastguard Worker cd ruby && bash travis-test.sh jruby-9.3.4.0 && cd .. 446*6777b538SAndroid Build Coastguard Worker} 447*6777b538SAndroid Build Coastguard Worker 448*6777b538SAndroid Build Coastguard Workeruse_php() { 449*6777b538SAndroid Build Coastguard Worker VERSION=$1 450*6777b538SAndroid Build Coastguard Worker export PATH=/usr/local/php-${VERSION}/bin:$PATH 451*6777b538SAndroid Build Coastguard Worker internal_build_cpp 452*6777b538SAndroid Build Coastguard Worker} 453*6777b538SAndroid Build Coastguard Worker 454*6777b538SAndroid Build Coastguard Workerbuild_php() { 455*6777b538SAndroid Build Coastguard Worker use_php $1 456*6777b538SAndroid Build Coastguard Worker pushd php 457*6777b538SAndroid Build Coastguard Worker rm -rf vendor 458*6777b538SAndroid Build Coastguard Worker php -v 459*6777b538SAndroid Build Coastguard Worker php -m 460*6777b538SAndroid Build Coastguard Worker composer update 461*6777b538SAndroid Build Coastguard Worker composer test 462*6777b538SAndroid Build Coastguard Worker popd 463*6777b538SAndroid Build Coastguard Worker (cd conformance && make test_php) 464*6777b538SAndroid Build Coastguard Worker} 465*6777b538SAndroid Build Coastguard Worker 466*6777b538SAndroid Build Coastguard Workertest_php_c() { 467*6777b538SAndroid Build Coastguard Worker pushd php 468*6777b538SAndroid Build Coastguard Worker rm -rf vendor 469*6777b538SAndroid Build Coastguard Worker php -v 470*6777b538SAndroid Build Coastguard Worker php -m 471*6777b538SAndroid Build Coastguard Worker composer update 472*6777b538SAndroid Build Coastguard Worker composer test_c 473*6777b538SAndroid Build Coastguard Worker popd 474*6777b538SAndroid Build Coastguard Worker (cd conformance && make test_php_c) 475*6777b538SAndroid Build Coastguard Worker} 476*6777b538SAndroid Build Coastguard Worker 477*6777b538SAndroid Build Coastguard Workerbuild_php_c() { 478*6777b538SAndroid Build Coastguard Worker use_php $1 479*6777b538SAndroid Build Coastguard Worker test_php_c 480*6777b538SAndroid Build Coastguard Worker} 481*6777b538SAndroid Build Coastguard Worker 482*6777b538SAndroid Build Coastguard Workerbuild_php7.0_mac() { 483*6777b538SAndroid Build Coastguard Worker internal_build_cpp 484*6777b538SAndroid Build Coastguard Worker # Install PHP 485*6777b538SAndroid Build Coastguard Worker curl -s https://php-osx.liip.ch/install.sh | bash -s 7.0 486*6777b538SAndroid Build Coastguard Worker PHP_FOLDER=`find /usr/local -type d -name "php5-7.0*"` # The folder name may change upon time 487*6777b538SAndroid Build Coastguard Worker test ! -z "$PHP_FOLDER" 488*6777b538SAndroid Build Coastguard Worker export PATH="$PHP_FOLDER/bin:$PATH" 489*6777b538SAndroid Build Coastguard Worker 490*6777b538SAndroid Build Coastguard Worker # Install Composer 491*6777b538SAndroid Build Coastguard Worker wget https://getcomposer.org/download/2.0.13/composer.phar --progress=dot:mega -O /usr/local/bin/composer 492*6777b538SAndroid Build Coastguard Worker chmod a+x /usr/local/bin/composer 493*6777b538SAndroid Build Coastguard Worker 494*6777b538SAndroid Build Coastguard Worker # Install valgrind 495*6777b538SAndroid Build Coastguard Worker echo "#! /bin/bash" > valgrind 496*6777b538SAndroid Build Coastguard Worker chmod ug+x valgrind 497*6777b538SAndroid Build Coastguard Worker sudo mv valgrind /usr/local/bin/valgrind 498*6777b538SAndroid Build Coastguard Worker 499*6777b538SAndroid Build Coastguard Worker # Test 500*6777b538SAndroid Build Coastguard Worker test_php_c 501*6777b538SAndroid Build Coastguard Worker} 502*6777b538SAndroid Build Coastguard Worker 503*6777b538SAndroid Build Coastguard Workerbuild_php7.3_mac() { 504*6777b538SAndroid Build Coastguard Worker internal_build_cpp 505*6777b538SAndroid Build Coastguard Worker # Install PHP 506*6777b538SAndroid Build Coastguard Worker # We can't test PHP 7.4 with these binaries yet: 507*6777b538SAndroid Build Coastguard Worker # https://github.com/liip/php-osx/issues/276 508*6777b538SAndroid Build Coastguard Worker curl -s https://php-osx.liip.ch/install.sh | bash -s 7.3 509*6777b538SAndroid Build Coastguard Worker PHP_FOLDER=`find /usr/local -type d -name "php5-7.3*"` # The folder name may change upon time 510*6777b538SAndroid Build Coastguard Worker test ! -z "$PHP_FOLDER" 511*6777b538SAndroid Build Coastguard Worker export PATH="$PHP_FOLDER/bin:$PATH" 512*6777b538SAndroid Build Coastguard Worker 513*6777b538SAndroid Build Coastguard Worker # Install Composer 514*6777b538SAndroid Build Coastguard Worker wget https://getcomposer.org/download/2.0.13/composer.phar --progress=dot:mega -O /usr/local/bin/composer 515*6777b538SAndroid Build Coastguard Worker chmod a+x /usr/local/bin/composer 516*6777b538SAndroid Build Coastguard Worker 517*6777b538SAndroid Build Coastguard Worker # Install valgrind 518*6777b538SAndroid Build Coastguard Worker echo "#! /bin/bash" > valgrind 519*6777b538SAndroid Build Coastguard Worker chmod ug+x valgrind 520*6777b538SAndroid Build Coastguard Worker sudo mv valgrind /usr/local/bin/valgrind 521*6777b538SAndroid Build Coastguard Worker 522*6777b538SAndroid Build Coastguard Worker # Test 523*6777b538SAndroid Build Coastguard Worker test_php_c 524*6777b538SAndroid Build Coastguard Worker} 525*6777b538SAndroid Build Coastguard Worker 526*6777b538SAndroid Build Coastguard Workerbuild_php_compatibility() { 527*6777b538SAndroid Build Coastguard Worker internal_build_cpp 528*6777b538SAndroid Build Coastguard Worker} 529*6777b538SAndroid Build Coastguard Worker 530*6777b538SAndroid Build Coastguard Workerbuild_php_multirequest() { 531*6777b538SAndroid Build Coastguard Worker use_php 7.4 532*6777b538SAndroid Build Coastguard Worker php/tests/multirequest.sh 533*6777b538SAndroid Build Coastguard Worker} 534*6777b538SAndroid Build Coastguard Worker 535*6777b538SAndroid Build Coastguard Workerbuild_php8.0_all() { 536*6777b538SAndroid Build Coastguard Worker build_php 8.0 537*6777b538SAndroid Build Coastguard Worker build_php 8.1 538*6777b538SAndroid Build Coastguard Worker build_php_c 8.0 539*6777b538SAndroid Build Coastguard Worker build_php_c 8.1 540*6777b538SAndroid Build Coastguard Worker} 541*6777b538SAndroid Build Coastguard Worker 542*6777b538SAndroid Build Coastguard Workerbuild_php_all_32() { 543*6777b538SAndroid Build Coastguard Worker build_php 7.0 544*6777b538SAndroid Build Coastguard Worker build_php 7.1 545*6777b538SAndroid Build Coastguard Worker build_php 7.4 546*6777b538SAndroid Build Coastguard Worker build_php_c 7.0 547*6777b538SAndroid Build Coastguard Worker build_php_c 7.1 548*6777b538SAndroid Build Coastguard Worker build_php_c 7.4 549*6777b538SAndroid Build Coastguard Worker build_php_c 7.1-zts 550*6777b538SAndroid Build Coastguard Worker build_php_c 7.2-zts 551*6777b538SAndroid Build Coastguard Worker build_php_c 7.5-zts 552*6777b538SAndroid Build Coastguard Worker} 553*6777b538SAndroid Build Coastguard Worker 554*6777b538SAndroid Build Coastguard Workerbuild_php_all() { 555*6777b538SAndroid Build Coastguard Worker build_php_all_32 556*6777b538SAndroid Build Coastguard Worker build_php_multirequest 557*6777b538SAndroid Build Coastguard Worker build_php_compatibility 558*6777b538SAndroid Build Coastguard Worker} 559*6777b538SAndroid Build Coastguard Worker 560*6777b538SAndroid Build Coastguard Workerbuild_benchmark() { 561*6777b538SAndroid Build Coastguard Worker use_php 7.2 562*6777b538SAndroid Build Coastguard Worker cd kokoro/linux/benchmark && ./run.sh 563*6777b538SAndroid Build Coastguard Worker} 564*6777b538SAndroid Build Coastguard Worker 565*6777b538SAndroid Build Coastguard Worker# -------- main -------- 566*6777b538SAndroid Build Coastguard Worker 567*6777b538SAndroid Build Coastguard Workerif [ "$#" -ne 1 ]; then 568*6777b538SAndroid Build Coastguard Worker echo " 569*6777b538SAndroid Build Coastguard WorkerUsage: $0 { cpp | 570*6777b538SAndroid Build Coastguard Worker cpp_distcheck | 571*6777b538SAndroid Build Coastguard Worker csharp | 572*6777b538SAndroid Build Coastguard Worker java_jdk7 | 573*6777b538SAndroid Build Coastguard Worker java_oracle7 | 574*6777b538SAndroid Build Coastguard Worker java_jdk8 | 575*6777b538SAndroid Build Coastguard Worker java_jdk11 | 576*6777b538SAndroid Build Coastguard Worker java_jdk17 | 577*6777b538SAndroid Build Coastguard Worker java_linkage_monitor | 578*6777b538SAndroid Build Coastguard Worker objectivec_ios | 579*6777b538SAndroid Build Coastguard Worker objectivec_ios_debug | 580*6777b538SAndroid Build Coastguard Worker objectivec_ios_release | 581*6777b538SAndroid Build Coastguard Worker objectivec_osx | 582*6777b538SAndroid Build Coastguard Worker objectivec_tvos | 583*6777b538SAndroid Build Coastguard Worker objectivec_tvos_debug | 584*6777b538SAndroid Build Coastguard Worker objectivec_tvos_release | 585*6777b538SAndroid Build Coastguard Worker python | 586*6777b538SAndroid Build Coastguard Worker python_cpp | 587*6777b538SAndroid Build Coastguard Worker python_compatibility | 588*6777b538SAndroid Build Coastguard Worker ruby23 | 589*6777b538SAndroid Build Coastguard Worker ruby24 | 590*6777b538SAndroid Build Coastguard Worker ruby25 | 591*6777b538SAndroid Build Coastguard Worker ruby26 | 592*6777b538SAndroid Build Coastguard Worker ruby27 | 593*6777b538SAndroid Build Coastguard Worker ruby30 | 594*6777b538SAndroid Build Coastguard Worker ruby31 | 595*6777b538SAndroid Build Coastguard Worker jruby92 | 596*6777b538SAndroid Build Coastguard Worker jruby93 | 597*6777b538SAndroid Build Coastguard Worker ruby_all | 598*6777b538SAndroid Build Coastguard Worker php_all | 599*6777b538SAndroid Build Coastguard Worker php_all_32 | 600*6777b538SAndroid Build Coastguard Worker php7.0_mac | 601*6777b538SAndroid Build Coastguard Worker php7.3_mac | 602*6777b538SAndroid Build Coastguard Worker dist_install | 603*6777b538SAndroid Build Coastguard Worker benchmark } 604*6777b538SAndroid Build Coastguard Worker" 605*6777b538SAndroid Build Coastguard Worker exit 1 606*6777b538SAndroid Build Coastguard Workerfi 607*6777b538SAndroid Build Coastguard Worker 608*6777b538SAndroid Build Coastguard Workerset -e # exit immediately on error 609*6777b538SAndroid Build Coastguard Workerset -x # display all commands 610*6777b538SAndroid Build Coastguard Workercd $(dirname $0) 611*6777b538SAndroid Build Coastguard Workereval "build_$1" 612