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. Создайте запрос на слияние в оригинальный (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

После выполнения этой команды вы окажетесь внутри контейнера. Продолжите с следующими шагами для компиляции кода:

  1. Перейдите в смонтированную директорию:
    cd /in/
    
  2. Создайте директорию сборки и начните процесс компиляции:
    mkdir build
    ctest -VV -S misc/ctest/gltest.cmake --no-compress-output
    

Команда ctest -VV запускает режим тестирования с подробным выводом, предоставляя детальную информацию о процессе сборки.

После компиляции вы можете протестировать 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

Внутри контейнера выполните следующие команды для начала тестирования:

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

Установить Manticore Search

Установить Manticore Search