727 lines
29 KiB
YAML
727 lines
29 KiB
YAML
version: 2.1
|
|
|
|
#
|
|
# This CI configuration heavily relies on templates and CMake. Most of the
|
|
# jobs will have the following steps (usually configurable via parameters):
|
|
# prepare, build and test.
|
|
#
|
|
# 'sanity-checks' and 'baselines' are special. The former will run a series
|
|
# of checks to see if the patch has the minimum requirements for landing in
|
|
# our repository and the latter will generate new baselines for the tests
|
|
# in case the PR changes the baselines.
|
|
#
|
|
workflows:
|
|
version: 2
|
|
development:
|
|
jobs:
|
|
- sanity-checks
|
|
- android-benchmark-runner
|
|
- android-api-breakage
|
|
- android-render-test-runner
|
|
- android-unit-test-runner
|
|
- ios-render-test-runner
|
|
- ios-unit-test-runner
|
|
- ios-benchmark-runner
|
|
- baselines:
|
|
requires:
|
|
- android-arm64-v8a-release
|
|
- android-armeabi-v7a-release
|
|
- android-render-test-runner
|
|
- android-x86-release
|
|
- android-x86_64-release
|
|
- linux-clang8-release
|
|
- linux-gcc8-release
|
|
- macos-xcode11-release
|
|
- ios-render-test-runner
|
|
- build-template:
|
|
name: android-armeabi-v7a-release
|
|
executor_name: ubuntu-disco
|
|
target_is_android: true
|
|
config_params: '-G Ninja -DCMAKE_INSTALL_PREFIX=/tmp/workspace/install/$CIRCLE_JOB -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=armeabi-v7a'
|
|
install: true
|
|
- build-template:
|
|
name: android-arm64-v8a-release
|
|
executor_name: ubuntu-disco
|
|
target_is_android: true
|
|
config_params: '-G Ninja -DCMAKE_INSTALL_PREFIX=/tmp/workspace/install/$CIRCLE_JOB -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=arm64-v8a'
|
|
build_params: '--target libmapbox-gl.so'
|
|
install: true
|
|
- build-template:
|
|
name: android-x86-release
|
|
executor_name: ubuntu-disco
|
|
target_is_android: true
|
|
config_params: '-G Ninja -DCMAKE_INSTALL_PREFIX=/tmp/workspace/install/$CIRCLE_JOB -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=x86'
|
|
build_params: '--target libmapbox-gl.so'
|
|
install: true
|
|
- build-template:
|
|
name: android-x86_64-release
|
|
executor_name: ubuntu-disco
|
|
target_is_android: true
|
|
config_params: '-G Ninja -DCMAKE_INSTALL_PREFIX=/tmp/workspace/install/$CIRCLE_JOB -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=x86_64'
|
|
build_params: '--target libmapbox-gl.so'
|
|
install: true
|
|
- build-template:
|
|
name: linux-gcc8-release
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
config_params: '-G Ninja -DCMAKE_INSTALL_PREFIX=/tmp/workspace/install/$CIRCLE_JOB -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8'
|
|
install: true
|
|
metrics: true
|
|
style_tests: true
|
|
- build-template:
|
|
name: linux-gcc4.9-release
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- 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'
|
|
- build-template:
|
|
name: linux-gcc8-debug-coverage
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- 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=Debug -DMBGL_WITH_COVERAGE=ON'
|
|
style_tests: true
|
|
- build-template:
|
|
name: linux-clang8-release
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
config_params: '-G Ninja -DCMAKE_INSTALL_PREFIX=/tmp/workspace/install/$CIRCLE_JOB -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8'
|
|
install: true
|
|
metrics: true
|
|
style_tests: true
|
|
- build-template:
|
|
name: FIXME-linux-asan
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- sanity-checks
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DMBGL_WITH_SANITIZER=address'
|
|
test_params: '|| true'
|
|
style_tests: true
|
|
- build-template:
|
|
name: linux-tsan
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- sanity-checks
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DMBGL_WITH_SANITIZER=thread'
|
|
style_tests: true
|
|
- build-template:
|
|
name: FIXME-linux-valgrind
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_CXX_FLAGS=-DSANITIZE'
|
|
test_params: '-j 4 -E "mbgl-node|gl-benchmark" -D ExperimentalMemCheck || true'
|
|
- build-template:
|
|
name: FIXME-linux-ubsan
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
requires:
|
|
- sanity-checks
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DMBGL_WITH_SANITIZER=undefined'
|
|
test_params: '|| true'
|
|
style_tests: true
|
|
- build-template:
|
|
name: qt5-linux-gcc5-release
|
|
executor_name: ubuntu-disco
|
|
target_is_linux: true
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-5 -DCMAKE_CXX_COMPILER=g++-5 -DMBGL_WITH_QT=ON'
|
|
- build-template:
|
|
name: qt5-macos-gcc5-release
|
|
executor_name: macos-11_1_0
|
|
target_is_macos: true
|
|
requires:
|
|
- 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)'
|
|
- build-template:
|
|
name: macos-xcode11-release
|
|
executor_name: macos-11_1_0
|
|
target_is_macos: true
|
|
config_params: '-G Ninja -DCMAKE_INSTALL_PREFIX=/tmp/workspace/install/$CIRCLE_JOB -DCMAKE_CXX_COMPILER_LAUNCHER=ccache'
|
|
install: true
|
|
metrics: true
|
|
style_tests: true
|
|
- build-template:
|
|
name: macos-xcode11-debug
|
|
executor_name: macos-11_1_0
|
|
target_is_macos: true
|
|
requires:
|
|
- macos-xcode11-release
|
|
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug'
|
|
style_tests: true
|
|
- build-template:
|
|
name: ios-xcode11-release
|
|
executor_name: macos-11_3_1
|
|
target_is_macos: true
|
|
config_params: '-G Xcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=arm64e -DCMAKE_OSX_SYSROOT=iphoneos'
|
|
build_params: '--config Release'
|
|
|
|
#
|
|
# Executors: we currently support two executors, one based on Ubuntu 19.04 aka Disco
|
|
# and another based on macOS + Xcode 11.1.0. The Ubuntu executor is a lot more stable
|
|
# and will produce reproduceable builds completely offline because it uses a docker
|
|
# image with all the build dependencies preinstalled, whereas the macOS is managed
|
|
# by CircleCI and will install dependencies on build time. Build results from the macOS
|
|
# bots might differ if in meantime the macOS image gets updated. :-(
|
|
#
|
|
executors:
|
|
ubuntu-disco:
|
|
docker:
|
|
# FIXME: Move the image to mbgl/
|
|
- image: tmpsantos/mbgl_ci:1.7
|
|
resource_class: xlarge
|
|
working_directory: /src
|
|
environment:
|
|
DISPLAY: :99
|
|
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=0
|
|
ASAN_OPTIONS: strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1:halt_on_error=0
|
|
QT_INSTALL_DOCS: /usr/share/qt5/doc
|
|
QT_VERSION: 5
|
|
TSAN_OPTIONS: suppressions=/src/platform/linux/tsan_suppress.txt
|
|
macos-11_1_0:
|
|
macos:
|
|
xcode: '11.1.0'
|
|
environment:
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
macos-11_3_1:
|
|
macos:
|
|
xcode: '11.3.1'
|
|
environment:
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
|
|
commands:
|
|
prepare:
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .Revision }}'
|
|
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-'
|
|
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-master'
|
|
- run:
|
|
name: Prepare
|
|
command: |
|
|
git submodule sync
|
|
git submodule update --init --recursive
|
|
git gc
|
|
npm install --ignore-scripts
|
|
ulimit -c unlimited
|
|
prepare-linux:
|
|
steps:
|
|
- run:
|
|
name: Prepare Linux
|
|
background: true
|
|
command: |
|
|
Xvfb :99 -noreset -screen 0 1280x1024x24
|
|
prepare-macos:
|
|
steps:
|
|
- run:
|
|
name: Prepare macOS
|
|
command: |
|
|
brew install cmake ccache glfw ninja pkgconfig qt chargepoint/xcparse/xcparse
|
|
brew cask install google-cloud-sdk
|
|
- run:
|
|
name: Code Generators macOS
|
|
command: |
|
|
platform/darwin/scripts/generate-style-code.js
|
|
platform/darwin/scripts/update-examples.js
|
|
git add -A && git diff --staged --exit-code | tee nitpick.patch
|
|
config:
|
|
parameters:
|
|
config_params:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Configure
|
|
command: |
|
|
cmake . -B build << parameters.config_params >>
|
|
build:
|
|
parameters:
|
|
build_params:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Build
|
|
command: |
|
|
ccache --zero-stats --max-size=2G
|
|
cmake --build build -j $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null) << parameters.build_params >>
|
|
ccache --show-stats
|
|
install:
|
|
steps:
|
|
- run:
|
|
name: Install
|
|
command: |
|
|
cmake --build build --target install/strip
|
|
test:
|
|
parameters:
|
|
test_params:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Test
|
|
command: |
|
|
cd build
|
|
ctest -V << parameters.test_params >>
|
|
metrics:
|
|
parameters:
|
|
step_name:
|
|
type: string
|
|
metrics_params:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: << parameters.step_name >>
|
|
command: |
|
|
build/mbgl-render-test-runner << parameters.metrics_params >>
|
|
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 results
|
|
when: always
|
|
command: |
|
|
mkdir -p /tmp/workspace/metrics && touch /tmp/workspace/.$CIRCLE_JOB
|
|
if [ -d metrics/$CIRCLE_JOB ]; then cp -r metrics/$CIRCLE_JOB /tmp/workspace/metrics; fi
|
|
mkdir -p /tmp/tests/baselines
|
|
if [ -f baselines.patch ]; then cp baselines.patch /tmp/tests/baselines; fi
|
|
mkdir -p /tmp/tests/nitpick
|
|
if [ -f nitpick.patch ]; then cp nitpick.patch /tmp/tests/nitpick; fi
|
|
mkdir -p /tmp/tests/render
|
|
if [ -f clang-tidy.log ]; then cp clang-tidy.log /tmp/tests/clang-tidy; fi
|
|
mkdir -p /tmp/tests/render
|
|
if ls render-test/*.html 1> /dev/null 2>&1; then cp render-test/*.html /tmp/tests/render; fi
|
|
mkdir -p /tmp/tests/metrics
|
|
if ls metrics/*.html 1> /dev/null 2>&1; then cp metrics/*.html /tmp/tests/metrics; fi
|
|
mkdir -p /tmp/tests/coredumps
|
|
if ls core* 1> /dev/null 2>&1; then cp core* /tmp/tests/coredumps; fi
|
|
mkdir -p /tmp/tests/valgrind
|
|
if ls build/Testing/Temporary/MemoryChecker.*.log 1> /dev/null 2>&1; then cp build/Testing/Temporary/MemoryChecker.*.log /tmp/tests/valgrind; fi
|
|
- persist_to_workspace:
|
|
root: /tmp/workspace
|
|
paths:
|
|
- '*'
|
|
- store_artifacts:
|
|
path: /tmp/tests
|
|
destination: tests
|
|
login-google-cloud-platform:
|
|
steps:
|
|
- run:
|
|
name: Login Google Cloud Platform
|
|
command: |
|
|
echo "${GCLOUD_SERVICE_ACCOUNT_JSON}" > secret.json
|
|
gcloud auth activate-service-account --key-file secret.json --project android-gl-native
|
|
rm secret.json
|
|
login-google-cloud-platform-ios:
|
|
steps:
|
|
- run:
|
|
name: Login to IOS Google Cloud Platform
|
|
command: |
|
|
if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON_IOS}" ]]; then
|
|
echo "${GCLOUD_SERVICE_ACCOUNT_JSON_IOS}" > iosAccount.json
|
|
gcloud auth activate-service-account --key-file iosAccount.json --project ios-mapbox-gl-native
|
|
rm iosAccount.json
|
|
fi
|
|
prepare-ios-codesign-keychain:
|
|
parameters:
|
|
directory:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Prepare codesign keychain
|
|
command: |
|
|
cd << parameters.directory >>
|
|
fastlane run create_keychain name:fastlane_keychain password:$FASTLANE_PASSWORD timeout:false unlock:true
|
|
fastlane match
|
|
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $FASTLANE_PASSWORD fastlane_keychain
|
|
/usr/bin/env xcrun security find-identity -v -p codesigning
|
|
codesign-ios-test-runner:
|
|
parameters:
|
|
directory:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Codesign iOS TestApp for running on a physical device
|
|
command: |
|
|
cp -r << parameters.directory >>/codesigning build
|
|
cd build
|
|
./codesigning/generate-entitlements.swift
|
|
./codesigning/codesign_all.sh
|
|
codesign -dv --verbose=4 Release-iphoneos/*.app # for debugging that app is signed or not
|
|
run-ios-test-app:
|
|
parameters:
|
|
directory:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: Run iOS Test App on Firebase
|
|
no_output_timeout: 20m
|
|
command: |
|
|
if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON_IOS}" ]]; then
|
|
# arrange files in a way Firebase expects it, and package them in a zip file
|
|
cp << parameters.directory >>/*_iphoneos13.2-arm64e-release.xctestrun build
|
|
cd build
|
|
zip testapp.zip -r Release-iphoneos/*.app --quiet
|
|
zip testapp.zip *_iphoneos13.2-arm64e-release.xctestrun
|
|
gcloud firebase test ios models list
|
|
gcloud firebase test ios run \
|
|
--test testapp.zip \
|
|
--device model=iphone11,version=13.3,locale=en,orientation=portrait --xcode-version=11.3.1 --timeout 20m \
|
|
--verbosity=debug --no-record-video --results-dir ios-test-app-${CIRCLE_BUILD_NUM}
|
|
fi
|
|
|
|
jobs:
|
|
ios-render-test-runner:
|
|
executor: macos-11_3_1
|
|
steps:
|
|
- checkout
|
|
- prepare
|
|
- prepare-macos
|
|
- prepare-ios-codesign-keychain:
|
|
directory: render-test/ios
|
|
- config:
|
|
config_params: '-G Xcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DMBGL_IOS_RENDER_TEST=ON -DCMAKE_OSX_ARCHITECTURES=arm64e'
|
|
- build:
|
|
build_params: '--config Release'
|
|
- codesign-ios-test-runner:
|
|
directory: render-test/ios
|
|
- login-google-cloud-platform-ios
|
|
- run-ios-test-app:
|
|
directory: render-test/ios
|
|
- run:
|
|
name: Retrieve Test Result from gcloud
|
|
when: always
|
|
command: |
|
|
if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON_IOS}" ]]; then
|
|
testResult=$(gsutil ls -d gs://test-lab-hn7kwqcz3108z-hjm4qtbqqkymk/ios-test-app-${CIRCLE_BUILD_NUM}/iphone11-13.3-en-portrait/TestLogs/)
|
|
mkdir -p render-test-app
|
|
gsutil -m cp -r $testResult render-test-app
|
|
cd render-test-app/TestLogs
|
|
xcparse attachments *.xcresult && ls
|
|
cd ../.. && mkdir -p /tmp/tests/ios-render-test
|
|
if ls render-test-app/TestLogs/*.html 1> /dev/null 2>&1; then cp render-test-app/TestLogs/*.html /tmp/tests/ios-render-test; fi
|
|
if [[ -n $(ls render-test-app/TestLogs/*.zip 2>/dev/null) ]]; then
|
|
cp render-test-app/TestLogs/*.zip metrics/ios-render-test-runner/
|
|
cd metrics/ios-render-test-runner/
|
|
unzip *.zip
|
|
rm -rf *.zip
|
|
fi
|
|
fi
|
|
- save
|
|
ios-unit-test-runner:
|
|
executor: macos-11_3_1
|
|
steps:
|
|
- checkout
|
|
- prepare
|
|
- prepare-macos
|
|
- prepare-ios-codesign-keychain:
|
|
directory: test/ios
|
|
- config:
|
|
config_params: '-G Xcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DMBGL_IOS_UNIT_TEST=ON -DCMAKE_OSX_ARCHITECTURES=arm64e'
|
|
- build:
|
|
build_params: '--config Release'
|
|
- codesign-ios-test-runner:
|
|
directory: test/ios
|
|
- login-google-cloud-platform-ios
|
|
- run-ios-test-app:
|
|
directory: test/ios
|
|
- run:
|
|
name: Retrieve Test Result from gcloud
|
|
when: always
|
|
command: |
|
|
if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON_IOS}" ]]; then
|
|
testResult=$(gsutil ls -d gs://test-lab-hn7kwqcz3108z-hjm4qtbqqkymk/ios-test-app-${CIRCLE_BUILD_NUM}/iphone11-13.3-en-portrait/TestLogs/)
|
|
mkdir -p unit-test-app
|
|
gsutil -m cp -r $testResult unit-test-app
|
|
cd unit-test-app/TestLogs
|
|
xcparse attachments *.xcresult && ls
|
|
cd ../.. && mkdir -p /tmp/tests/unit-test
|
|
if ls unit-test-app/TestLogs/*.xml 1> /dev/null 2>&1; then cp unit-test-app/TestLogs/*.xml /tmp/tests/unit-test/results.xml; fi
|
|
fi
|
|
- save
|
|
ios-benchmark-runner:
|
|
executor: macos-11_3_1
|
|
steps:
|
|
- checkout
|
|
- prepare
|
|
- prepare-macos
|
|
- prepare-ios-codesign-keychain:
|
|
directory: benchmark/ios
|
|
- config:
|
|
config_params: '-G Xcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DMBGL_IOS_BENCHMARK=ON -DCMAKE_OSX_ARCHITECTURES=arm64e'
|
|
- build:
|
|
build_params: '--config Release'
|
|
- codesign-ios-test-runner:
|
|
directory: benchmark/ios
|
|
- login-google-cloud-platform-ios
|
|
- run-ios-test-app:
|
|
directory: benchmark/ios
|
|
- run:
|
|
name: Retrieve Test Result from gcloud
|
|
when: always
|
|
command: |
|
|
if [[ -n "${GCLOUD_SERVICE_ACCOUNT_JSON_IOS}" ]]; then
|
|
testResult=$(gsutil ls -d gs://test-lab-hn7kwqcz3108z-hjm4qtbqqkymk/ios-test-app-${CIRCLE_BUILD_NUM}/iphone11-13.3-en-portrait/TestLogs/)
|
|
mkdir -p benchmark-app
|
|
gsutil -m cp -r $testResult benchmark-app
|
|
cd benchmark-app/TestLogs
|
|
xcparse attachments *.xcresult && ls
|
|
cd ../.. && mkdir -p /tmp/tests/benchmark
|
|
if ls benchmark-app/TestLogs/*.json 1> /dev/null 2>&1; then cp benchmark-app/TestLogs/*.json /tmp/tests/benchmark/results.json; fi
|
|
fi
|
|
- save
|
|
android-benchmark-runner:
|
|
executor: ubuntu-disco
|
|
steps:
|
|
- checkout
|
|
- prepare
|
|
- run:
|
|
name: Build BenchmarkRunner APK
|
|
command: |
|
|
cd benchmark/android
|
|
./gradlew --parallel --max-workers=8 -Pmapbox.abis=arm64-v8a app:assembleRelease app:assembleAndroidTest
|
|
- login-google-cloud-platform
|
|
- run:
|
|
name: Run BenchmarkRunner on Firebase
|
|
no_output_timeout: 20m
|
|
command: |
|
|
gcloud firebase test android models list
|
|
gcloud firebase test android run --type instrumentation \
|
|
--app benchmark/android/app/build/outputs/apk/release/app-release.apk \
|
|
--test benchmark/android/app/build/outputs/apk/androidTest/release/app-release-androidTest.apk \
|
|
--device-ids flame --os-version-ids 29 --locales en --orientations portrait --timeout 20m \
|
|
--directories-to-pull /sdcard/benchmark/results --results-dir benchmark-${CIRCLE_BUILD_NUM} \
|
|
--no-record-video --no-performance-metrics
|
|
- run:
|
|
name: Retrieve TestResult from gcloud
|
|
when: always
|
|
command: |
|
|
testResult=$(gsutil ls gs://test-lab-186672a0qp5bq-ycr70axads3nc/benchmark-${CIRCLE_BUILD_NUM}/**/results/results.json)
|
|
mkdir -p /tmp/tests/benchmark
|
|
gsutil cp $testResult /tmp/tests/benchmark
|
|
- save
|
|
android-api-breakage:
|
|
executor: ubuntu-disco
|
|
steps:
|
|
- run:
|
|
name: Clone mapbox-gl-native-android in working directory
|
|
command: git clone https://github.com/mapbox/mapbox-gl-native-android.git .
|
|
- prepare
|
|
- run:
|
|
name: Update mapbox-gl-native to match PR
|
|
command: cd vendor/mapbox-gl-native && git fetch origin $CIRCLE_SHA1 && git checkout $CIRCLE_SHA1 && git submodule update --init --recursive
|
|
- run:
|
|
name: Build SDK
|
|
command: BUILDTYPE=Release make android-arm-v8
|
|
- save
|
|
android-unit-test-runner:
|
|
executor: ubuntu-disco
|
|
steps:
|
|
- checkout
|
|
- prepare
|
|
- run:
|
|
name: Build UnitTestRunner APK
|
|
command: |
|
|
cd test/android
|
|
./gradlew --parallel --max-workers=8 -Pmapbox.abis=arm64-v8a app:assembleRelease app:assembleAndroidTest
|
|
- login-google-cloud-platform
|
|
- run:
|
|
name: Run UnitTestRunner on Firebase
|
|
no_output_timeout: 20m
|
|
command: |
|
|
gcloud firebase test android models list
|
|
gcloud firebase test android run --type instrumentation \
|
|
--app test/android/app/build/outputs/apk/release/app-release.apk \
|
|
--test test/android/app/build/outputs/apk/androidTest/release/app-release-androidTest.apk \
|
|
--device-ids flame --os-version-ids 29 --locales en --orientations portrait --timeout 20m \
|
|
--directories-to-pull /sdcard/test/results --results-dir unit-test-${CIRCLE_BUILD_NUM} \
|
|
--no-record-video --no-performance-metrics
|
|
- run:
|
|
name: Retrieve Test Result from gcloud
|
|
when: always
|
|
command: |
|
|
testResult=$(gsutil ls gs://test-lab-186672a0qp5bq-ycr70axads3nc/unit-test-${CIRCLE_BUILD_NUM}/**/results/results.xml)
|
|
mkdir -p /tmp/tests/unit-test
|
|
gsutil cp $testResult /tmp/tests/unit-test
|
|
- save
|
|
android-render-test-runner:
|
|
executor: ubuntu-disco
|
|
steps:
|
|
- checkout
|
|
- prepare
|
|
- run:
|
|
name: Build RenderTestRunner APK
|
|
command: |
|
|
cd render-test/android
|
|
./gradlew --parallel --max-workers=8 -Pmapbox.abis=arm64-v8a app:assembleRelease app:assembleAndroidTest
|
|
- login-google-cloud-platform
|
|
- run:
|
|
name: Run RenderTestRunner Instrumentation Test on Firebase
|
|
no_output_timeout: 20m
|
|
command: |
|
|
gcloud firebase test android models list
|
|
gcloud firebase test android run --type instrumentation \
|
|
--app render-test/android/app/build/outputs/apk/release/app-release.apk \
|
|
--test render-test/android/app/build/outputs/apk/androidTest/release/app-release-androidTest.apk \
|
|
--device-ids flame --os-version-ids 29 --locales en --orientations portrait --timeout 20m \
|
|
--directories-to-pull /sdcard --results-dir render-test-app-${CIRCLE_BUILD_NUM} \
|
|
--no-record-video --no-performance-metrics
|
|
- run:
|
|
name: Retrieve TestResult from gcloud
|
|
when: always
|
|
command: |
|
|
testResult=$(gsutil ls gs://test-lab-186672a0qp5bq-ycr70axads3nc/render-test-app-${CIRCLE_BUILD_NUM}/**/*.html)
|
|
mkdir -p /tmp/tests/render-test-app
|
|
gsutil cp $testResult /tmp/tests/render-test-app
|
|
- run:
|
|
name: Retrieve Rebaselined Metrics from gcloud
|
|
command: |
|
|
metricsResult=$(gsutil ls -d gs://test-lab-186672a0qp5bq-ycr70axads3nc/render-test-app-${CIRCLE_BUILD_NUM}/*/*/sdcard/baselines/*) || true
|
|
gsutil -m cp -r $metricsResult metrics/android-render-test-runner/ || true
|
|
- save
|
|
sanity-checks:
|
|
executor: ubuntu-disco
|
|
steps:
|
|
- checkout
|
|
- prepare
|
|
- config:
|
|
config_params: '-G Ninja -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8'
|
|
- run:
|
|
name: Code Generators
|
|
command: |
|
|
platform/default/include/mbgl/storage/offline_schema.js
|
|
scripts/generate-shaders.js
|
|
scripts/generate-style-code.js
|
|
git add -A && git diff --staged --exit-code | tee nitpick.patch
|
|
- run:
|
|
name: Validation Scripts
|
|
command: |
|
|
scripts/nitpick/submodule-pin.js
|
|
- run:
|
|
name: CMake Format
|
|
command: |
|
|
cmake-format -i $(find -name '*.cmake' -and -not -path './vendor/*/*' -and -not -path './build/*')
|
|
cmake-format -i $(find -name CMakeLists.txt -and -not -path './vendor/*/*' -and -not -path './build/*')
|
|
git diff --exit-code | tee nitpick.patch
|
|
- 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 | tee nitpick.patch
|
|
- run:
|
|
name: Clang Tidy
|
|
command: |
|
|
run-clang-tidy-8 -quiet -j $(nproc) -p build $PWD/src/.*cpp $PWD/platform/.*cpp |tee clang-tidy.log
|
|
grep -o \\[[a-z].*-.*[a-z]\] clang-tidy.log |sort |uniq -c |sort -n
|
|
- save
|
|
baselines:
|
|
executor: ubuntu-disco
|
|
steps:
|
|
- checkout
|
|
- prepare
|
|
- prepare-linux
|
|
- attach_workspace:
|
|
at: /tmp/attach
|
|
- run:
|
|
name: 'Binary Size'
|
|
command: |
|
|
/tmp/attach/install/linux-gcc8-release/bin/mbgl-render-test-runner -u rebaseline -p metrics/binary-size.json
|
|
- run:
|
|
name: 'Matrics Baselines'
|
|
command: |
|
|
cp -r /tmp/attach/metrics .
|
|
git add -A && git diff --staged --exit-code | tee baselines.patch
|
|
- save
|
|
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
|
|
install:
|
|
type: boolean
|
|
default: false
|
|
metrics:
|
|
type: boolean
|
|
default: false
|
|
style_tests:
|
|
type: boolean
|
|
default: false
|
|
executor: << parameters.executor_name >>
|
|
steps:
|
|
- checkout
|
|
- when:
|
|
condition: << parameters.target_is_android >>
|
|
steps:
|
|
- prepare
|
|
- config:
|
|
config_params: << parameters.config_params >>
|
|
- build:
|
|
build_params: << parameters.build_params >>
|
|
- when:
|
|
condition: << parameters.target_is_linux >>
|
|
steps:
|
|
- prepare
|
|
- prepare-linux
|
|
- config:
|
|
config_params: << parameters.config_params >>
|
|
- build:
|
|
build_params: << parameters.build_params >>
|
|
- test:
|
|
test_params: << parameters.test_params >>
|
|
- when:
|
|
condition: << parameters.target_is_macos >>
|
|
steps:
|
|
- prepare
|
|
- prepare-macos
|
|
- config:
|
|
config_params: << parameters.config_params >>
|
|
- build:
|
|
build_params: << parameters.build_params >>
|
|
- test:
|
|
test_params: << parameters.test_params >>
|
|
- when:
|
|
condition: << parameters.install >>
|
|
steps:
|
|
- install
|
|
- when:
|
|
condition: << parameters.style_tests >>
|
|
steps:
|
|
- metrics:
|
|
step_name: 'Style Tests'
|
|
metrics_params: '-u rebaseline -p metrics/$CIRCLE_JOB-style.json'
|
|
- when:
|
|
condition: << parameters.metrics >>
|
|
steps:
|
|
- metrics:
|
|
step_name: 'Metrics'
|
|
metrics_params: '-u rebaseline -p metrics/$CIRCLE_JOB-metrics.json'
|
|
- save
|