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 make V=1 J=32 -j32 check | .circleci/cat_ignore_eagain 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" make V=1 -j32 all check_some | .circleci/cat_ignore_eagain 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 make V=1 J=32 -j32 check | .circleci/cat_ignore_eagain 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 make V=1 -j32 check | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out 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="DBTestCompactionFilterWithCompactParam.CompactionFilterWithValueChang|DBTestRandomized/DBTestRandomized.Randomized|DBTestWithParam.MergeCompactionTimeTest|DBTestUniversalCompaction.UniversalCompactionTrivialMoveTest1|DBTestUniversalCompactionMultiLevels.UniversalCompactionMultiLevels|ExternalSSTFileTest.IngestFileWithGlobalSeqnoRandomized|ReadaheadSequentialFileTest|ReadExceedsReadaheadSize/ReadaheadSequentialFileTest|TransactionStressTest|MySQLStyleTransactionTest|SnapshotConcurrentAccessTest|eqAdvanceConcurrentTest|WritePreparedTransactionTest|WriteUnpreparedTransactionTest|WriteUnpreparedStressTest|MultiThreadedDBTest|LogMarkLeakTest" make V=1 -j32 check | .circleci/cat_ignore_eagain # aligned new doesn't work for reason we haven't figured out. Exclude some tests to speed up. MultiThreadedDBTest, TransactionStressTest, TransactionStressTest, TransactionStressTest and TransactionStressTest are showing TSAN warning so excluding them for now. Will investigate later. 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 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