Вклад в C++ проект, такой как Manticore Search, может быть сложной задачей из‑за низкоуровневой природы языка, что часто требует конкретных версий компонентов и глубокого понимания внутренней структуры системы. Тем не менее, команда Manticore сделала этот процесс значительно более доступным с помощью специализированных Docker‑образов. Эти образы тщательно подготовлены, включают все необходимые зависимости и конфигурации, позволяя участникам сосредоточиться на своих вкладах, не беспокоясь о базовой настройке.
Вклад в Manticore Search можно упростить с помощью двух мощных подходов:
- использование Docker для ручных сборок и тестов
- и использование GitHub для автоматизированных процессов.
Это руководство представляет оба метода, чтобы соответствовать участникам на разных этапах цикла разработки.
CI в вашем форке
Доступный способ начать вносить вклад в Manticore Search — форкнуть проект на GitHub и включить систему непрерывной интеграции (CI), настроенную в проекте. Этот подход позволяет участникам легко тестировать свои изменения без необходимости настраивать локальную среду разработки. Нет необходимости в специальных CI‑раннерах; как компиляция кода для тестов, так и сборка пакетов для всех поддерживаемых операционных систем обрабатываются раннерами GitHub. Таким образом, вы можете легко воспроизвести весь процесс CI в своём форке, за исключением публикации пакетов в https://repo.manticoresearch.com/ .
Начало работы с GitHub
- Сделайте форк репозитория Manticore Search на GitHub , чтобы создать личную копию.
- Клонируйте ваш форк на локальную машину, используя команду:
git clone https://github.com/<your-username>/manticoresearch. - Включите непрерывную интеграцию (CI) в вашем форке через настройки репозитория.
- Отправьте ваши изменения в репозиторий GitHub. CI автоматически скомпилирует и протестирует ваш код, предоставляя обратную связь непосредственно в репозитории.
- Создайте pull request в оригинальный (upstream) репозиторий, запросив слияние ваших изменений.
Этот подход, ориентированный на GitHub, упрощает начальную настройку, позволяя участникам сосредоточиться на разработке, а не на конфигурации среды.
Сборка и тестирование вручную с Docker
Для тех, кто предпочитает практический подход или нуждается в большем контроле над средой сборки и тестирования, например, при повторном запуске конкретного теста, существует альтернативное решение. Оно заключается в ручном использовании тех же Docker‑образов, которые система CI использует для компиляции и тестирования Manticore Search.
Компиляция 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
После выполнения этой команды вы окажетесь внутри контейнера. Продолжайте со следующими шагами для компиляции кода:
- Перейдите в смонтированный каталог:
cd /in/ - Создайте каталог сборки и запустите процесс компиляции:
mkdir build ctest -VV -S misc/ctest/gltest.cmake --no-compress-output
Команда ctest -VV запускает подробный режим тестирования, предоставляя детальный вывод о процессе сборки.
Тестирование Manticore Search
После компиляции вы можете протестировать Manticore Search с помощью другой Docker‑команды:
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-outputCTEST_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 # Or for multiple tests php ubertest.php -s /in/build/src/searchd -i /in/build/src/indexer t 201 202
Заключение
Оба подхода — через GitHub и Docker — предоставляют свои преимущества для вклада в Manticore Search. Внедрение специальных Docker‑образов в Manticore значительно снижает сложность, обычно связанную с участием в C++ проектах, позволяя разработчикам сосредоточиться больше на своих вкладах и меньше на настройке среды. Независимо от того, предпочитаете ли вы простоту и автоматизацию GitHub или детальный контроль с помощью Docker, эти рабочие процессы облегчают эффективную разработку и тестирование ваших вкладов в проект.
