Help:CLI

From Svacer Wiki
Revision as of 14:22, 23 May 2024 by Akuzmin (talk | contribs) (remove LDAP part)

Получение справки

Запустив Svacer без параметров, можно получить информацию о доступных командах. Дополнительная информация о каждой команде доступна при использовании опции --help

 svacer <command name> --help

Общий формат командной строки

 svacer [global options] command [command options] [arguments...]

Глобальные опции относятся ко всем командам. Опции команд имеют префикс «--». Их следует указывать до списка аргументов. Для команд с опцией --password доступна возможность ввода пароля с клавиатуры.

Создание PDF отчета для проекта

Для создания PDF отчета по проекту из интерфейса командной строки используется команда pdfgen. Назначение команды состоит в том, чтобы добиться из консоли результатов (создание PDF файла отчета), аналогичным следующим действиям пользователя в GUI:

  1. Выгрузка таблицы маркеров в формате PDF (Рис. 1)
  2. Предварительное формирование содержимого таблицы маркеров
    • По режимам сравнения (new, missing, same, matched) с указанием цели и источника сравнения, (Рис. 2)
    • По используемым фильтрам Custom (ограниченный набор из 4 параметров) (Рис. 3)

Ниже приводятся фрагменты GUI, которым соответствует cli команда в различных вариантах ее использования:

SimpleReport window

Рис. 1 — Отчет без сравнения

CompareReport window

Рис. 2 — Отчет со сравнением

CompareFiltersReport window

Рис. 3 — Отчет со сравнением и фильтрами

Общий вид команды следующий:

 svacer pdfgen --cmpMode [none|new|missing|matched|same] --project [name|id] --branch [name|id] --snapshot [name|id] [--targetProject [name|id] --targetBranch [name|id] --targetSnapshot [name|id]] [--file [re_exp] --checker [re_exp] --severity [re_exp] --review [re_exp]] --outFile report_name --tz time_zone --lang report_lang

Описание параметров:

  • cmpMode — параметры сравнения. Возможные значения: none — без сравнения, new — новые, missing — отсутствующие, matched — сопоставленные, same — одинаковые
  • Project, Branch, Snapshot — параметры, описывающие снимок, отчет для которого требуется создать. В качестве значений могут использоваться как имена, так и идентификаторы соответствующих сущностей. Например: --project zstd --branch "7683ed6a-b838-4090-9945-10e148f94be3" --snapshot zstd_130
  • targetProject, targetBranch, targetSnapshot — параметры, описывающие снимок, с которым необходимо провести сравнение (обязательные параметры для режимов cmpMode: new, missing, matched, same).
  • File, checker, severity, review — параметры, задающие фильтры, применяемые к списку маркеров. Фильтры задают условия включения маркера в отчет. Значения фильтров задаются в формате регулярных выражений. В случае неверного формата, ошибочный фильтр не будет применяться и операция экспорта будет выполнена, как если бы фильтр не был указан. File — фильтр по пути к файлу, где был обнаружен маркер. Checker — фильтр по чекеру, предупреждение от которого было создано. Severity — серьезность сработавшего чекера. Review — статус разметки (confirmed, unclear и т.д.)
  • outFile — имя создаваемого файла отчета. Если не будет указано расширение, будет добавлено расширение pdf
  • tz — временная зона в минутах. Используется при формировании записи о комментариях, которые оставил пользователь, производивший разметку
  • lang — язык, который будет использован в создаваемом отчете (en — английский, ru — русский)

Для создания отчета без использования режима сравнения, необходимо указать cmpMode в значение none (это значение используется по умолчанию). Для предварительного формирования таблицы маркеров с учетом сравнения, использовать значения cmpMode [new, missing, same, matched]. Названия этих режимов аналогичны названиями в GUI. При этом требуется указание как минимум одного параметра из списка: targetProject, targetBranch, targetSnapshot. Если какие-то параметры target* не указаны, они будут установлены в значение исходных (project → targetProject, branch → targetBranch, ...). Сформированные на предварительном этапе маркеры, проходят механизм фильтраций (параметры: severity, file, review, checker), после чего происходит создание отчета.

Для создания отчета можно также использовать public API. Необходимо использовать следующие параметры:

