DeepCode предоставляет плагины и расширения для Visual Studio Code и Atom. Но как насчет включения его в ваш конвейер CI? Что ж, тут очень удобный интерфейс командной строки.

Система: Ubuntu 18.04.4 LTS

Препараты:

Перед установкой интерфейса командной строки я бы посоветовал сделать несколько шагов.

(1) Убедитесь, что у вас установлены Python 3 и Pip3.

~$ python3 --version
Python 3.6.9
~$ python3 -m pip --version
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

Если он не установлен, сделайте это, позвонив:

sudo apt install python3.8
sudo apt install python3-pip

Примечание. Вы можете использовать отдельную среду (см. pyenv), чтобы отделить ее и поддерживать порядок. Благодаря этому вы можете легко переключаться между средами - одна из самых сильных сторон Python.

(2) Получите ключ API. На своей панели управления учетной записью DeepCode вы можете сгенерировать новые токены доступа (прокрутите вниз).

(3) Вы можете сохранить ключ API в файле конфигурации, чтобы не обрабатывать его снова. Вы также можете указать ключ API, используя параметр -a при вызове интерфейса командной строки. Чтобы сохранить его в файле конфигурации, используйте любой редактор по вашему выбору и сгенерируйте текстовый файл со следующим содержимым:

{"api_key": "[Your key goes here]"}

По умолчанию используется имя .deepcode.json.

Примечание. Интерфейс командной строки также поддерживает команду config, которая записывает этот файл за вас.

Установка DeepCode CLI

(1) Установка довольно проста

pip3 install deepcode

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

Первый взгляд

Примечание. Параметр --help всегда под рукой.

По сути, CLI поддерживает три основные команды: analyze, config, login.

С deepcode login команда запускает браузер и проводит вас через процесс входа в систему. Поскольку у нас уже есть ключ API, он нам пока не нужен.

deepcode config задает вам два основных вопроса (URL-адрес службы и код API) и записывает их в файл конфигурации по умолчанию .deepcode.json. URL-адрес службы (по умолчанию - служба DeepCode с выходом в Интернет) позволяет вам указывать на ваш внутренний сервер DeepCode. Ключ API - это ключ, который вы собрали, как описано выше.

deepcode analyze предоставляет интерфейс для отправки вашего кода на анализ. Следует помнить о трех основных вещах:

Источники. Вы можете указать локальный путь с помощью параметра -p или удаленный репозиторий GIT с помощью параметра -r.

ЛИНТЕРЫ. При указании параметра -l DeepCode запрашивает выполнение дополнительных линтеров. Одно предупреждение: скорость анализа DeepCode намного (!!) выше, чем у линтеров. Отправка больших фрагментов исходного кода может значительно замедлить ответ при включении линтеров.

Формат вывода. По умолчанию DeepCode возвращает формат JSON, описанный здесь: Пакеты REST API (см. Результаты GetAnalysis). Он имеет следующую структуру:

{ "id": string,
  "results": {
  "suggestions": {
    suggestionIndex: {
      "id": string,
      "message": string,
      "severity": 1 | 2 | 3
    },
    ...
  },
  "files": {
    filePath: {
      suggestionIndex: [
        {
          "cols": [number, number],
          "rows": [number, number],
          "markers": [marker, ...]
        },
        ...
      ],
      ...
    },
    ...
  }
 }
 "url", url
}

Чтобы отобразить отношения «многие ко многим» между предложениями и файлами, каждое предложение идентифицируется короткой строкой suggestionIndex (например, "0", "1" и т. Д.). Каждый объект предложения содержит соответствующий id, сообщение с описанием и числовую степень серьезности (1 для информационных предложений, 2 для предупреждений или 3 для критических проблем). Каждый файл идентифицируется по его пути и сопоставляет все подходящие предложения с соответствующим массивом позиций в файлах. Позиция использует два диапазона [ from , to ], один для строк и один для столбцов (cols), чтобы описать область файла, заключенную между двумя символами. Каждая позиция также имеет массив маркеров со следующей структурой:

{
  "msg": [number, number],
  "pos": [
    {
      "cols": [number, number],
      "rows": [number, number]
    },
    ...
  ]
}

Каждый объект-маркер отображает подстроку сообщения предложения, идентифицированную свойством msg как [ from , to ] диапазон между двумя символами, в массив позиций в коде (pos), где эта подстрока имеет значимое совпадение.

Кроме того, вы можете найти уникальный идентификатор (id) и URL-адрес (url), по которому вы можете найти панель управления DeepCode для вашего запроса. URL-адрес действителен в течение дня с момента запуска анализа.

Сверху CLI предоставляет коды выхода:

0 - проблем не обнаружено
1 - обнаружены некоторые проблемы
2 - Выполнение было прервано пользователем
3 - При выполнении произошла ошибка

Пример

При запуске этой команды вы запрашиваете публичное демонстрационное репозиторий из GitHub для запуска, что приводит к трем предложениям:

deepcode analyze -r https://github.com/CU-0xff/deepcode-vuln-logviewer.git@cu-0xff

Ресурсы:##

PyPI deepcode CLI
Документация разработчика