Skip to content

CLI --reporter

Команды chef поддерживают опцию --reporter <name> — переключатель формата вывода. Сейчас доступны:

  • default — человекочитаемый вывод (используется по умолчанию).
  • json — структурированный JSON в stdout. Формат — на странице Формат ответа.
  • teamcity — сервисные сообщения TeamCity, только для chef test.
bash
chef build main.core --reporter json
chef lint 'ui.*' --reporter json
chef test main.core --reporter json
chef typecheck main.core --reporter json
chef diag top-used --limit 10 --reporter json
chef diag circular-deps --reporter json

Когда использовать json

  • Уже есть пайплайн на shell-скриптах — проще добавить --reporter json, чем писать парсеры человеческого вывода.
  • Нужно прокинуть результат во внешний инструмент (например, jq, дашборд, Slack-нотификатор).
  • Хочется сравнить результаты между запусками — JSON удобно diff'ать.

В каких командах работает

Команда--reporter json
chef build
chef lint
chef test
chef typecheck
chef diag top-used
chef diag top-deps
chef diag top-deps-tree
chef diag top-bundle-size
chef diag top-total-size
chef diag config
chef diag unused-deps
chef diag unused
chef diag circular-deps
chef diag circular-imports
chef diag find-usages
chef diag find-loaders
chef diag deps-tree
chef diag bundle-size
chef diag baselineпока нет
chef create, init, aliasesне нужны в CI

Exit codes

  • 0success: true
  • 1success: false (есть ошибки сборки/линта/тестов)
  • 2 — несовместимые флаги (например, --watch с --reporter json)

Несовместимые флаги

--watch несовместим с --reporter json — режим watch предполагает непрерывный вывод, что несовместимо с разовым JSON-документом.

bash
$ chef build main.core --watch --reporter json
{ "success": false, "command": "build", "error": { "code": "CF2001", "message": "--watch is not supported with --reporter json" }, ... }
$ echo $?
2

Что попадает в stdout

В режиме --reporter json stdout — только JSON. Любые человекочитаемые сообщения (приветствия, прогресс-бары, таблицы) подавлены, чтобы вывод можно было сразу пропустить через парсер. Если случайно увидите там что-то ещё — это баг, заведите issue.

Stderr остаётся свободным для непредвиденных краш-репортов Node.js, но в нормальной работе и он молчит.

Примеры

Простой pipe в jq

bash
chef diag top-bundle-size --limit 5 --reporter json | jq '.data.results[] | {name, total}'

Прервать пайплайн при ошибке

bash
chef build 'ui.*' --reporter json | jq -e '.success' > /dev/null \
  || { echo 'Build failed'; exit 1; }

Извлечь имена упавших расширений

bash
chef lint 'ui.*' --reporter json \
  | jq -r '.extensions[] | select(.success == false) | .name'

Получить размер конкретного бандла

bash
chef build main.core --reporter json | jq '.extensions[0].details.bundles[0].size'

Найти упавшие тесты с указанием места падения

bash
chef test 'ui.*' --reporter json \
  | jq -r '.extensions[].errors[] | "\(.file):\(.line)  \(.message)"'

Reporter teamcity

Только для chef test. Вместо JSON печатает сервисные сообщения TeamCity (##teamcity[testStarted ...]). Используется в CI на TeamCity.

bash
chef test main.core --reporter teamcity

Распространяется под лицензией MIT.