Files
MapLibreParticleLab/circle.yml
John Firebaugh 74ef93ab4f [build] Improve ccache freshness
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.
2018-07-13 11:50:39 -07:00

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