Save a fresh ccache on every build by including (a checksum of) the current revision in the cache key. In the worst case, saving the cache appears to take ~1:30 for android-release; other builds appear to take a small amount of time compared to the time saved by having a fresh cache, versus a cache that's up to a week old.
Restore caches in the following priority order (all scoped to current architecture and job):
1. The cache for the current branch and revision.
2. If that doesn't exist, the most recent cache for the current branch.
3. If that doesn't exist, the cache for the parent branch and merge base, where "parent branch" means the base branch of the pull request specified by $CIRCLE_PULL_REQUEST (obtained from the GitHub API), and "merge base" means the revision returned by `git merge-base` when given the parent branch and $CIRCLE_BRANCH (obtained by executing that shell command). The intent here is to start a newly created branch off with the most relevant cache from its parent branch.
4. If that doesn't exist, the most recent cache for the parent branch.
5. If that doesn't exist, the most recent cache for master.
6. If that doesn't exist, use the most recent cache for any build.
We cannot use the branch names or revisions themselves as key segments, because CircleCI lacks a way to interpolate arbitrary environment variables into the cache key name. Instead, we write the desired value into a file and use the `{{ checksum "filename" }}` syntax.
1102 lines
33 KiB
YAML
1102 lines
33 KiB
YAML
version: 2
|
|
|
|
workflows:
|
|
version: 2
|
|
default:
|
|
jobs:
|
|
- nitpick
|
|
- clang-tidy:
|
|
filters:
|
|
branches:
|
|
ignore: master
|
|
- android-debug-arm-v7
|
|
- 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-3.8-libcxx-debug
|
|
- linux-clang4-sanitize-address
|
|
- linux-clang4-sanitize-undefined
|
|
- linux-clang4-sanitize-thread
|
|
- linux-gcc4.9-debug
|
|
- linux-gcc5-debug-coverage
|
|
- ios-debug
|
|
- ios-sanitize
|
|
- ios-sanitize-address
|
|
- ios-static-analyzer
|
|
- 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
|
|
|
|
step-library:
|
|
- &npm-install
|
|
run:
|
|
name: npm install
|
|
command: npm install --ignore-scripts
|
|
- &prepare-environment
|
|
run:
|
|
name: Prepare environment
|
|
command: touch "$BASH_ENV" && ./scripts/environment.js | tee -a "$BASH_ENV"
|
|
- &prepare-ccache
|
|
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
|
|
ccache --max-size=5G
|
|
- &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
|
|
|
|
|
|
- &save-node_modules-cache
|
|
save_cache:
|
|
name: Save node_modules cache
|
|
key: 'node_modules/v1/{{ arch }}/{{ checksum "package.json" }}'
|
|
paths: [ "node_modules" ]
|
|
- &restore-node_modules-cache
|
|
restore_cache:
|
|
name: Restore node_modules cache
|
|
keys:
|
|
- 'node_modules/v1/{{ arch }}/{{ checksum "package.json" }}'
|
|
- 'node_modules/v1/{{ arch }}'
|
|
- &save-mason_packages-cache
|
|
save_cache:
|
|
name: Save mason_packages cache
|
|
key: 'mason_packages/v1/{{ arch }}/{{ checksum "cmake/mason-dependencies.cmake" }}'
|
|
paths: [ "mason_packages/.binaries" ]
|
|
- &restore-mason_packages-cache
|
|
restore_cache:
|
|
name: Restore mason_packages cache
|
|
keys:
|
|
- 'mason_packages/v1/{{ arch }}/{{ checksum "cmake/mason-dependencies.cmake" }}'
|
|
- 'mason_packages/v1/{{ arch }}'
|
|
- &save-ccache
|
|
save_cache:
|
|
name: Save ccache
|
|
key: 'ccache/v1/{{ arch }}/{{ .Environment.CIRCLE_JOB }}/{{ checksum ".circle-branch" }}/{{ checksum ".circle-sha1" }}'
|
|
paths: [ "~/.ccache" ]
|
|
- &restore-ccache
|
|
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
|
|
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
|
|
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'
|
|
|
|
|
|
- &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-all
|
|
- &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
|
|
- &build-ios-test
|
|
run:
|
|
name: Build ios-test
|
|
command: make ios-test
|
|
- &build-ios-integration-test
|
|
run:
|
|
name: Build ios-integration-test
|
|
command: make ios-integration-test
|
|
- &build-macos-test
|
|
run:
|
|
name: Build and run macOS tests
|
|
command: make run-test
|
|
|
|
|
|
- &check-public-symbols
|
|
run:
|
|
name: Check public symbols
|
|
command: make check-public-symbols
|
|
|
|
|
|
- &install-ios-packaging-dependencies
|
|
run:
|
|
name: Install iOS packaging dependencies
|
|
command: brew install awscli wget
|
|
background: true
|
|
|
|
- &install-macos-dependencies
|
|
run:
|
|
name: Install macOS dependencies
|
|
command: |
|
|
brew install cmake ccache
|
|
|
|
- &install-node-macos-dependencies
|
|
run:
|
|
name: Install Node macOS dependencies
|
|
command: |
|
|
brew install node@6
|
|
brew link node@6 --force --overwrite
|
|
|
|
- &install-qt-macos-dependencies
|
|
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
|
|
run:
|
|
name: Run node tests
|
|
command: make test-node
|
|
|
|
- &run-node-linux-tests
|
|
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
|
|
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
|
|
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/publish.sh
|
|
|
|
|
|
- &upload-render-tests
|
|
store_artifacts:
|
|
path: mapbox-gl-js/test/integration/render-tests/index.html
|
|
destination: render-tests
|
|
- &upload-render-tests-recycle-map
|
|
store_artifacts:
|
|
path: mapbox-gl-js/test/integration/render-tests/index-recycle-map.html
|
|
destination: render-tests
|
|
|
|
- &collect-xcode-build-logs
|
|
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
|
|
store_artifacts:
|
|
path: build/logs
|
|
|
|
jobs:
|
|
nitpick:
|
|
docker:
|
|
- image: mbgl/7d2403f42e:base
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- 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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *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
|
|
- run:
|
|
name: Run Clang checks
|
|
command: make check
|
|
no_output_timeout: 20m
|
|
- *show-ccache-stats
|
|
- *save-ccache
|
|
|
|
# ------------------------------------------------------------------------------
|
|
android-debug-arm-v7:
|
|
docker:
|
|
- image: mbgl/feb0443038:android-ndk-r17
|
|
resource_class: large
|
|
working_directory: /src
|
|
environment:
|
|
LIBSYSCONFCPUS: 4
|
|
JOBS: 4
|
|
BUILDTYPE: Debug
|
|
IS_LOCAL_DEVELOPMENT: false
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *restore-gradle-cache
|
|
- *reset-ccache-stats
|
|
- 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: |
|
|
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-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *save-gradle-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/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
|
|
- 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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *restore-gradle-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: 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
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *save-gradle-cache
|
|
- store_artifacts:
|
|
path: platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/release
|
|
destination: .
|
|
- 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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-node
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-node
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *run-node-linux-tests-recycle-map
|
|
- *publish-node-package
|
|
- *upload-render-tests-recycle-map
|
|
|
|
# ------------------------------------------------------------------------------
|
|
node-macos-release:
|
|
macos:
|
|
xcode: "9.4.0"
|
|
environment:
|
|
BUILDTYPE: RelWithDebInfo
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *install-macos-dependencies
|
|
- *install-node-macos-dependencies
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-node
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *run-node-macos-tests
|
|
- *publish-node-package
|
|
- *upload-render-tests
|
|
- *collect-xcode-build-logs
|
|
- *upload-xcode-build-logs
|
|
|
|
# ------------------------------------------------------------------------------
|
|
linux-clang-3.8-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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-linux
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
|
|
# ------------------------------------------------------------------------------
|
|
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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *setup-llvm-symbolizer
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- 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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *setup-llvm-symbolizer
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- 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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *setup-llvm-symbolizer
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- 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/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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-linux
|
|
- *build-benchmark
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-linux
|
|
- *build-benchmark
|
|
- *build-test
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *run-unit-tests
|
|
- run:
|
|
name: Upload coverage results to coveralls
|
|
command: |
|
|
platform/linux/scripts/coveralls.sh
|
|
|
|
# ------------------------------------------------------------------------------
|
|
ios-debug:
|
|
macos:
|
|
xcode: "9.4.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *install-macos-dependencies
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-ios-test
|
|
- *build-ios-integration-test
|
|
- *check-public-symbols
|
|
- run:
|
|
name: Lint plist files
|
|
command: make ios-lint
|
|
- run:
|
|
name: Nitpick Darwin code generation
|
|
command: scripts/nitpick/generated-code.js darwin
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *collect-xcode-build-logs
|
|
- *upload-xcode-build-logs
|
|
|
|
# ------------------------------------------------------------------------------
|
|
ios-sanitize:
|
|
macos:
|
|
xcode: "9.4.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *install-macos-dependencies
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- run:
|
|
name: Build and run SDK unit tests with thread and undefined behavior sanitizers
|
|
command: make ios-sanitize
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *collect-xcode-build-logs
|
|
- *upload-xcode-build-logs
|
|
|
|
# ------------------------------------------------------------------------------
|
|
ios-sanitize-address:
|
|
macos:
|
|
xcode: "9.4.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *install-macos-dependencies
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- run:
|
|
name: Build and run SDK unit tests with address sanitizer
|
|
command: make ios-sanitize-address
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *collect-xcode-build-logs
|
|
- *upload-xcode-build-logs
|
|
|
|
# ------------------------------------------------------------------------------
|
|
ios-static-analyzer:
|
|
macos:
|
|
xcode: "9.4.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *install-macos-dependencies
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- run:
|
|
name: Build and run SDK unit tests with the static analyzer
|
|
command: make ios-static-analyzer
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *collect-xcode-build-logs
|
|
- *upload-xcode-build-logs
|
|
|
|
# ------------------------------------------------------------------------------
|
|
ios-release:
|
|
macos:
|
|
xcode: "9.4.0"
|
|
environment:
|
|
BUILDTYPE: Release
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *install-macos-dependencies
|
|
- *install-ios-packaging-dependencies
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- run:
|
|
name: Build dynamic framework for device and simulator
|
|
command: make iframework
|
|
- 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
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *collect-xcode-build-logs
|
|
- *upload-xcode-build-logs
|
|
|
|
# ------------------------------------------------------------------------------
|
|
ios-release-tag:
|
|
macos:
|
|
xcode: "9.4.0"
|
|
environment:
|
|
BUILDTYPE: Release
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *install-macos-dependencies
|
|
- *install-ios-packaging-dependencies
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- 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
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- *collect-xcode-build-logs
|
|
- *upload-xcode-build-logs
|
|
|
|
# ------------------------------------------------------------------------------
|
|
macos-debug:
|
|
macos:
|
|
xcode: "9.4.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *install-macos-dependencies
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *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
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- 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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-qt-app
|
|
- *build-qt-test
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- 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:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-qt-app
|
|
- *build-qt-test
|
|
- run:
|
|
name: Build qt-docs
|
|
command: make qt-docs
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- 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
|
|
|
|
# ------------------------------------------------------------------------------
|
|
qt5-macos-debug:
|
|
macos:
|
|
xcode: "9.3.0"
|
|
environment:
|
|
BUILDTYPE: Debug
|
|
HOMEBREW_NO_AUTO_UPDATE: 1
|
|
steps:
|
|
- checkout
|
|
- *restore-node_modules-cache
|
|
- *npm-install
|
|
- *prepare-environment
|
|
- *install-macos-dependencies
|
|
- *install-qt-macos-dependencies
|
|
- *prepare-ccache
|
|
- *restore-mason_packages-cache
|
|
- *restore-ccache
|
|
- *reset-ccache-stats
|
|
- *build-qt-app
|
|
- *build-qt-test
|
|
- run:
|
|
name: Run qt-test
|
|
command: make run-qt-test
|
|
- *show-ccache-stats
|
|
- *save-node_modules-cache
|
|
- *save-mason_packages-cache
|
|
- *save-ccache
|
|
- store_artifacts:
|
|
path: test/fixtures
|
|
destination: test/fixtures
|