# 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' }}
|
|
# libgoogle-perftools-dev is temporarily removed from the package list
|
|
# because it is currently broken on GitHub's Ubuntu 22.04.
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install 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
|