aboutsummaryrefslogtreecommitdiffhomepage
path: root/.travis.yml
blob: 1225b4513829160806f86ff60b9b52f1c4302d2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
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/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

    - stage: test
      env:
        - PROJECT=Firebase PLATFORM=iOS
      before_install:
        - npm install ios-sim -g
        - ios-sim start --devicetypeid "com.apple.CoreSimulator.SimDeviceType.iPhone-7, 11.3"
        - ./scripts/if_changed.sh ./scripts/install_prereqs.sh
        - ./scripts/if_changed.sh ./scripts/pod_install.sh
      script:
        - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM

        - ./scripts/if_changed.sh bundle exec pod lib lint FirebaseCore.podspec

        # TODO - Uncomment subsequent lines once FirebaseCore source repo is in public Specs repo
        #  - bundle exec pod lib lint FirebaseAuth.podspec
        #  - bundle exec pod lib lint FirebaseDatabase.podspec
        #  - bundle exec pod lib lint FirebaseMessaging.podspec
        #  - bundle exec pod lib lint FirebaseStorage.podspec
        #  - bundle exec pod lib lint FirebaseFirestore.podspec

    - stage: test
      env:
        - PROJECT=Firestore PLATFORM=iOS METHOD=xcodebuild
      before_install:
        - ./scripts/if_changed.sh ./scripts/install_prereqs.sh
        - ./scripts/if_changed.sh ./scripts/pod_install.sh
      script:
        - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM $METHOD

    # Alternative platforms

    - stage: test
      env:
        - PROJECT=Firestore PLATFORM=macOS METHOD=cmake
      before_install:
        - ./scripts/if_changed.sh ./scripts/install_prereqs.sh
        - ./scripts/if_changed.sh ./scripts/pod_install.sh
      script:
        - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM $METHOD

    # Community-supported platforms

    - stage: test
      env:
        - PROJECT=Firebase PLATFORM=macOS
      before_install:
        - ./scripts/if_changed.sh ./scripts/install_prereqs.sh
        - ./scripts/if_changed.sh ./scripts/pod_install.sh
      script:
        - ./scripts/if_changed.sh ./scripts/build.sh $PROJECT $PLATFORM

    - stage: test
      env:
        - PROJECT=Firebase PLATFORM=tvOS
      before_install:
        - ./scripts/if_changed.sh ./scripts/install_prereqs.sh
        - ./scripts/if_changed.sh ./scripts/pod_install.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
        - ./scripts/if_changed.sh ./scripts/pod_install.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
        - ./scripts/if_changed.sh ./scripts/pod_install.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
        - ./scripts/if_changed.sh ./scripts/pod_install.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
        - ./scripts/if_changed.sh ./scripts/pod_install.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