version: 2.1 orbs: win: circleci/windows@2.4.0 executors: windows-2xlarge: machine: image: 'windows-server-2019-vs2019:201908-06' resource_class: windows.2xlarge shell: bash.exe jobs: build-linux: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: pyenv global 3.5.2 - run: sudo apt-get update -y && sudo apt-get install -y libgflags-dev - run: SKIP_FORMAT_BUCK_CHECKS=1 PRINT_PARALLEL_OUTPUTS=1 GTEST_THROW_ON_FAILURE=0 GTEST_OUTPUT="xml:/tmp/test-results/" make V=1 J=32 -j32 check | .circleci/cat_ignore_eagain - store_test_results: path: /tmp/test-results build-linux-shared_lib-alt_namespace-status_checked: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: pyenv global 3.5.2 - run: sudo apt-get update -y && sudo apt-get install -y libgflags-dev - run: SKIP_FORMAT_BUCK_CHECKS=1 PRINT_PARALLEL_OUTPUTS=1 ASSERT_STATUS_CHECKED=1 LIB_MODE=shared OPT="-DROCKSDB_NAMESPACE=alternative_rocksdb_ns" GTEST_THROW_ON_FAILURE=0 GTEST_OUTPUT="xml:/tmp/test-results/" make V=1 -j32 all check_some | .circleci/cat_ignore_eagain - store_test_results: path: /tmp/test-results build-linux-release: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: make V=1 -j32 release | .circleci/cat_ignore_eagain - run: if ./db_stress --version; then false; else true; fi # ensure without gflags - run: sudo apt-get update -y && sudo apt-get install -y libgflags-dev - run: make V=1 -j32 release | .circleci/cat_ignore_eagain - run: ./db_stress --version # ensure with gflags build-linux-lite: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: pyenv global 3.5.2 - run: sudo apt-get update -y && sudo apt-get install -y libgflags-dev - run: SKIP_FORMAT_BUCK_CHECKS=1 PRINT_PARALLEL_OUTPUTS=1 LITE=1 GTEST_THROW_ON_FAILURE=0 GTEST_OUTPUT="xml:/tmp/test-results/" make V=1 J=32 -j32 check | .circleci/cat_ignore_eagain - store_test_results: path: /tmp/test-results build-linux-lite-release: machine: image: ubuntu-1604:201903-01 resource_class: large steps: - checkout # check out the code in the project directory - run: LITE=1 make V=1 -j32 release | .circleci/cat_ignore_eagain - run: if ./db_stress --version; then false; else true; fi # ensure without gflags - run: sudo apt-get update -y && sudo apt-get install -y libgflags-dev - run: LITE=1 make V=1 -j32 release | .circleci/cat_ignore_eagain - run: ./db_stress --version # ensure with gflags build-linux-clang-no-test: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: sudo apt-get update -y && sudo apt-get install -y clang libgflags-dev - run: CC=clang CXX=clang++ USE_CLANG=1 PORTABLE=1 make V=1 -j32 all | .circleci/cat_ignore_eagain build-linux-clang10-no-test: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: echo "deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: sudo apt-get update -y && sudo apt-get install -y clang-10 libgflags-dev - run: CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 make V=1 -j32 all | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out build-linux-clang10-asan: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: pyenv global 3.5.2 - run: echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: echo "deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: sudo apt-get update -y && sudo apt-get install -y clang-10 libgflags-dev - run: SKIP_FORMAT_BUCK_CHECKS=1 COMPILE_WITH_ASAN=1 CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 PRINT_PARALLEL_OUTPUTS=1 GTEST_THROW_ON_FAILURE=0 GTEST_OUTPUT="xml:/tmp/test-results/" make V=1 -j32 check | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out - store_test_results: path: /tmp/test-results build-linux-clang10-mini-tsan: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: pyenv global 3.5.2 - run: echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: echo "deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: sudo apt-get update -y && sudo apt-get install -y clang-10 libgflags-dev - run: SKIP_FORMAT_BUCK_CHECKS=1 COMPILE_WITH_TSAN=1 CC=clang-10 CXX=clang++-10 ROCKSDB_DISABLE_ALIGNED_NEW=1 USE_CLANG=1 PRINT_PARALLEL_OUTPUTS=1 EXCLUDE_TESTS_REGEX="TransactionStressTest|SnapshotConcurrentAccess|SeqAdvanceConcurrent|DeadlockStress|MultiThreadedDBTest.MultiThreaded|WriteUnpreparedStressTest.ReadYourOwnWriteStress|DBAsBaseDB/TransactionStressTest|FlushCloseWALFiles|BackgroundPurgeCFDropTest" GTEST_THROW_ON_FAILURE=0 GTEST_OUTPUT="xml:/tmp/test-results/" make V=1 -j32 check | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out. Exclude FlushCloseWALFiles and BackgroundPurgeCFDropTest for occasional failures. - store_test_results: path: /tmp/test-results build-linux-clang10-ubsan: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: pyenv global 3.5.2 - run: echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: echo "deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: sudo apt-get update -y && sudo apt-get install -y clang-10 libgflags-dev - run: SKIP_FORMAT_BUCK_CHECKS=1 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 PRINT_PARALLEL_OUTPUTS=1 make V=1 -j32 ubsan_check | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out build-linux-clang10-clang-analyze: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: pyenv global 3.5.2 - run: echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: echo "deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main" | sudo tee -a /etc/apt/sources.list - run: sudo apt-get update -y && sudo apt-get install -y clang-10 libgflags-dev clang-tools-10 - run: SKIP_FORMAT_BUCK_CHECKS=1 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 PRINT_PARALLEL_OUTPUTS=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. build-linux-cmake: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout # check out the code in the project directory - run: (mkdir build && cd build && cmake -DWITH_GFLAGS=0 .. && make V=1 -j32) | .circleci/cat_ignore_eagain build-linux-unity: docker: # executor type - image: gcc:latest resource_class: xlarge steps: - checkout # check out the code in the project directory - run: apt-get update -y && apt-get install -y libgflags-dev - run: TEST_TMPDIR=/dev/shm && make V=1 -j16 unity_test | .circleci/cat_ignore_eagain build-windows: executor: windows-2xlarge parameters: extra_cmake_opt: default: "" type: string vs_year: default: "2019" type: string cmake_generator: default: "Visual Studio 16 2019" type: string environment: THIRDPARTY_HOME: C:/Users/circleci/thirdparty CMAKE_HOME: C:/Users/circleci/thirdparty/cmake-3.16.4-win64-x64 CMAKE_BIN: C:/Users/circleci/thirdparty/cmake-3.16.4-win64-x64/bin/cmake.exe SNAPPY_HOME: C:/Users/circleci/thirdparty/snappy-1.1.7 SNAPPY_INCLUDE: C:/Users/circleci/thirdparty/snappy-1.1.7;C:/Users/circleci/thirdparty/snappy-1.1.7/build SNAPPY_LIB_DEBUG: C:/Users/circleci/thirdparty/snappy-1.1.7/build/Debug/snappy.lib VS_YEAR: <> CMAKE_GENERATOR: <> steps: - checkout - run: name: "Setup VS" command: | if [[ "${VS_YEAR}" == "2017" ]]; then powershell .circleci/vs2017_install.ps1 elif [[ "${VS_YEAR}" == "2015" ]]; then powershell .circleci/vs2015_install.ps1 fi - run: name: "Install thirdparty dependencies" command: | mkdir ${THIRDPARTY_HOME} cd ${THIRDPARTY_HOME} echo "Installing CMake..." 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 unzip -q cmake-3.16.4-win64-x64.zip echo "Building Snappy dependency..." curl --fail --silent --show-error --output snappy-1.1.7.zip --location https://github.com/google/snappy/archive/1.1.7.zip unzip -q snappy-1.1.7.zip cd snappy-1.1.7 mkdir build cd build ${CMAKE_BIN} -G "${CMAKE_GENERATOR}" .. msbuild.exe Snappy.sln -maxCpuCount -property:Configuration=Debug -property:Platform=x64 - run: name: "Build RocksDB" command: | mkdir build cd build ${CMAKE_BIN} -G "${CMAKE_GENERATOR}" -DCMAKE_BUILD_TYPE=Debug -DOPTDBG=1 -DPORTABLE=1 -DSNAPPY=1 -DJNI=1 << parameters.extra_cmake_opt >> .. cd .. msbuild.exe build/rocksdb.sln -maxCpuCount -property:Configuration=Debug -property:Platform=x64 - run: name: "Test RocksDB" shell: powershell.exe command: | build_tools\run_ci_db_test.ps1 -SuiteRun db_basic_test,db_test,db_test2,env_basic_test,env_test,db_merge_operand_test -Concurrency 16 build-linux-java: machine: image: ubuntu-1604:201903-01 resource_class: 2xlarge steps: - checkout - run: pyenv global 3.5.2 - run: sudo apt-get update -y && sudo apt-get install -y libgflags-dev - run: name: "Build RocksDBJava" command: | export JAVA_HOME=/usr/lib/jvm/jdk1.8.0 export PATH=$JAVA_HOME/bin:$PATH echo "JAVA_HOME=${JAVA_HOME}" which java && java -version which javac && javac -version SKIP_FORMAT_BUCK_CHECKS=1 PRINT_PARALLEL_OUTPUTS=1 make V=1 J=32 -j32 rocksdbjava jtest | .circleci/cat_ignore_eagain build-examples: machine: image: ubuntu-1604:201903-01 resource_class: medium steps: - checkout # check out the code in the project directory - run: pyenv global 3.5.2 - run: sudo apt-get update -y && sudo apt-get install -y libgflags-dev - run: name: "Build examples" command: | OPT=-DTRAVIS V=1 make -j4 static_lib && cd examples && make -j4 | ../.circleci/cat_ignore_eagain workflows: build-linux: jobs: - build-linux build-linux-shared_lib-alt_namespace-status_checked: jobs: - build-linux-shared_lib-alt_namespace-status_checked build-linux-lite: jobs: - build-linux-lite build-linux-release: jobs: - build-linux-release build-linux-lite-release: jobs: - build-linux-lite-release build-linux-clang-no-test: jobs: - build-linux-clang-no-test build-linux-clang10-no-test: jobs: - build-linux-clang10-no-test build-linux-clang10-asan: jobs: - build-linux-clang10-asan build-linux-clang10-mini-tsan: jobs: - build-linux-clang10-mini-tsan build-linux-clang10-ubsan: jobs: - build-linux-clang10-ubsan build-linux-clang10-clang-analyze: jobs: - build-linux-clang10-clang-analyze build-linux-cmake: jobs: - build-linux-cmake build-linux-unity: jobs: - build-linux-unity build-windows: jobs: - build-windows build-windows-vs2017: jobs: - build-windows: vs_year: "2017" cmake_generator: "Visual Studio 15 Win64" build-windows-vs2015: jobs: - build-windows: vs_year: "2015" cmake_generator: "Visual Studio 14 Win64" build-windows-cxx20: jobs: - build-windows: extra_cmake_opt: -DCMAKE_CXX_STANDARD=20 build-java: jobs: - build-linux-java build-examples: jobs: - build-examples