Использование PVS-Studio в SourceCraft
SourceCraft — платформа, с помощью которой можно разрабатывать исходный код, управлять версиями, тестировать, собирать, развёртывать и сопровождать программные продукты. Сервис представляет собой систему управления репозиториями кода для Git с отслеживанием ошибок и пайплайном CI/CD.
В документации рассматривается пример по интеграции PVS-Studio для анализа C и C++ кода. Команды запуска PVS-Studio для анализа C# или Java кода будут отличаться. Подробности в соответствующих разделах документации: "Проверка проектов Visual Studio / MSBuild / .NET из командной строки с помощью PVS-Studio" и "Работа с ядром Java анализатора из командной строки".
Запуск анализа
Автоматический запуск анализа
Сначала необходимо включить сканирование кода. Для этого нужно перейти в раздел Настройки репозитория > Безопасность. Подробнее про настройку SourceCraft написано в документации.

После необходимо добавить новый Workflow. Для этого добавьте YAML-скрипт в директорию .sourcecraft/.workflows репозитория. После этого каждый коммит и каждый новый pull request в ветку по умолчанию будут автоматически проверяться.
Рассмотрим следующий пример скрипта ci.yaml, который позволяет полностью проверить проект с помощью PVS-Studio:
on:
pull_request:
- workflows: [ pvs-studio-pipeline ]
filter:
source_branches: [ "**" ]
target_branches: [ "main", "develop" ]
push:
- workflows: [ pvs-studio-pipeline ]
filter:
branches: [ "main", "develop" ]
workflows:
pvs-studio-pipeline:
tasks:
- name: pvs-studio-cpp-analysis
cubes:
- name: run-pvs-studio-analysis
image:
name: ubuntu:22.04
script:
- |
# Устанавливаем необходимые зависимости
apt-get update && apt-get install -y \
wget \
gnupg \
cmake \
git
# Установка PVS-Studio
wget -q -O - https://files.pvs-studio.com/etc/pubkey.txt
| apt-key add -
wget -O /etc/apt/sources.list.d/viva64.list
https://files.pvs-studio.com/etc/viva64.list
apt-get update
apt-get install -y pvs-studio
# Ввод лицензии PVS-Studio
pvs-studio-analyzer credentials $PVS_STUDIO_CREDENTIALS
cd $SOURCECRAFT_WORKSPACE
# Сборка проекта
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On -B build .
cmake --build build -j
# Запуск анализа PVS-Studio
pvs-studio-analyzer analyze -f build/compile_commands.json -j
# Конвертация отчет в SARIF формат
plog-converter -t sarif -o $SOURCECRAFT_WORKSPACE/result.sarif
PVS-Studio.log -r $SOURCECRAFT_WORKSPACE -R toRelative
env:
PVS_STUDIO_CREDENTIALS: ${{ secrets.PVS_STUDIO_CREDENTIALS }}
# Загрузка результатов работы анализатора
- name: upload-sarif-to-sourcecraft
image:
name: sourcecraft/scan-result-uploader:0.6.0
script:
- export APPSEC_CUSTOM_ENGINE_NAME="PVS-Studio"
- export APPSEC_CUSTOM_ENGINE_TYPE="SAST"
- /app/bin/scan-result-uploader
Поле workflows описывает, какие процессы будут запущены.
Поле target_branches хранит целевые ветки.
Поле pull_request означает, что анализ будет запускаться при открытии/обновлении pull request.
Поле push означает, что анализ запустится при прямом коммите в ветки. Также можно настроить, чтобы анализ осуществлялся по расписанию с помощью поля schedule.
Поле name задаёт название шага.
Далее идёт последовательность шагов script, которые выполняют некоторые действия или последовательность команд оболочки.
После установки нужно ввести лицензию PVS-Studio. Для её активации используется шифрованная переменная PVS_STUDIO_CREDENTIALS, которая содержит имя пользователя и ключ.
Чтобы создать секрет, перейдите во вкладку Настройки репозитория > Секреты и нажмите кнопку Новый секрет.

Шаг pvs-studio-cpp-analysis запускает анализатор PVS-Studio и сохраняет отчёт в формате SARIF в $SOURCECRAFT_WORKSPACE/result.sarif.
pvs-studio-analyzer analyze -f build/compile_commands.json -j
plog-converter -t sarif -o $SOURCECRAFT_WORKSPACE/result.sarif PVS-Studio.log
-r $SOURCECRAFT_WORKSPACE -R toRelative
Более подробно о параметрах запуска pvs-studio-analyzer описано в документации, а о параметрах plog-converter в этой документации.
Шаг upload-sarif-to-sourcecraft загружает результаты работы анализатора на платформу. Результат анализа можно посмотреть на вкладке Безопасность > Анализ кода.

Ручной запуск анализа
Для ручного запуска пайплайна нужно написать скрипт в файл ci.yaml или использовать скрипт, описанный выше. После этого перейти в раздел Автоматизации > CI/CD и нажать кнопку Новый запуск. После этого произойдёт запуск пайплайна.

Работа с SARIF-отчётами
В разделе Анализ кода можно отфильтровать срабатывания по статусу:
- открыт;
- решён;
- ложное срабатывание.
Важности:
- критический;
- высокий;
- средний;
- низкий.
И типу сканера. Для этого нужно выбрать необходимые параметры в строке фильтра.

При нажатии на конкретное предупреждение анализатора откроется подробное описание проблемы с выделением соответствующего фрагмента кода, где была обнаружена потенциальная ошибка или уязвимость.

Также здесь можно перейти к исправлению ошибки, нажав на кнопку Редактировать, и написать комментарий по работе со срабатыванием.
В случае, если срабатывание оказалось ложным, можно отметить его. Для этого нужно нажать на кнопку Решить и отметить срабатывание ложным.

После подтверждения появится запись об изменении статуса срабатывания.
