Skip to content
Exlogare

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 с scope ingest.
  • (опционально) EXLOGARE_API_BASEhttps://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 AppAPI 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 — это нормально.