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-template: name: ios-debug xcode: "9.4.1" - ios-debug-template: name: ios-debug-xcode10 xcode: "10.0.0" - 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 ] - 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 - 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: - 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: "9.4.1" 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 coveralls command: | platform/linux/scripts/coveralls.sh # ------------------------------------------------------------------------------ ios-debug-template: parameters: xcode: type: string macos: xcode: << parameters.xcode >> environment: BUILDTYPE: Debug HOMEBREW_NO_AUTO_UPDATE: 1 steps: - install-macos-dependencies - install-dependencies - build-ios-test - build-ios-integration-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: "9.4.1" 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: "9.4.1" 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: "9.4.1" 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: "9.4.1" 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