Files
MapLibreParticleLab/circle.yml
2018-08-29 15:18:40 -04:00

1172 lines
36 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-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
- ios-sanitize
- ios-sanitize-address
- ios-static-analyzer
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
- &reset-ccache-stats
run:
name: Clear ccache statistics
command: |
ccache --zero-stats
ccache --max-size=2G
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/v3/{{ arch }}/{{ checksum "cmake/mason-dependencies.cmake" }}'
paths: [ "mason_packages/.binaries" ]
- &restore-mason_packages-cache
restore_cache:
name: Restore mason_packages cache
keys:
- 'mason_packages/v3/{{ arch }}/{{ checksum "cmake/mason-dependencies.cmake" }}'
- 'mason_packages/v3/{{ 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
- &notify-slack-nightly-failure
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: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
- run:
name: Vendored packages
command: scripts/nitpick/vendoring.js
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: |
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
- *show-ccache-stats
- *save-node_modules-cache
- *save-mason_packages-cache
- *save-ccache
- *save-gradle-cache
- run:
name: Log in to Google Cloud Platform
command: |
if [ -n "${GCLOUD_SERVICE_ACCOUNT_JSON}" ]; 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:
name: Run instrumentation tests on Firebase
no_output_timeout: 1200
command: |
if [ -n "${GCLOUD_SERVICE_ACCOUNT_JSON}" ]; 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
- 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:
- 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
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
- *show-ccache-stats
- *save-node_modules-cache
- *save-mason_packages-cache
- *save-ccache
- *save-gradle-cache
- 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:
- 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.1"
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.1"
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.1"
environment:
BUILDTYPE: Debug
HOMEBREW_NO_AUTO_UPDATE: 1
SLACK_CHANNEL: C0ACM9Q2C
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
- *notify-slack-nightly-failure
# ------------------------------------------------------------------------------
ios-sanitize-address:
macos:
xcode: "9.4.1"
environment:
BUILDTYPE: Debug
HOMEBREW_NO_AUTO_UPDATE: 1
SLACK_CHANNEL: C0ACM9Q2C
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
- *notify-slack-nightly-failure
# ------------------------------------------------------------------------------
ios-static-analyzer:
macos:
xcode: "9.4.1"
environment:
BUILDTYPE: Debug
HOMEBREW_NO_AUTO_UPDATE: 1
SLACK_CHANNEL: C0ACM9Q2C
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
- *notify-slack-nightly-failure
# ------------------------------------------------------------------------------
ios-release:
macos:
xcode: "9.4.1"
environment:
BUILDTYPE: Release
HOMEBREW_NO_AUTO_UPDATE: 1
SLACK_CHANNEL: C0ACM9Q2C
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
- *notify-slack-nightly-failure
# ------------------------------------------------------------------------------
ios-release-tag:
macos:
xcode: "9.4.1"
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="Release build for <$CIRCLE_COMPARE_URL|\`$CIRCLE_TAG\`> <$CIRCLE_BUILD_URL|started>."
scripts/notify-slack.sh
- *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
- run:
name: Send a Slack notification on failure
when: on_fail
command: |
export SLACK_MESSAGE="Release build for <$CIRCLE_COMPARE_URL|\`$CIRCLE_TAG\`> <$CIRCLE_BUILD_URL|failed>."
export SLACK_COLOR="danger"
scripts/notify-slack.sh
- run:
name: Send a Slack notification on success
when: on_success
command: |
export SLACK_MESSAGE="Release build for <$CIRCLE_COMPARE_URL|\`$CIRCLE_TAG\`> <$CIRCLE_BUILD_URL|succeeded>."
export SLACK_COLOR="good"
scripts/notify-slack.sh
# ------------------------------------------------------------------------------
macos-debug:
macos:
xcode: "9.4.1"
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