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

[AppVeyor](https://www.appveyor.com/) — web\-сервис непрерывной интеграции\. Он предназначен для сборки и тестирования ПО, расположенного на [GitHub](https://github.com/dotnet-script/dotnet-script) и ряде других сервисов хранения исходного кода\.


> В данной документации рассматривается пример по интеграции 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/\)"\\\.

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

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

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

Они будут содержать лицензионный ключ и имя пользователя анализатора, привязанное к ключу, соответственно\. Эти переменные необходимы для проверки лицензии анализатора\.

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

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

Чтобы запустить анализ, необходимо добавить скрипт\. Для этого на панели настроек нужно перейти на вкладку 'Tests', в появившемся окне нажать 'Script':

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

В появившуюся форму нужно добавить код:

```cpp
sudo apt-get update && sudo apt-get -y install jq

wget -q -O - https://files.pvs-studio.com/etc/pubkey.txt \
  | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list \
  https://files.pvs-studio.com/etc/viva64.list

sudo apt-get update && sudo apt-get -y install pvs-studio

pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY

PWD=$(pwd -L)
pvs-studio-analyzer analyze -j8 \
                            -o PVS-Studio.log \
                            --disableLicenseExpirationCheck

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

**Примечание\.** Присваивание значения команды 'pwd' переменной '$PWD' необходимо для корректной работы анализатора, поскольку AppVeyor модифицирует переменную для своих служебных целей в другое значение\.

Результат анализа проекта будет сохранён в файл '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 необходимо произвести дополнительные настройки\. 

На вкладке 'General' нужно включить сохранение кэша для сборки Pull Requests \(checkbox находится внизу страницы\):

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

Далее необходимо прейти на вкладку 'Environment', где нужно указать папку для кэширования \(поле для добавления находится внизу страницы\):

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

Без данной настройки проект будет анализироваться целиком\.

Чтобы запустить анализ, необходимо добавить скрипт\. Для этого на панели настроек нужно перейти на вкладку 'Tests', в появившемся окне нажать 'Script':

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

В появившуюся форму нужно добавить код:

```cpp
sudo apt-get update && sudo apt-get -y install jq

wget -q -O - https://files.pvs-studio.com/etc/pubkey.txt \
  | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list \
  https://files.pvs-studio.com/etc/viva64.list

sudo apt-get update && sudo apt-get -y install pvs-studio

pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY

PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
  PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
  MERGE_BASE=`wget -qO - \
    https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} \
    | jq -r ".base.ref"`

  git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
  pvs-studio-analyzer analyze -j8 \
                              -o PVS-Studio.log \
                              --disableLicenseExpirationCheck \
                              --dump-files --dump-log pvs-dump.log \
                              -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
```

**Примечание\.** Присваивание значения команды 'pwd' переменной '$PWD' необходимо для корректной работы анализатора, поскольку AppVeyor модифицирует переменную для своих служебных целей в другое значение\.

Если анализируется pull request, то будет получена разница между ветками\. После этого запустится анализ для изменённых файлов\. В противном случае проект будет проанализирован полностью\.

Результат анализа проекта будет сохранён в файл '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/)\.