URL — /api/public/exportPDF
Метод — POST

Тело запроса — формат JSON, имеет следующий вид:

   {
   "compare_mode": "new",
   "context":{
     "project": "zstd",
     "branch": "v13",
     "snapshot": "zstd_131"
    },
   "target_context":{
     "project": "zstd",
     "branch": "v13",
     "snapshot": "zstd_132"
    },
    "language": "en",
    "timezone": 180,
    "filters": {
      "checker": "^Z.*$",
      "file": ".*example.*",
      "severity": "Cr.*",
      "review": "Conf.*"
    } 
   }

Данный запрос соответствует запросу на создание отчета, который получается в результате сравнения в рамках проекта zstd и ветки v13 двух снимков zstd_131 и zstd_132. При этом будут выбраны только новые маркеры. Среди выбранных останутся только те, что удовлетворяют условиям фильтров, а именно: чекер начинается с буквы Z, файл содержит слово example, серьезность чекера содержит подстроку Cr (что в силу ограниченного количества значений для данного фильтра соответствует значению Critical) в названии, а состояние разметки содержит подстроку Conf (что в силу ограниченного количества значений для данного фильтра соответствует значению Confirmed). Язык отчета — английский, часовой пояс — 180 минут (3 часа).

Импорт разметки из исходного кода на сервер истории

Импорт разметки из исходного кода на сервер истории возможен с помощью команды svacer markup import.

Синтаксис:

 svacer markup --user <user> --password <password> --project <project id or name> --branch <branch id or name> --snapshot <snapshot id or name> import --template <name> [--excludePaths <path1, path2, ... ,pathN> --from-build-object]

Где:

  • user, password — пользователь и пароль учетной записи на сервере истории
  • project — проект на сервере истории, в который будет произведен импорт разметки
  • branch — ветка в проекте выбранном выше (по умолчанию master), в которую будет произведен импорт разметки
  • snapshot — снимок в выбранных проекте и ветке (по умолчанию последний загруженный), в который будет произведен импорт разметки
  • excludePaths — исключает файлы, соответствующие регулярным выражениям
  • template — определяет имя шаблона для импорта разметки (важно: флаг обязательный, в отличие от экспорта)
  • from-build-object — при включении этой опции, разметка будет выгружаться из объекта сборки того снимка, который был указан в опциях выше.

После выполнения команды все комментарии оставленные в коде в соответствии с выбранным шаблоном разметки будут разобраны и добавлены на сервер истории в соответствующий проект/ветку/снимок.

Для подавления найденных предупреждений следует использовать следующий формат разметки в исходном коде

 //svacer_review: -<warn class>[|-<warn class>]+ 

