diff options
author | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2019-07-25 03:05:35 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2019-08-15 20:41:32 +0300 |
commit | 4765aa02469519d353295f6901e3e04d67289aa0 (patch) | |
tree | 73fa0b09afde16187df609bdfb5dad7c18a16850 | |
parent | 4ef4cec805b0679b3853b114cda59a22e39458e8 (diff) | |
download | qtlocation-mapboxgl-4765aa02469519d353295f6901e3e04d67289aa0.tar.gz |
[build] FIXME: CI config
-rw-r--r-- | appveyor.yml | 64 | ||||
-rw-r--r-- | appveyor.yml.old | 103 | ||||
-rw-r--r-- | circle.yml | 1443 | ||||
-rw-r--r-- | circle.yml.old | 1344 | ||||
-rw-r--r-- | scripts/ci/Dockerfile | 81 | ||||
-rw-r--r-- | scripts/ci/etc/apt/sources.list | 49 |
6 files changed, 1731 insertions, 1353 deletions
diff --git a/appveyor.yml b/appveyor.yml index 0e1bd01124..16e7127098 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,29 +5,15 @@ image: - Visual Studio 2017 environment: - PYTHON: C:\python37 + PYTHON: C:\python37 matrix: - configuration: Release - -clone_depth: 1 - -after_build: - - mkdir qmapboxgl - - mkdir qmapboxgl\lib - - mkdir qmapboxgl\include - - copy qmapboxgl.dll qmapboxgl\lib - - copy qmapboxgl.exp qmapboxgl\lib - - copy qmapboxgl.lib qmapboxgl\lib - - copy %APPVEYOR_BUILD_FOLDER%\platform\qt\include\* qmapboxgl\include - - 7z a qmapboxgl-%APPVEYOR_REPO_COMMIT%.zip qmapboxgl - -artifacts: - - path: build\qmapboxgl-%APPVEYOR_REPO_COMMIT%.zip - name: QMapboxGL + - configuration: Debug test: off +clone_depth: 1 for: - @@ -36,10 +22,10 @@ for: - image: Visual Studio 2015 environment: - LLVM_VERSION: 5.0.1 - LLVM_HASH: 981543611D719624ACB29A2CFFD6A479CFF36E8AB5EE8A57D8ECA4F9C4C6956F - VCVARSALL: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat' - QT_PREFIX: 'C:\Qt\latest\msvc2015_64\lib\cmake' + LLVM_VERSION: 5.0.1 + LLVM_HASH: 981543611D719624ACB29A2CFFD6A479CFF36E8AB5EE8A57D8ECA4F9C4C6956F + VCVARSALL: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat' + QT_PREFIX: 'C:\Qt\latest\msvc2015_64\lib\cmake' - matrix: @@ -53,52 +39,50 @@ for: QT_PREFIX: 'C:\Qt\latest\msvc2017_64\lib\cmake' cache: - - '%APPVEYOR_BUILD_FOLDER%\mason_packages' + - '%APPVEYOR_BUILD_FOLDER%\.git\modules' - '%APPVEYOR_BUILD_FOLDER%\LLVM-%LLVM_VERSION%-win64.exe' - '%APPVEYOR_BUILD_FOLDER%\cmake-3.10.1-win64-x64.zip' - C:\clcache install: + - set PATH=%PYTHON%\Scripts;%PYTHON%;%PATH% + - pip install clcache - git config --system core.longpaths true - git submodule sync - git submodule update --init - git submodule foreach git submodule update --init - ps: | - if (!(Test-Path cmake-3.10.1-win64-x64.zip)) { - appveyor DownloadFile https://cmake.org/files/v3.10/cmake-3.10.1-win64-x64.zip - } - scripts\check-sha256.ps1 cmake-3.10.1-win64-x64.zip 8251F70C85B58F3CA1F24E4A3B0637E2D609B5E4A341D00B70E02E89244D5029 - Start-Process -FilePath '7z' -ArgumentList 'x','cmake-3.10.1-win64-x64.zip','-oC:\' -Wait - - ps: | if (!(Test-Path "LLVM-$env:LLVM_VERSION-win64.exe")) { appveyor DownloadFile "https://releases.llvm.org/$env:LLVM_VERSION/LLVM-$env:LLVM_VERSION-win64.exe" } scripts\check-sha256.ps1 LLVM-$env:LLVM_VERSION-win64.exe "$env:LLVM_HASH" Start-Process -FilePath "LLVM-$env:LLVM_VERSION-win64.exe" -ArgumentList '/S',"/D=C:\LLVM-$env:LLVM_VERSION" -Wait - - set PATH=%PYTHON%\Scripts;%PYTHON%;%PATH% - - pip install clcache + - ps: | + if (!(Test-Path cmake-3.10.1-win64-x64.zip)) { + appveyor DownloadFile https://cmake.org/files/v3.10/cmake-3.10.1-win64-x64.zip + } + scripts\check-sha256.ps1 cmake-3.10.1-win64-x64.zip 8251F70C85B58F3CA1F24E4A3B0637E2D609B5E4A341D00B70E02E89244D5029 + Start-Process -FilePath '7z' -ArgumentList 'x','cmake-3.10.1-win64-x64.zip','-oC:\' -Wait before_build: - set PATH=C:\LLVM-%LLVM_VERSION%\bin;%PATH% - set PATH=C:\cmake-3.10.1-win64-x64\bin;%PATH% - set CLCACHE_DIR=c:\clcache - set CLCACHE_CL=clang-cl + - clcache -z - set CC=clcache - set CXX=clcache + - set CTEST_OUTPUT_ON_FAILURE=1 - mkdir %APPVEYOR_BUILD_FOLDER%\build - cd %APPVEYOR_BUILD_FOLDER%\build build_script: - call "%VCVARSALL%" amd64 - cmake -G "Ninja" - -DMBGL_PLATFORM=qt - -DWITH_QT_DECODERS=ON - -DWITH_QT_I18N=ON - -DWITH_NODEJS=OFF - -DCMAKE_BUILD_TYPE=Release - -DCMAKE_PREFIX_PATH=%QT_PREFIX% - -DCMAKE_MAKE_PROGRAM="%APPVEYOR_BUILD_FOLDER%\platform\qt\ninja.exe" - .. - - clcache -z - - cmake --build . -- -j %NUMBER_OF_PROCESSORS% + -DCMAKE_BUILD_TYPE=%CONFIGURATION% + -DCMAKE_MAKE_PROGRAM="%APPVEYOR_BUILD_FOLDER%\platform\qt\ninja.exe" + -DCMAKE_PREFIX_PATH=%QT_PREFIX% + -DMBGL_WITH_QT=ON + .. + - cmake --build . --target qmapboxgl -- -j %NUMBER_OF_PROCESSORS% - clcache -s diff --git a/appveyor.yml.old b/appveyor.yml.old new file mode 100644 index 0000000000..53970e1ac5 --- /dev/null +++ b/appveyor.yml.old @@ -0,0 +1,103 @@ +platform: x64 + +image: +- Visual Studio 2015 +- Visual Studio 2017 + +environment: + PYTHON: C:\python37 + + matrix: + - configuration: Release + +clone_depth: 1 + +after_build: + - mkdir qmapboxgl + - mkdir qmapboxgl\lib + - mkdir qmapboxgl\include + - copy qmapboxgl.dll qmapboxgl\lib + - copy qmapboxgl.exp qmapboxgl\lib + - copy qmapboxgl.lib qmapboxgl\lib + - copy %APPVEYOR_BUILD_FOLDER%\platform\qt\include\* qmapboxgl\include + - 7z a qmapboxgl-%APPVEYOR_REPO_COMMIT%.zip qmapboxgl + +artifacts: + - path: build\qmapboxgl-%APPVEYOR_REPO_COMMIT%.zip + name: QMapboxGL + +test: off + + +for: +- + matrix: + only: + - image: Visual Studio 2015 + + environment: + LLVM_VERSION: 5.0.1 + LLVM_HASH: 981543611D719624ACB29A2CFFD6A479CFF36E8AB5EE8A57D8ECA4F9C4C6956F + VCVARSALL: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat' + QT_PREFIX: 'C:\Qt\latest\msvc2015_64\lib\cmake' + +- + matrix: + only: + - image: Visual Studio 2017 + + environment: + LLVM_VERSION: 7.0.0 + LLVM_HASH: 74b197a3959b0408adf0824be01db8dddfa2f9a967f4085af3fad900ed5fdbf6 + VCVARSALL: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat' + QT_PREFIX: 'C:\Qt\latest\msvc2017_64\lib\cmake' + +cache: + - '%APPVEYOR_BUILD_FOLDER%\mason_packages' + - '%APPVEYOR_BUILD_FOLDER%\LLVM-%LLVM_VERSION%-win64.exe' + - '%APPVEYOR_BUILD_FOLDER%\cmake-3.10.1-win64-x64.zip' + - C:\clcache + +install: + - git config --system core.longpaths true + - git submodule sync + - git submodule update --init + - ps: | + if (!(Test-Path cmake-3.10.1-win64-x64.zip)) { + appveyor DownloadFile https://cmake.org/files/v3.10/cmake-3.10.1-win64-x64.zip + } + scripts\check-sha256.ps1 cmake-3.10.1-win64-x64.zip 8251F70C85B58F3CA1F24E4A3B0637E2D609B5E4A341D00B70E02E89244D5029 + Start-Process -FilePath '7z' -ArgumentList 'x','cmake-3.10.1-win64-x64.zip','-oC:\' -Wait + - ps: | + if (!(Test-Path "LLVM-$env:LLVM_VERSION-win64.exe")) { + appveyor DownloadFile "https://releases.llvm.org/$env:LLVM_VERSION/LLVM-$env:LLVM_VERSION-win64.exe" + } + scripts\check-sha256.ps1 LLVM-$env:LLVM_VERSION-win64.exe "$env:LLVM_HASH" + Start-Process -FilePath "LLVM-$env:LLVM_VERSION-win64.exe" -ArgumentList '/S',"/D=C:\LLVM-$env:LLVM_VERSION" -Wait + - set PATH=%PYTHON%\Scripts;%PYTHON%;%PATH% + - pip install clcache + +before_build: + - set PATH=C:\LLVM-%LLVM_VERSION%\bin;%PATH% + - set PATH=C:\cmake-3.10.1-win64-x64\bin;%PATH% + - set CLCACHE_DIR=c:\clcache + - set CLCACHE_CL=clang-cl + - set CC=clcache + - set CXX=clcache + - mkdir %APPVEYOR_BUILD_FOLDER%\build + - cd %APPVEYOR_BUILD_FOLDER%\build + +build_script: + - call "%VCVARSALL%" amd64 + - cmake -G "Ninja" + -DMBGL_PLATFORM=qt + -DWITH_QT_DECODERS=ON + -DWITH_QT_I18N=ON + -DWITH_NODEJS=OFF + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_PREFIX_PATH=%QT_PREFIX% + -DCMAKE_MAKE_PROGRAM="%APPVEYOR_BUILD_FOLDER%\platform\qt\ninja.exe" + .. + - clcache -z + - cmake --build . -- -j %NUMBER_OF_PROCESSORS% + - clcache -s diff --git a/circle.yml b/circle.yml index 68c49dd3f6..91c997c5d3 100644 --- a/circle.yml +++ b/circle.yml @@ -4,1341 +4,158 @@ workflows: version: 2 default: jobs: - # - # Naming convention: {platform}-{additional description}-{build type} - # - {platform} is the client platform/framework, which may differ from - # the build platform. Specify both if applicable, e.g., "qt5-macos". - # - {additional description} optionally describes the compiler or other - # unique aspect of the build environment. - # - {build type} is typically "debug" or "release". - # - - nitpick - - clang-tidy: - filters: - branches: - ignore: master - - android-debug-arm-v7-buck - - android-arm-template: - name: android-debug-arm-v8 - - android-arm-template: - name: android-gnustl-arm-v7 - stl: gnustl_shared - firebase_device_id: "flo" - firebase_device_os: "21" - image: android-ndk-r17c:1d5db0eb34 - abi: arm-v7 - - android-release: - filters: - tags: - only: /android-v.*/ - - node-clang39-release: - filters: - tags: - only: /node-.*/ - - node-gcc8-debug: - filters: - tags: - only: /node-.*/ - - node-macos-release: - filters: - tags: - only: /node-.*/ - - linux-clang-38-libcxx-debug: - name: linux-clang-3.8-libcxx-debug - - linux-clang-7-sanitize-address-undefined - - linux-clang-7-sanitize-thread - - linux-gcc49-debug: - name: linux-gcc4.9-debug - - linux-gcc5-debug-coverage - - linux-doxygen - - linux-render-tests - - ios-debug - - ios-debug-xcode11 - - ios-release-template: - name: ios-release - - ios-release-tag: - filters: - tags: - only: /ios-.*/ - branches: - ignore: /.*/ - - macos-debug - - macos-render-tests - - qt5-linux-gcc5-release - - qt5-macos-debug - nightly: - triggers: - - schedule: - cron: "0 5 * * *" - filters: - branches: - only: - - master - jobs: - - metrics-nightly - - ios-release-template: - name: ios-release-nightly - - ios-sanitize-nightly - - ios-sanitize-address-nightly - - ios-static-analyzer-nightly - - ios-static-analyzer-nightly-xcode11 + - build-template-linux: + name: Android armeabi-v7a Release + config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_ABI=armeabi-v7a' + - build-template-linux: + name: Android arm64-v8a Release + config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a' + - build-template-linux: + name: Android x86 Release + config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_ABI=x86' + - build-template-linux: + name: Android x86_64 Release + config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_ABI=x86_64' + - build-template-linux: + name: Linux GCC4.9 Release + config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-4.9 -DCMAKE_CXX_COMPILER=g++-4.9' + build_params: '--target mbgl-core' + test_params: '-N' + - build-template-linux: + name: Linux GCC8 Release + config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8' + - build-template-linux: + name: Linux GCC8 Debug Coverage + config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_BUILD_TYPE=DebugCoverage' + - build-template-linux: + name: Linux Clang8 Sanitize Address + config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=address' + - build-template-linux: + name: Linux Clang8 Sanitize Thread + config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=thread' + - build-template-linux: + name: Linux Clang8 Sanitize Memory + config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=memory' + - build-template-linux: + name: Linux Clang8 Sanitize Undefined + config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=undefined' + - build-template-linux: + name: Qt5 Linux GCC5 Release + config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-5 -DCMAKE_CXX_COMPILER=g++-5 -DMBGL_WITH_QT=ON' + build_params: '--target mbgl-qt' + test_params: '-N' commands: - npm-install: - steps: - - run: - name: npm install - command: npm install --ignore-scripts - prepare-environment: - steps: - - run: - name: Prepare environment - command: touch "$BASH_ENV" && ./scripts/environment.js | tee -a "$BASH_ENV" - prepare-ccache: - steps: - - run: - name: Prepare ccache - command: | - # CircleCI doesn't have any way to embed arbitrary environment variables or command output - # into cache keys, so we're using the workaround of writing the desired content to a file, - # and then using `{{ checksum "filename" }}` in the cache key. - echo "$CIRCLE_BRANCH" - echo "$CIRCLE_BRANCH" > .circle-branch - echo "$CIRCLE_SHA1" - echo "$CIRCLE_SHA1" > .circle-sha1 - echo "$CIRCLE_TARGET_BRANCH" - echo "${CIRCLE_TARGET_BRANCH:master}" > .circle-target-branch - echo "$CIRCLE_MERGE_BASE" - echo "${CIRCLE_MERGE_BASE:master}" > .circle-merge-base - ccache --clear - reset-ccache-stats: - steps: - - run: - name: Clear ccache statistics - command: | - ccache --zero-stats - ccache --max-size=2G - ccache --show-stats - show-ccache-stats: - steps: - - run: - name: Show ccache statistics - command: ccache --show-stats - - - save-node_modules-cache: - steps: - - save_cache: - name: Save node_modules cache - key: 'node_modules/v1/{{ arch }}/{{ checksum "package.json" }}' - paths: [ "node_modules" ] - restore-node_modules-cache: - steps: - - restore_cache: - name: Restore node_modules cache - keys: - - 'node_modules/v1/{{ arch }}/{{ checksum "package.json" }}' - - 'node_modules/v1/{{ arch }}' - save-mason_packages-cache: - steps: - - save_cache: - name: Save mason_packages cache - key: 'mason_packages/v3/{{ arch }}/{{ checksum "cmake/mason-dependencies.cmake" }}' - paths: [ "mason_packages/.binaries" ] - restore-mason_packages-cache: - steps: - - restore_cache: - name: Restore mason_packages cache - keys: - - 'mason_packages/v3/{{ arch }}/{{ checksum "cmake/mason-dependencies.cmake" }}' - - 'mason_packages/v3/{{ arch }}' - save-ccache: - steps: - - save_cache: - name: Save ccache - key: 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-branch" }}/{{ checksum ".circle-sha1" }}' - paths: [ "~/.ccache" ] - restore-ccache: - steps: - - restore_cache: - name: Restore ccache - keys: - - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-branch" }}/{{ checksum ".circle-sha1" }}' - - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-branch" }}' - - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-target-branch" }}/{{ checksum ".circle-merge-base" }}' - - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-target-branch" }}' - - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}' - save-gradle-cache: - steps: - - save_cache: - name: Save gradle cache - key: 'gradle/v1/{{ checksum "platform/android/gradle/dependencies.gradle" }}/{{ checksum "platform/android/build.gradle" }}/{{ checksum "platform/android/gradle/wrapper/gradle-wrapper.properties" }}' - paths: [ "/root/.gradle" ] - restore-gradle-cache: - steps: - - restore_cache: - name: Restore gradle cache - keys: - - 'gradle/v1/{{ checksum "platform/android/gradle/dependencies.gradle" }}/{{ checksum "platform/android/build.gradle" }}/{{ checksum "platform/android/gradle/wrapper/gradle-wrapper.properties" }}' - - 'gradle/v1' - - - install-dependencies: - parameters: - node_modules: - type: boolean - default: true - ccache: - type: boolean - default: true - mason: - type: boolean - default: true - gradle: - type: boolean - default: false - steps: - - checkout - - when: - condition: << parameters.node_modules >> - steps: [ restore-node_modules-cache, npm-install ] - - prepare-environment - - when: - condition: << parameters.ccache >> - steps: [ prepare-ccache, restore-ccache, reset-ccache-stats ] - - when: - condition: << parameters.mason >> - steps: [ restore-mason_packages-cache ] - - when: - condition: << parameters.gradle >> - steps: [ restore-gradle-cache ] - save-dependencies: - parameters: - node_modules: - type: boolean - default: true - ccache: - type: boolean - default: true - mason: - type: boolean - default: true - gradle: - type: boolean - default: false - steps: - - when: - condition: << parameters.node_modules >> - steps: [ save-node_modules-cache ] - - when: - condition: << parameters.ccache >> - steps: [ save-ccache, show-ccache-stats ] - - when: - condition: << parameters.mason >> - steps: [ save-mason_packages-cache ] - - when: - condition: << parameters.gradle >> - steps: [ save-gradle-cache ] - - - setup-llvm-symbolizer: - steps: - - run: - name: Environment Setup - command: | - # LLVM has a hard check for "llvm-symbolizer" and doesn't support suffixed executables - ln -s /usr/bin/llvm-symbolizer-* /usr/bin/llvm-symbolizer - # We'll use tee to redirect stderr to a file so we can check for sanitiziation - # https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/1059947 - sed -i 's/"$@" 2>&1/"$@"/' /usr/bin/xvfb-run - - - configure-cmake: - steps: - - run: - name: CMake configuration step - command: | - mkdir -p build - cd build - cmake -DWITH_CXX11ABI=${WITH_CXX11ABI:0} -DWITH_COVERAGE=${WITH_COVERAGE:0} -DWITH_OSMESA=${WITH_OSMESA:0} -DWITH_EGL=${WITH_EGL:0} .. - cd .. - build-node: - steps: - - run: - name: Build node - command: make node-all - build-mbgl-render-test: - steps: - - run: - name: Build mbgl-render-test - command: cmake --build build --config ${BUILDTYPE} --target mbgl-render-test -- -j${JOBS} - build-linux: - steps: - - run: - name: Build linux - command: make linux - build-benchmark: - steps: - - run: - name: Build benchmark - command: make benchmark - build-test: - steps: - - run: - name: Build test - command: make test - build-qt-app: - steps: - - run: - name: Build qt-app - command: make qt-app - build-qt-test: - steps: - - run: - name: Build qt-test - command: make qt-test - build-ios-test: - steps: - - run: - name: Build ios-test - command: make ios-test - no_output_timeout: 2m - build-ios-integration-test: - steps: - - run: - name: Build ios-integration-test - command: make ios-integration-test - build-macos-test: - steps: - - run: - name: Build and run macOS tests - command: make run-test - no_output_timeout: 2m - - - check-public-symbols: - steps: - - run: - name: Check public symbols - command: make darwin-check-public-symbols - - - conditionally-skip-firebase: - steps: - - run: - name: Check if Firebase should be skipped - command: | - SKIPPABLE_TAG=$( git log -1 | grep -ioE -e "\[(skip.firebase|firebase.skip)\]" -e "\[((i|mac)os)+(, (i|mac)os)?\]" -e "\[darwin\]" || true ) - if [ -n "${SKIPPABLE_TAG}" ]; then - echo "Skipping Firebase tests because commit message contained: '${SKIPPABLE_TAG}'" - echo 'export SKIP_FIREBASE=1' >> $BASH_ENV - fi - login-google-cloud-platform: - steps: - - run: - name: Log in to Google Cloud Platform - command: | - if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON}" && -z "${SKIP_FIREBASE:-}" ]]; then - echo "${GCLOUD_SERVICE_ACCOUNT_JSON}" > secret.json - gcloud auth activate-service-account --key-file secret.json --project android-gl-native - rm secret.json - fi - - - install-ios-packaging-dependencies: - steps: - - run: - name: Install iOS packaging dependencies - command: ./platform/ios/scripts/install-packaging-dependencies.sh - background: true - - install-macos-dependencies: - steps: - - run: - name: Install macOS dependencies - command: brew install cmake ccache - - install-node-macos-dependencies: - steps: - - run: - name: Install Node macOS dependencies - command: | - brew install node@8 - brew link node@8 --force --overwrite - - install-qt-macos-dependencies: - steps: - - run: - name: Install Qt macOS dependencies - command: | - brew install qt - brew link qt --force - export HOMEBREW_QT5_CELLAR=$(brew --cellar qt) - export HOMEBREW_QT5_VERSION=$(brew list --versions qt | rev | cut -d' ' -f1 | rev) - sudo ln -s $HOMEBREW_QT5_CELLAR/$HOMEBREW_QT5_VERSION/mkspecs /usr/local/mkspecs - sudo ln -s $HOMEBREW_QT5_CELLAR/$HOMEBREW_QT5_VERSION/plugins /usr/local/plugins - - run-node-macos-tests: - steps: - - run: - name: Run node tests - command: make test-node - - run-node-linux-tests: - parameters: - node_version: - type: string - default: v8 - steps: - - run: - name: Run node tests - command: | - . "$NVM_DIR/nvm.sh" && nvm use << parameters.node_version >> - xvfb-run --server-args="-screen 0 1024x768x24" \ - logbt -- apitrace trace --api=egl -v make test-node - - run-macos-render-tests: - steps: - - run: - name: Run render tests (mbgl-render-test) - command: | - build/mbgl-render-test --recycle-map --shuffle - no_output_timeout: 2m - - run-linux-render-tests: - parameters: - node_version: - type: string - default: v8 - steps: - - run: - name: Run render tests (mbgl-render-test) - command: | - xvfb-run --server-args="-screen 0 1024x768x24" \ - logbt -- apitrace trace --api=egl -v build/mbgl-render-test --recycle-map --shuffle - - run-unit-tests: - steps: - - run: - name: Run tests - command: | - xvfb-run --server-args="-screen 0 1024x768x24" \ - make run-test - - run-unit-tests-sanitized: + prepare: steps: - - run: - name: Run tests - command: | - # Source.RenderTileSetSourceUpdate is filtered out due to #15294 - xvfb-run --server-args="-screen 0 1024x768x24" make run-test--Source.RenderTileSetSourceUpdate 2> >(tee sanitizer 1>&2) - # Unfortunately, Google Test eats the status code, so we'll have to check the output. - [ -z "$(sed -n '/^SUMMARY: .*Sanitizer:/p' sanitizer)" ] - - publish-node-package: - steps: - - run: - name: Publish node package - when: on_success - command: platform/node/scripts/publish.sh - - upload-render-tests: - steps: - - store_artifacts: - path: mapbox-gl-js/test/integration/render-tests/index.html - destination: render-tests - - collect-xcode-build-logs: - steps: - - run: - name: Collect Xcode build logs - when: always - command: | - export XCODE_LOG_DIR=build/logs - mkdir -p $XCODE_LOG_DIR - cp build/*.log $XCODE_LOG_DIR - upload-xcode-build-logs: - steps: - - store_artifacts: - path: build/logs - - - notify-slack-nightly-failure: - steps: - - run: - name: Send a Slack notification on nightly failure - when: on_fail - command: | - if [[ $CIRCLE_BRANCH == master ]]; then - export SLACK_MESSAGE="Nightly build of \`$CIRCLE_JOB\` <$CIRCLE_BUILD_URL|failed>." - export SLACK_COLOR="danger" - scripts/notify-slack.sh - fi - - # - # Add this step to all regular jobs to enable skipping of certain non-code-related changes. - # - # Do not include this step in nightly or release deployment jobs. - # - # To make a job potentially skippable on changes unrelated to its platform, it must: - # - Target one of the skippable platforms: Android, iOS, or macOS. - # - Have a job name that begins with a supported platform name. - # - Not be related to core functionality or rendering tests. Job names that - # contain "render-tests" cannot be skipped by platform changes. - # - # See the script in the following step for how to implement support for other platforms. - # - check-if-this-job-can-be-skipped: - steps: - - run: - name: Check if this job can be skipped - command: | - if [[ $CIRCLE_BRANCH != master ]] && [[ $CIRCLE_BRANCH != release-* ]]; then - scripts/check-ci-job-skippability.js - fi - -jobs: - nitpick: - docker: - - image: mbgl/linux-clang-7:a5a3c52107 - working_directory: /src - environment: - LIBSYSCONFCPUS: 2 - JOBS: 2 - BUILDTYPE: Debug - steps: - - install-dependencies: { mason: false, ccache: false } - run: - name: Initialize submodules + name: Prepare command: | - git submodule update --init - git submodule foreach git submodule update --init - - run: - name: Verify submodule pin - command: scripts/nitpick/submodule-pin.js - when: always - - run: - name: Source file list generation - command: scripts/nitpick/generated-code.js sources - when: always - - run: - name: Shader code generation - command: scripts/nitpick/generated-code.js shader - when: always - - run: - name: Style code generation - command: scripts/nitpick/generated-code.js style - when: always - - run: - name: Android code generation - command: scripts/nitpick/generated-code.js android - when: always - -# ------------------------------------------------------------------------------ - clang-tidy: - docker: - - image: mbgl/linux-clang-7:a5a3c52107 - working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: Debug - steps: - - install-dependencies: { ccache: false } - - run: - name: Fetch 'origin/master' branch - command: git fetch origin master:refs/remotes/origin/master - - run: - name: Generate compilation database - command: make compdb - - run: - name: Run Clang checks - command: make check TARGET_BRANCH=${CIRCLE_TARGET_BRANCH:master} - no_output_timeout: 20m - - save-dependencies: { ccache: false } - -# ------------------------------------------------------------------------------ - android-arm-template: + git submodule update --init --recursive + npm install + config: parameters: - stl: - type: string - default: "c++_static" - image: + config_params: type: string - default: android-ndk-r20:7b7c4b42cf - firebase_device_id: - type: string - default: sailfish - firebase_device_os: - type: string - default: "26" - abi: - type: string - default: "arm-v8" - docker: - - image: mbgl/<< parameters.image >> - resource_class: xlarge - working_directory: /src - environment: - LIBSYSCONFCPUS: 8 - JOBS: 8 - BUILDTYPE: Debug - IS_LOCAL_DEVELOPMENT: false - MBGL_ANDROID_STL: << parameters.stl >> - steps: - - install-dependencies: { gradle: true } - - check-if-this-job-can-be-skipped - - run: - name: Initialize vendor submodules - command: git submodule update --init platform/android/vendor - - run: - name: Check code style - command: make android-check - - run: - name: Run Android unit tests - command: make run-android-unit-test - - run: - name: Build libmapbox-gl.so for << parameters.abi >> - command: make android-lib-<< parameters.abi >> - - run: - name: Generate Espresso sanity tests - command: make test-code-android - - run: - name: Build Test APK - command: | - if [ -n "${MAPBOX_DEVELOPER_CONFIG_XML}" ]; then - echo "${MAPBOX_DEVELOPER_CONFIG_XML}" > platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/developer-config.xml - make android-ui-test-<< parameters.abi >> - fi - - save-dependencies: { gradle: true } - - conditionally-skip-firebase - - login-google-cloud-platform - - run: - name: Run instrumentation tests on Firebase - no_output_timeout: 20m - command: | - if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON}" && -z "${SKIP_FIREBASE:-}" ]]; then - gcloud firebase test android models list - gcloud firebase test android run --type instrumentation \ - --app platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/debug/MapboxGLAndroidSDKTestApp-debug.apk \ - --test platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/androidTest/debug/MapboxGLAndroidSDKTestApp-debug-androidTest.apk \ - --device-ids << parameters.firebase_device_id >> --os-version-ids << parameters.firebase_device_os >> --locales en --orientations portrait --timeout 20m \ - --environment-variables coverage=true,coverageFile="/sdcard/coverage.ec" --directories-to-pull /sdcard --results-dir mapbox-android-sdk-${CIRCLE_BUILD_NUM} - coverageFile=`gsutil ls gs://test-lab-186672a0qp5bq-ycr70axads3nc/mapbox-android-sdk-${CIRCLE_BUILD_NUM}/**/*.ec | tail -1` - gsutil cp $coverageFile $PWD/platform/android/MapboxGLAndroidSDK/build/jacoco | true - fi - - run: - name: Parse and send Jacoco reports - command: | - if [[ $CIRCLE_BRANCH == master ]]; then - make android-create-jacoco-report && make android-parse-and-send-jacoco-report - fi - - store_artifacts: - path: platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/debug - destination: . - - store_artifacts: - path: platform/android/MapboxGLAndroidSDK/build/reports/lint-results.html - - store_artifacts: - path: platform/android/MapboxGLAndroidSDK/build/reports/lint-results.xml - - store_artifacts: - path: platform/android/MapboxGLAndroidSDK/lint-baseline.xml - - store_artifacts: - path: platform/android/MapboxGLAndroidSDKTestApp/build/reports/lint-results.html - - store_artifacts: - path: platform/android/MapboxGLAndroidSDKTestApp/build/reports/lint-results.xml - - store_artifacts: - path: platform/android/MapboxGLAndroidSDKTestApp/lint-baseline.xml - - store_artifacts: - path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/debug/obj - -# ------------------------------------------------------------------------------ - android-release: - docker: - - image: mbgl/android-ndk-r20:7b7c4b42cf - resource_class: xlarge - working_directory: /src - environment: - LIBSYSCONFCPUS: 8 - JOBS: 8 - BUILDTYPE: Release - IS_LOCAL_DEVELOPMENT: false - steps: - - install-dependencies: { gradle: true } - - check-if-this-job-can-be-skipped - - run: - name: Initialize vendor submodules - command: git submodule update --init platform/android/vendor - - run: - name: Android nitpick - command: make run-android-nitpick - - run: - name: Trigger core benchmark run - command: | - if [ -n "${MOBILE_METRICS_TOKEN}" ]; then - if [[ $CIRCLE_BRANCH == master ]]; then - curl -u $MOBILE_METRICS_TOKEN -d build_parameters[CIRCLE_JOB]=android-core-benchmark https://circleci.com/api/v1.1/project/github/mapbox/mobile-metrics/tree/master - fi - fi - - run: - name: Trigger android benchmark run - command: | - if [ -n "${MOBILE_METRICS_TOKEN}" ]; then - if [[ $CIRCLE_BRANCH == master ]]; then - curl -u $MOBILE_METRICS_TOKEN -d build_parameters[CIRCLE_JOB]=android-benchmark https://circleci.com/api/v1.1/project/github/mapbox/mobile-metrics/tree/master - fi - fi - - run: - name: Generate Maven credentials - command: | - if [ -n "${BINTRAY_USER}" ]; then - echo "BINTRAY_USER=$BINTRAY_USER - BINTRAY_API_KEY=$BINTRAY_API_KEY - GPG_PASSPHRASE=$GPG_PASSPHRASE" - fi - - run: - name: Update version name - command: | - if [[ $CIRCLE_TAG == android-v* ]]; then - sed -i -e "s/^VERSION_NAME=.*/VERSION_NAME=${CIRCLE_TAG:9}/" platform/android/MapboxGLAndroidSDK/gradle.properties - fi - - run: - name: Build package - command: make apackage - - run: - name: Build release Test App - command: make android - - run: - name: Generate javadoc - command: make android-javadoc - - save-dependencies: { gradle: true } - - run: - name: gzip debugable .so files - command: | - gzip platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/arm64-v8a/libmapbox-gl.so && \ - gzip platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/armeabi-v7a/libmapbox-gl.so && \ - gzip platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/x86/libmapbox-gl.so && \ - gzip platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/x86_64/libmapbox-gl.so - - store_artifacts: - path: platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/release - destination: . - - store_artifacts: - path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/arm64-v8a/libmapbox-gl.so.gz - - store_artifacts: - path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/armeabi-v7a/libmapbox-gl.so.gz - - store_artifacts: - path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/x86/libmapbox-gl.so.gz - - store_artifacts: - path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/x86_64/libmapbox-gl.so.gz - - deploy: - name: Publish to Bintray - command: | - if [[ $CIRCLE_BRANCH == master ]] || [[ $CIRCLE_BRANCH == release-* ]] || [[ $CIRCLE_TAG == android-v* ]]; then - version=$(cat platform/android/MapboxGLAndroidSDK/gradle.properties | grep "VERSION_NAME") - if [[ $version != *"SNAPSHOT"* ]]; then - make run-android-upload-to-bintray - else - make run-android-upload-to-artifactory - fi - fi - - run: - name: Record size - command: platform/android/scripts/metrics.sh -# ------------------------------------------------------------------------------ - android-debug-arm-v7-buck: - docker: - - image: mbgl/android-ndk-r17c-buck:07c5ef2e71 - working_directory: /src - environment: - LIBSYSCONFCPUS: 2 - JOBS: 2 - BUILDTYPE: Debug - ANDROID_NDK: /android/sdk/ndk-bundle steps: - - checkout - - npm-install - - prepare-environment - - check-if-this-job-can-be-skipped - - run: - name: Checkout submodules - command: | - git submodule update --init - git submodule foreach git submodule update --init - run: - name: Build Android library + name: Configure command: | - cd misc/buck - buck build mapbox-gl-native:android-core - -# ------------------------------------------------------------------------------ - node-clang39-release: - docker: - - image: mbgl/linux-clang-3.9:2077f965ed - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: RelWithDebInfo - WITH_EGL: 1 - WITH_CXX11ABI: 0 - steps: - - install-dependencies - - build-node - - save-dependencies - - run-node-linux-tests - - publish-node-package - -# ------------------------------------------------------------------------------ - node-gcc8-debug: - docker: - - image: mbgl/linux-gcc-8:d2b1553d2f - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: Debug - WITH_EGL: 1 - steps: - - install-dependencies - - check-if-this-job-can-be-skipped - - build-node - - save-dependencies - - publish-node-package - -# ------------------------------------------------------------------------------ - node-macos-release: - macos: - xcode: "10.3.0" - environment: - BUILDTYPE: RelWithDebInfo - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - steps: - - install-macos-dependencies - - install-node-macos-dependencies - - install-dependencies - - check-if-this-job-can-be-skipped - - build-node - - save-dependencies - - run-node-macos-tests - - publish-node-package - - collect-xcode-build-logs - - upload-xcode-build-logs - -# ------------------------------------------------------------------------------ - linux-clang-38-libcxx-debug: - docker: - - image: mbgl/linux-clang-3.8-libcxx:d6800bdbb4 - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: Debug - WITH_EGL: 1 - WITH_CXX11ABI: 1 - steps: - - install-dependencies - - check-if-this-job-can-be-skipped - - build-linux - - save-dependencies - -# ------------------------------------------------------------------------------ - linux-clang-7-sanitize-address-undefined: - docker: - - image: mbgl/linux-clang-7:a5a3c52107 - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: Sanitize - WITH_EGL: 1 - GDB: '' # Do not run with GDB - CXXFLAGS: -fsanitize=address -fsanitize=undefined - LDFLAGS: -fsanitize=address -fsanitize=undefined - ASAN_OPTIONS: detect_leaks=0:color=always:print_summary=1 - UBSAN_OPTIONS: print_stacktrace=1:color=always:print_summary=1 - steps: - - install-dependencies - - check-if-this-job-can-be-skipped - - setup-llvm-symbolizer - - build-test - - save-dependencies - - run-unit-tests-sanitized - -# ------------------------------------------------------------------------------ - linux-clang-7-sanitize-thread: - docker: - - image: mbgl/linux-clang-7:a5a3c52107 - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: Sanitize - WITH_EGL: 1 - GDB: '' # Do not run with GDB - CXXFLAGS: -fsanitize=thread - LDFLAGS: -fsanitize=thread - TSAN_OPTIONS: color=always:print_summary=1 - steps: - - install-dependencies - - check-if-this-job-can-be-skipped - - setup-llvm-symbolizer - - build-test - - save-dependencies - - run-unit-tests-sanitized - -# ------------------------------------------------------------------------------ - linux-gcc49-debug: - docker: - - image: mbgl/linux-gcc-4.9:e3818a77c1 - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: Debug - WITH_EGL: 1 - WITH_CXX11ABI: 0 - DISPLAY: :0 - steps: - - install-dependencies - - check-if-this-job-can-be-skipped - - build-linux - - build-benchmark - - build-test - - save-dependencies - - run-unit-tests - - run: - name: Build offline CLI - command: make offline - -# ------------------------------------------------------------------------------ - linux-gcc5-debug-coverage: - docker: - - image: mbgl/linux-gcc-5:54f59e3ac5 - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: Debug - WITH_EGL: 1 - WITH_COVERAGE: 1 + mkdir build && cd build + cmake .. << parameters.config_params >> + build: + parameters: + build_params: + type: string steps: - - install-dependencies - - check-if-this-job-can-be-skipped - - build-linux - - build-benchmark - - build-test - - save-dependencies - - run-unit-tests - run: - name: Upload coverage results to codecov.io + name: Build command: | - bash <(curl -sSfL https://codecov.io/bash) || echo 'Codecov failed to upload' - - run: - name: Upload coverage metrics to s3 - command: | - if [[ $CIRCLE_BRANCH == master ]]; then - scripts/publish_core_codecoverage.js -p Linux -s Core - fi - -# ------------------------------------------------------------------------------ - linux-doxygen: - docker: - - image: mbgl/linux-gcc-5:54f59e3ac5 - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 2 - JOBS: 2 - BUILDTYPE: Debug - WITH_EGL: 1 - WITH_COVERAGE: 1 + cd build + cmake --build . -j 4 << parameters.build_params >> + test: + parameters: + test_params: + type: string steps: - - install-dependencies - - check-if-this-job-can-be-skipped - - run: - name: Install doxygen - command: apt update && apt install -y doxygen - - build-linux - - save-dependencies - run: - name: Check documentation coverage + name: Test command: | - platform/linux/ninja -C "build/linux-$(uname -m)/Debug" doxygen_coverage - scripts/publish_doxygen_coverage.js "build/linux-$(uname -m)/Debug/doxygen-coverage.json" + cd build + xvfb-run ctest -V << parameters.test_params >> -# ------------------------------------------------------------------------------ - linux-render-tests: +executors: + linux: docker: - - image: mbgl/linux-clang-7:a5a3c52107 + # FIXME: Move the image to mbgl/ + - image: tmpsantos/mbgl_ci:1.2 resource_class: large working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: RelWithDebInfo - WITH_EGL: 1 - steps: - - install-dependencies - - check-if-this-job-can-be-skipped - - configure-cmake - - build-mbgl-render-test - - run-linux-render-tests - - save-dependencies - - upload-render-tests -# ------------------------------------------------------------------------------ - ios-debug: - macos: - xcode: "10.3.0" - environment: - BUILDTYPE: Debug - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - steps: - - install-macos-dependencies - - install-dependencies - - check-public-symbols - - run: - name: Lint podspecs and plist files - command: make ios-lint - - check-if-this-job-can-be-skipped - - build-ios-test - - run: - name: Check symbol namespacing for mapbox-events-ios - command: make ios-check-events-symbols - - run: - name: Nitpick Darwin code generation - command: scripts/nitpick/generated-code.js darwin - - save-dependencies - - collect-xcode-build-logs - - upload-xcode-build-logs - -# ------------------------------------------------------------------------------ - ios-debug-xcode11: - macos: - xcode: "11.0.0" - environment: - BUILDTYPE: Debug - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - steps: - - install-macos-dependencies - - install-dependencies - - check-public-symbols - - run: - name: Lint podspecs and plist files - command: make ios-lint - - check-if-this-job-can-be-skipped - - build-ios-test - - run: - name: Check symbol namespacing for mapbox-events-ios - command: make ios-check-events-symbols - - run: - name: Nitpick Darwin code generation - command: scripts/nitpick/generated-code.js darwin - - save-dependencies - - collect-xcode-build-logs - - upload-xcode-build-logs - -# ------------------------------------------------------------------------------ - ios-sanitize-nightly: - macos: - xcode: "10.3.0" - environment: - BUILDTYPE: Debug - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - SLACK_CHANNEL: C0ACM9Q2C - steps: - - install-macos-dependencies - - install-dependencies - - run: - name: Build and run SDK unit tests with thread and undefined behavior sanitizers - command: make ios-sanitize - - run: - name: Get iOS code coverage - command: | - platform/ios/scripts/ios-code-coverage.sh CI - - save-dependencies - - collect-xcode-build-logs - - upload-xcode-build-logs - - notify-slack-nightly-failure - -# ------------------------------------------------------------------------------ - ios-sanitize-address-nightly: - macos: - xcode: "10.3.0" - environment: - BUILDTYPE: Debug - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - SLACK_CHANNEL: C0ACM9Q2C - steps: - - install-macos-dependencies - - install-dependencies - - run: - name: Build and run SDK unit tests with address sanitizer - command: make ios-sanitize-address - - save-dependencies - - collect-xcode-build-logs - - upload-xcode-build-logs - - notify-slack-nightly-failure - -# ------------------------------------------------------------------------------ - ios-static-analyzer-nightly: - macos: - xcode: "10.3.0" - environment: - BUILDTYPE: Debug - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - SLACK_CHANNEL: C0ACM9Q2C - steps: - - install-macos-dependencies - - install-dependencies - - run: - name: Build and run SDK unit tests with the static analyzer - command: make ios-static-analyzer - - save-dependencies - - collect-xcode-build-logs - - upload-xcode-build-logs - - notify-slack-nightly-failure - -# ------------------------------------------------------------------------------ - ios-static-analyzer-nightly-xcode11: - macos: - xcode: "11.0.0" - environment: - BUILDTYPE: Debug - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - SLACK_CHANNEL: C0ACM9Q2C - steps: - - install-macos-dependencies - - install-dependencies - - run: - name: Build and run SDK unit tests with the static analyzer - command: make ios-static-analyzer - - save-dependencies - - collect-xcode-build-logs - - upload-xcode-build-logs - - notify-slack-nightly-failure - -# ------------------------------------------------------------------------------ - ios-release-template: - macos: - xcode: "10.3.0" - environment: - BUILDTYPE: Release - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - SLACK_CHANNEL: C0ACM9Q2C - steps: - - install-macos-dependencies - - install-dependencies - - check-if-this-job-can-be-skipped - - install-ios-packaging-dependencies - - run: - name: Build dynamic framework for device and simulator - command: make iframework - no_output_timeout: 5m - - deploy: - name: Upload snapshot build to s3 - command: | - if [[ $CIRCLE_BRANCH == master ]]; then - platform/ios/scripts/deploy-snapshot.sh - fi - - deploy: - name: Deploy to Mapbox CocoaPods spec repo - command: | - if [[ $CIRCLE_BRANCH == master ]]; then - platform/ios/scripts/deploy-to-cocoapods.sh - fi - - run: - name: Record size - command: platform/ios/scripts/metrics.sh - - run: - name: Trigger metrics - command: | - if [[ $CIRCLE_BRANCH == master ]]; then - if [ -n "${MOBILE_METRICS_TOKEN}" ]; then - curl -u $MOBILE_METRICS_TOKEN -d build_parameters[CIRCLE_JOB]=ios-maps-benchmark https://circleci.com/api/v1.1/project/github/mapbox/mobile-metrics/tree/master - else - echo "MOBILE_METRICS_TOKEN not provided" - fi - fi - - save-dependencies - - collect-xcode-build-logs - - upload-xcode-build-logs - - notify-slack-nightly-failure - -# ------------------------------------------------------------------------------ - ios-release-tag: - macos: - xcode: "10.3.0" - environment: - BUILDTYPE: Release - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - SLACK_CHANNEL: C0ACM9Q2C +jobs: + build-template-linux: + parameters: + config_params: + type: string + default: '-G Ninja' + build_params: + type: string + default: '' + test_params: + type: string + default: '' + executor: linux steps: - checkout - - run: - name: Send a Slack notification on start - command: | - export SLACK_MESSAGE="<$CIRCLE_BUILD_URL|Release build for \`$CIRCLE_TAG\` started.>" - scripts/notify-slack.sh - - install-macos-dependencies - - install-dependencies - - install-ios-packaging-dependencies - - run: - name: Trigger external deploy steps - command: | - export VERSION_TAG=${CIRCLE_TAG} - export GITHUB_TOKEN=${DANGER_GITHUB_API_TOKEN} - platform/ios/scripts/trigger-external-deploy-steps.sh - - run: - name: Build, package, and upload iOS release - command: | - export VERSION_TAG=${CIRCLE_TAG} - export GITHUB_TOKEN=${DANGER_GITHUB_API_TOKEN} - platform/ios/scripts/deploy-packages.sh - - deploy: - name: Deploy to CocoaPods - command: platform/ios/scripts/deploy-to-cocoapods.sh - - save-dependencies - - collect-xcode-build-logs - - upload-xcode-build-logs - - run: - name: Send a Slack notification on failure - when: on_fail - command: | - export SLACK_MESSAGE="<$CIRCLE_BUILD_URL|Release build for \`$CIRCLE_TAG\` failed.>" - export SLACK_COLOR="danger" - scripts/notify-slack.sh - - run: - name: Send a Slack notification on success - when: on_success - command: | - export SLACK_MESSAGE="<$CIRCLE_BUILD_URL|Release build for \`$CIRCLE_TAG\` succeeded.>" - export SLACK_COLOR="good" - scripts/notify-slack.sh - -# ------------------------------------------------------------------------------ - macos-debug: - macos: - xcode: "10.1.0" - environment: - BUILDTYPE: Debug - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - steps: - - install-macos-dependencies - - install-dependencies - - check-if-this-job-can-be-skipped - - build-macos-test - - check-public-symbols - - run: - name: Lint plist files - command: make macos-lint - - run: - name: Nitpick Darwin code generation - command: scripts/nitpick/generated-code.js darwin - - save-dependencies + - prepare + - config: + config_params: << parameters.config_params >> + - build: + build_params: << parameters.build_params >> + - test: + test_params: << parameters.test_params >> - store_artifacts: - path: test/fixtures - destination: test/fixtures - - collect-xcode-build-logs - - upload-xcode-build-logs - -# ------------------------------------------------------------------------------ - macos-render-tests: - macos: - xcode: "10.3.0" - environment: - BUILDTYPE: RelWithDebInfo - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - JOBS: 2 - steps: - - install-macos-dependencies - - install-dependencies - - check-if-this-job-can-be-skipped - - configure-cmake - - build-mbgl-render-test - - save-dependencies - - run-macos-render-tests - - upload-render-tests - -# ------------------------------------------------------------------------------ - metrics-nightly: - docker: - - image: mbgl/linux-gcc-5:54f59e3ac5 - working_directory: /src - environment: - LIBSYSCONFCPUS: 2 - JOBS: 2 - steps: - - install-dependencies - - run: - name: Collect GitHub statistics - command: | - scripts/publish_github_stats.js - -# ------------------------------------------------------------------------------ - qt5-linux-gcc5-release: - docker: - - image: mbgl/linux-gcc-5-qt-5.9:5132cfd29f - resource_class: large - working_directory: /src - environment: - LIBSYSCONFCPUS: 4 - JOBS: 4 - BUILDTYPE: Release - WITH_QT_I18N: 1 - steps: - - install-dependencies - - check-if-this-job-can-be-skipped - - build-qt-app - - build-qt-test - - run: - name: Build qt-docs - command: make qt-docs - - save-dependencies - - run: - name: Run valgrind-backed tests - environment: - JOBS: 1 # https://github.com/mapbox/mapbox-gl-native/issues/9108 - command: | - xvfb-run --server-args="-screen 0 1024x768x24" \ - build/qt-linux-x86_64/Release/mbgl-test --gtest_filter=-*.Load --gtest_filter=-Memory.Vector --gtest_filter=-BiDi.* + path: /src/mapbox-gl-js/test/integration/render-tests + destination: render-tests + when: on_fail -# ------------------------------------------------------------------------------ - qt5-macos-debug: - macos: - xcode: "9.3.1" - environment: - BUILDTYPE: Debug - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - steps: - - install-macos-dependencies - - install-qt-macos-dependencies - - install-dependencies - - check-if-this-job-can-be-skipped - - build-qt-app - - build-qt-test - - run: - name: Run qt-test - command: make run-qt-test - - save-dependencies - - store_artifacts: - path: test/fixtures - destination: test/fixtures +# - build-template-macos: +# name: Qt5 macOS xcode 10.1.0 Release +# xcode: '10.1.0' +# config_params: '-G Xcode -DMBGL_WITH_QT=ON' +# - build-template-macos: +# name: macOS xcode 10.2.1 Release +# xcode: '10.2.1' +# config_params: '-G Xcode' +# build-template-macos: +# parameters: +# xcode: +# type: string +# config_params: +# type: string +# default: '' +# build_params: +# type: string +# default: '' +# macos: +# xcode: << parameters.xcode >> +# environment: +# HOMEBREW_NO_AUTO_UPDATE: 1 +# HOMEBREW_NO_INSTALL_CLEANUP: 1 +# steps: +# - checkout +# - prepare +# - run: +# name: Install deps +# command: | +# brew install cmake ccache pkgconfig glfw qt +# brew link qt --force +# export HOMEBREW_QT5_CELLAR=$(brew --cellar qt) +# export HOMEBREW_QT5_VERSION=$(brew list --versions qt |rev |cut -d' ' -f1 |rev) +# sudo ln -s $HOMEBREW_QT5_CELLAR/$HOMEBREW_QT5_VERSION/mkspecs /usr/local/mkspecs +# sudo ln -s $HOMEBREW_QT5_CELLAR/$HOMEBREW_QT5_VERSION/plugins /usr/local/plugins +# - config: +# config_params: << parameters.config_params >> +# - build: +# build_params: << parameters.build_params >> +# - test diff --git a/circle.yml.old b/circle.yml.old new file mode 100644 index 0000000000..68c49dd3f6 --- /dev/null +++ b/circle.yml.old @@ -0,0 +1,1344 @@ +version: 2.1 + +workflows: + version: 2 + default: + jobs: + # + # Naming convention: {platform}-{additional description}-{build type} + # - {platform} is the client platform/framework, which may differ from + # the build platform. Specify both if applicable, e.g., "qt5-macos". + # - {additional description} optionally describes the compiler or other + # unique aspect of the build environment. + # - {build type} is typically "debug" or "release". + # + - nitpick + - clang-tidy: + filters: + branches: + ignore: master + - android-debug-arm-v7-buck + - android-arm-template: + name: android-debug-arm-v8 + - android-arm-template: + name: android-gnustl-arm-v7 + stl: gnustl_shared + firebase_device_id: "flo" + firebase_device_os: "21" + image: android-ndk-r17c:1d5db0eb34 + abi: arm-v7 + - android-release: + filters: + tags: + only: /android-v.*/ + - node-clang39-release: + filters: + tags: + only: /node-.*/ + - node-gcc8-debug: + filters: + tags: + only: /node-.*/ + - node-macos-release: + filters: + tags: + only: /node-.*/ + - linux-clang-38-libcxx-debug: + name: linux-clang-3.8-libcxx-debug + - linux-clang-7-sanitize-address-undefined + - linux-clang-7-sanitize-thread + - linux-gcc49-debug: + name: linux-gcc4.9-debug + - linux-gcc5-debug-coverage + - linux-doxygen + - linux-render-tests + - ios-debug + - ios-debug-xcode11 + - ios-release-template: + name: ios-release + - ios-release-tag: + filters: + tags: + only: /ios-.*/ + branches: + ignore: /.*/ + - macos-debug + - macos-render-tests + - qt5-linux-gcc5-release + - qt5-macos-debug + nightly: + triggers: + - schedule: + cron: "0 5 * * *" + filters: + branches: + only: + - master + jobs: + - metrics-nightly + - ios-release-template: + name: ios-release-nightly + - ios-sanitize-nightly + - ios-sanitize-address-nightly + - ios-static-analyzer-nightly + - ios-static-analyzer-nightly-xcode11 + +commands: + npm-install: + steps: + - run: + name: npm install + command: npm install --ignore-scripts + prepare-environment: + steps: + - run: + name: Prepare environment + command: touch "$BASH_ENV" && ./scripts/environment.js | tee -a "$BASH_ENV" + prepare-ccache: + steps: + - run: + name: Prepare ccache + command: | + # CircleCI doesn't have any way to embed arbitrary environment variables or command output + # into cache keys, so we're using the workaround of writing the desired content to a file, + # and then using `{{ checksum "filename" }}` in the cache key. + echo "$CIRCLE_BRANCH" + echo "$CIRCLE_BRANCH" > .circle-branch + echo "$CIRCLE_SHA1" + echo "$CIRCLE_SHA1" > .circle-sha1 + echo "$CIRCLE_TARGET_BRANCH" + echo "${CIRCLE_TARGET_BRANCH:master}" > .circle-target-branch + echo "$CIRCLE_MERGE_BASE" + echo "${CIRCLE_MERGE_BASE:master}" > .circle-merge-base + ccache --clear + reset-ccache-stats: + steps: + - run: + name: Clear ccache statistics + command: | + ccache --zero-stats + ccache --max-size=2G + ccache --show-stats + show-ccache-stats: + steps: + - run: + name: Show ccache statistics + command: ccache --show-stats + + + save-node_modules-cache: + steps: + - save_cache: + name: Save node_modules cache + key: 'node_modules/v1/{{ arch }}/{{ checksum "package.json" }}' + paths: [ "node_modules" ] + restore-node_modules-cache: + steps: + - restore_cache: + name: Restore node_modules cache + keys: + - 'node_modules/v1/{{ arch }}/{{ checksum "package.json" }}' + - 'node_modules/v1/{{ arch }}' + save-mason_packages-cache: + steps: + - save_cache: + name: Save mason_packages cache + key: 'mason_packages/v3/{{ arch }}/{{ checksum "cmake/mason-dependencies.cmake" }}' + paths: [ "mason_packages/.binaries" ] + restore-mason_packages-cache: + steps: + - restore_cache: + name: Restore mason_packages cache + keys: + - 'mason_packages/v3/{{ arch }}/{{ checksum "cmake/mason-dependencies.cmake" }}' + - 'mason_packages/v3/{{ arch }}' + save-ccache: + steps: + - save_cache: + name: Save ccache + key: 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-branch" }}/{{ checksum ".circle-sha1" }}' + paths: [ "~/.ccache" ] + restore-ccache: + steps: + - restore_cache: + name: Restore ccache + keys: + - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-branch" }}/{{ checksum ".circle-sha1" }}' + - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-branch" }}' + - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-target-branch" }}/{{ checksum ".circle-merge-base" }}' + - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-target-branch" }}' + - 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}' + save-gradle-cache: + steps: + - save_cache: + name: Save gradle cache + key: 'gradle/v1/{{ checksum "platform/android/gradle/dependencies.gradle" }}/{{ checksum "platform/android/build.gradle" }}/{{ checksum "platform/android/gradle/wrapper/gradle-wrapper.properties" }}' + paths: [ "/root/.gradle" ] + restore-gradle-cache: + steps: + - restore_cache: + name: Restore gradle cache + keys: + - 'gradle/v1/{{ checksum "platform/android/gradle/dependencies.gradle" }}/{{ checksum "platform/android/build.gradle" }}/{{ checksum "platform/android/gradle/wrapper/gradle-wrapper.properties" }}' + - 'gradle/v1' + + + install-dependencies: + parameters: + node_modules: + type: boolean + default: true + ccache: + type: boolean + default: true + mason: + type: boolean + default: true + gradle: + type: boolean + default: false + steps: + - checkout + - when: + condition: << parameters.node_modules >> + steps: [ restore-node_modules-cache, npm-install ] + - prepare-environment + - when: + condition: << parameters.ccache >> + steps: [ prepare-ccache, restore-ccache, reset-ccache-stats ] + - when: + condition: << parameters.mason >> + steps: [ restore-mason_packages-cache ] + - when: + condition: << parameters.gradle >> + steps: [ restore-gradle-cache ] + save-dependencies: + parameters: + node_modules: + type: boolean + default: true + ccache: + type: boolean + default: true + mason: + type: boolean + default: true + gradle: + type: boolean + default: false + steps: + - when: + condition: << parameters.node_modules >> + steps: [ save-node_modules-cache ] + - when: + condition: << parameters.ccache >> + steps: [ save-ccache, show-ccache-stats ] + - when: + condition: << parameters.mason >> + steps: [ save-mason_packages-cache ] + - when: + condition: << parameters.gradle >> + steps: [ save-gradle-cache ] + + + setup-llvm-symbolizer: + steps: + - run: + name: Environment Setup + command: | + # LLVM has a hard check for "llvm-symbolizer" and doesn't support suffixed executables + ln -s /usr/bin/llvm-symbolizer-* /usr/bin/llvm-symbolizer + # We'll use tee to redirect stderr to a file so we can check for sanitiziation + # https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/1059947 + sed -i 's/"$@" 2>&1/"$@"/' /usr/bin/xvfb-run + + + configure-cmake: + steps: + - run: + name: CMake configuration step + command: | + mkdir -p build + cd build + cmake -DWITH_CXX11ABI=${WITH_CXX11ABI:0} -DWITH_COVERAGE=${WITH_COVERAGE:0} -DWITH_OSMESA=${WITH_OSMESA:0} -DWITH_EGL=${WITH_EGL:0} .. + cd .. + build-node: + steps: + - run: + name: Build node + command: make node-all + build-mbgl-render-test: + steps: + - run: + name: Build mbgl-render-test + command: cmake --build build --config ${BUILDTYPE} --target mbgl-render-test -- -j${JOBS} + build-linux: + steps: + - run: + name: Build linux + command: make linux + build-benchmark: + steps: + - run: + name: Build benchmark + command: make benchmark + build-test: + steps: + - run: + name: Build test + command: make test + build-qt-app: + steps: + - run: + name: Build qt-app + command: make qt-app + build-qt-test: + steps: + - run: + name: Build qt-test + command: make qt-test + build-ios-test: + steps: + - run: + name: Build ios-test + command: make ios-test + no_output_timeout: 2m + build-ios-integration-test: + steps: + - run: + name: Build ios-integration-test + command: make ios-integration-test + build-macos-test: + steps: + - run: + name: Build and run macOS tests + command: make run-test + no_output_timeout: 2m + + + check-public-symbols: + steps: + - run: + name: Check public symbols + command: make darwin-check-public-symbols + + + conditionally-skip-firebase: + steps: + - run: + name: Check if Firebase should be skipped + command: | + SKIPPABLE_TAG=$( git log -1 | grep -ioE -e "\[(skip.firebase|firebase.skip)\]" -e "\[((i|mac)os)+(, (i|mac)os)?\]" -e "\[darwin\]" || true ) + if [ -n "${SKIPPABLE_TAG}" ]; then + echo "Skipping Firebase tests because commit message contained: '${SKIPPABLE_TAG}'" + echo 'export SKIP_FIREBASE=1' >> $BASH_ENV + fi + login-google-cloud-platform: + steps: + - run: + name: Log in to Google Cloud Platform + command: | + if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON}" && -z "${SKIP_FIREBASE:-}" ]]; then + echo "${GCLOUD_SERVICE_ACCOUNT_JSON}" > secret.json + gcloud auth activate-service-account --key-file secret.json --project android-gl-native + rm secret.json + fi + + + install-ios-packaging-dependencies: + steps: + - run: + name: Install iOS packaging dependencies + command: ./platform/ios/scripts/install-packaging-dependencies.sh + background: true + + install-macos-dependencies: + steps: + - run: + name: Install macOS dependencies + command: brew install cmake ccache + + install-node-macos-dependencies: + steps: + - run: + name: Install Node macOS dependencies + command: | + brew install node@8 + brew link node@8 --force --overwrite + + install-qt-macos-dependencies: + steps: + - run: + name: Install Qt macOS dependencies + command: | + brew install qt + brew link qt --force + export HOMEBREW_QT5_CELLAR=$(brew --cellar qt) + export HOMEBREW_QT5_VERSION=$(brew list --versions qt | rev | cut -d' ' -f1 | rev) + sudo ln -s $HOMEBREW_QT5_CELLAR/$HOMEBREW_QT5_VERSION/mkspecs /usr/local/mkspecs + sudo ln -s $HOMEBREW_QT5_CELLAR/$HOMEBREW_QT5_VERSION/plugins /usr/local/plugins + + run-node-macos-tests: + steps: + - run: + name: Run node tests + command: make test-node + + run-node-linux-tests: + parameters: + node_version: + type: string + default: v8 + steps: + - run: + name: Run node tests + command: | + . "$NVM_DIR/nvm.sh" && nvm use << parameters.node_version >> + xvfb-run --server-args="-screen 0 1024x768x24" \ + logbt -- apitrace trace --api=egl -v make test-node + + run-macos-render-tests: + steps: + - run: + name: Run render tests (mbgl-render-test) + command: | + build/mbgl-render-test --recycle-map --shuffle + no_output_timeout: 2m + + run-linux-render-tests: + parameters: + node_version: + type: string + default: v8 + steps: + - run: + name: Run render tests (mbgl-render-test) + command: | + xvfb-run --server-args="-screen 0 1024x768x24" \ + logbt -- apitrace trace --api=egl -v build/mbgl-render-test --recycle-map --shuffle + + run-unit-tests: + steps: + - run: + name: Run tests + command: | + xvfb-run --server-args="-screen 0 1024x768x24" \ + make run-test + + run-unit-tests-sanitized: + steps: + - run: + name: Run tests + command: | + # Source.RenderTileSetSourceUpdate is filtered out due to #15294 + xvfb-run --server-args="-screen 0 1024x768x24" make run-test--Source.RenderTileSetSourceUpdate 2> >(tee sanitizer 1>&2) + # Unfortunately, Google Test eats the status code, so we'll have to check the output. + [ -z "$(sed -n '/^SUMMARY: .*Sanitizer:/p' sanitizer)" ] + + publish-node-package: + steps: + - run: + name: Publish node package + when: on_success + command: platform/node/scripts/publish.sh + + upload-render-tests: + steps: + - store_artifacts: + path: mapbox-gl-js/test/integration/render-tests/index.html + destination: render-tests + + collect-xcode-build-logs: + steps: + - run: + name: Collect Xcode build logs + when: always + command: | + export XCODE_LOG_DIR=build/logs + mkdir -p $XCODE_LOG_DIR + cp build/*.log $XCODE_LOG_DIR + upload-xcode-build-logs: + steps: + - store_artifacts: + path: build/logs + + + notify-slack-nightly-failure: + steps: + - run: + name: Send a Slack notification on nightly failure + when: on_fail + command: | + if [[ $CIRCLE_BRANCH == master ]]; then + export SLACK_MESSAGE="Nightly build of \`$CIRCLE_JOB\` <$CIRCLE_BUILD_URL|failed>." + export SLACK_COLOR="danger" + scripts/notify-slack.sh + fi + + # + # Add this step to all regular jobs to enable skipping of certain non-code-related changes. + # + # Do not include this step in nightly or release deployment jobs. + # + # To make a job potentially skippable on changes unrelated to its platform, it must: + # - Target one of the skippable platforms: Android, iOS, or macOS. + # - Have a job name that begins with a supported platform name. + # - Not be related to core functionality or rendering tests. Job names that + # contain "render-tests" cannot be skipped by platform changes. + # + # See the script in the following step for how to implement support for other platforms. + # + check-if-this-job-can-be-skipped: + steps: + - run: + name: Check if this job can be skipped + command: | + if [[ $CIRCLE_BRANCH != master ]] && [[ $CIRCLE_BRANCH != release-* ]]; then + scripts/check-ci-job-skippability.js + fi + +jobs: + nitpick: + docker: + - image: mbgl/linux-clang-7:a5a3c52107 + working_directory: /src + environment: + LIBSYSCONFCPUS: 2 + JOBS: 2 + BUILDTYPE: Debug + steps: + - install-dependencies: { mason: false, ccache: false } + - run: + name: Initialize submodules + command: | + git submodule update --init + git submodule foreach git submodule update --init + - run: + name: Verify submodule pin + command: scripts/nitpick/submodule-pin.js + when: always + - run: + name: Source file list generation + command: scripts/nitpick/generated-code.js sources + when: always + - run: + name: Shader code generation + command: scripts/nitpick/generated-code.js shader + when: always + - run: + name: Style code generation + command: scripts/nitpick/generated-code.js style + when: always + - run: + name: Android code generation + command: scripts/nitpick/generated-code.js android + when: always + +# ------------------------------------------------------------------------------ + clang-tidy: + docker: + - image: mbgl/linux-clang-7:a5a3c52107 + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: Debug + steps: + - install-dependencies: { ccache: false } + - run: + name: Fetch 'origin/master' branch + command: git fetch origin master:refs/remotes/origin/master + - run: + name: Generate compilation database + command: make compdb + - run: + name: Run Clang checks + command: make check TARGET_BRANCH=${CIRCLE_TARGET_BRANCH:master} + no_output_timeout: 20m + - save-dependencies: { ccache: false } + +# ------------------------------------------------------------------------------ + android-arm-template: + parameters: + stl: + type: string + default: "c++_static" + image: + type: string + default: android-ndk-r20:7b7c4b42cf + firebase_device_id: + type: string + default: sailfish + firebase_device_os: + type: string + default: "26" + abi: + type: string + default: "arm-v8" + docker: + - image: mbgl/<< parameters.image >> + resource_class: xlarge + working_directory: /src + environment: + LIBSYSCONFCPUS: 8 + JOBS: 8 + BUILDTYPE: Debug + IS_LOCAL_DEVELOPMENT: false + MBGL_ANDROID_STL: << parameters.stl >> + steps: + - install-dependencies: { gradle: true } + - check-if-this-job-can-be-skipped + - run: + name: Initialize vendor submodules + command: git submodule update --init platform/android/vendor + - run: + name: Check code style + command: make android-check + - run: + name: Run Android unit tests + command: make run-android-unit-test + - run: + name: Build libmapbox-gl.so for << parameters.abi >> + command: make android-lib-<< parameters.abi >> + - run: + name: Generate Espresso sanity tests + command: make test-code-android + - run: + name: Build Test APK + command: | + if [ -n "${MAPBOX_DEVELOPER_CONFIG_XML}" ]; then + echo "${MAPBOX_DEVELOPER_CONFIG_XML}" > platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/developer-config.xml + make android-ui-test-<< parameters.abi >> + fi + - save-dependencies: { gradle: true } + - conditionally-skip-firebase + - login-google-cloud-platform + - run: + name: Run instrumentation tests on Firebase + no_output_timeout: 20m + command: | + if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON}" && -z "${SKIP_FIREBASE:-}" ]]; then + gcloud firebase test android models list + gcloud firebase test android run --type instrumentation \ + --app platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/debug/MapboxGLAndroidSDKTestApp-debug.apk \ + --test platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/androidTest/debug/MapboxGLAndroidSDKTestApp-debug-androidTest.apk \ + --device-ids << parameters.firebase_device_id >> --os-version-ids << parameters.firebase_device_os >> --locales en --orientations portrait --timeout 20m \ + --environment-variables coverage=true,coverageFile="/sdcard/coverage.ec" --directories-to-pull /sdcard --results-dir mapbox-android-sdk-${CIRCLE_BUILD_NUM} + coverageFile=`gsutil ls gs://test-lab-186672a0qp5bq-ycr70axads3nc/mapbox-android-sdk-${CIRCLE_BUILD_NUM}/**/*.ec | tail -1` + gsutil cp $coverageFile $PWD/platform/android/MapboxGLAndroidSDK/build/jacoco | true + fi + - run: + name: Parse and send Jacoco reports + command: | + if [[ $CIRCLE_BRANCH == master ]]; then + make android-create-jacoco-report && make android-parse-and-send-jacoco-report + fi + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/debug + destination: . + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/build/reports/lint-results.html + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/build/reports/lint-results.xml + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/lint-baseline.xml + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKTestApp/build/reports/lint-results.html + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKTestApp/build/reports/lint-results.xml + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKTestApp/lint-baseline.xml + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/debug/obj + +# ------------------------------------------------------------------------------ + android-release: + docker: + - image: mbgl/android-ndk-r20:7b7c4b42cf + resource_class: xlarge + working_directory: /src + environment: + LIBSYSCONFCPUS: 8 + JOBS: 8 + BUILDTYPE: Release + IS_LOCAL_DEVELOPMENT: false + steps: + - install-dependencies: { gradle: true } + - check-if-this-job-can-be-skipped + - run: + name: Initialize vendor submodules + command: git submodule update --init platform/android/vendor + - run: + name: Android nitpick + command: make run-android-nitpick + - run: + name: Trigger core benchmark run + command: | + if [ -n "${MOBILE_METRICS_TOKEN}" ]; then + if [[ $CIRCLE_BRANCH == master ]]; then + curl -u $MOBILE_METRICS_TOKEN -d build_parameters[CIRCLE_JOB]=android-core-benchmark https://circleci.com/api/v1.1/project/github/mapbox/mobile-metrics/tree/master + fi + fi + - run: + name: Trigger android benchmark run + command: | + if [ -n "${MOBILE_METRICS_TOKEN}" ]; then + if [[ $CIRCLE_BRANCH == master ]]; then + curl -u $MOBILE_METRICS_TOKEN -d build_parameters[CIRCLE_JOB]=android-benchmark https://circleci.com/api/v1.1/project/github/mapbox/mobile-metrics/tree/master + fi + fi + - run: + name: Generate Maven credentials + command: | + if [ -n "${BINTRAY_USER}" ]; then + echo "BINTRAY_USER=$BINTRAY_USER + BINTRAY_API_KEY=$BINTRAY_API_KEY + GPG_PASSPHRASE=$GPG_PASSPHRASE" + fi + - run: + name: Update version name + command: | + if [[ $CIRCLE_TAG == android-v* ]]; then + sed -i -e "s/^VERSION_NAME=.*/VERSION_NAME=${CIRCLE_TAG:9}/" platform/android/MapboxGLAndroidSDK/gradle.properties + fi + - run: + name: Build package + command: make apackage + - run: + name: Build release Test App + command: make android + - run: + name: Generate javadoc + command: make android-javadoc + - save-dependencies: { gradle: true } + - run: + name: gzip debugable .so files + command: | + gzip platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/arm64-v8a/libmapbox-gl.so && \ + gzip platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/armeabi-v7a/libmapbox-gl.so && \ + gzip platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/x86/libmapbox-gl.so && \ + gzip platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/x86_64/libmapbox-gl.so + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/release + destination: . + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/arm64-v8a/libmapbox-gl.so.gz + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/armeabi-v7a/libmapbox-gl.so.gz + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/x86/libmapbox-gl.so.gz + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/release/obj/x86_64/libmapbox-gl.so.gz + - deploy: + name: Publish to Bintray + command: | + if [[ $CIRCLE_BRANCH == master ]] || [[ $CIRCLE_BRANCH == release-* ]] || [[ $CIRCLE_TAG == android-v* ]]; then + version=$(cat platform/android/MapboxGLAndroidSDK/gradle.properties | grep "VERSION_NAME") + if [[ $version != *"SNAPSHOT"* ]]; then + make run-android-upload-to-bintray + else + make run-android-upload-to-artifactory + fi + fi + - run: + name: Record size + command: platform/android/scripts/metrics.sh +# ------------------------------------------------------------------------------ + android-debug-arm-v7-buck: + docker: + - image: mbgl/android-ndk-r17c-buck:07c5ef2e71 + working_directory: /src + environment: + LIBSYSCONFCPUS: 2 + JOBS: 2 + BUILDTYPE: Debug + ANDROID_NDK: /android/sdk/ndk-bundle + steps: + - checkout + - npm-install + - prepare-environment + - check-if-this-job-can-be-skipped + - run: + name: Checkout submodules + command: | + git submodule update --init + git submodule foreach git submodule update --init + - run: + name: Build Android library + command: | + cd misc/buck + buck build mapbox-gl-native:android-core + +# ------------------------------------------------------------------------------ + node-clang39-release: + docker: + - image: mbgl/linux-clang-3.9:2077f965ed + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: RelWithDebInfo + WITH_EGL: 1 + WITH_CXX11ABI: 0 + steps: + - install-dependencies + - build-node + - save-dependencies + - run-node-linux-tests + - publish-node-package + +# ------------------------------------------------------------------------------ + node-gcc8-debug: + docker: + - image: mbgl/linux-gcc-8:d2b1553d2f + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: Debug + WITH_EGL: 1 + steps: + - install-dependencies + - check-if-this-job-can-be-skipped + - build-node + - save-dependencies + - publish-node-package + +# ------------------------------------------------------------------------------ + node-macos-release: + macos: + xcode: "10.3.0" + environment: + BUILDTYPE: RelWithDebInfo + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + steps: + - install-macos-dependencies + - install-node-macos-dependencies + - install-dependencies + - check-if-this-job-can-be-skipped + - build-node + - save-dependencies + - run-node-macos-tests + - publish-node-package + - collect-xcode-build-logs + - upload-xcode-build-logs + +# ------------------------------------------------------------------------------ + linux-clang-38-libcxx-debug: + docker: + - image: mbgl/linux-clang-3.8-libcxx:d6800bdbb4 + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: Debug + WITH_EGL: 1 + WITH_CXX11ABI: 1 + steps: + - install-dependencies + - check-if-this-job-can-be-skipped + - build-linux + - save-dependencies + +# ------------------------------------------------------------------------------ + linux-clang-7-sanitize-address-undefined: + docker: + - image: mbgl/linux-clang-7:a5a3c52107 + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: Sanitize + WITH_EGL: 1 + GDB: '' # Do not run with GDB + CXXFLAGS: -fsanitize=address -fsanitize=undefined + LDFLAGS: -fsanitize=address -fsanitize=undefined + ASAN_OPTIONS: detect_leaks=0:color=always:print_summary=1 + UBSAN_OPTIONS: print_stacktrace=1:color=always:print_summary=1 + steps: + - install-dependencies + - check-if-this-job-can-be-skipped + - setup-llvm-symbolizer + - build-test + - save-dependencies + - run-unit-tests-sanitized + +# ------------------------------------------------------------------------------ + linux-clang-7-sanitize-thread: + docker: + - image: mbgl/linux-clang-7:a5a3c52107 + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: Sanitize + WITH_EGL: 1 + GDB: '' # Do not run with GDB + CXXFLAGS: -fsanitize=thread + LDFLAGS: -fsanitize=thread + TSAN_OPTIONS: color=always:print_summary=1 + steps: + - install-dependencies + - check-if-this-job-can-be-skipped + - setup-llvm-symbolizer + - build-test + - save-dependencies + - run-unit-tests-sanitized + +# ------------------------------------------------------------------------------ + linux-gcc49-debug: + docker: + - image: mbgl/linux-gcc-4.9:e3818a77c1 + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: Debug + WITH_EGL: 1 + WITH_CXX11ABI: 0 + DISPLAY: :0 + steps: + - install-dependencies + - check-if-this-job-can-be-skipped + - build-linux + - build-benchmark + - build-test + - save-dependencies + - run-unit-tests + - run: + name: Build offline CLI + command: make offline + +# ------------------------------------------------------------------------------ + linux-gcc5-debug-coverage: + docker: + - image: mbgl/linux-gcc-5:54f59e3ac5 + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: Debug + WITH_EGL: 1 + WITH_COVERAGE: 1 + steps: + - install-dependencies + - check-if-this-job-can-be-skipped + - build-linux + - build-benchmark + - build-test + - save-dependencies + - run-unit-tests + - run: + name: Upload coverage results to codecov.io + command: | + bash <(curl -sSfL https://codecov.io/bash) || echo 'Codecov failed to upload' + - run: + name: Upload coverage metrics to s3 + command: | + if [[ $CIRCLE_BRANCH == master ]]; then + scripts/publish_core_codecoverage.js -p Linux -s Core + fi + +# ------------------------------------------------------------------------------ + linux-doxygen: + docker: + - image: mbgl/linux-gcc-5:54f59e3ac5 + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 2 + JOBS: 2 + BUILDTYPE: Debug + WITH_EGL: 1 + WITH_COVERAGE: 1 + steps: + - install-dependencies + - check-if-this-job-can-be-skipped + - run: + name: Install doxygen + command: apt update && apt install -y doxygen + - build-linux + - save-dependencies + - run: + name: Check documentation coverage + command: | + platform/linux/ninja -C "build/linux-$(uname -m)/Debug" doxygen_coverage + scripts/publish_doxygen_coverage.js "build/linux-$(uname -m)/Debug/doxygen-coverage.json" + +# ------------------------------------------------------------------------------ + linux-render-tests: + docker: + - image: mbgl/linux-clang-7:a5a3c52107 + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: RelWithDebInfo + WITH_EGL: 1 + steps: + - install-dependencies + - check-if-this-job-can-be-skipped + - configure-cmake + - build-mbgl-render-test + - run-linux-render-tests + - save-dependencies + - upload-render-tests + +# ------------------------------------------------------------------------------ + ios-debug: + macos: + xcode: "10.3.0" + environment: + BUILDTYPE: Debug + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + steps: + - install-macos-dependencies + - install-dependencies + - check-public-symbols + - run: + name: Lint podspecs and plist files + command: make ios-lint + - check-if-this-job-can-be-skipped + - build-ios-test + - run: + name: Check symbol namespacing for mapbox-events-ios + command: make ios-check-events-symbols + - run: + name: Nitpick Darwin code generation + command: scripts/nitpick/generated-code.js darwin + - save-dependencies + - collect-xcode-build-logs + - upload-xcode-build-logs + +# ------------------------------------------------------------------------------ + ios-debug-xcode11: + macos: + xcode: "11.0.0" + environment: + BUILDTYPE: Debug + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + steps: + - install-macos-dependencies + - install-dependencies + - check-public-symbols + - run: + name: Lint podspecs and plist files + command: make ios-lint + - check-if-this-job-can-be-skipped + - build-ios-test + - run: + name: Check symbol namespacing for mapbox-events-ios + command: make ios-check-events-symbols + - run: + name: Nitpick Darwin code generation + command: scripts/nitpick/generated-code.js darwin + - save-dependencies + - collect-xcode-build-logs + - upload-xcode-build-logs + +# ------------------------------------------------------------------------------ + ios-sanitize-nightly: + macos: + xcode: "10.3.0" + environment: + BUILDTYPE: Debug + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + SLACK_CHANNEL: C0ACM9Q2C + steps: + - install-macos-dependencies + - install-dependencies + - run: + name: Build and run SDK unit tests with thread and undefined behavior sanitizers + command: make ios-sanitize + - run: + name: Get iOS code coverage + command: | + platform/ios/scripts/ios-code-coverage.sh CI + - save-dependencies + - collect-xcode-build-logs + - upload-xcode-build-logs + - notify-slack-nightly-failure + +# ------------------------------------------------------------------------------ + ios-sanitize-address-nightly: + macos: + xcode: "10.3.0" + environment: + BUILDTYPE: Debug + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + SLACK_CHANNEL: C0ACM9Q2C + steps: + - install-macos-dependencies + - install-dependencies + - run: + name: Build and run SDK unit tests with address sanitizer + command: make ios-sanitize-address + - save-dependencies + - collect-xcode-build-logs + - upload-xcode-build-logs + - notify-slack-nightly-failure + +# ------------------------------------------------------------------------------ + ios-static-analyzer-nightly: + macos: + xcode: "10.3.0" + environment: + BUILDTYPE: Debug + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + SLACK_CHANNEL: C0ACM9Q2C + steps: + - install-macos-dependencies + - install-dependencies + - run: + name: Build and run SDK unit tests with the static analyzer + command: make ios-static-analyzer + - save-dependencies + - collect-xcode-build-logs + - upload-xcode-build-logs + - notify-slack-nightly-failure + +# ------------------------------------------------------------------------------ + ios-static-analyzer-nightly-xcode11: + macos: + xcode: "11.0.0" + environment: + BUILDTYPE: Debug + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + SLACK_CHANNEL: C0ACM9Q2C + steps: + - install-macos-dependencies + - install-dependencies + - run: + name: Build and run SDK unit tests with the static analyzer + command: make ios-static-analyzer + - save-dependencies + - collect-xcode-build-logs + - upload-xcode-build-logs + - notify-slack-nightly-failure + +# ------------------------------------------------------------------------------ + ios-release-template: + macos: + xcode: "10.3.0" + environment: + BUILDTYPE: Release + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + SLACK_CHANNEL: C0ACM9Q2C + steps: + - install-macos-dependencies + - install-dependencies + - check-if-this-job-can-be-skipped + - install-ios-packaging-dependencies + - run: + name: Build dynamic framework for device and simulator + command: make iframework + no_output_timeout: 5m + - deploy: + name: Upload snapshot build to s3 + command: | + if [[ $CIRCLE_BRANCH == master ]]; then + platform/ios/scripts/deploy-snapshot.sh + fi + - deploy: + name: Deploy to Mapbox CocoaPods spec repo + command: | + if [[ $CIRCLE_BRANCH == master ]]; then + platform/ios/scripts/deploy-to-cocoapods.sh + fi + - run: + name: Record size + command: platform/ios/scripts/metrics.sh + - run: + name: Trigger metrics + command: | + if [[ $CIRCLE_BRANCH == master ]]; then + if [ -n "${MOBILE_METRICS_TOKEN}" ]; then + curl -u $MOBILE_METRICS_TOKEN -d build_parameters[CIRCLE_JOB]=ios-maps-benchmark https://circleci.com/api/v1.1/project/github/mapbox/mobile-metrics/tree/master + else + echo "MOBILE_METRICS_TOKEN not provided" + fi + fi + - save-dependencies + - collect-xcode-build-logs + - upload-xcode-build-logs + - notify-slack-nightly-failure + +# ------------------------------------------------------------------------------ + ios-release-tag: + macos: + xcode: "10.3.0" + environment: + BUILDTYPE: Release + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + SLACK_CHANNEL: C0ACM9Q2C + steps: + - checkout + - run: + name: Send a Slack notification on start + command: | + export SLACK_MESSAGE="<$CIRCLE_BUILD_URL|Release build for \`$CIRCLE_TAG\` started.>" + scripts/notify-slack.sh + - install-macos-dependencies + - install-dependencies + - install-ios-packaging-dependencies + - run: + name: Trigger external deploy steps + command: | + export VERSION_TAG=${CIRCLE_TAG} + export GITHUB_TOKEN=${DANGER_GITHUB_API_TOKEN} + platform/ios/scripts/trigger-external-deploy-steps.sh + - run: + name: Build, package, and upload iOS release + command: | + export VERSION_TAG=${CIRCLE_TAG} + export GITHUB_TOKEN=${DANGER_GITHUB_API_TOKEN} + platform/ios/scripts/deploy-packages.sh + - deploy: + name: Deploy to CocoaPods + command: platform/ios/scripts/deploy-to-cocoapods.sh + - save-dependencies + - collect-xcode-build-logs + - upload-xcode-build-logs + - run: + name: Send a Slack notification on failure + when: on_fail + command: | + export SLACK_MESSAGE="<$CIRCLE_BUILD_URL|Release build for \`$CIRCLE_TAG\` failed.>" + export SLACK_COLOR="danger" + scripts/notify-slack.sh + - run: + name: Send a Slack notification on success + when: on_success + command: | + export SLACK_MESSAGE="<$CIRCLE_BUILD_URL|Release build for \`$CIRCLE_TAG\` succeeded.>" + export SLACK_COLOR="good" + scripts/notify-slack.sh + +# ------------------------------------------------------------------------------ + macos-debug: + macos: + xcode: "10.1.0" + environment: + BUILDTYPE: Debug + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + steps: + - install-macos-dependencies + - install-dependencies + - check-if-this-job-can-be-skipped + - build-macos-test + - check-public-symbols + - run: + name: Lint plist files + command: make macos-lint + - run: + name: Nitpick Darwin code generation + command: scripts/nitpick/generated-code.js darwin + - save-dependencies + - store_artifacts: + path: test/fixtures + destination: test/fixtures + - collect-xcode-build-logs + - upload-xcode-build-logs + +# ------------------------------------------------------------------------------ + macos-render-tests: + macos: + xcode: "10.3.0" + environment: + BUILDTYPE: RelWithDebInfo + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + JOBS: 2 + steps: + - install-macos-dependencies + - install-dependencies + - check-if-this-job-can-be-skipped + - configure-cmake + - build-mbgl-render-test + - save-dependencies + - run-macos-render-tests + - upload-render-tests + +# ------------------------------------------------------------------------------ + metrics-nightly: + docker: + - image: mbgl/linux-gcc-5:54f59e3ac5 + working_directory: /src + environment: + LIBSYSCONFCPUS: 2 + JOBS: 2 + steps: + - install-dependencies + - run: + name: Collect GitHub statistics + command: | + scripts/publish_github_stats.js + +# ------------------------------------------------------------------------------ + qt5-linux-gcc5-release: + docker: + - image: mbgl/linux-gcc-5-qt-5.9:5132cfd29f + resource_class: large + working_directory: /src + environment: + LIBSYSCONFCPUS: 4 + JOBS: 4 + BUILDTYPE: Release + WITH_QT_I18N: 1 + steps: + - install-dependencies + - check-if-this-job-can-be-skipped + - build-qt-app + - build-qt-test + - run: + name: Build qt-docs + command: make qt-docs + - save-dependencies + - run: + name: Run valgrind-backed tests + environment: + JOBS: 1 # https://github.com/mapbox/mapbox-gl-native/issues/9108 + command: | + xvfb-run --server-args="-screen 0 1024x768x24" \ + build/qt-linux-x86_64/Release/mbgl-test --gtest_filter=-*.Load --gtest_filter=-Memory.Vector --gtest_filter=-BiDi.* + +# ------------------------------------------------------------------------------ + qt5-macos-debug: + macos: + xcode: "9.3.1" + environment: + BUILDTYPE: Debug + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + steps: + - install-macos-dependencies + - install-qt-macos-dependencies + - install-dependencies + - check-if-this-job-can-be-skipped + - build-qt-app + - build-qt-test + - run: + name: Run qt-test + command: make run-qt-test + - save-dependencies + - store_artifacts: + path: test/fixtures + destination: test/fixtures diff --git a/scripts/ci/Dockerfile b/scripts/ci/Dockerfile new file mode 100644 index 0000000000..06c5e5b76f --- /dev/null +++ b/scripts/ci/Dockerfile @@ -0,0 +1,81 @@ +FROM ubuntu:disco-20190718 + +ENV DEBIAN_FRONTEND="noninteractive" +ENV ANDROID_HOME="/opt/android" + +WORKDIR /src + +# Use faster mirrors from Finland +COPY etc/apt/sources.list /etc/apt + +RUN set -eu && apt-get update + +# CI requirements +RUN set -eu && apt-get install -y \ + ca-certificates \ + git \ + gzip \ + ssh \ + tar + +# Base dependencies +RUN set -eu && apt-get install -y \ + ccache \ + clang-8 \ + clang-format-8 \ + clang-tidy-8 \ + cmake \ + g++-8 \ + libc++-8-dev \ + libc++abi-8-dev \ + mesa-common-dev \ + ninja-build \ + nodejs \ + npm \ + pkg-config \ + software-properties-common \ + xvfb + +# Linux dependencies +RUN set -eu && apt-get install -y \ + libcurl4-openssl-dev \ + libgl1-mesa-dev \ + libglfw3-dev \ + libicu-dev \ + libjpeg-turbo8-dev \ + libpng-dev \ + libuv1-dev \ + zlib1g-dev + +# Qt dependencies +RUN set -eu && apt-get install -y \ + qt5-default + +# Android dependencies +RUN set -eu && apt-get install -y \ + coreutils \ + curl \ + openjdk-8-jdk-headless \ + unzip + +# Install old compilers +RUN set -eu \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F \ + && add-apt-repository "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu xenial main" \ + && add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe" \ + && apt-get install -y \ + g++-4.9 \ + g++-5 + +# Install Android NDK +RUN set -eu \ + && mkdir -p ${ANDROID_HOME} && cd ${ANDROID_HOME} \ + && curl -L --retry 3 https://dl.google.com/android/repository/android-ndk-r19-linux-x86_64.zip -o ndk.zip \ + && (echo "f02ad84cb5b6e1ff3eea9e6168037c823408c8ac ndk.zip" | sha1sum -c) \ + && unzip -q ndk.zip && rm ndk.zip && mv android-ndk-r* ndk-bundle + +# Configure ccache +RUN set -eu && /usr/sbin/update-ccache-symlinks + +# Cleanup +RUN set -eu && apt-get clean diff --git a/scripts/ci/etc/apt/sources.list b/scripts/ci/etc/apt/sources.list new file mode 100644 index 0000000000..af4b703333 --- /dev/null +++ b/scripts/ci/etc/apt/sources.list @@ -0,0 +1,49 @@ +# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to +# newer versions of the distribution. +deb http://fi.archive.ubuntu.com/ubuntu/ disco main restricted +# deb-src http://fi.archive.ubuntu.com/ubuntu/ disco main restricted + +## Major bug fix updates produced after the final release of the +## distribution. +deb http://fi.archive.ubuntu.com/ubuntu/ disco-updates main restricted +# deb-src http://fi.archive.ubuntu.com/ubuntu/ disco-updates main restricted + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team. Also, please note that software in universe WILL NOT receive any +## review or updates from the Ubuntu security team. +deb http://fi.archive.ubuntu.com/ubuntu/ disco universe +# deb-src http://fi.archive.ubuntu.com/ubuntu/ disco universe +deb http://fi.archive.ubuntu.com/ubuntu/ disco-updates universe +# deb-src http://fi.archive.ubuntu.com/ubuntu/ disco-updates universe + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team, and may not be under a free licence. Please satisfy yourself as to +## your rights to use the software. Also, please note that software in +## multiverse WILL NOT receive any review or updates from the Ubuntu +## security team. +deb http://fi.archive.ubuntu.com/ubuntu/ disco multiverse +# deb-src http://fi.archive.ubuntu.com/ubuntu/ disco multiverse +deb http://fi.archive.ubuntu.com/ubuntu/ disco-updates multiverse +# deb-src http://fi.archive.ubuntu.com/ubuntu/ disco-updates multiverse + +## N.B. software from this repository may not have been tested as +## extensively as that contained in the main release, although it includes +## newer versions of some applications which may provide useful features. +## Also, please note that software in backports WILL NOT receive any review +## or updates from the Ubuntu security team. +deb http://fi.archive.ubuntu.com/ubuntu/ disco-backports main restricted universe multiverse +# deb-src http://fi.archive.ubuntu.com/ubuntu/ disco-backports main restricted universe multiverse + +## Uncomment the following two lines to add software from Canonical's +## 'partner' repository. +## This software is not part of Ubuntu, but is offered by Canonical and the +## respective vendors as a service to Ubuntu users. +# deb http://fi.archive.canonical.com/ubuntu disco partner +# deb-src http://fi.archive.canonical.com/ubuntu disco partner + +deb http://security.ubuntu.com/ubuntu/ disco-security main restricted +# deb-src http://security.ubuntu.com/ubuntu/ disco-security main restricted +deb http://security.ubuntu.com/ubuntu/ disco-security universe +# deb-src http://security.ubuntu.com/ubuntu/ disco-security universe +deb http://security.ubuntu.com/ubuntu/ disco-security multiverse +# deb-src http://security.ubuntu.com/ubuntu/ disco-security multiverse |