# Copyright 2021 The LevelDB Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. See the AUTHORS file for names of contributors. name: ci on: [push, pull_request] permissions: contents: read jobs: build-and-test: name: >- CI ${{ matrix.os }} ${{ matrix.compiler }} ${{ matrix.optimized && 'release' || 'debug' }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: compiler: [clang, gcc, msvc] os: [ubuntu-latest, macos-latest, windows-latest] optimized: [true, false] exclude: # MSVC only works on Windows. - os: ubuntu-latest compiler: msvc - os: macos-latest compiler: msvc # Not testing with GCC on macOS. - os: macos-latest compiler: gcc # Only testing with MSVC on Windows. - os: windows-latest compiler: clang - os: windows-latest compiler: gcc include: - compiler: clang CC: clang CXX: clang++ - compiler: gcc CC: gcc CXX: g++ - compiler: msvc CC: CXX: env: CMAKE_BUILD_DIR: ${{ github.workspace }}/build CMAKE_BUILD_TYPE: ${{ matrix.optimized && 'RelWithDebInfo' || 'Debug' }} CC: ${{ matrix.CC }} CXX: ${{ matrix.CXX }} BINARY_SUFFIX: ${{ startsWith(matrix.os, 'windows') && '.exe' || '' }} BINARY_PATH: >- ${{ format( startsWith(matrix.os, 'windows') && '{0}\build\{1}\' || '{0}/build/', github.workspace, matrix.optimized && 'RelWithDebInfo' || 'Debug') }} steps: - uses: actions/checkout@v2 with: submodules: true - name: Install dependencies on Linux if: ${{ runner.os == 'Linux' }} run: | sudo apt-get update sudo apt-get install libgoogle-perftools-dev libkyotocabinet-dev \ libsnappy-dev libsqlite3-dev - name: Generate build config run: >- cmake -S "${{ github.workspace }}" -B "${{ env.CMAKE_BUILD_DIR }}" -DCMAKE_BUILD_TYPE=${{ env.CMAKE_BUILD_TYPE }} -DCMAKE_INSTALL_PREFIX=${{ runner.temp }}/install_test/ - name: Build run: >- cmake --build "${{ env.CMAKE_BUILD_DIR }}" --config "${{ env.CMAKE_BUILD_TYPE }}" - name: Run Tests working-directory: ${{ github.workspace }}/build run: ctest -C "${{ env.CMAKE_BUILD_TYPE }}" --verbose - name: Run LevelDB Benchmarks run: ${{ env.BINARY_PATH }}db_bench${{ env.BINARY_SUFFIX }} - name: Run SQLite Benchmarks if: ${{ runner.os != 'Windows' }} run: ${{ env.BINARY_PATH }}db_bench_sqlite3${{ env.BINARY_SUFFIX }} - name: Run Kyoto Cabinet Benchmarks if: ${{ runner.os == 'Linux' && matrix.compiler == 'clang' }} run: ${{ env.BINARY_PATH }}db_bench_tree_db${{ env.BINARY_SUFFIX }} - name: Test CMake installation run: cmake --build "${{ env.CMAKE_BUILD_DIR }}" --target install