blog-post

构建和测试 Manticore Search

为 C++ 项目如 Manticore Search 做出贡献可能是一项艰巨的任务,因为该语言的低级特性通常需要特定版本的组件以及对系统内部结构的透彻理解。然而,Manticore 团队通过使用专门的 Docker 镜像使这一过程变得更加容易。这些镜像经过精心准备,包含所有必要的依赖项和配置,使贡献者能够专注于他们的贡献,而无需担心底层设置。

通过两种强大的方法,可以简化对 Manticore Search 的贡献:

  • 利用 Docker 进行手动构建和测试
  • 并利用 GitHub 进行自动化流程。

本指南介绍了这两种方法,以适应不同开发周期阶段的贡献者。

在您的分支中进行 CI

开始为 Manticore Search 做出贡献的一个简单方法是通过 GitHub 叉取该项目并启用项目中配置的持续集成(CI)系统。这种方法允许贡献者轻松测试他们的更改,而无需设置本地开发环境。无需特定的 CI 运行器;代码的编译和所有支持的操作系统的包构建都由 GitHub 的运行器处理。因此,您可以轻松地在您的分支中复制整个 CI 过程,唯一的例外是将包发布到 https://repo.manticoresearch.com/

开始使用 GitHub

  1. 叉取 Manticore Search GitHub 仓库 以创建个人副本。
  2. 使用命令将您的分支克隆到本地计算机: git clone https://github.com/<your-username>/manticoresearch
  3. 通过仓库设置在您的分支上启用持续集成(CI)。
  4. 将您的更改推送到您的 GitHub 仓库。CI 将自动编译和测试您的代码,并直接在您的仓库中提供反馈。
  5. 创建一个拉取请求到原始(上游)仓库,请求合并您的更改。

这种以 GitHub 为中心的方法简化了初始设置,使贡献者能够专注于开发,而不是环境配置。

使用 Docker 手动构建和测试

对于那些喜欢动手操作或需要对构建和测试环境有更多控制的人,例如重做特定测试,还有另一种解决方案。这涉及手动使用 CI 系统用于编译和测试 Manticore Search 的相同 Docker 镜像。

要编译 Manticore Search,请在您的克隆的根文件夹中使用以下 Docker 命令:

docker run -it --rm -e SYSROOT_URL=https://repo.manticoresearch.com/repository/sysroots \
-e arch=x86_64 \
-e DISTR=jammy \
-e boost=boost_nov22 \
-e sysroot=roots_nov22 \
-e CTEST_CONFIGURATION_TYPE=Debug \
-e NO_TESTS=1 \
-e CACHEB="../cache" \
-v $(pwd):/in/ \
manticoresearch/external_toolchain:clang16_cmake3263 bash

注意,您需要在从 https://github.com/manticoresoftware/manticoresearch 克隆的根文件夹中执行此操作。

运行此命令后,您将进入容器。继续以下步骤以编译代码:

  1. 导航到挂载的目录:
    cd /in/
    
  2. 创建一个构建目录并启动编译过程:
    mkdir build
    ctest -VV -S misc/ctest/gltest.cmake --no-compress-output
    

ctest -VV 命令触发详细测试模式,提供有关构建过程的详细输出。

编译后,您可以使用另一个 Docker 命令测试 Manticore Search:

docker run --rm -it \
-e DIAGNOSTIC=1 \
-e NO_BUILD=1 \
-e WITH_COVERAGE=0 \
-e CACHEB="../cache" \
--name test \
-v $(pwd):/in/ \
manticoresearch/ubertests_ctest:3263_mar_2024 bash

在容器内,运行以下命令以开始测试:

  1. 导航到挂载的目录:
    cd /in/
    
  2. 删除上次编译留下的 cmake 缓存:
    rm build/CMakeCache.txt
    
  3. 执行一般测试套件:
    ctest -V -S misc/ctest/gltest.cmake --no-compress-output
    
    可选地,您可以通过包含 CTEST_REGEX 参数来运行特定测试:
    CTEST_REGEX=202 ctest -VV -S misc/ctest/gltest.cmake --no-compress-output
    

运行 Ubertests

运行特定测试的另一种方法是直接使用 ubertest.php 脚本(上述 ctest 命令也会在内部执行它):

  1. 导航到测试目录:
    cd /in/test/
    
  2. 运行特定测试的 ubertest 脚本:
    php ubertest.php -s /in/build/src/searchd -i /in/build/src/indexer t 202
    # 或者对于多个测试
    php ubertest.php -s /in/build/src/searchd -i /in/build/src/indexer t 201 202
    

结论

GitHub 和 Docker 的两种方式为为 Manticore Search 做出贡献提供了不同的优势。Manticore 引入的特殊 Docker 镜像显著减少了通常与 C++ 项目贡献相关的复杂性,使开发者能够更多地专注于他们的贡献,而不是环境设置。无论您是喜欢 GitHub 的简单性和自动化,还是 Docker 方法的详细控制,这些工作流程都促进了您对项目贡献的高效开发和测试。

安装Manticore Search

安装Manticore Search