os: osx osx_image: xcode9.3 language: objective-c cache: - bundler - cocoapods rvm: 2.3.1 jobs: include: - stage: checks # This only needs to be run once, so restrict it to an arbitrary combination before_install: - brew install clang-format - brew install swiftformat script: - ./scripts/check_whitespace.sh - ./scripts/check_copyright.sh - ./scripts/check_no_module_imports.sh - ./scripts/check_test_inclusion.py - ./scripts/style.sh test-only $TRAVIS_COMMIT_RANGE # Google C++ style compliance - ./scripts/lint.sh $TRAVIS_COMMIT_RANGE # The order of builds matters (even though they are run in parallel): # Travis will schedule them in the same order they are listed here. # Primary platforms # Run unit tests - stage: test env: - PROJECT=Firebase PLATFORM=iOS METHOD=xcodebuild before_install: - npm install ios-sim -g - ios-sim start --devicetypeid "com.apple.CoreSimulator.SimDeviceType.iPhone-8-Plus, 11.3" - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM - stage: test env: - PROJECT=Firestore PLATFORM=iOS METHOD=xcodebuild before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM $METHOD # TODO - add a script to make the lint checks more DRY. # pod lib lint to check build and warnings for dynamic framework build (use_frameworks!) - stage: test env: - PROJECT=Firebase PLATFORM=iOS METHOD=pod-lib-lint # Set ALT_SOURCES like the following to continue lint testing until release when Utilities # or Core APIs change. GoogleUtilities.podspec and FirebaseCore.podspec should be # manually pushed to a temporary Specs repo. See # https://guides.cocoapods.org/making/private-cocoapods. # ALT_SOURCES="--sources=git@github.com:paulb777/Specs.git,https://github.com/CocoaPods/Specs.git" - ALT_SOURCES="--sources=https://github.com/paulb777/Specs.git,https://github.com/CocoaPods/Specs.git" before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh bundle exec pod lib lint GoogleUtilities.podspec - ./scripts/if_changed.sh bundle exec pod lib lint FirebaseCore.podspec $ALT_SOURCES - ./scripts/if_changed.sh bundle exec pod lib lint FirebaseAuth.podspec $ALT_SOURCES - ./scripts/if_changed.sh bundle exec pod lib lint FirebaseAuthInterop.podspec $ALT_SOURCES - ./scripts/if_changed.sh bundle exec pod lib lint FirebaseDatabase.podspec $ALT_SOURCES - ./scripts/if_changed.sh bundle exec pod lib lint FirebaseMessaging.podspec $ALT_SOURCES - ./scripts/if_changed.sh bundle exec pod lib lint FirebaseStorage.podspec $ALT_SOURCES - ./scripts/if_changed.sh bundle exec pod lib lint FirebaseFunctions.podspec $ALT_SOURCES - stage: test env: - PROJECT=Firestore PLATFORM=iOS METHOD=pod-lib-lint - ALT_SOURCES="--sources=https://github.com/paulb777/Specs.git,https://github.com/CocoaPods/Specs.git" before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: # Eliminate the one warning from BoringSSL when CocoaPods 1.6.0 is available. # The travis_wait is necessary because the command takes more than 10 minutes. - travis_wait ./scripts/if_changed.sh bundle exec pod lib lint FirebaseFirestore.podspec --allow-warnings --no-subspecs $ALT_SOURCES # pod lib lint to check build and warnings for static library build - only on cron jobs - stage: test env: - PROJECT=Firebase PLATFORM=iOS METHOD=pod-lib-lint - ALT_SOURCES="--sources=https://github.com/paulb777/Specs.git,https://github.com/CocoaPods/Specs.git" before_install: - ./scripts/if_cron.sh ./scripts/install_prereqs.sh script: # For GoogleUtilities, allow warnings for iOS 6 but not iOS 7. - ./scripts/if_cron.sh bundle exec pod lib lint GoogleUtilities.podspec --use-libraries --allow-warnings - ./scripts/if_cron.sh sed -i -e "s/s.ios.deployment_target = '6.0'/s.ios.deployment_target = '7.0'/" GoogleUtilities.podspec - ./scripts/if_cron.sh bundle exec pod lib lint GoogleUtilities.podspec --use-libraries - ./scripts/if_cron.sh bundle exec pod lib lint FirebaseCore.podspec --use-libraries $ALT_SOURCES - ./scripts/if_cron.sh bundle exec pod lib lint FirebaseAuth.podspec --use-libraries $ALT_SOURCES - ./scripts/if_cron.sh bundle exec pod lib lint FirebaseAuthInterop.podspec --use-libraries $ALT_SOURCES - ./scripts/if_cron.sh bundle exec pod lib lint FirebaseDatabase.podspec --use-libraries $ALT_SOURCES # The Protobuf dependency of FirebaseMessaging has warnings with --use-libraries - ./scripts/if_cron.sh bundle exec pod lib lint FirebaseMessaging.podspec --use-libraries --allow-warnings $ALT_SOURCES - ./scripts/if_cron.sh bundle exec pod lib lint FirebaseStorage.podspec --use-libraries $ALT_SOURCES - ./scripts/if_cron.sh bundle exec pod lib lint FirebaseFunctions.podspec --use-libraries $ALT_SOURCES - stage: test env: - PROJECT=Firestore PLATFORM=iOS METHOD=pod-lib-lint - ALT_SOURCES="--sources=https://github.com/paulb777/Specs.git,https://github.com/CocoaPods/Specs.git" before_install: - ./scripts/if_cron.sh ./scripts/install_prereqs.sh script: # TBD - non-portable path warnings # The travis_wait is necessary because the command takes more than 10 minutes. - travis_wait ./scripts/if_cron.sh bundle exec pod lib lint FirebaseFirestore.podspec --use-libraries --allow-warnings --no-subspecs $ALT_SOURCES # Alternative platforms - stage: test env: - PROJECT=Firestore PLATFORM=macOS METHOD=cmake before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM $METHOD - stage: test osx_image: xcode8.3 env: - PROJECT=Firestore PLATFORM=iOS METHOD=xcodebuild XCODE_VERSION=8.3.3 before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM $METHOD # Community-supported platforms - stage: test env: - PROJECT=Firebase PLATFORM=macOS METHOD=xcodebuild before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM - stage: test env: - PROJECT=Firebase PLATFORM=tvOS METHOD=xcodebuild before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM # Firestore sanitizers - stage: test env: - PROJECT=Firestore PLATFORM=iOS METHOD=xcodebuild SANITIZERS=asan before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM $METHOD - stage: test env: - PROJECT=Firestore PLATFORM=iOS METHOD=xcodebuild SANITIZERS=tsan before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM $METHOD # TODO(varconst): enable UBSan in xcodebuild. Right now if fails during # linkage (it works if enabled together with ASan, but it's supposed to be # usable on its own, too). - stage: test env: - PROJECT=Firestore PLATFORM=macOS METHOD=cmake SANITIZERS=asan before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM $METHOD - stage: test env: - PROJECT=Firestore PLATFORM=macOS METHOD=cmake SANITIZERS=tsan before_install: - ./scripts/if_changed.sh ./scripts/install_prereqs.sh script: - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM $METHOD # TODO(varconst): UBSan for CMake. UBSan failures are non-fatal by default, # need to make them fatal for the purposes of the test run. # TODO(varconst): disallow sanitizers to fail once we fix all existing issues. allow_failures: - env: - PROJECT=Firestore PLATFORM=macOS METHOD=cmake SANITIZERS=asan - env: - PROJECT=Firestore PLATFORM=macOS METHOD=cmake SANITIZERS=tsan - env: - PROJECT=Firestore PLATFORM=iOS METHOD=xcodebuild SANITIZERS=asan - env: - PROJECT=Firestore PLATFORM=iOS METHOD=xcodebuild SANITIZERS=tsan # TODO(varconst): enable if it's possible to make this flag work on build # stages. It's supposed to avoid waiting for jobs that are allowed to fail # before reporting the results. # fast_finish: true branches: only: - master