4 win: circleci/windows@2.4.0
5 slack: circleci/slack@3.4.2
8 - ¬ify-on-master-failure
10 only_for_branches: master
13 install-pyenv-on-macos:
16 name: Install pyenv on macos
18 HOMEBREW_NO_AUTO_UPDATE=1 brew install pyenv
20 install-cmake-on-macos:
23 name: Install cmake on macos
25 HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake
27 increase-max-open-files-on-macos:
30 name: Increase max open files
32 sudo sysctl -w kern.maxfiles=1048576
33 sudo sysctl -w kern.maxfilesperproc=1048576
34 sudo launchctl limit maxfiles 1048576
43 - run: pyenv install --skip-existing <<parameters.python-version>>
44 - run: pyenv global <<parameters.python-version>>
46 name: Setup Environment Variables
48 echo "export GTEST_THROW_ON_FAILURE=0" >> $BASH_ENV
49 echo "export GTEST_OUTPUT=\"xml:/tmp/test-results/\"" >> $BASH_ENV
50 echo "export SKIP_FORMAT_BUCK_CHECKS=1" >> $BASH_ENV
51 echo "export PRINT_PARALLEL_OUTPUTS=1" >> $BASH_ENV
56 python-version: "3.6.0"
60 - slack/status: *notify-on-master-failure
61 - store_test_results: # store test result if there's any
62 path: /tmp/test-results
63 - store_artifacts: # store LOG for debugging if there's any
69 name: Install Clang 10
71 echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list
72 echo "deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list
73 echo "APT::Acquire::Retries \"10\";" | sudo tee -a /etc/apt/apt.conf.d/80-retries # llvm.org unreliable
74 sudo apt-get update -y && sudo apt-get install -y clang-10
81 sudo apt-get update -y && sudo apt-get install -y libgflags-dev
83 install-gflags-on-macos:
86 name: Install gflags on macos
88 HOMEBREW_NO_AUTO_UPDATE=1 brew install gflags
90 install-gtest-parallel:
93 name: Install gtest-parallel
95 git clone --single-branch --branch master --depth 1 https://github.com/google/gtest-parallel.git ~/gtest-parallel
96 echo "export PATH=$HOME/gtest-parallel:$PATH" >> $BASH_ENV
101 image: 'windows-server-2019-vs2019:stable'
102 resource_class: windows.2xlarge
110 - increase-max-open-files-on-macos
111 - install-pyenv-on-macos
112 - install-gflags-on-macos
114 - run: ulimit -S -n 1048576 && OPT=-DCIRCLECI make V=1 J=32 -j32 check | .circleci/cat_ignore_eagain
121 - increase-max-open-files-on-macos
122 - install-pyenv-on-macos
123 - install-cmake-on-macos
124 - install-gflags-on-macos
126 - run: ulimit -S -n 1048576 && (mkdir build && cd build && cmake -DWITH_GFLAGS=0 .. && make V=1 -j32) | .circleci/cat_ignore_eagain
131 image: ubuntu-1604:202007-01
132 resource_class: 2xlarge
136 - run: make V=1 J=32 -j32 check | .circleci/cat_ignore_eagain
141 image: ubuntu-1604:202007-01
142 resource_class: 2xlarge
146 - run: MEM_ENV=1 make V=1 J=32 -j32 check | .circleci/cat_ignore_eagain
149 build-linux-encrypted-env:
151 image: ubuntu-1604:202007-01
152 resource_class: 2xlarge
156 - run: ENCRYPTED_ENV=1 make V=1 J=32 -j32 check | .circleci/cat_ignore_eagain
159 build-linux-shared_lib-alt_namespace-status_checked:
161 image: ubuntu-1604:202007-01
162 resource_class: 2xlarge
166 - run: ASSERT_STATUS_CHECKED=1 TEST_UINT128_COMPAT=1 ROCKSDB_MODIFY_NPHASH=1 LIB_MODE=shared OPT="-DROCKSDB_NAMESPACE=alternative_rocksdb_ns" make V=1 -j32 all check_some | .circleci/cat_ignore_eagain
171 image: ubuntu-1604:202007-01
172 resource_class: 2xlarge
174 - checkout # check out the code in the project directory
175 - run: make V=1 -j32 release | .circleci/cat_ignore_eagain
176 - run: if ./db_stress --version; then false; else true; fi # ensure without gflags
178 - run: make V=1 -j32 release | .circleci/cat_ignore_eagain
179 - run: ./db_stress --version # ensure with gflags
182 build-linux-release-rtti:
184 image: ubuntu-1604:201903-01
185 resource_class: large
187 - checkout # check out the code in the project directory
189 - run: USE_RTTI=1 DEBUG_LEVEL=0 make V=1 -j16 static_lib tools db_bench | .circleci/cat_ignore_eagain
190 - run: if ./db_stress --version; then false; else true; fi # ensure without gflags
191 - run: sudo apt-get update -y && sudo apt-get install -y libgflags-dev
193 - run: USE_RTTI=1 DEBUG_LEVEL=0 make V=1 -j16 static_lib tools db_bench | .circleci/cat_ignore_eagain
194 - run: ./db_stress --version # ensure with gflags
198 image: ubuntu-1604:202007-01
199 resource_class: 2xlarge
203 - run: LITE=1 make V=1 J=32 -j32 check | .circleci/cat_ignore_eagain
206 build-linux-lite-release:
208 image: ubuntu-1604:202007-01
209 resource_class: large
211 - checkout # check out the code in the project directory
212 - run: LITE=1 make V=1 -j32 release | .circleci/cat_ignore_eagain
213 - run: if ./db_stress --version; then false; else true; fi # ensure without gflags
215 - run: LITE=1 make V=1 -j32 release | .circleci/cat_ignore_eagain
216 - run: ./db_stress --version # ensure with gflags
219 build-linux-clang-no-test:
221 image: ubuntu-1604:202007-01
222 resource_class: 2xlarge
224 - checkout # check out the code in the project directory
225 - run: sudo apt-get update -y && sudo apt-get install -y clang libgflags-dev
226 - run: CC=clang CXX=clang++ USE_CLANG=1 PORTABLE=1 make V=1 -j32 all | .circleci/cat_ignore_eagain
229 build-linux-clang10-asan:
231 image: ubuntu-1604:202007-01
232 resource_class: 2xlarge
237 - run: COMPILE_WITH_ASAN=1 CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 make V=1 -j32 check | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out
240 build-linux-clang10-mini-tsan:
242 image: ubuntu-1604:202007-01
243 resource_class: 2xlarge
248 - run: COMPILE_WITH_TSAN=1 CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 make V=1 -j32 check | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out.
251 build-linux-clang10-ubsan:
253 image: ubuntu-1604:202007-01
254 resource_class: 2xlarge
259 - run: COMPILE_WITH_UBSAN=1 OPT="-fsanitize-blacklist=.circleci/ubsan_suppression_list.txt" CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 make V=1 -j32 ubsan_check | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out
262 build-linux-clang10-clang-analyze:
264 image: ubuntu-1604:202007-01
265 resource_class: 2xlarge
270 - run: sudo apt-get update -y && sudo apt-get install -y clang-tools-10
271 - run: CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 CLANG_ANALYZER="/usr/bin/clang++-10" CLANG_SCAN_BUILD=scan-build-10 USE_CLANG=1 make V=1 -j32 analyze | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out. For unknown, reason passing "clang++-10" as CLANG_ANALYZER doesn't work, and we need a full path.
276 image: ubuntu-1604:202007-01
277 resource_class: 2xlarge
279 - checkout # check out the code in the project directory
280 - run: (mkdir build && cd build && cmake -DWITH_GFLAGS=0 .. && make V=1 -j32) | .circleci/cat_ignore_eagain
284 docker: # executor type
286 resource_class: xlarge
288 - checkout # check out the code in the project directory
289 - run: apt-get update -y && apt-get install -y libgflags-dev
290 - run: TEST_TMPDIR=/dev/shm && make V=1 -j16 unity_test | .circleci/cat_ignore_eagain
295 image: ubuntu-1604:202007-01
296 resource_class: large
299 - run: sudo apt-get update -y && sudo apt-get install gcc-4.8 g++-4.8 libgflags-dev
300 - run: CC=gcc-4.8 CXX=g++-4.8 V=1 SKIP_LINK=1 make -j4 all | .circleci/cat_ignore_eagain # Linking broken because libgflags compiled with newer ABI
304 executor: windows-2xlarge
313 default: "Visual Studio 16 2019"
316 THIRDPARTY_HOME: C:/Users/circleci/thirdparty
317 CMAKE_HOME: C:/Users/circleci/thirdparty/cmake-3.16.4-win64-x64
318 CMAKE_BIN: C:/Users/circleci/thirdparty/cmake-3.16.4-win64-x64/bin/cmake.exe
319 SNAPPY_HOME: C:/Users/circleci/thirdparty/snappy-1.1.7
320 SNAPPY_INCLUDE: C:/Users/circleci/thirdparty/snappy-1.1.7;C:/Users/circleci/thirdparty/snappy-1.1.7/build
321 SNAPPY_LIB_DEBUG: C:/Users/circleci/thirdparty/snappy-1.1.7/build/Debug/snappy.lib
322 VS_YEAR: <<parameters.vs_year>>
323 CMAKE_GENERATOR: <<parameters.cmake_generator>>
329 if [[ "${VS_YEAR}" == "2017" ]]; then
330 powershell .circleci/vs2017_install.ps1
331 elif [[ "${VS_YEAR}" == "2015" ]]; then
332 powershell .circleci/vs2015_install.ps1
335 name: "Install thirdparty dependencies"
337 mkdir ${THIRDPARTY_HOME}
338 cd ${THIRDPARTY_HOME}
339 echo "Installing CMake..."
340 curl --fail --silent --show-error --output cmake-3.16.4-win64-x64.zip --location https://github.com/Kitware/CMake/releases/download/v3.16.4/cmake-3.16.4-win64-x64.zip
341 unzip -q cmake-3.16.4-win64-x64.zip
342 echo "Building Snappy dependency..."
343 curl --fail --silent --show-error --output snappy-1.1.7.zip --location https://github.com/google/snappy/archive/1.1.7.zip
344 unzip -q snappy-1.1.7.zip
348 ${CMAKE_BIN} -G "${CMAKE_GENERATOR}" ..
349 msbuild.exe Snappy.sln -maxCpuCount -property:Configuration=Debug -property:Platform=x64
351 name: "Build RocksDB"
355 ${CMAKE_BIN} -G "${CMAKE_GENERATOR}" -DCMAKE_BUILD_TYPE=Debug -DOPTDBG=1 -DPORTABLE=1 -DSNAPPY=1 -DJNI=1 << parameters.extra_cmake_opt >> ..
357 msbuild.exe build/rocksdb.sln -maxCpuCount -property:Configuration=Debug -property:Platform=x64
360 shell: powershell.exe
362 build_tools\run_ci_db_test.ps1 -SuiteRun db_basic_test,db_test,db_test2,db_merge_operand_test,bloom_test,c_test,coding_test,crc32c_test,dynamic_bloom_test,env_basic_test,env_test,hash_test,random_test -Concurrency 16
366 image: ubuntu-1604:202007-01
367 resource_class: large
369 JAVA_HOME: /usr/lib/jvm/java-1.8.0-openjdk-amd64
374 name: "Set Java Environment"
376 echo "JAVA_HOME=${JAVA_HOME}"
377 echo 'export PATH=$JAVA_HOME/bin:$PATH' >> $BASH_ENV
378 which java && java -version
379 which javac && javac -version
381 name: "Build RocksDBJava Shared Library"
382 command: make V=1 J=8 -j8 rocksdbjava | .circleci/cat_ignore_eagain
384 name: "Test RocksDBJava"
385 command: make V=1 J=8 -j8 jtest | .circleci/cat_ignore_eagain
388 build-linux-java-static:
390 image: ubuntu-1604:202007-01
391 resource_class: large
393 JAVA_HOME: /usr/lib/jvm/java-1.8.0-openjdk-amd64
398 name: "Set Java Environment"
400 echo "JAVA_HOME=${JAVA_HOME}"
401 echo 'export PATH=$JAVA_HOME/bin:$PATH' >> $BASH_ENV
402 which java && java -version
403 which javac && javac -version
405 name: "Build RocksDBJava Static Library"
406 command: make V=1 J=8 -j8 rocksdbjavastatic | .circleci/cat_ignore_eagain
412 resource_class: medium
414 JAVA_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
416 - increase-max-open-files-on-macos
417 - install-pyenv-on-macos
418 - install-gflags-on-macos
421 name: "Set Java Environment"
423 echo "JAVA_HOME=${JAVA_HOME}"
424 echo 'export PATH=$JAVA_HOME/bin:$PATH' >> $BASH_ENV
425 which java && java -version
426 which javac && javac -version
428 name: "Build RocksDBJava Shared Library"
429 command: make V=1 J=8 -j8 rocksdbjava | .circleci/cat_ignore_eagain
431 name: "Test RocksDBJava"
432 command: make V=1 J=8 -j8 jtest | .circleci/cat_ignore_eagain
435 build-macos-java-static:
438 resource_class: medium
440 JAVA_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
442 - increase-max-open-files-on-macos
443 - install-pyenv-on-macos
444 - install-gflags-on-macos
445 - install-cmake-on-macos
448 name: "Set Java Environment"
450 echo "JAVA_HOME=${JAVA_HOME}"
451 echo 'export PATH=$JAVA_HOME/bin:$PATH' >> $BASH_ENV
452 which java && java -version
453 which javac && javac -version
455 name: "Build RocksDBJava Static Library"
456 command: make V=1 J=8 -j8 rocksdbjavastatic | .circleci/cat_ignore_eagain
461 image: ubuntu-1604:202007-01
462 resource_class: medium
467 name: "Build examples"
469 OPT=-DTRAVIS V=1 make -j4 static_lib && cd examples && make -j4 | ../.circleci/cat_ignore_eagain
474 image: ubuntu-1604:202007-01
475 resource_class: 2xlarge
486 - install-gtest-parallel
488 name: "Build unit tests"
492 ROCKSDBTESTS_START=<<parameters.start_test>> ROCKSDBTESTS_END=<<parameters.end_test>> ROCKSDBTESTS_SUBSET_TESTS_TO_FILE=/tmp/test_list make V=1 -j32 --output-sync=target build_subset_tests
494 name: "Run unit tests in parallel"
496 sed -i 's/[[:space:]]*$//; s/ / \.\//g; s/.*/.\/&/' /tmp/test_list
498 export TEST_TMPDIR=/tmp/rocksdb_test_tmp
499 /usr/bin/python ../gtest-parallel/gtest-parallel $(</tmp/test_list) --output_dir=/tmp | cat # pipe to cat to continuously output status on circleci UI. Otherwise, no status will be printed while the job is running.
508 - build-linux-mem-env
509 build-linux-encrypted-env:
511 - build-linux-encrypted-env
512 build-linux-shared_lib-alt_namespace-status_checked:
514 - build-linux-shared_lib-alt_namespace-status_checked
520 - build-linux-release
521 build-linux-release-rtti:
523 - build-linux-release-rtti
524 build-linux-lite-release:
526 - build-linux-lite-release
527 build-linux-clang-no-test:
529 - build-linux-clang-no-test
530 build-linux-clang10-asan:
532 - build-linux-clang10-asan
533 build-linux-clang10-mini-tsan:
535 - build-linux-clang10-mini-tsan
536 build-linux-clang10-ubsan:
538 - build-linux-clang10-ubsan
539 build-linux-clang10-clang-analyze:
541 - build-linux-clang10-clang-analyze
551 build-windows-vs2017:
555 cmake_generator: "Visual Studio 15 Win64"
556 build-windows-vs2015:
560 cmake_generator: "Visual Studio 14 Win64"
564 extra_cmake_opt: -DCMAKE_CXX_STANDARD=20
568 - build-linux-java-static
570 - build-macos-java-static
576 - build-linux-non-shm:
578 end_test: "db_options_test" # make sure unique in src.mk
579 - build-linux-non-shm:
580 start_test: "db_options_test" # make sure unique in src.mk
581 end_test: "filename_test" # make sure unique in src.mk
582 - build-linux-non-shm:
583 start_test: "filename_test" # make sure unique in src.mk
584 end_test: "statistics_test" # make sure unique in src.mk
585 - build-linux-non-shm:
586 start_test: "statistics_test" # make sure unique in src.mk
590 - build-linux-gcc-4-8