Imported Upstream version 1.27.0
[platform/upstream/grpc.git] / tools / internal_ci / helper_scripts / prepare_build_macos_rc
index a13c29e..d9a2eda 100644 (file)
 launchctl limit maxfiles
 ulimit -a
 
+# WARNING: TRY TO KEEP THIS FILE AS LEAN AS POSSIBLE
+# The rules:
+# - think twice before adding installer that takes long time (builds are already slow)
+# - do not add any steps that are flaky (builds will become flaky)
+# - try adding a dependency under a language-specific section first (reduces latency and increases build stability)
+# - only add stuff that you absolutely need for your builds to work (add comment to explain why its needed)
+
 # Add GCP credentials for BQ access
 pip install --user google-api-python-client oauth2client
 export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json
@@ -27,62 +34,99 @@ if [ -n "$KOKORO_GITHUB_PULL_REQUEST_NUMBER" ]; then
   export RUN_TESTS_FLAGS="--filter_pr_tests --base_branch origin/$KOKORO_GITHUB_PULL_REQUEST_TARGET_BRANCH $RUN_TESTS_FLAGS"
 fi
 
-set +ex  # rvm script is very verbose and exits with errorcode
-# Advice from https://github.com/Homebrew/homebrew-cask/issues/8629#issuecomment-68641176
-brew update && brew upgrade brew-cask && brew cleanup && brew cask cleanup
-rvm --debug requirements ruby-2.5.0
-source $HOME/.rvm/scripts/rvm
-set -e  # rvm commands are very verbose
-time rvm install 2.5.0
-rvm use 2.5.0 --default
-time gem install bundler -v 1.17.3 --no-ri --no-doc
-time gem install cocoapods --version 1.3.1 --no-ri --no-doc
-time gem install rake-compiler --no-ri --no-doc
-rvm osx-ssl-certs status all
-rvm osx-ssl-certs update all
-set -ex
-
-# cocoapods
-export LANG=en_US.UTF-8
-# pre-fetch cocoapods master repo's most recent commit only
-mkdir -p ~/.cocoapods/repos
-time git clone --depth 1 https://github.com/CocoaPods/Specs.git ~/.cocoapods/repos/master
-
-# python
-time pip install --user virtualenv
-time pip install --user --upgrade Mako six tox setuptools twisted pyyaml pyjwt cryptography requests
-export PYTHONPATH=/Library/Python/3.4/site-packages
-
-# Install Python 3.7 and Python 3.8
-time curl -O https://www.python.org/ftp/python/3.7.0/python-3.7.0-macosx10.9.pkg
-time curl -O https://www.python.org/ftp/python/3.8.0/python-3.8.0-macosx10.9.pkg
-echo "ae0717a02efea3b0eb34aadc680dc498 python-3.7.0-macosx10.9.pkg" > /tmp/python_installer_checksum.md5
-echo "f5f9ae9f416170c6355cab7256bb75b5 python-3.8.0-macosx10.9.pkg" >> /tmp/python_installer_checksum.md5
-md5sum -c /tmp/python_installer_checksum.md5
-time sudo installer -pkg ./python-3.7.0-macosx10.9.pkg -target /
-time sudo installer -pkg ./python-3.8.0-macosx10.9.pkg -target /
-
-# set xcode version for Obj-C tests
-sudo xcode-select -switch /Applications/Xcode_9.2.app/Contents/Developer/
-
-# Disable some unwanted dotnet options
-export NUGET_XMLDOC_MODE=skip
-export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
-export DOTNET_CLI_TELEMETRY_OPTOUT=true
+if [ "${PREPARE_BUILD_INSTALL_DEPS_RUBY}" == "true" ]
+then
+  set +ex  # rvm script is very verbose and exits with errorcode
+  # Advice from https://github.com/Homebrew/homebrew-cask/issues/8629#issuecomment-68641176
+  brew update && brew upgrade brew-cask && brew cleanup && brew cask cleanup
+  rvm --debug requirements ruby-2.5.0
+  source $HOME/.rvm/scripts/rvm
+  set -e  # rvm commands are very verbose
+  time rvm install 2.5.0
+  rvm use 2.5.0 --default
+  time gem install bundler -v 1.17.3 --no-ri --no-doc
+  time gem install cocoapods --version 1.3.1 --no-ri --no-doc
+  time gem install rake-compiler --no-ri --no-doc
+  rvm osx-ssl-certs status all
+  rvm osx-ssl-certs update all
+  set -ex
+fi
 
