Skip to content
Exlogare

GitHub Action — exlogare-ingest

Use the official `exlogare/exlogare-ingest-action` to push CI logs to Exlogare from any GitHub Actions runner.

exlogare/exlogare-ingest-action is a composite GitHub Action that calls exl ingest from any runner. Use it when:

  • You want to push only specific failed step output (not the whole workflow run).
  • You’re on a self-hosted runner that the GitHub App cannot reach (no inbound webhooks).
  • You’re sending logs from a non-GitHub source (e.g. a script invoked from a runner).

For zero-config tracking of every workflow_run failure, prefer the GitHub App; it ingests logs server-side and doesn’t require any workflow YAML changes.

Quickstart

name: tests
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run tests
        id: tests
        run: pytest --tb=short 2>&1 | tee pytest.log
      - name: Send failure to Exlogare
        if: failure() && steps.tests.outcome == 'failure'
        uses: exlogare/exlogare-ingest-action@v1
        with:
          token: ${{ secrets.EXLOGARE_TOKEN }}
          log_path: pytest.log

Issue an EXLOGARE_TOKEN from app.exlogare.net/dashboard/settings → API tokens and store it as a repo secret.

Inputs

NameRequiredDefaultDescription
tokenyesExlogare API token (use a secret).
log_pathno''Path to a log file. Use - for stdin.
endpointnohttps://api.exlogare.netOverride for self-hosted Exlogare deployments.
fail_on_errornofalseFail the step when ingest fails. Default keeps the original CI failure visible.
cli_versionnolatestexl version to install — pin for reproducible builds.

Recipes

pytest with junit

- name: pytest
  id: tests
  run: pytest --junitxml=junit.xml | tee pytest.log
- if: failure() && steps.tests.outcome == 'failure'
  uses: exlogare/exlogare-ingest-action@v1
  with:
    token: ${{ secrets.EXLOGARE_TOKEN }}
    log_path: pytest.log

jest

- name: jest
  id: tests
  run: npx jest 2>&1 | tee jest.log
- if: failure() && steps.tests.outcome == 'failure'
  uses: exlogare/exlogare-ingest-action@v1
  with:
    token: ${{ secrets.EXLOGARE_TOKEN }}
    log_path: jest.log

Build matrix

strategy:
  matrix:
    py: ['3.10', '3.11', '3.12']
- name: pytest
  id: tests
  run: pytest 2>&1 | tee pytest-${{ matrix.py }}.log
- if: failure() && steps.tests.outcome == 'failure'
  uses: exlogare/exlogare-ingest-action@v1
  with:
    token: ${{ secrets.EXLOGARE_TOKEN }}
    log_path: pytest-${{ matrix.py }}.log

Versioning

We follow SemVer and publish a rolling vMAJOR tag. @v1 always tracks the latest v1.x.y. Pin to a full tag for reproducible builds.

uses: exlogare/exlogare-ingest-action@v1        # latest v1.*
uses: exlogare/exlogare-ingest-action@v1.0.0    # pinned

See also