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
      - run: sudo apt-get install -y libgflags-dev
      - run: SKIP_FORMAT_BUCK_CHECKS=1 PRINT_PARALLEL_OUTPUTS=1 make J=32 all check -j32

  build-linux-release:
    machine:
      image: ubuntu-1604:201903-01
    resource_class: 2xlarge
    steps:
      - checkout # check out the code in the project directory
      - run: make release -j32

  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: SKIP_FORMAT_BUCK_CHECKS=1 PRINT_PARALLEL_OUTPUTS=1 LITE=1 make J=32 all check -j32

  build-linux-lite-release:
    machine:
      image: ubuntu-1604:201903-01
    resource_class: large
    steps:
      - checkout # check out the code in the project directory
      - run: make release -j32

  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: USE_CLANG=1 make all -j32

  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 -j32

  build-windows:
    executor: windows-2xlarge
    
    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
      CMAKE_GENERATOR: Visual Studio 16 2019
      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

    steps:
      - checkout
      - 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 ..
            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

workflows:
  build-linux:
    jobs:
      - build-linux
  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-cmake:
    jobs:
      - build-linux-cmake
  build-windows:
    jobs:
      - build-windows
