﻿# Использование PVS\-Studio в Buddy

[Buddy](https://buddy.works/) — платформа, позволяющая автоматизировать сборку, тестирование и публикацию программного обеспечения\. Поддерживает сервисы хостинга: [GitHub](https://github.com/dotnet-script/dotnet-script), [Bitbucket](https://bitbucket.org/), [GitLab](https://about.gitlab.com/)\.


> В данной документации рассматривается пример по интеграции PVS\\\-Studio для анализа C и C\\\+\\\+ кода\\\. Команды запуска PVS\\\-Studio для анализа C\\\# или Java кода будут отличаться\\\. Смотрите соответствующие разделы документации: "\[Проверка проектов Visual Studio / MSBuild / \\\.NET из командной строки с помощью PVS\\\-Studio\]\(https://pvs\-studio\.ru/ru/docs/manual/0035/\)" и "\[Работа с ядром Java анализатора из командной строки\]\(https://pvs\-studio\.ru/ru/docs/manual/6703/\)"\\\.

## Общие настройки

### Создание pipeline'а

В первую очередь необходимо создать pipeline, в котором будет запускаться анализ\. Для этого нужно перейти в настройки проекта, после чего нажать 'New pipeline':

![Buddy_ru/image1.png](https://import.viva64.com/docx/blog/Buddy_ru/image1.png)

В появившемся окне необходимо указать конфигурацию, название pipeline'а и условие для его запуска\. После внесения данных нужно нажать 'Add pipeline':

![Buddy_ru/image2.png](https://import.viva64.com/docx/blog/Buddy_ru/image2.png)

### Настройка pipeline'а \(только для анализа pull requests\)

Для анализа pull requests в качестве триггера необходимо выбрать 'On events'\. Событие для срабатывания — 'Git create branch, tag or PR'\. Далее необходимо прейти в настройки триггера, где на вкладке 'Wildcard' нужно добавить 'all pull requests':

![Buddy_ru/image3.png](https://import.viva64.com/docx/blog/Buddy_ru/image3.png)

### Выбор компилятора

После создания pipeline'а нужно указать компилятор, который будет использоваться для сборки проекта\. Разберём на примере GCC, написав его название в поиск:

![Buddy_ru/image4.png](https://import.viva64.com/docx/blog/Buddy_ru/image4.png)

В списке найденных компиляторов выберите нужный\.

### Создание переменных окружения

После выбора компилятора необходимо задать переменные окружения, с помощью которых будет сформирован файл лицензии\. Для этого нужно нажать на 'Variables' и добавить переменные 'PVS\_USERNAME' и 'PVS\_KEY', которые будут содержать имя пользователя анализатора, связанное с ключом, и лицензионный ключ соответственно:

![Buddy_ru/image5.png](https://import.viva64.com/docx/blog/Buddy_ru/image5.png)



### Установка анализатора

Необходимо перейти на вкладку 'Docker' и нажать 'Package & Tools':

![Buddy_ru/image6.png](https://import.viva64.com/docx/blog/Buddy_ru/image6.png)

В появившуюся форму нужно ввести команды установки анализатора:

```cpp
apt-get update && apt-get -y install wget gnupg jq

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 -y install pvs-studio
```

## Запуск PVS\-Studio в AppVeyor на примере C\+\+ проекта

### Анализ всего проекта

Для анализа всего проекта необходимо перейти на вкладку 'Run':

![Buddy_ru/image7.png](https://import.viva64.com/docx/blog/Buddy_ru/image7.png)

В появившуюся форму нужно ввести команды запуска анализатора: 

```cpp
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY

pvs-studio-analyzer analyze -j8 \
                            -o PVS-Studio.log \
                            --disableLicenseExpirationCheck

plog-converter -t errorfile PVS-Studio.log --cerr -w
```

После внесения данных необходимо нажать 'Add this action'\. 

При выполнении данного pipeline'а сформируется отчёт с результатом анализа\. Он будет сохранён в файл 'PVS\-Studio\.errorfile'\.

Документация по использующимся утилитам:

* [pvs\-studio\-analyzer](https://pvs-studio.ru/ru/docs/manual/6615/);
* [plog\-converter](https://pvs-studio.ru/ru/docs/manual/0038/)\.

### Анализ pull requests

Для анализа pull requests необходимо перейти на вкладку 'Run'\.

![Buddy_ru/image7.png](https://import.viva64.com/docx/blog/Buddy_ru/image7.png)

В появившуюся форму нужно ввести команды анализа pull/merge requests: 

```cpp
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY

if [ "$BUDDY_EXECUTION_PULL_REQUEST_NO" != '' ]; then
  PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
  MERGE_BASE=`wget -qO - \
    https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID} \
    | jq -r ".base.ref"`

  git fetch origin

  git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
  pvs-studio-analyzer analyze -j8 \
                              -o PVS-Studio.log \
                              --disableLicenseExpirationCheck \
                              -S .pvs-pr.list
else
  pvs-studio-analyzer analyze -j8 \
                              -o PVS-Studio.log \
                              --disableLicenseExpirationCheck
fi

plog-converter -t errorfile PVS-Studio.log --cerr -w
```

После внесения данных необходимо нажать 'Add this action'\.

При выполнении данного pipeline'а сформируется отчёт с результатом проверки изменённых файлов\. Он будет сохранён в 'PVS\-Studio\.errorfile'\.

Документация по использующимся утилитам:

* [pvs\-studio\-analyzer](https://pvs-studio.ru/ru/docs/manual/6615/);
* [plog\-converter](https://pvs-studio.ru/ru/docs/manual/0038/)\.

С документацией по анализу pull/merge requests можно ознакомиться [здесь](https://pvs-studio.ru/ru/docs/manual/0055/)\.