Внесение вклада в проект 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/<ваше-имя-пользователя>/manticoresearch
. - Включите Непрерывную Интеграцию (CI) на вашем форке через настройки репозитория.
- Отправьте ваши изменения в ваш репозиторий на GitHub. CI автоматически скомпилирует и протестирует ваш код, предоставляя обратную связь непосредственно в вашем репозитории.
- Создайте запрос на слияние в оригинальный (верхний) репозиторий, запросив, чтобы ваши изменения были объединены.
Этот подход, ориентированный на 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-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 Search. Введение специальных образов Docker в Manticore значительно снижает сложность, обычно ассоциируемую с внесением вклада в проекты C++, позволяя разработчикам больше сосредотачиваться на своих вкладах и меньше на настройке окружающей среды. Независимо от того, предпочитаете ли вы простоту и автоматизацию GitHub или детальный контроль с помощью Docker-метода, эти рабочие процессы облегчают эффективную разработку и тестирование ваших вкладов в проект.