But also mark them as FIXME. Motivation here is we know they are failing and are working on fixing them. We want to keep them running meanwhile, but not making the pull request show as CI failed.
1553 lines
52 KiB
YAML
1553 lines
52 KiB
YAML
version: 2.1
|
|
|
|
workflows:
|
|
version: 2
|
|
mbgl-next:
|
|
jobs:
|
|
- next-sanity-checks
|
|
- next-build-template:
|
|
name: next-android-armeabi-v7a-release
|
|
executor_name: ubuntu-disco
|
|
target_is_android: true
|
|
requires:
|
|
- next-sanity-checks
|
|
config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=armeabi-v7a'
|
|
- next-build-template:
|
|
name: next-android-arm64-v8a-release
|
|
executor_name: ubuntu-disco
|
|
target_is_android: true
|
|
requires:
|
|
- next-android-armeabi-v7a-release
|
|
config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=arm64-v8a'
|
|
- next-build-template:
|
|
name: next-android-x86-release
|
|
executor_name: ubuntu-disco
|
|
target_is_android: true
|
|
requires:
|
|
- next-android-armeabi-v7a-release
|
|
config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=x86'
|
|
- next-build-template:
|
|
name: next-android-x86_64-release
|
|
executor_name: ubuntu-disco
|
|
target_is_android: true
|
|
requires:
|
|
- next-android-armeabi-v7a-release
|
|
config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=x86_64'
|
|
- next-build-template:
|
|
name: next-linux-gcc8-release
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- next-sanity-checks
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8'
|
|
- next-build-template:
|
|
name: next-linux-gcc4.9-release
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- next-linux-gcc8-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-glfw'
|
|
test_params: '-N -Q'
|
|
- next-build-template:
|
|
name: next-linux-gcc8-debug-coverage
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- next-linux-gcc8-release
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_BUILD_TYPE=DebugCoverage'
|
|
- next-build-template:
|
|
name: next-linux-clang8-release
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- next-sanity-checks
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8'
|
|
- next-build-template:
|
|
name: next-FIXME-linux-asan
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- next-linux-gcc8-debug-coverage
|
|
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'
|
|
test_params: '|| true'
|
|
- next-build-template:
|
|
name: next-linux-tsan
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- next-linux-gcc8-debug-coverage
|
|
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'
|
|
- next-build-template:
|
|
name: next-FIXME-linux-memsan
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- next-linux-gcc8-debug-coverage
|
|
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'
|
|
test_params: '|| true'
|
|
- next-build-template:
|
|
name: next-FIXME-linux-ubsan
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- next-linux-gcc8-debug-coverage
|
|
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'
|
|
test_params: '|| true'
|
|
- next-build-template:
|
|
name: next-qt5-linux-gcc5-release
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- next-sanity-checks
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-5 -DCMAKE_CXX_COMPILER=g++-5 -DMBGL_WITH_QT=ON'
|
|
- next-build-template:
|
|
name: next-qt5-macos-gcc5-release
|
|
executor_name: macos-11_0_0
|
|
target_is_macos: true
|
|
requires:
|
|
- next-qt5-linux-gcc5-release
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DMBGL_WITH_QT=ON -DCMAKE_PREFIX_PATH=$(echo /usr/local/Cellar/qt/5.*/lib/cmake)'
|
|
test_params: '-N -Q'
|
|
- next-build-template:
|
|
name: next-macos-xcode11-release
|
|
executor_name: macos-11_0_0
|
|
target_is_macos: true
|
|
requires:
|
|
- next-sanity-checks
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache'
|
|
- next-build-template:
|
|
name: next-macos-xcode11-debug
|
|
executor_name: macos-11_0_0
|
|
target_is_macos: true
|
|
requires:
|
|
- next-macos-xcode11-release
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug'
|
|
- next-build-template:
|
|
name: next-ios-xcode11-release
|
|
executor_name: macos-11_0_0
|
|
target_is_macos: true
|
|
requires:
|
|
- next-sanity-checks
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_SYSROOT=iphonesimulator'
|
|
test_params: '-Q -N'
|
|
mbgl-legacy:
|
|
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
|
|
- 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-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
|
|
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
|
|
|
|
executors:
|
|
ubuntu-disco:
|
|
docker:
|
|
# FIXME: Move the image to mbgl/
|
|
- image: tmpsantos/mbgl_ci:1.5
|
|
resource_class: xlarge
|
|
working_directory: /src
|
|
environment:
|
|
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1
|
|
MSAN_OPTIONS: poison_in_dtor=1
|
|
ASAN_OPTIONS: strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1
|
|
QT_INSTALL_DOCS: /usr/share/qt5/doc
|
|
QT_VERSION: 5
|
|
macos-11_0_0:
|
|
macos:
|
|
xcode: '11.0.0'
|
|
environment:
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
|
|
commands:
|
|
next-prepare:
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .Revision }}'
|
|
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-'
|
|
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-master'
|
|
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-'
|
|
- run:
|
|
name: Prepare
|
|
command: |
|
|
git submodule sync
|
|
git submodule update --init --recursive
|
|
npm install --ignore-scripts
|
|
ulimit -c unlimited
|
|
next-prepare-macos:
|
|
steps:
|
|
- run:
|
|
name: Prepare macOS
|
|
command: |
|
|
brew install cmake ccache glfw ninja pkgconfig qt
|
|
next-config:
|
|
parameters:
|
|
config_params:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Configure
|
|
command: |
|
|
cmake next -B build << parameters.config_params >>
|
|
next-build:
|
|
parameters:
|
|
build_params:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Build
|
|
command: |
|
|
ccache --zero-stats --max-size=2G
|
|
cmake --build build -j 8 << parameters.build_params >>
|
|
ccache --show-stats
|
|
git gc
|
|
next-save:
|
|
steps:
|
|
- save_cache:
|
|
key: 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .Revision }}'
|
|
paths:
|
|
- .git/modules
|
|
- /Users/distiller/Library/Caches/Homebrew
|
|
- node_modules
|
|
- ~/.ccache
|
|
- ~/.gradle
|
|
- run:
|
|
name: Collecting artifacts
|
|
when: on_fail
|
|
command: |
|
|
mkdir -p /tmp/tests/coredumps
|
|
if ls core* 1> /dev/null 2>&1; then cp core* /tmp/tests/coredumps; fi
|
|
mkdir -p /tmp/tests/render
|
|
if [ -f mapbox-gl-js/test/integration/render-tests/index.html ]; then cp mapbox-gl-js/test/integration/render-tests/index.html /tmp/tests/render; fi
|
|
- store_artifacts:
|
|
path: /tmp/tests
|
|
destination: tests
|
|
next-test:
|
|
parameters:
|
|
test_wrapper:
|
|
type: string
|
|
test_params:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Test
|
|
command: |
|
|
cd build
|
|
<< parameters.test_wrapper >> ctest -j 8 --output-on-failure << parameters.test_params >>
|
|
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_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-mbgl-expression-test:
|
|
steps:
|
|
- run:
|
|
name: Build mbgl-expression-test
|
|
command: cmake --build build --config ${BUILDTYPE} --target mbgl-expression-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-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
|
|
|
|
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)" ]
|
|
|
|
run-expression-tests:
|
|
steps:
|
|
- run:
|
|
name: Run expression tests
|
|
command: |
|
|
build/mbgl-expression-test -s --seed=$RANDOM
|
|
|
|
upload-expression-tests:
|
|
steps:
|
|
- store_artifacts:
|
|
path: mapbox-gl-js/test/integration/expression-tests/index.html
|
|
destination: expression-tests
|
|
|
|
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-* ]] && [[ -z $CIRCLE_TAG ]]; then
|
|
scripts/check-ci-job-skippability.js
|
|
fi
|
|
|
|
jobs:
|
|
next-sanity-checks:
|
|
executor: ubuntu-disco
|
|
steps:
|
|
- checkout
|
|
- next-prepare
|
|
- next-config:
|
|
config_params: '-DMBGL_WITH_CORE_ONLY=ON'
|
|
- run:
|
|
name: CMake Format
|
|
command: |
|
|
cmake-format -i $(find next -type f -name CMakeLists.txt -o -name '*.cmake')
|
|
git diff --exit-code
|
|
- run:
|
|
name: Clang Format
|
|
command: |
|
|
git diff -U0 --ignore-submodules=all --no-color origin/master... *.cpp *.hpp | clang-format-diff-8 -p1 -i
|
|
git diff --exit-code
|
|
- run:
|
|
name: Code Generators
|
|
command: |
|
|
platform/android/scripts/generate-style-code.js
|
|
scripts/generate-file-lists.js
|
|
scripts/generate-shaders.js
|
|
scripts/generate-style-code.js
|
|
git add -A && git diff --staged --exit-code
|
|
- next-save
|
|
next-build-template:
|
|
parameters:
|
|
config_params:
|
|
type: string
|
|
default: ''
|
|
build_params:
|
|
type: string
|
|
default: ''
|
|
test_params:
|
|
type: string
|
|
default: ''
|
|
executor_name:
|
|
type: string
|
|
target_is_android:
|
|
type: boolean
|
|
default: false
|
|
target_is_linux:
|
|
type: boolean
|
|
default: false
|
|
target_is_macos:
|
|
type: boolean
|
|
default: false
|
|
executor: << parameters.executor_name >>
|
|
steps:
|
|
- checkout
|
|
- next-prepare
|
|
- when:
|
|
condition: << parameters.target_is_android >>
|
|
steps:
|
|
- next-config:
|
|
config_params: << parameters.config_params >>
|
|
- next-build:
|
|
build_params: << parameters.build_params >>
|
|
- when:
|
|
condition: << parameters.target_is_linux >>
|
|
steps:
|
|
- next-config:
|
|
config_params: << parameters.config_params >>
|
|
- next-build:
|
|
build_params: << parameters.build_params >>
|
|
- next-test:
|
|
test_wrapper: 'xvfb-run -s -noreset'
|
|
test_params: << parameters.test_params >>
|
|
- when:
|
|
condition: << parameters.target_is_macos >>
|
|
steps:
|
|
- next-prepare-macos
|
|
- next-config:
|
|
config_params: << parameters.config_params >>
|
|
- next-build:
|
|
build_params: << parameters.build_params >>
|
|
- next-test:
|
|
test_wrapper: ''
|
|
test_params: << parameters.test_params >>
|
|
- next-save
|
|
|
|
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
|
|
|
|
# ------------------------------------------------------------------------------
|
|
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: Trigger external deploy steps
|
|
command: |
|
|
export VERSION_TAG=${CIRCLE_TAG}
|
|
export GITHUB_TOKEN=${DANGER_GITHUB_API_TOKEN}
|
|
export DOCS_REPO="android-docs"
|
|
scripts/trigger-maps-documentation-deploy-steps.sh
|
|
background: true
|
|
- 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
|
|
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
|
|
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-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-expression-test
|
|
- build-mbgl-render-test
|
|
- run-expression-tests
|
|
- run-linux-render-tests
|
|
- save-dependencies
|
|
- upload-expression-tests
|
|
- 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}
|
|
export DOCS_REPO="ios-sdk"
|
|
scripts/trigger-maps-documentation-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-expression-test
|
|
- build-mbgl-render-test
|
|
- save-dependencies
|
|
- run-expression-tests
|
|
- run-macos-render-tests
|
|
- upload-expression-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
|