1078 lines
34 KiB
YAML
1078 lines
34 KiB
YAML
version: 2.1
|
|
|
|
workflows:
|
|
version: 2
|
|
default:
|
|
jobs:
|
|
- nitpick
|
|
- clang-tidy:
|
|
filters:
|
|
branches:
|
|
ignore: master
|
|
- android-arm-v7-template:
|
|
name: android-debug-arm-v7
|
|
- android-arm-v7-template:
|
|
name: android-gnustl-arm-v7
|
|
stl: gnustl_shared
|
|
- android-release:
|
|
filters:
|
|
tags:
|
|
only: /android-v.*/
|
|
- node-clang39-release:
|
|
filters:
|
|
tags:
|
|
only: /node-.*/
|
|
- node-gcc6-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-clang4-sanitize-address
|
|
- linux-clang4-sanitize-undefined
|
|
- linux-clang4-sanitize-thread
|
|
- linux-gcc49-debug:
|
|
name: linux-gcc4.9-debug
|
|
- linux-gcc5-debug-coverage
|
|
- ios-debug
|
|
- ios-release-template:
|
|
name: ios-release
|
|
- ios-release-tag:
|
|
filters:
|
|
tags:
|
|
only: /ios-.*/
|
|
branches:
|
|
ignore: /.*/
|
|
- macos-debug
|
|
- qt4-linux-gcc5-release
|
|
- qt5-linux-gcc5-release
|
|
- qt5-macos-debug
|
|
nightly:
|
|
triggers:
|
|
- schedule:
|
|
cron: "0 5 * * *"
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
jobs:
|
|
- ios-release-template:
|
|
name: ios-release-nightly
|
|
- ios-sanitize-nightly
|
|
- ios-sanitize-address-nightly
|
|
- ios-static-analyzer-nightly
|
|
|
|
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
|
|
|
|
|
|
build-node:
|
|
steps:
|
|
- run:
|
|
name: Build node
|
|
command: make node-all
|
|
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
|
|
run-android-instrumentation-tests:
|
|
steps:
|
|
- 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 sailfish --os-version-ids 26 --locales en --orientations portrait --timeout 20m
|
|
fi
|
|
|
|
|
|
install-ios-packaging-dependencies:
|
|
steps:
|
|
- run:
|
|
name: Install iOS packaging dependencies
|
|
command: brew install awscli wget
|
|
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@6
|
|
brew link node@6 --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:
|
|
steps:
|
|
- run:
|
|
name: Run node tests
|
|
command: |
|
|
xvfb-run --server-args="-screen 0 1024x768x24" \
|
|
logbt -- apitrace trace --api=egl -v make test-node
|
|
|
|
run-node-linux-tests-recycle-map:
|
|
steps:
|
|
- run:
|
|
name: Run node tests (recycling the map object)
|
|
command: |
|
|
xvfb-run --server-args="-screen 0 1024x768x24" \
|
|
logbt -- apitrace trace --api=egl -v make test-node-recycle-map
|
|
|
|
run-unit-tests:
|
|
steps:
|
|
- run:
|
|
name: Run tests
|
|
command: |
|
|
xvfb-run --server-args="-screen 0 1024x768x24" \
|
|
make run-test
|
|
|
|
|
|
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
|
|
upload-render-tests-recycle-map:
|
|
steps:
|
|
- store_artifacts:
|
|
path: mapbox-gl-js/test/integration/render-tests/index-recycle-map.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 [[ -z $CIRCLE_COMPARE_URL && $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
|
|
|
|
jobs:
|
|
nitpick:
|
|
docker:
|
|
- image: mbgl/7d2403f42e:linux-clang-4
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
steps:
|
|
- install-dependencies: { mason: false, ccache: false }
|
|
- run:
|
|
name: Initialize submodule
|
|
command: git submodule update --init mapbox-gl-js
|
|
- run:
|
|
name: Verify submodule pin
|
|
command: scripts/nitpick/submodule-pin.js
|
|
when: always
|
|
- run:
|
|
name: CMake file list generation
|
|
command: scripts/nitpick/generated-code.js cmake
|
|
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/7d2403f42e:linux-clang-3.9
|
|
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
|
|
no_output_timeout: 20m
|
|
- save-dependencies: { ccache: false }
|
|
|
|
# ------------------------------------------------------------------------------
|
|
android-arm-v7-template:
|
|
parameters:
|
|
stl:
|
|
type: string
|
|
default: "c++_static"
|
|
docker:
|
|
- image: mbgl/feb0443038:android-ndk-r17
|
|
resource_class: large
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
IS_LOCAL_DEVELOPMENT: false
|
|
MBGL_ANDROID_STL: << parameters.stl >>
|
|
steps:
|
|
- install-dependencies: { gradle: true }
|
|
- run:
|
|
name: Check code style
|
|
command: make android-check
|
|
- 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: 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-arm-v7
|
|
fi
|
|
- save-dependencies: { gradle: true }
|
|
- conditionally-skip-firebase
|
|
- login-google-cloud-platform
|
|
- run-android-instrumentation-tests
|
|
- run:
|
|
name: gzip debugable .so files
|
|
command: |
|
|
gzip platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/debug/obj/armeabi-v7a/libmapbox-gl.so
|
|
- store_artifacts:
|
|
path: platform/android/MapboxGLAndroidSDK/build/intermediates/cmake/debug/obj/armeabi-v7a/libmapbox-gl.so.gz
|
|
- 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
|
|
|
|
# ------------------------------------------------------------------------------
|
|
android-release:
|
|
docker:
|
|
- image: mbgl/feb0443038:android-ndk-r17
|
|
resource_class: large
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Release
|
|
IS_LOCAL_DEVELOPMENT: false
|
|
steps:
|
|
- install-dependencies: { gradle: true }
|
|
- run:
|
|
name: Generate Maven credentials
|
|
command: |
|
|
if [ -n "${PUBLISH_NEXUS_USERNAME}" ]; then
|
|
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
|
|
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
|
|
- 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
|
|
- run:
|
|
name: Record size
|
|
command: platform/android/scripts/metrics.sh
|
|
- deploy:
|
|
name: Publish to Maven
|
|
command: |
|
|
if [[ $CIRCLE_BRANCH == master ]] || [[ $CIRCLE_BRANCH == release-* ]] || [[ $CIRCLE_TAG == android-v* ]]; then
|
|
make run-android-upload-archives
|
|
fi
|
|
|
|
# ------------------------------------------------------------------------------
|
|
node-clang39-release:
|
|
docker:
|
|
- image: mbgl/7d2403f42e:linux-clang-3.9
|
|
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
|
|
- upload-render-tests
|
|
|
|
# ------------------------------------------------------------------------------
|
|
node-gcc6-debug:
|
|
docker:
|
|
- image: mbgl/7d2403f42e:linux-gcc-6
|
|
resource_class: large
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
WITH_EGL: 1
|
|
steps:
|
|
- install-dependencies
|
|
- build-node
|
|
- save-dependencies
|
|
- run-node-linux-tests-recycle-map
|
|
- publish-node-package
|
|
- upload-render-tests-recycle-map
|
|
|
|
# ------------------------------------------------------------------------------
|
|
node-macos-release:
|
|
macos:
|
|
xcode: "10.0.0"
|
|
environment:
|
|
BUILDTYPE: RelWithDebInfo
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- install-macos-dependencies
|
|
- install-node-macos-dependencies
|
|
- install-dependencies
|
|
- build-node
|
|
- save-dependencies
|
|
- run-node-macos-tests
|
|
- publish-node-package
|
|
- upload-render-tests
|
|
- collect-xcode-build-logs
|
|
- upload-xcode-build-logs
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-clang-38-libcxx-debug:
|
|
docker:
|
|
- image: mbgl/7d2403f42e:linux-clang-3.8-libcxx
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
WITH_EGL: 1
|
|
WITH_CXX11ABI: 1
|
|
steps:
|
|
- install-dependencies
|
|
- build-linux
|
|
- save-dependencies
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-clang4-sanitize-address:
|
|
docker:
|
|
- image: mbgl/7d2403f42e: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:
|
|
- install-dependencies
|
|
- setup-llvm-symbolizer
|
|
- build-test
|
|
- save-dependencies
|
|
- 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/7d2403f42e: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:
|
|
- install-dependencies
|
|
- setup-llvm-symbolizer
|
|
- build-test
|
|
- save-dependencies
|
|
- 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/7d2403f42e: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:
|
|
- install-dependencies
|
|
- setup-llvm-symbolizer
|
|
- build-test
|
|
- save-dependencies
|
|
- 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-gcc49-debug:
|
|
docker:
|
|
- image: mbgl/7d2403f42e:linux-gcc-4.9
|
|
resource_class: large
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
WITH_EGL: 1
|
|
WITH_CXX11ABI: 0
|
|
DISPLAY: :0
|
|
steps:
|
|
- install-dependencies
|
|
- build-linux
|
|
- build-benchmark
|
|
- build-test
|
|
- save-dependencies
|
|
- run-unit-tests
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-gcc5-debug-coverage:
|
|
docker:
|
|
- image: mbgl/7d2403f42e:linux-gcc-5
|
|
resource_class: large
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
WITH_EGL: 1
|
|
WITH_COVERAGE: 1
|
|
steps:
|
|
- install-dependencies
|
|
- build-linux
|
|
- build-benchmark
|
|
- build-test
|
|
- save-dependencies
|
|
- run-unit-tests
|
|
- run:
|
|
name: Upload coverage results to codecov.io
|
|
command: |
|
|
curl -sSfL -o codecov https://codecov.io/bash
|
|
chmod +x codecov
|
|
./codecov -c
|
|
|
|
# ------------------------------------------------------------------------------
|
|
ios-debug:
|
|
macos:
|
|
xcode: "10.0.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- install-macos-dependencies
|
|
- install-dependencies
|
|
- build-ios-test
|
|
- check-public-symbols
|
|
- run:
|
|
name: Check symbol namespacing for mapbox-events-ios
|
|
command: make ios-check-events-symbols
|
|
- run:
|
|
name: Lint plist files
|
|
command: make ios-lint
|
|
- 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.0.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 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
|
|
- save-dependencies
|
|
- collect-xcode-build-logs
|
|
- upload-xcode-build-logs
|
|
- notify-slack-nightly-failure
|
|
|
|
# ------------------------------------------------------------------------------
|
|
ios-sanitize-address-nightly:
|
|
macos:
|
|
xcode: "10.0.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 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.0.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 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.0.0"
|
|
environment:
|
|
BUILDTYPE: Release
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
SLACK_CHANNEL: C0ACM9Q2C
|
|
steps:
|
|
- install-macos-dependencies
|
|
- install-ios-packaging-dependencies
|
|
- install-dependencies
|
|
- run:
|
|
name: Build dynamic framework for device and simulator
|
|
command: make iframework
|
|
no_output_timeout: 5m
|
|
- deploy:
|
|
name: Upload nightly build to s3
|
|
command: |
|
|
if [[ -z $CIRCLE_COMPARE_URL && $CIRCLE_BRANCH == master ]]; then
|
|
platform/ios/scripts/deploy-nightly.sh
|
|
fi
|
|
- run:
|
|
name: Record size
|
|
command: platform/ios/scripts/metrics.sh
|
|
- save-dependencies
|
|
- collect-xcode-build-logs
|
|
- upload-xcode-build-logs
|
|
- notify-slack-nightly-failure
|
|
|
|
# ------------------------------------------------------------------------------
|
|
ios-release-tag:
|
|
macos:
|
|
xcode: "10.0.0"
|
|
environment:
|
|
BUILDTYPE: Release
|
|
HOMEBREW_NO_AUTO_UPDATE: 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-ios-packaging-dependencies
|
|
- install-dependencies
|
|
- 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
|
|
- 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.0.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- install-macos-dependencies
|
|
- install-dependencies
|
|
- 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
|
|
|
|
# ------------------------------------------------------------------------------
|
|
qt4-linux-gcc5-release:
|
|
docker:
|
|
- image: mbgl/7d2403f42e:linux-gcc-5-qt-4
|
|
resource_class: large
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Release
|
|
GTEST_OUTPUT: xml
|
|
LD_PRELOAD: /usr/lib/x86_64-linux-gnu/libjemalloc.so
|
|
steps:
|
|
- install-dependencies
|
|
- build-qt-app
|
|
- build-qt-test
|
|
- save-dependencies
|
|
- 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)"
|
|
|
|
# ------------------------------------------------------------------------------
|
|
qt5-linux-gcc5-release:
|
|
docker:
|
|
- image: mbgl/7d2403f42e:linux-gcc-5-qt-5.9
|
|
resource_class: large
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Release
|
|
WITH_QT_I18N: 1
|
|
steps:
|
|
- install-dependencies
|
|
- 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.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- install-macos-dependencies
|
|
- install-qt-macos-dependencies
|
|
- install-dependencies
|
|
- 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
|