-# TODO(jtattermusch): better debugging of clock skew, remove once not needed
-date
+if [ "${PREPARE_BUILD_INSTALL_DEPS_OBJC}" == "true" ]
+then
+  # cocoapods
+  export LANG=en_US.UTF-8
+  # pre-fetch cocoapods master repo's most recent commit only
+  mkdir -p ~/.cocoapods/repos
+  time git clone --depth 1 https://github.com/CocoaPods/Specs.git ~/.cocoapods/repos/master
 
-time git submodule update --init
+  # set xcode version for Obj-C tests
+  sudo xcode-select -switch /Applications/Xcode_9.2.app/Contents/Developer/
 
-# Store intermediate build files of ObjC tests into /tmpfs
-mkdir /tmpfs/Build-ios-binary-size
-ln -s /tmpfs/Build-ios-binary-size src/objective-c/examples/Sample/Build
-mkdir -p /tmpfs/DerivedData
-rm -rf ~/Library/Developer/Xcode/DerivedData
-mkdir -p ~/Library/Developer/Xcode
-ln -s /tmpfs/DerivedData ~/Library/Developer/Xcode/DerivedData
+  # Needed for ios-binary-size
+  time pip install --user pyyaml pyjwt cryptography requests
+
+  # Store intermediate build files of ObjC tests into /tmpfs
+  # TODO(jtattermusch): this has likely been done to avoid running
+  # out of disk space when running ios-binary-size tests, but
+  # it would be good to revisit.
+  mkdir /tmpfs/Build-ios-binary-size
+  ln -s /tmpfs/Build-ios-binary-size src/objective-c/examples/Sample/Build
+  mkdir -p /tmpfs/DerivedData
+  rm -rf ~/Library/Developer/Xcode/DerivedData
+  mkdir -p ~/Library/Developer/Xcode
+  ln -s /tmpfs/DerivedData ~/Library/Developer/Xcode/DerivedData
+fi
+
+if [ "${PREPARE_BUILD_INSTALL_DEPS_PYTHON}" == "true" ]
+then
+  # python
+  time pip install --user virtualenv
+  time pip install --user --upgrade Mako six tox setuptools twisted pyyaml pyjwt cryptography requests
+  export PYTHONPATH=/Library/Python/3.4/site-packages
+
+  # make sure md5sum is available (requires coreutils 8.31+)
+  brew upgrade coreutils
+
+  # Install Python 3.7 and Python 3.8
+  time curl -O https://www.python.org/ftp/python/3.7.0/python-3.7.0-macosx10.9.pkg
+  time curl -O https://www.python.org/ftp/python/3.8.0/python-3.8.0-macosx10.9.pkg
+  echo "ae0717a02efea3b0eb34aadc680dc498 python-3.7.0-macosx10.9.pkg" > /tmp/python_installer_checksum.md5
+  echo "f5f9ae9f416170c6355cab7256bb75b5 python-3.8.0-macosx10.9.pkg" >> /tmp/python_installer_checksum.md5
+  md5sum -c /tmp/python_installer_checksum.md5
+  time sudo installer -pkg ./python-3.7.0-macosx10.9.pkg -target /
+  time sudo installer -pkg ./python-3.8.0-macosx10.9.pkg -target /
+fi
+
+if [ "${PREPARE_BUILD_INSTALL_DEPS_CSHARP}" == "true" ]
+then
+  # Disable some unwanted dotnet options
+  export NUGET_XMLDOC_MODE=skip
+  export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
+  export DOTNET_CLI_TELEMETRY_OPTOUT=true
+
+  # Xcode 10+ doesn't support building for i386 architecture
+  sudo xcode-select -switch /Applications/Xcode_9.2.app/Contents/Developer/
+
+  # make sure we have the golang 1.13+
+  # recent golang is currently required by boringssl's cmake build
+  # and C# uses cmake to build grpc_csharp_ext
+  # see https://github.com/grpc/grpc/issues/21626
+  which go
+  ls -l $(which go)
+  go version  # check original golang version (to diagnose the issue)
+  brew unlink go  # stop using brew-provided version of go
+  time curl -O https://dl.google.com/go/go1.13.6.darwin-amd64.pkg
+  time sudo installer -pkg ./go1.13.6.darwin-amd64.pkg -target /
+  export PATH="/usr/local/go/bin:$PATH"
+  which go
+  go version
+fi
 
 # PHP tests currently require using an older version of PHPUnit
 ln -sf /usr/local/bin/phpunit-5.7 /usr/local/bin/phpunit
 
+# TODO(jtattermusch): better debugging of clock skew, remove once not needed
+date
+
+time git submodule update --init