Непрерывная интеграция

Студенты должны пройти все проверки в конвейере CI, прежде чем начнется проверка работы студентами и преподавателями. Это включает в себя успешную проверку кода, а также стадии построения и тестирования. Каждая интеграция проверяется автоматизированной сборкой и автоматизированными тестами.

CI конвейер

CI конвейер для данного проекта выражается с помощью наглядной схемы:

Схема CI конвейера

Запуск scripts/run_tests.py

Автоматические тесты запускаются с помощью вспомогательного скрипта scripts/run_tests.py. Для его работы следует задать несколько переменных окружения:

PPC_NUM_THREADS

Количество потоков для запуска. Это же значение экспортируется в OMP_NUM_THREADS.

PPC_NUM_PROC

Количество процессов MPI, которые нужно запустить.

PPC_ASAN_RUN

Установите 1, если включены санитайзеры, чтобы пропустить запуск valgrind (необязательно, по умолчанию 0).

PPC_IGNORE_TEST_TIME_LIMIT

Установите 1, чтобы отключить ограничение времени тестов (необязательно, по умолчанию 0).

Режим выполнения выбирается параметром --running-type. Чаще всего используются режимы threads для бекендов с общей памятью и processes для тестов на основе MPI. Режим performance запускает бенчмарки производительности.

Пример использования:

export PPC_NUM_THREADS=4
export PPC_NUM_PROC=2

# Multithreaded functional tests
scripts/run_tests.py --running-type="threads"

# MPI functional tests
scripts/run_tests.py --running-type="processes"

# Performance benchmarks
scripts/run_tests.py --running-type="performance"

Дополнительные аргументы MPI можно передать через --additional-mpi-args при запуске в режиме processes.

Параметр --counts позволяет последовательно запускать тесты с несколькими значениями числа потоков или процессов. При его указании скрипт перебирает переданные значения, перед каждым запуском обновляя PPC_NUM_THREADS или PPC_NUM_PROC.

Используйте --verbose, чтобы вывести каждую команду, выполняемую run_tests.py. Это помогает отлаживать сбои в CI или проверять точные аргументы, передаваемые тестовым бинарникам.