为 C++ 项目如 Manticore 搜索做出贡献可能是一项艰巨的任务,因为该语言的低级特性通常需要特定版本的组件,以及对系统内部结构的透彻理解。然而,Manticore 团队通过使用专用的 Docker 镜像,使这一过程变得更加可及。这些镜像经过精心准备,包含了所有必要的依赖项和配置,使得贡献者能够专注于他们的贡献,而无需担心底层的设置。
为 Manticore 搜索做出贡献可以通过两种强大的方法来简化:
- 利用 Docker 进行手动构建和测试
- 并利用 GitHub 进行自动化流程。
本指南介绍了两种方法,以适应开发周期中不同级别的贡献者。
在您的分支中进行 CI
开始为 Manticore 搜索做出贡献的一个便捷方法是,在 GitHub 上分叉项目并启用项目中配置的持续集成 (CI) 系统。这种方法允许贡献者轻松测试他们的更改,而无需设置本地开发环境。无需特定的 CI 运行器;所有支持操作系统的代码编译和软件包构建均由 GitHub 的运行器处理。因此,您可以轻松地在您的分支中复制整个 CI 过程,唯一的例外是将软件包发布到 https://repo.manticoresearch.com/ 。
使用 GitHub 开始
- 分叉 Manticore 搜索 GitHub 仓库 创建个人副本。
- 使用以下命令将您的分支克隆到本地机器上:
git clone https://github.com/<your-username>/manticoresearch
。 - 通过仓库设置在您的分支上启用持续集成 (CI)。
- 将您的更改推送到您的 GitHub 仓库。CI 将自动编译和测试您的代码,并在您的仓库中直接提供反馈。
- 创建一个针对原始(上游)仓库的拉取请求,请求合并您的更改。
这种以 GitHub 为中心的方法简化了初始设置,使贡献者可以专注于开发,而不是环境配置。
使用 Docker 手动构建和测试
对于那些喜欢动手操作或需要更多控制构建和测试环境的人,如重新制作特定测试,提供了另一种解决方案。这涉及手动使用 CI 系统采用的相同 Docker 镜像来编译和测试 Manticore 搜索。
使用 Docker 编译 Manticore 搜索
要编译 Manticore 搜索,请在您克隆的根文件夹中使用以下 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 的克隆根文件夹中执行此操作。
运行此命令后,您将进入容器。请继续以下步骤以编译代码:
- 导航到已挂载的目录:
cd /in/
- 创建构建目录并启动编译过程:
mkdir build ctest -VV -S misc/ctest/gltest.cmake --no-compress-output
ctest -VV
命令触发详细测试模式,提供关于构建过程的详细输出。
测试 Manticore 搜索
编译后,您可以使用另一个 Docker 命令来测试 Manticore 搜索:
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
在容器内,运行以下命令以开始测试:
- 导航到已挂载的目录:
cd /in/
- 删除上次编译时留下的 cmake 缓存:
rm build/CMakeCache.txt
- 执行一般测试套件:可选地,您可以通过包含
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
命令也会在内部执行它):
- 导航到测试目录:
cd /in/test/
- 运行特定测试的 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 搜索做出贡献。Manticore 引入的特种 Docker 镜像显著降低了通常与 C++ 项目贡献相关的复杂度,使开发人员能够更多地关注他们的贡献,而不是环境设置。无论您更喜欢 GitHub 的简便性和自动化,还是 Docker 方法的详细控制,这些工作流程都促进了您的贡献的高效开发和测试。