summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <tmpsantos@gmail.com>2019-07-25 03:05:35 +0300
committerThiago Marcos P. Santos <tmpsantos@gmail.com>2019-09-17 12:28:55 +0300
commitf6bb7844396e5f36cc196a6a61aa5547c14deb33 (patch)
treea4aa6e465b4a8cdb30791abeba9c3e583ac3363b
parentef1a7aad70384f574c60807148aaf245607310a9 (diff)
downloadqtlocation-mapboxgl-f6bb7844396e5f36cc196a6a61aa5547c14deb33.tar.gz
[build] CI config
Run it in parallel with the old build system. This will offer a migration path and make sure we keep everything working at the cost of running many CI bots. New stuff is prefixed with "next". Appveyor already got migrated to the next buildsystem. After merging, we will follow-up removing duplicated core bots.
-rw-r--r--.clang-format23
-rw-r--r--.clang-tidy3
-rw-r--r--.cmake-format91
-rw-r--r--appveyor.yml66
-rw-r--r--circle.yml311
-rw-r--r--scripts/ci/Dockerfile110
-rw-r--r--scripts/ci/etc/apt/sources.list10
7 files changed, 554 insertions, 60 deletions
diff --git a/.clang-format b/.clang-format
index ff0f39e73b..cacdf25308 100644
--- a/.clang-format
+++ b/.clang-format
@@ -1,18 +1,9 @@
-Standard: Cpp11
-IndentWidth: 4
+---
+Language: Cpp
+BasedOnStyle: Google
AccessModifierOffset: -4
-UseTab: Never
-BinPackParameters: false
-AllowShortIfStatementsOnASingleLine: false
-AllowShortLoopsOnASingleLine: false
-AllowShortBlocksOnASingleLine: false
-AllowShortFunctionsOnASingleLine: false
-ConstructorInitializerAllOnOneLineOrOnePerLine: true
-AlwaysBreakTemplateDeclarations: true
-NamespaceIndentation: None
-PointerBindsToType: true
-SpacesInParentheses: false
-BreakBeforeBraces: Attach
-ColumnLimit: 100
-Cpp11BracedListStyle: false
+AllowShortFunctionsOnASingleLine: Inline
+ColumnLimit: 120
+IndentWidth: 4
SpacesBeforeTrailingComments: 1
+...
diff --git a/.clang-tidy b/.clang-tidy
index 97600637ed..e8a74962be 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -1,3 +1,4 @@
-Checks: 'modernize-*,misc-static-assert,llvm-namespace-comment,-clang-analyzer-security.insecureAPI.rand,-clang-analyzer-core.uninitialized.UndefReturn,-clang-analyzer-core.StackAddressEscape,-clang-analyzer-core.CallAndMessage,-clang-diagnostic-unused-command-line-argument,-clang-analyzer-core.uninitialized.*,-clang-analyzer-core.NullDereference,-clang-analyzer-core.NonNullParamChecker'
+Checks: 'bugprone-*,clang-analyzer-*,cppcoreguidelines-*,google-*,misc-*,modernize-*,performance-*,readability-*,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-special-member-functions,-google-readability-todo,-google-runtime-int,-misc-non-private-member-variables-in-classes,-readability-magic-numbers,-readability-named-parameter'
WarningsAsErrors: '*'
+HeaderFilterRegex: '.*'
FormatStyle: file
diff --git a/.cmake-format b/.cmake-format
new file mode 100644
index 0000000000..abd1e46cb8
--- /dev/null
+++ b/.cmake-format
@@ -0,0 +1,91 @@
+
+# --------------------------
+# General Formatting Options
+# --------------------------
+# How wide to allow formatted cmake files
+line_width = 140
+
+# How many spaces to tab for indent
+tab_size = 4
+
+# If arglists are longer than this, break them always
+max_subargs_per_line = 3
+
+# If true, separate flow control names from their parentheses with a space
+separate_ctrl_name_with_space = False
+
+# If true, separate function names from parentheses with a space
+separate_fn_name_with_space = False
+
+# If a statement is wrapped to more than one line, than dangle the closing
+# parenthesis on it's own line
+dangle_parens = True
+
+# If the statement spelling length (including space and parenthesis is larger
+# than the tab width by more than this amoung, then force reject un-nested
+# layouts.
+max_prefix_chars = 2
+
+# If a candidate layout is wrapped horizontally but it exceeds this many lines,
+# then reject the layout.
+max_lines_hwrap = 8
+
+# What style line endings to use in the output.
+line_ending = u'unix'
+
+# Format command names consistently as 'lower' or 'upper' case
+command_case = u'canonical'
+
+# Format keywords consistently as 'lower' or 'upper' case
+keyword_case = u'unchanged'
+
+# Specify structure for custom cmake functions
+additional_commands = {
+ "add_node_module": {
+ "kwargs": {
+ "INSTALL_PATH": "*",
+ "NAN_VERSION": "*",
+ "EXCLUDE_NODE_ABIS": "*"
+ }
+ },
+ "target_compile_definitions": {
+ "kwargs": {
+ "PRIVATE": "*",
+ "PUBLIC": "*"
+ }
+ },
+ "target_sources": {
+ "kwargs": {
+ "INTERFACE": "*",
+ "PRIVATE": "*",
+ "PUBLIC": "*"
+ }
+ }
+}
+
+# A list of command names which should always be wrapped
+always_wrap = [
+ "add_executable",
+ "add_library",
+ "set_source_files_properties",
+ "target_compile_definitions",
+ "target_include_directories",
+ "target_link_libraries",
+ "target_sources"
+]
+
+# Specify the order of wrapping algorithms during successive reflow attempts
+algorithm_order = [0, 1, 2, 3, 4]
+
+# If true, the argument lists which are known to be sortable will be sorted
+# lexicographicall
+enable_sort = True
+
+# If true, the parsers may infer whether or not an argument list is sortable
+# (without annotation).
+autosort = True
+
+# If a comment line starts with at least this many consecutive hash characters,
+# then don't lstrip() them off. This allows for lazy hash rulers where the first
+# hash char is not separated by space
+hashruler_min_length = 10
diff --git a/appveyor.yml b/appveyor.yml
index 0e1bd01124..2440c3f601 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -5,29 +5,15 @@ image:
- Visual Studio 2017
environment:
- PYTHON: C:\python37
+ PYTHON: C:\python37
matrix:
- configuration: Release
-
-clone_depth: 1
-
-after_build:
- - mkdir qmapboxgl
- - mkdir qmapboxgl\lib
- - mkdir qmapboxgl\include
- - copy qmapboxgl.dll qmapboxgl\lib
- - copy qmapboxgl.exp qmapboxgl\lib
- - copy qmapboxgl.lib qmapboxgl\lib
- - copy %APPVEYOR_BUILD_FOLDER%\platform\qt\include\* qmapboxgl\include
- - 7z a qmapboxgl-%APPVEYOR_REPO_COMMIT%.zip qmapboxgl
-
-artifacts:
- - path: build\qmapboxgl-%APPVEYOR_REPO_COMMIT%.zip
- name: QMapboxGL
+ - configuration: Debug
test: off
+clone_depth: 1
for:
-
@@ -36,10 +22,10 @@ for:
- image: Visual Studio 2015
environment:
- LLVM_VERSION: 5.0.1
- LLVM_HASH: 981543611D719624ACB29A2CFFD6A479CFF36E8AB5EE8A57D8ECA4F9C4C6956F
- VCVARSALL: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat'
- QT_PREFIX: 'C:\Qt\latest\msvc2015_64\lib\cmake'
+ LLVM_VERSION: 5.0.1
+ LLVM_HASH: 981543611D719624ACB29A2CFFD6A479CFF36E8AB5EE8A57D8ECA4F9C4C6956F
+ VCVARSALL: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat'
+ QT_PREFIX: 'C:\Qt\latest\msvc2015_64\lib\cmake'
-
matrix:
@@ -53,52 +39,52 @@ for:
QT_PREFIX: 'C:\Qt\latest\msvc2017_64\lib\cmake'
cache:
- - '%APPVEYOR_BUILD_FOLDER%\mason_packages'
+ - '%APPVEYOR_BUILD_FOLDER%\.git\modules'
- '%APPVEYOR_BUILD_FOLDER%\LLVM-%LLVM_VERSION%-win64.exe'
- '%APPVEYOR_BUILD_FOLDER%\cmake-3.10.1-win64-x64.zip'
- C:\clcache
install:
+ - set PATH=%PYTHON%\Scripts;%PYTHON%;%PATH%
+ - pip install clcache
- git config --system core.longpaths true
- git submodule sync
- git submodule update --init
- git submodule foreach git submodule update --init
- ps: |
- if (!(Test-Path cmake-3.10.1-win64-x64.zip)) {
- appveyor DownloadFile https://cmake.org/files/v3.10/cmake-3.10.1-win64-x64.zip
- }
- scripts\check-sha256.ps1 cmake-3.10.1-win64-x64.zip 8251F70C85B58F3CA1F24E4A3B0637E2D609B5E4A341D00B70E02E89244D5029
- Start-Process -FilePath '7z' -ArgumentList 'x','cmake-3.10.1-win64-x64.zip','-oC:\' -Wait
- - ps: |
if (!(Test-Path "LLVM-$env:LLVM_VERSION-win64.exe")) {
appveyor DownloadFile "https://releases.llvm.org/$env:LLVM_VERSION/LLVM-$env:LLVM_VERSION-win64.exe"
}
scripts\check-sha256.ps1 LLVM-$env:LLVM_VERSION-win64.exe "$env:LLVM_HASH"
Start-Process -FilePath "LLVM-$env:LLVM_VERSION-win64.exe" -ArgumentList '/S',"/D=C:\LLVM-$env:LLVM_VERSION" -Wait
- - set PATH=%PYTHON%\Scripts;%PYTHON%;%PATH%
- - pip install clcache
+ - ps: |
+ if (!(Test-Path cmake-3.10.1-win64-x64.zip)) {
+ appveyor DownloadFile https://cmake.org/files/v3.10/cmake-3.10.1-win64-x64.zip
+ }
+ scripts\check-sha256.ps1 cmake-3.10.1-win64-x64.zip 8251F70C85B58F3CA1F24E4A3B0637E2D609B5E4A341D00B70E02E89244D5029
+ Start-Process -FilePath '7z' -ArgumentList 'x','cmake-3.10.1-win64-x64.zip','-oC:\' -Wait
before_build:
- set PATH=C:\LLVM-%LLVM_VERSION%\bin;%PATH%
- set PATH=C:\cmake-3.10.1-win64-x64\bin;%PATH%
- set CLCACHE_DIR=c:\clcache
- set CLCACHE_CL=clang-cl
+ - clcache -z
- set CC=clcache
- set CXX=clcache
+ - set CTEST_OUTPUT_ON_FAILURE=1
- mkdir %APPVEYOR_BUILD_FOLDER%\build
- cd %APPVEYOR_BUILD_FOLDER%\build
build_script:
- call "%VCVARSALL%" amd64
+ - cmake -E remove ../next/vendor
+ - cmake -E copy_directory ../vendor ../next/vendor
- cmake -G "Ninja"
- -DMBGL_PLATFORM=qt
- -DWITH_QT_DECODERS=ON
- -DWITH_QT_I18N=ON
- -DWITH_NODEJS=OFF
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_PREFIX_PATH=%QT_PREFIX%
- -DCMAKE_MAKE_PROGRAM="%APPVEYOR_BUILD_FOLDER%\platform\qt\ninja.exe"
- ..
- - clcache -z
- - cmake --build . -- -j %NUMBER_OF_PROCESSORS%
+ -DCMAKE_BUILD_TYPE=%CONFIGURATION%
+ -DCMAKE_MAKE_PROGRAM="%APPVEYOR_BUILD_FOLDER%\platform\qt\ninja.exe"
+ -DCMAKE_PREFIX_PATH=%QT_PREFIX%
+ -DMBGL_WITH_QT=ON
+ ../next
+ - cmake --build . --target qmapboxgl -- -j %NUMBER_OF_PROCESSORS%
- clcache -s
diff --git a/circle.yml b/circle.yml
index 453aab85ac..61c4b03654 100644
--- a/circle.yml
+++ b/circle.yml
@@ -2,7 +2,133 @@ version: 2.1
workflows:
version: 2
- default:
+ mbgl-next:
+ jobs:
+ - next-sanity-checks
+ - next-build-template:
+ name: next-android-armeabi-v7a-release
+ executor_name: ubuntu-disco
+ target_is_android: true
+ requires:
+ - next-sanity-checks
+ config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=armeabi-v7a'
+ - next-build-template:
+ name: next-android-arm64-v8a-release
+ executor_name: ubuntu-disco
+ target_is_android: true
+ requires:
+ - next-android-armeabi-v7a-release
+ config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=arm64-v8a'
+ - next-build-template:
+ name: next-android-x86-release
+ executor_name: ubuntu-disco
+ target_is_android: true
+ requires:
+ - next-android-armeabi-v7a-release
+ config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=x86'
+ - next-build-template:
+ name: next-android-x86_64-release
+ executor_name: ubuntu-disco
+ target_is_android: true
+ requires:
+ - next-android-armeabi-v7a-release
+ config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=x86_64'
+ - next-build-template:
+ name: next-linux-gcc8-release
+ executor_name: ubuntu-disco
+ target_is_linux: true
+ requires:
+ - next-sanity-checks
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8'
+ - next-build-template:
+ name: next-linux-gcc4.9-release
+ executor_name: ubuntu-disco
+ target_is_linux: true
+ requires:
+ - next-linux-gcc8-release
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-4.9 -DCMAKE_CXX_COMPILER=g++-4.9'
+ build_params: '--target mbgl-glfw'
+ test_params: '-N -Q'
+ - next-build-template:
+ name: next-linux-gcc8-debug-coverage
+ executor_name: ubuntu-disco
+ target_is_linux: true
+ requires:
+ - next-linux-gcc8-release
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_BUILD_TYPE=DebugCoverage'
+ - next-build-template:
+ name: next-linux-clang8-release
+ executor_name: ubuntu-disco
+ target_is_linux: true
+ requires:
+ - next-sanity-checks
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8'
+ - next-build-template:
+ name: next-linux-asan
+ executor_name: ubuntu-disco
+ target_is_linux: true
+ requires:
+ - next-linux-gcc8-debug-coverage
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=address'
+ - next-build-template:
+ name: next-linux-tsan
+ executor_name: ubuntu-disco
+ target_is_linux: true
+ requires:
+ - next-linux-gcc8-debug-coverage
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=thread'
+ - next-build-template:
+ name: next-linux-memsan
+ executor_name: ubuntu-disco
+ target_is_linux: true
+ requires:
+ - next-linux-gcc8-debug-coverage
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=memory'
+ - next-build-template:
+ name: next-linux-ubsan
+ executor_name: ubuntu-disco
+ target_is_linux: true
+ requires:
+ - next-linux-gcc8-debug-coverage
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=undefined'
+ - next-build-template:
+ name: next-qt5-linux-gcc5-release
+ executor_name: ubuntu-disco
+ target_is_linux: true
+ requires:
+ - next-sanity-checks
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-5 -DCMAKE_CXX_COMPILER=g++-5 -DMBGL_WITH_QT=ON'
+ - next-build-template:
+ name: next-qt5-macos-gcc5-release
+ executor_name: macos-11_0_0
+ target_is_macos: true
+ requires:
+ - next-qt5-linux-gcc5-release
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DMBGL_WITH_QT=ON -DCMAKE_PREFIX_PATH=$(echo /usr/local/Cellar/qt/5.*/lib/cmake)'
+ test_params: '-N -Q'
+ - next-build-template:
+ name: next-macos-xcode11-release
+ executor_name: macos-11_0_0
+ target_is_macos: true
+ requires:
+ - next-sanity-checks
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache'
+ - next-build-template:
+ name: next-macos-xcode11-debug
+ executor_name: macos-11_0_0
+ target_is_macos: true
+ requires:
+ - next-macos-xcode11-release
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug'
+ - next-build-template:
+ name: next-ios-xcode11-release
+ executor_name: macos-11_0_0
+ target_is_macos: true
+ requires:
+ - next-sanity-checks
+ config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_SYSROOT=iphonesimulator'
+ test_params: '-Q -N'
+ mbgl-legacy:
jobs:
#
# Naming convention: {platform}-{additional description}-{build type}
@@ -47,8 +173,6 @@ workflows:
name: linux-clang-3.8-libcxx-debug
- linux-clang-7-sanitize-address-undefined
- linux-clang-7-sanitize-thread
- - linux-gcc49-debug:
- name: linux-gcc4.9-debug
- linux-gcc5-debug-coverage
- linux-doxygen
- linux-render-tests
@@ -83,7 +207,102 @@ workflows:
- ios-static-analyzer-nightly
- ios-static-analyzer-nightly-xcode11
+executors:
+ ubuntu-disco:
+ docker:
+ # FIXME: Move the image to mbgl/
+ - image: tmpsantos/mbgl_ci:1.5
+ resource_class: xlarge
+ working_directory: /src
+ environment:
+ UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1
+ MSAN_OPTIONS: poison_in_dtor=1
+ ASAN_OPTIONS: strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1
+ QT_INSTALL_DOCS: /usr/share/qt5/doc
+ QT_VERSION: 5
+ macos-11_0_0:
+ macos:
+ xcode: '11.0.0'
+ environment:
+ HOMEBREW_NO_AUTO_UPDATE: 1
+ HOMEBREW_NO_INSTALL_CLEANUP: 1
+
commands:
+ next-prepare:
+ steps:
+ - restore_cache:
+ keys:
+ - 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .Revision }}'
+ - 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-'
+ - 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-master'
+ - 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-'
+ - run:
+ name: Prepare
+ command: |
+ git submodule sync
+ git submodule update --init --recursive
+ npm install --ignore-scripts
+ ulimit -c unlimited
+ next-prepare-macos:
+ steps:
+ - run:
+ name: Prepare macOS
+ command: |
+ brew install cmake ccache glfw ninja pkgconfig qt
+ next-config:
+ parameters:
+ config_params:
+ type: string
+ steps:
+ - run:
+ name: Configure
+ command: |
+ cmake next -B build << parameters.config_params >>
+ next-build:
+ parameters:
+ build_params:
+ type: string
+ steps:
+ - run:
+ name: Build
+ command: |
+ ccache --zero-stats --max-size=2G
+ cmake --build build -j 8 << parameters.build_params >>
+ ccache --show-stats
+ git gc
+ next-save:
+ steps:
+ - save_cache:
+ key: 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .Revision }}'
+ paths:
+ - .git/modules
+ - /Users/distiller/Library/Caches/Homebrew
+ - node_modules
+ - ~/.ccache
+ - ~/.gradle
+ - run:
+ name: Collecting artifacts
+ when: on_fail
+ command: |
+ mkdir -p /tmp/tests/coredumps
+ if ls core* 1> /dev/null 2>&1; then cp core* /tmp/tests/coredumps; fi
+ mkdir -p /tmp/tests/render
+ if [ -f mapbox-gl-js/test/integration/render-tests/index.html ]; then cp mapbox-gl-js/test/integration/render-tests/index.html /tmp/tests/render; fi
+ - store_artifacts:
+ path: /tmp/tests
+ destination: tests
+ next-test:
+ parameters:
+ test_wrapper:
+ type: string
+ test_params:
+ type: string
+ steps:
+ - run:
+ name: Test
+ command: |
+ cd build
+ << parameters.test_wrapper >> ctest -j 8 --output-on-failure << parameters.test_params >>
npm-install:
steps:
- run:
@@ -516,6 +735,92 @@ commands:
fi
jobs:
+ next-sanity-checks:
+ executor: ubuntu-disco
+ steps:
+ - checkout
+ - next-prepare
+ - next-config:
+ config_params: '-DMBGL_WITH_CORE_ONLY=ON'
+ - run:
+ name: CMake Format
+ command: |
+ cmake-format -i $(find next -type f -name CMakeLists.txt -o -name '*.cmake')
+ git diff --exit-code
+ - run:
+ name: Clang Format
+ command: |
+ git diff -U0 --no-color origin/master... *.cpp *.hpp | clang-format-diff-8 -p1 -i
+ git diff --exit-code
+ - run:
+ name: Clang Tidy
+ command: |
+ git diff -U0 --no-color origin/master... src include | clang-tidy-diff-8.py -clang-tidy-binary clang-tidy-8 -p1 -path build
+ - run:
+ name: Code Generators
+ command: |
+ platform/android/scripts/generate-style-code.js
+ scripts/generate-file-lists.js
+ scripts/generate-shaders.js
+ scripts/generate-style-code.js
+ git add -A && git diff --staged --exit-code
+ - next-save
+ next-build-template:
+ parameters:
+ config_params:
+ type: string
+ default: ''
+ build_params:
+ type: string
+ default: ''
+ test_params:
+ type: string
+ default: ''
+ executor_name:
+ type: string
+ target_is_android:
+ type: boolean
+ default: false
+ target_is_linux:
+ type: boolean
+ default: false
+ target_is_macos:
+ type: boolean
+ default: false
+ executor: << parameters.executor_name >>
+ steps:
+ - checkout
+ - next-prepare
+ - when:
+ condition: << parameters.target_is_android >>
+ steps:
+ - next-config:
+ config_params: << parameters.config_params >>
+ - next-build:
+ build_params: << parameters.build_params >>
+ - when:
+ condition: << parameters.target_is_linux >>
+ steps:
+ - next-config:
+ config_params: << parameters.config_params >>
+ - next-build:
+ build_params: << parameters.build_params >>
+ - next-test:
+ test_wrapper: 'xvfb-run -s -noreset'
+ test_params: << parameters.test_params >>
+ - when:
+ condition: << parameters.target_is_macos >>
+ steps:
+ - next-prepare-macos
+ - next-config:
+ config_params: << parameters.config_params >>
+ - next-build:
+ build_params: << parameters.build_params >>
+ - next-test:
+ test_wrapper: ''
+ test_params: << parameters.test_params >>
+ - next-save
+
nitpick:
docker:
- image: mbgl/linux-clang-7:a5a3c52107
diff --git a/scripts/ci/Dockerfile b/scripts/ci/Dockerfile
new file mode 100644
index 0000000000..648581044f
--- /dev/null
+++ b/scripts/ci/Dockerfile
@@ -0,0 +1,110 @@
+FROM ubuntu:disco-20190718
+
+ENV DEBIAN_FRONTEND="noninteractive"
+ENV ANDROID_HOME="/opt/android"
+
+WORKDIR /src
+
+# Use faster mirrors from Finland
+COPY etc/apt/sources.list /etc/apt
+
+RUN set -eu \
+ && apt-get update\
+ && apt-get dist-upgrade -y
+
+# CI requirements
+RUN set -eu && apt-get install -y \
+ ca-certificates \
+ git \
+ gzip \
+ ssh \
+ tar
+
+# Base dependencies
+RUN set -eu && apt-get install -y \
+ ccache \
+ clang-8 \
+ clang-format-8 \
+ clang-tidy-8 \
+ cmake \
+ fonts-noto \
+ g++-8 \
+ libc++-8-dev \
+ libc++abi-8-dev \
+ mesa-common-dev \
+ ninja-build \
+ nodejs \
+ npm \
+ pkg-config \
+ python3-pip \
+ software-properties-common \
+ xvfb
+
+RUN pip3 install cmake_format
+
+# Linux dependencies
+RUN set -eu && apt-get install -y \
+ libcurl4-openssl-dev \
+ libgl1-mesa-dev \
+ libglfw3-dev \
+ libicu-dev \
+ libjpeg-turbo8-dev \
+ libpng-dev \
+ libuv1-dev \
+ zlib1g-dev
+
+# Qt dependencies
+RUN set -eu && apt-get install -y \
+ qdoc-qt5 \
+ qt5-default
+
+# Android dependencies
+RUN set -eu && apt-get install -y \
+ coreutils \
+ curl \
+ openjdk-8-jdk-headless \
+ unzip
+
+# Install old compilers
+RUN set -eu \
+ && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F \
+ && add-apt-repository "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu xenial main" \
+ && add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe" \
+ && apt-get install -y \
+ g++-4.9 \
+ g++-5
+
+# Install Android NDK
+RUN set -eu \
+ && mkdir -p ${ANDROID_HOME} && cd ${ANDROID_HOME} \
+ && curl -L --retry 3 https://dl.google.com/android/repository/android-ndk-r19-linux-x86_64.zip -o ndk.zip \
+ && (echo "f02ad84cb5b6e1ff3eea9e6168037c823408c8ac ndk.zip" | sha1sum -c) \
+ && unzip -q ndk.zip && rm ndk.zip && mv android-ndk-r* ndk-bundle
+
+
+RUN set -eu \
+ && cd ${ANDROID_HOME} \
+ && curl -L --retry 3 https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip -o tools.zip \
+ && (echo "92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9 tools.zip" | sha256sum -c) \
+ && unzip -q tools.zip && rm tools.zip
+
+RUN set -eu \
+ && yes | ${ANDROID_HOME}/tools/bin/sdkmanager \
+ "platform-tools" \
+ "platforms;android-26" \
+ "build-tools;26.0.3" \
+ "platforms;android-27" \
+ "build-tools;27.0.3" \
+ "platforms;android-28" \
+ "build-tools;28.0.3" \
+ "extras;android;m2repository" \
+ "patcher;v4" \
+ "extras;google;m2repository" \
+ "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" \
+ "cmake;3.10.2.4988404"
+
+# Configure ccache
+RUN set -eu && /usr/sbin/update-ccache-symlinks
+
+# Cleanup
+RUN set -eu && apt-get clean
diff --git a/scripts/ci/etc/apt/sources.list b/scripts/ci/etc/apt/sources.list
new file mode 100644
index 0000000000..c5359e131a
--- /dev/null
+++ b/scripts/ci/etc/apt/sources.list
@@ -0,0 +1,10 @@
+deb http://fi.archive.ubuntu.com/ubuntu/ disco main restricted
+deb http://fi.archive.ubuntu.com/ubuntu/ disco-updates main restricted
+deb http://fi.archive.ubuntu.com/ubuntu/ disco universe
+deb http://fi.archive.ubuntu.com/ubuntu/ disco-updates universe
+deb http://fi.archive.ubuntu.com/ubuntu/ disco multiverse
+deb http://fi.archive.ubuntu.com/ubuntu/ disco-updates multiverse
+deb http://fi.archive.ubuntu.com/ubuntu/ disco-backports main restricted universe multiverse
+deb http://security.ubuntu.com/ubuntu/ disco-security main restricted
+deb http://security.ubuntu.com/ubuntu/ disco-security universe
+deb http://security.ubuntu.com/ubuntu/ disco-security multiverse