570 lines
18 KiB
YAML
570 lines
18 KiB
YAML
version: 2
|
|
|
|
workflows:
|
|
version: 2
|
|
default:
|
|
jobs:
|
|
- clang-tidy:
|
|
filters:
|
|
branches:
|
|
ignore: master
|
|
- android-debug-arm-v7
|
|
- android-release-all
|
|
- node4-clang39-release
|
|
- node6-clang39-release
|
|
- node6-clang39-debug
|
|
- linux-clang39-debug
|
|
- linux-clang4-sanitize-address
|
|
- linux-clang4-sanitize-undefined
|
|
- linux-clang4-sanitize-thread
|
|
- linux-gcc4.9-debug
|
|
- linux-gcc5-debug-coverage
|
|
- linux-gcc5-release-qt4
|
|
- linux-gcc5-release-qt5
|
|
|
|
step-library:
|
|
- &generate-cache-key
|
|
run:
|
|
name: Generate cache key
|
|
command: |
|
|
echo "$(date +"%Y-%V")" > .circle-week
|
|
ccache --clear
|
|
ccache --max-size=5G
|
|
- &restore-cache
|
|
restore_cache:
|
|
keys:
|
|
- 'v3/{{ .Environment.CIRCLE_JOB }}/{{ .Branch }}/{{ checksum ".circle-week" }}'
|
|
- 'v3/{{ .Environment.CIRCLE_JOB }}/master/{{ checksum ".circle-week" }}'
|
|
- &save-cache
|
|
save_cache:
|
|
key: 'v3/{{ .Environment.CIRCLE_JOB }}/{{ .Branch }}/{{ checksum ".circle-week" }}'
|
|
paths: [ "node_modules", "/root/.ccache", "mason_packages/.binaries" ]
|
|
|
|
|
|
- &reset-ccache-stats
|
|
run:
|
|
name: Clear ccache statistics
|
|
command: |
|
|
ccache --zero-stats
|
|
ccache --show-stats
|
|
- &show-ccache-stats
|
|
run:
|
|
name: Show ccache statistics
|
|
command: ccache --show-stats
|
|
|
|
|
|
- &setup-llvm-symbolizer
|
|
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
|
|
|
|
|
|
- &build-node
|
|
run:
|
|
name: Build node
|
|
command: make node
|
|
- &build-linux
|
|
run:
|
|
name: Build linux
|
|
command: make linux
|
|
- &build-benchmark
|
|
run:
|
|
name: Build benchmark
|
|
command: make benchmark
|
|
- &build-test
|
|
run:
|
|
name: Build test
|
|
command: make test
|
|
- &build-qt-app
|
|
run:
|
|
name: Build qt-app
|
|
command: make qt-app
|
|
- &build-qt-test
|
|
run:
|
|
name: Build qt-test
|
|
command: make qt-test
|
|
|
|
|
|
- &run-node-tests
|
|
run:
|
|
name: Run node tests
|
|
command: |
|
|
xvfb-run --server-args="-screen 0 1024x768x24" \
|
|
logbt -- apitrace trace --api=egl -v make test-node
|
|
- &run-unit-tests
|
|
run:
|
|
name: Run tests
|
|
command: |
|
|
xvfb-run --server-args="-screen 0 1024x768x24" \
|
|
make run-test
|
|
|
|
|
|
- &publish-node-package
|
|
run:
|
|
name: Publish node package
|
|
when: on_success
|
|
command: platform/node/scripts/after_success.sh
|
|
|
|
|
|
- &upload-render-tests
|
|
store_artifacts:
|
|
path: mapbox-gl-js/test/integration/render-tests/index.html
|
|
destination: render-tests
|
|
|
|
jobs:
|
|
# ------------------------------------------------------------------------------
|
|
clang-tidy:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-clang-3.9
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- run:
|
|
name: Fetch 'origin/master' branch
|
|
command: git fetch origin master:refs/remotes/origin/master
|
|
- run:
|
|
name: Generate compilation database
|
|
command: make compdb
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- run:
|
|
name: Run Clang checks
|
|
command: make check
|
|
|
|
# ------------------------------------------------------------------------------
|
|
android-debug-arm-v7:
|
|
docker:
|
|
- image: mbgl/ci@sha256:c34e221294d81da80918d3e9a9df5de795b067e88f86d7c9a5e262763332536e
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
IS_LOCAL_DEVELOPMENT: false
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- run:
|
|
name: Build libmapbox-gl.so for arm-v7
|
|
command: make android-lib-arm-v7
|
|
- run:
|
|
name: Compile Core tests for arm-v7
|
|
command: make android-test-lib-arm-v7
|
|
- run:
|
|
name: Test phone module
|
|
command: make run-android-unit-test
|
|
- run:
|
|
name: Generate Espresso sanity tests
|
|
command: make test-code-android
|
|
- run:
|
|
name: Check Java code style
|
|
command: make android-checkstyle
|
|
- run:
|
|
name: Check Android modules for potential bugs (Lint SDK)
|
|
command: |
|
|
make android-lint-sdk
|
|
- run:
|
|
name: Check Android modules for potential bugs (Lint Test App)
|
|
command: |
|
|
make android-lint-test-app
|
|
- run:
|
|
name: Build Test APK
|
|
command: |
|
|
echo "${MAPBOX_DEVELOPER_CONFIG_XML}" > platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/developer-config.xml
|
|
make android-ui-test-arm-v7
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- run:
|
|
name: Log in to Google Cloud Platform
|
|
shell: /bin/bash -euo pipefail
|
|
command: |
|
|
echo "${GCLOUD_SERVICE_ACCOUNT_JSON}" > secret.json
|
|
gcloud auth activate-service-account --key-file secret.json --project android-gl-native
|
|
rm secret.json
|
|
- run:
|
|
name: Run instrumentation tests on Firebase
|
|
no_output_timeout: 1200
|
|
shell: /bin/bash -euo pipefail
|
|
command: |
|
|
gcloud firebase test android models list
|
|
(gcloud firebase test android run --type instrumentation \
|
|
--app platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/MapboxGLAndroidSDKTestApp-debug.apk \
|
|
--test platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/MapboxGLAndroidSDKTestApp-debug-androidTest.apk \
|
|
--device-ids shamu --os-version-ids 22 --locales en --orientations portrait --timeout 20m \
|
|
--test-targets "package com.mapbox.mapboxsdk.testapp.style" 2>&1 | tee firebase.log) || EXIT_CODE=$?
|
|
|
|
FIREBASE_TEST_BUCKET=$(sed -n 's|^.*\[https://console.developers.google.com/storage/browser/\([^]]*\).*|gs://\1|p' firebase.log)
|
|
echo "Downloading from: ${FIREBASE_TEST_BUCKET}"
|
|
gsutil -m cp -n -R -Z "$FIREBASE_TEST_BUCKET*" platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk
|
|
|
|
echo "Try running ndk-stack on downloaded logcat to symbolicate the stacktraces:"
|
|
find platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk -type f -name "logcat" -print0 | \
|
|
xargs -0 -I '{}' ${ANDROID_NDK_HOME}/ndk-stack -sym build/android-arm-v7/Debug -dump {}
|
|
|
|
exit ${EXIT_CODE:-0}
|
|
- store_artifacts:
|
|
path: platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk
|
|
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
|
|
|
|
# ------------------------------------------------------------------------------
|
|
android-release-all:
|
|
docker:
|
|
- image: mbgl/ci@sha256:c34e221294d81da80918d3e9a9df5de795b067e88f86d7c9a5e262763332536e
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Release
|
|
IS_LOCAL_DEVELOPMENT: false
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- run:
|
|
name: Generate Maven credentials
|
|
shell: /bin/bash -euo pipefail
|
|
command: |
|
|
aws s3 cp s3://mapbox/android/signing-credentials/secring.gpg platform/android/MapboxGLAndroidSDK/secring.gpg
|
|
echo "NEXUS_USERNAME=$PUBLISH_NEXUS_USERNAME
|
|
NEXUS_PASSWORD=$PUBLISH_NEXUS_PASSWORD
|
|
signing.keyId=$SIGNING_KEYID
|
|
signing.password=$SIGNING_PASSWORD
|
|
signing.secretKeyRingFile=secring.gpg" >> platform/android/MapboxGLAndroidSDK/gradle.properties
|
|
- run:
|
|
name: Build package
|
|
command: make apackage
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- store_artifacts:
|
|
path: platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk
|
|
destination: .
|
|
- deploy:
|
|
name: Show statistics
|
|
command: |
|
|
[ "${CIRCLE_BRANCH}" == "master" ] && export CLOUDWATCH=true
|
|
platform/android/scripts/metrics.sh
|
|
- deploy:
|
|
name: Publish to Maven
|
|
command: |
|
|
if [ "${CIRCLE_BRANCH}" == "release-ios-v3.6.0-android-v5.1.0" ]; then make run-android-upload-archives ; fi
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
node4-clang39-release:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-clang-3.9-node-4
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: RelWithDebInfo
|
|
WITH_EGL: 1
|
|
PACKAGE_JSON_VERSION: $(node -e "console.log(require('./package.json').version)")
|
|
PUBLISH: $([[ "${CIRCLE_BRANCH}" == "node-v${PACKAGE_JSON_VERSION}" ]] && echo true)
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *build-node
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- *run-node-tests
|
|
- *publish-node-package
|
|
- *upload-render-tests
|
|
|
|
# ------------------------------------------------------------------------------
|
|
node6-clang39-release:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-clang-3.9
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: RelWithDebInfo
|
|
WITH_EGL: 1
|
|
PACKAGE_JSON_VERSION: $(node -e "console.log(require('./package.json').version)")
|
|
PUBLISH: $([[ "${CIRCLE_BRANCH}" == "node-v${PACKAGE_JSON_VERSION}" ]] && echo true)
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *build-node
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- *run-node-tests
|
|
- *publish-node-package
|
|
- *upload-render-tests
|
|
|
|
# ------------------------------------------------------------------------------
|
|
node6-clang39-debug:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-clang-3.9
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
WITH_EGL: 1
|
|
PACKAGE_JSON_VERSION: $(node -e "console.log(require('./package.json').version)")
|
|
PUBLISH: $([[ "${CIRCLE_BRANCH}" == "node-v${PACKAGE_JSON_VERSION}" ]] && echo true)
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *build-node
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- *run-node-tests
|
|
- *publish-node-package
|
|
- *upload-render-tests
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-clang39-debug:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-clang-3.9
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
WITH_EGL: 1
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *build-linux
|
|
- *build-benchmark
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- *run-unit-tests
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-clang4-sanitize-address:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-clang-4
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Sanitize
|
|
WITH_EGL: 1
|
|
GDB: '' # Do not run with GDB
|
|
CXXFLAGS: -fsanitize=address
|
|
LDFLAGS: -fsanitize=address
|
|
ASAN_OPTIONS: detect_leaks=0:color=always:print_summary=1
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *setup-llvm-symbolizer
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- run:
|
|
name: Run tests
|
|
command: |
|
|
xvfb-run --server-args="-screen 0 1024x768x24" make run-test 2> >(tee sanitizer 1>&2)
|
|
# Unfortunately, Google Test eats the status code, so we'll have to check the output.
|
|
[ -z "$(sed -n '/^SUMMARY: AddressSanitizer:/p' sanitizer)" ]
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-clang4-sanitize-undefined:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-clang-4
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Sanitize
|
|
WITH_EGL: 1
|
|
GDB: '' # Do not run with GDB
|
|
CXXFLAGS: -fsanitize=undefined
|
|
LDFLAGS: -fsanitize=undefined
|
|
UBSAN_OPTIONS: print_stacktrace=1:color=always:print_summary=1
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *setup-llvm-symbolizer
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- run:
|
|
name: Run tests
|
|
command: |
|
|
xvfb-run --server-args="-screen 0 1024x768x24" make run-test 2> >(tee sanitizer 1>&2)
|
|
# Unfortunately, Google Test eats the status code, so we'll have to check the output.
|
|
[ -z "$(sed -n '/^SUMMARY: UndefinedBehaviorSanitizer:/p' sanitizer)" ]
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-clang4-sanitize-thread:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-clang-4
|
|
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:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *setup-llvm-symbolizer
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- run:
|
|
name: Run tests
|
|
command: |
|
|
xvfb-run --server-args="-screen 0 1024x768x24" make run-test 2> >(tee sanitizer 1>&2)
|
|
# Unfortunately, Google Test eats the status code, so we'll have to check the output.
|
|
[ -z "$(sed -n '/^SUMMARY: ThreadSanitizer:/p' sanitizer)" ]
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-gcc4.9-debug:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-gcc-4.9
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 2
|
|
BUILDTYPE: Debug
|
|
WITH_EGL: 1
|
|
WITH_CXX11ABI: 0
|
|
DISPLAY: :0
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *build-linux
|
|
- *build-benchmark
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- *run-unit-tests
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-gcc5-debug-coverage:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-gcc-5
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 2
|
|
BUILDTYPE: Debug
|
|
WITH_EGL: 1
|
|
WITH_COVERAGE: 1
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *build-linux
|
|
- *build-benchmark
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- *run-unit-tests
|
|
- run:
|
|
name: Upload coverage results to coveralls
|
|
command: |
|
|
platform/linux/scripts/coveralls.sh
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-gcc5-release-qt4:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-gcc-5-qt-4
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 2 # OOM, causing the compiler to crash.
|
|
BUILDTYPE: Release
|
|
GTEST_OUTPUT: xml
|
|
LD_PRELOAD: /usr/lib/x86_64-linux-gnu/libjemalloc.so
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *build-qt-app
|
|
- *build-qt-test
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- run:
|
|
name: Run memory-load tests
|
|
command: |
|
|
xvfb-run --server-args="-screen 0 1024x768x24" \
|
|
make run-qt-test-Memory.*:*.Load
|
|
scripts/log_memory_benchmarks.sh test_detail.xml "Platform=Linux,Compiler=${_CC},Arch=$(uname -m)"
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-gcc5-release-qt5:
|
|
docker:
|
|
- image: mbgl/ci:r4-linux-gcc-5-qt-5
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 2 # OOM, causing the compiler to crash.
|
|
BUILDTYPE: Release
|
|
WITH_QT_I18N: 1
|
|
steps:
|
|
- checkout
|
|
- *generate-cache-key
|
|
- *restore-cache
|
|
- *reset-ccache-stats
|
|
- *build-qt-app
|
|
- *build-qt-test
|
|
- run:
|
|
name: Build qt-docs
|
|
command: make qt-docs
|
|
- *show-ccache-stats
|
|
- *save-cache
|
|
- 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" \
|
|
scripts/valgrind.sh build/qt-linux-x86_64/Release/mbgl-test --gtest_filter=-*.Load --gtest_filter=-Memory.Vector
|