Пример:

 if (!strncmp("--filelimit",argv[i],11)) {
   j = 11; //svacer_review: -UNUSED_VALUE
   if (*(argv[i]+11) == '=') {

Комментарий должен быть расположен в конце строки, где ожидается предупреждение от анализатора Svace.

Для импорта разметки при использовании команд import --upload и upload следует указывать флаг --template <template>. В таком случае разметка будет импортирована из объекта сборки сразу после загрузки его на сервер.

Описание шаблона разметки DEFAULT

Сервер позволяет добавить собственные шаблоны разметки, для удобства добавлен неудаляемый шаблон DEFAULT. Список шаблонов можно увидеть в Settings > Markup templates (при наличии у пользователя доступа).

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

В шаблоне DEFAULT каждая разметка описывается на отдельной строчке перед маркером, при необходимости можно использовать несколько строчек. Импорт разметки с неправильным статусом или со статусом Undecided не производится, включая комментарий.

Пример:

 //svacer_review: FORMAT_STRING.PARAM_EXCESS r:Confirmed|s:Minor|a:Undecided|c:
 //svacer_review: UNINIT.LOCAL_VAR r:Confirmed|s:Unspecified|a:Fix required|c:will be fixed
 printf("v = %d", fl3(), i);

Разметка нескольких одинаковых предупреждений на одной строчке проблематична, гарантируется только что разметка будет применена к маркеру с таким названием.

Изменение инвариантов для распространения разметки между снимками с несовпадающими путями

Если на сервер был загружен снимок, в котором расположение некоторых (или всех) файлов поменялось, а при импорте не был указан флаг --pathPrefix, то разметка с прошлого снимка не распространится на новый снимок. Для решения данной проблемы следует использовать команду svacer markup update.

Синтаксис:

 svacer markup update --user <user> --password <password> --project <project id or name> --branch <branch id or name> --pathPrefix <prefix:replacement; prefix:replacement> [<snapshot id or name>1, <snapshot id or name>2, ..., <snapshot id or name>N]

Где:

  • user, password — пользователь и пароль учетной записи на сервере истории
  • project — проект на сервере истории, в котором будет обновлена разметка
  • branch — ветка в проекте выбранном выше (по умолчанию master), в которой будет обновлена разметка
  • pathPrefix — правило отображения для префиксов путей в формате: <file> или line prefix:replacement;prefix:replacement

В конце команды опционально могут быть указаны имена или идентификаторы снимков, в которых будет обновлена разметка в соответствии с указанными префиксами путей. Если они указаны не будут, изменения будут применены ко всей ветке. После запуска команды на сервер будет отправлен асинхронный запрос на обновление разметки, за дальнейшим прогрессом исполнения можно следить в логе сервера (через UI он доступен пользователям с ролью admin в Settings > Server information).

Подавление предупреждений

Для подавление выбранных пользователем предупреждений предоставляется следующий интерфейс командной строки:

Список подавленных предупреждений (печатает JSON)

 svacer markup [auth/selection] suppress list

Пример

 svacer markup --user admin --password admin --project tree-command suppress list


Подавить предупреждение

 svacer markup [auth/selection] suppress add id1 id2 id3

Пример

 svacer markup --user admin --password admin --project tree-command suppress add 29d298cd-752d-4d19-b535-2089a72a96af


Убрать подавление предупреждения

 svacer markup [auth/selection] suppress remove id1 id2 id3

Пример

 svacer markup --user admin --password admin --project tree-command suppress remove 29d298cd-752d-4d19-b535-2089a72a96af


Убрать все подавления

 svacer markup [auth/selection] suppress remove

Пример

 svacer markup --user admin --password admin --project tree-command suppress remove

Список предупреждений с ID доступен посредством public REST API. Функциональность предназначена для интеграции со сторонними инструментами и встраивания в CI/CD pipeline. На текущий момент информация о подавленных предупреждениях недоступна в веб-интерфейсе.

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

Поддержка сквозной аутентификации

Svacer поддерживает сквозную аутентификацию через reverse proxy. Для этого используется опция proxy-mode. При включении этой опции есть возможность проходить аутентификацию (используя HTTP Basic Authentication) на reverse proxy сервере и использовать эти данные для аутентификации на сервере Svacer.

При включенном proxy-mode используется header с прокси Authorization Basic ..., откуда Svacer берет имя пользователя и пароль, проверяет и аутентифицирует пользователя, если аккаунт с таким логином и паролем существует в БД пользователей Svacer.

Пример запуска сервера с поддержкой сквозной аутентификации:

 svacer-server run --proxy-mode

Хуки

Для получения данных хуков при запуске сервера нужно указать опцию --hooks <path to JSON file>. Эта опция задаёт файл, содержащий информацию о расширении сервера посредством хуков, которые пользователь может вызывать из web-интерфейса. Каждый хук соответствует некоторому процессу или скрипту, который сервер запускает в ответ на вызов соответствующей команды из web-интерфейса. Формат файла Hooks следующий:

 {
   "hooks": [
     {
       "id": "<id>",
       "label": "<label >",
       "target": "<target>",
       "input": ["<param1>", "<param2>", ...],
       "cmd": "<path to executable>",
       "args": ["<arg1>", “<arg2>”, ...]
     },
     ...
   ]
 }

Параметры хуков

Параметр Описание
id Идентификатор хука.
Должен быть уникальным в файле
label Имя команды, которую пользователь видит в web-интерфейсе
target Место в UI, в которое будет добавлена команда.

Сейчас поддерживается только одно значение — default. Оно соответствует вкладке Details на правой панели пользовательского интерфейса

input Параметры, которые можно передать в запускаемый процесс, исходя из контекста вызова команды в web-интерфейсе.

Поддерживаемые значения:

  • markerID — UUID идентификатор маркера;
  • branchID — UUID идентификатор ветки;
  • snapshotID — UUID идентификатор снимка;
  • projectID — UUID идентификатор проекта;
  • url — URL маркера в web-интерфейсе, на котором была вызвана команда;
  • marker — будет заменен на полное имя временного файла, содержащего сериализованное в JSON представление маркера, который включает в себя его трассу и информацию о разметке
cmd Полный путь к процессу, который будет запущен. Не должен включать аргументы запуска
args Аргументы, передаваемые в запускаемый процесс. Полный список аргументов запускаемого процесса состоит из списка <args> и списка значений, соответствующих полю <input>

Одним из типичных сценариев использования хуков является создание кейсов для выбранного предупреждения в системах отслеживания ошибок, таких как Jira и Gitlab. Примеры скриптов для этого можно найти на странице Примеры использования хуков.

Автомиграция разметки

В Svacer возможно настроить автомиграцию разметки с ветки на ветку (у пользователя должны быть права на администрирование сервера).

 svacer server automigrate [command] [flags]

Существующие command:

  • add — добавляет автомиграцию в соответствии с паттерном
  • delete — удаляет автомиграцию
  • show_config — показывает все заданные миграции (Config Table), их id, время создания и пользователя, который их создал
  • show_automigrate — показывает таблицу всех существующих проектов и веток с которых и на которые происходят автоматические миграции (Automigrate Table)
  • log — выводит список всех совершенных миграций (Done Automigrate Table)

Флаг pattern, применяется для команд <add|delete|show_config|log>

  • Для delete: Паттерн автомиграции в формате: srcProject{Id|Name}/srcBranch{Id|Name}=>receiveProject{Id|Name|RegEx}/receiveBranch{Id|Name|RegEx}. Паттерн должен быть точно таким же, как он записан в Config Table
  • Для show_config: Паттерн автомиграции. Поиск будет происходить в следующем виде: ILIKE "'%"+pattern+"%'"
  • Для log: Флаг в формате srcProjectId/srcBranchId=>receiveProjectId/receiveBranchId или srcProjectName/srcBranchName=>receiveProjectName/receiveBranchName для вывода автомиграций с данным паттерном

Флаг id, применяется для command <delete|show_automigrate> в формате uuid

  • Для delete: id для удаления автомиграции (из Config Table)
  • Для show_automigrate: id ветки/проекта или конфигурации для нахождения его в таблице автомиграций (Automigrate Table) и вывода автомиграций, где присутствует данный id

Флаг format — формат вывода таблицы. Применяется для command <show_config|show_automigrate|log>

  • Для show_config:
  • table — вывод в виде таблицы
  • json — вывод в виде json
  • no-id — вывод без config id
Значения можно перечислить через запятую: json,no-id. По умолчанию — table.
  • Для show_automigrate|log:
  • table — вывод в виде таблицы
  • json — вывод в виде json
По умолчанию — table.

Также возможно использовать POST запрос по адресу /api/automigrate. В теле передается json, с полями action(not null), pattern, id. Выполняется по тому же принципу, что и в CLI.

Принцип работы сервиса:

  • При запуске сервера запускается сервис automigrate
  • При занесении новой миграции, находит все миграции, подходящие под паттерн, и копирует разметку на них
  • При удалении миграции, удаляет её из таблицы Config и удаляет из таблицы автомиграций
  • Не может копировать разметку с нескольких веток на одну (будет выдавать ошибку)
  • При любом изменении разметки у существующих веток (добавление/удаление/изменение комментариев, добавление снимка, добавление проекта, добавление ветки, изменение имени ветки/проекта, удаление контейнера, удаление снимка) происходит либо миграция разметки, либо добавление новых миграций в таблицу автомиграций и миграция разметки, либо удаление миграции из таблицы автомиграций (в зависимости от конкретной ситуации). При какой-либо ошибке выдает предупреждение, но даёт выполнить действие.
  • Единственный случай, когда сервис не даёт выполнить действие — загрузка результатов Svace через CLI: upload, либо import с флагом --upload. В этом случае сервис выдает ошибку миграции и отменяет загрузку. Такое может произойти, когда имя данной ветки (в качестве to_branch) подходит под несколько паттернов.