GitHub Actions без OAuth
Отправка логов GitHub Actions в Exlogare через API ingest, когда OAuth-интеграция нежелательна.
Exlogare поддерживает первоклассную OAuth GitHub-интеграцию — она ставит check runs прямо на коммитах. Но если у вас нет прав ставить GitHub App, или хочется минимально-инвазивную интеграцию, используйте API ingest: один шаг с if: failure() плюс secret.
Когда выбирать ingest вместо OAuth
- В организации запрещены сторонние GitHub Apps.
- Хочется попробовать SaaS на одном репозитории без org-wide approval.
- Используется GitHub Enterprise Server без internet-доступа из Exlogare.
- Нужен один и тот же токен для нескольких репо без бутстрапа OAuth flow.
Секреты репозитория
Заведите два secret в Settings → Secrets and variables → Actions:
EXLOGARE_TOKEN— API токен Exlogare с scopeingest.- (опционально)
EXLOGARE_API_BASE—https://api.exlogare.net.
Workflow snippet
name: ci
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
id: tests
run: |
set -o pipefail
pytest -q 2>&1 | tee build.log
- name: Send failure log to Exlogare
if: failure()
env:
EXLOGARE_TOKEN: ${{ secrets.EXLOGARE_TOKEN }}
EXLOGARE_API_BASE: ${{ secrets.EXLOGARE_API_BASE || 'https://api.exlogare.net' }}
run: |
curl -fsS -X POST "$EXLOGARE_API_BASE/api/ingest/log" \
-H "Authorization: Bearer $EXLOGARE_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg proj "${{ github.repository }}" \
--arg pid "${{ github.run_id }}" \
--arg jid "${{ github.job }}" \
--arg br "${{ github.ref_name }}" \
--arg sha "${{ github.sha }}" \
--arg url "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--arg log "$(cat build.log)" \
'{provider:"github_actions", project:$proj, pipeline_id:$pid, job_id:$jid, status:"failed", branch:$br, commit_sha:$sha, pipeline_url:$url, log:$log}')"
Используется generic-эндпоинт POST /api/ingest/log с provider: "github_actions" — этого достаточно для всего, что отрисовывает дашборд.
Сравнение OAuth vs ingest
| OAuth GitHub App | API ingest | |
|---|---|---|
| Чек на коммите | Да (PR check) | Нет (только дашборд + опц. чат-уведомления) |
| Доступ к чужим логам шагов | Авто (через GitHub API) | Только тот лог, что вы отправили tee build.log |
| Установка | OAuth flow + установка App | один secret + один step |
| GitHub Enterprise air-gapped | Сложно | Работает |
| Free tier | Да | Да (3 ключа, 20 анализов на аккаунт за всё время) |
Советы
- Не отправляйте
${{ secrets.GITHUB_TOKEN }}в Exlogare — он не нужен. API ingest хочет только нашEXLOGARE_TOKEN. - Для матричных джобов добавьте
${{ matrix.os }}вjob_idилиjob_name, чтобы различать сборки. - Если используете self-hosted runners,
pipeline_urlвсё ещё указывает на github.com — это нормально.