Запуск `exl` — CLI Exlogare доступен всем
Командная строка для отправки CI-логов и чтения AI-разборов вышла. Один Go-бинарь, GitHub Releases, deb/rpm package assets и Docker — без лишних рантайм-зависимостей.
Сегодня выходит exl — командная строка Exlogare. Это один Go-бинарь, который оборачивает публичный ingest-эндпоинт и Read API: положили в CI-раннер, на ноут разработчика или в cron — и получили полный цикл «лог упал -> AI-разбор» прямо в терминале.
В одном абзаце: exl auth login один раз, потом exl ingest из любого post-build шага, потом exl analyses list --since 24h --json | jq из шелла или утреннего cron-а. CLI открыт (github.com/exlogare/exlogare-cli), Apache-2.0, без рантайм-зависимостей.
Установка
Самый универсальный способ — скачать архив под вашу OS/arch на странице GitHub Releases, достать exl и положить его в $PATH.
Для Linux также доступны package assets в релизах:
# Debian / Ubuntu
curl -fsSL https://github.com/exlogare/exlogare-cli/releases/latest/download/exlogare-cli_amd64.deb -o exl.deb
sudo dpkg -i exl.deb
# Fedora / RHEL / Alma / Rocky
sudo rpm -i https://github.com/exlogare/exlogare-cli/releases/latest/download/exlogare-cli_amd64.rpm
# Docker
docker run --rm -e EXLOGARE_TOKEN ghcr.io/exlogare/exl:latest analyses list --since 24h
После установки запустите exl auth login и вставьте токен из Integrations -> API tokens. Токен ляжет в OS-нативное хранилище (libsecret, Windows Credential Manager) — не в конфиг-файл и не в shell-history. В CI используйте EXLOGARE_TOKEN.
Сценарий 1 — встроить в standalone CI
Многие приходят в Exlogare через OAuth-интеграции с GitLab / GitHub / Bitbucket, но огромный кусок CI-пайплайнов до сих пор живёт на Jenkins, Buildkite, Drone, TeamCity или самописном Bash-CI. Для всего этого CLI — самый простой хук:
# Buildkite step
make test 2>&1 | tee build.log
[[ ${PIPESTATUS[0]} -ne 0 ]] && exl ingest \
--provider buildkite \
--project "$BUILDKITE_PIPELINE_SLUG" \
--status failed \
--commit "$BUILDKITE_COMMIT" \
--branch "$BUILDKITE_BRANCH" \
--pipeline-url "$BUILDKITE_BUILD_URL" \
--log-file build.log
Один раз положите EXLOGARE_TOKEN в секреты раннера — и тот же сниппет работает на Jenkins (post { failure { sh '...' } }), Drone (when: status: [failure]), TeamCity (buildFinished trigger) и всём, что умеет шелл. Слаг --provider нормализуется на сервере, так что Buildkite, BUILDKITE или My CI 1.0 (prod) приведутся к нормальному id — регулярку запоминать не нужно.
Сценарий 2 — утренние сводки
Несколько бета-команд уже пишут маленькие скрипты поверх Read API, чтобы получать на почту вчерашние красные сборки. С exl и jq это превращается в один пайп:
exl analyses list --since 24h --severity high --json \
| jq -r '.items[] | "[\(.severity)] \(.created_at) \(.project_path) — \(.root_cause)"' \
| mail -s "Вчерашние красные CI" oncall@yourco.io
Пагинация курсорная — границы страниц стабильны, новые инсёрты не сдвигают окно (в отличие от offset/limit). Для простой сводки вы всегда внутри первой страницы; если нужно пройти всё окно — итерируйте по next_cursor, пока он не опустеет.
Сценарий 3 — панели в Grafana через Read API
Если вы уже импортировали наш Grafana-дашборд, exl пригодится при онбординге как sanity-check: вставьте read-токен в exl auth login, потом exl analyses list --severity high --limit 5 — чтобы убедиться, что данные едут, до того как вы подключите Grafana datasource. Тот же эндпоинт, но удобный для глаз.
Чего в CLI намеренно нет
Несколько вещей, которые мы сознательно не клали в 0.1.0:
- Нет интерактивного TUI. Команды скриптуемые — в этом весь смысл. Если нужен UI, у нас есть дашборд.
- Нет
exl webhook/exl integration. OAuth-флоу живёт в браузере. CLI — про ingest и read. - Нет npm-дистрибуции. Обёртка Go-бинарника в Node-пакет не даёт пользы и добавляет лишний хоп в supply chain.
- Нет конфиг-файла. Настройки — флаги, env, keychain. Секреты не утекают в dotfiles by design.
Куда дальше
- Установка и справочник
- Исходники на GitHub
- Универсальный ingest API и Read API — два эндпоинта, которые оборачивает
exl
Нашли баг — заводите issue в репо на GitHub. Хотите фичу — PR-ы приветствуются: код небольшой и идиоматичный Go, cobra для команд, go-keyring для секретов.