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
| Name | Required | Default | Description |
|---|---|---|---|
token | yes | — | Exlogare API token (use a secret). |
log_path | no | '' | Path to a log file. Use - for stdin. |
endpoint | no | https://api.exlogare.net | Override for self-hosted Exlogare deployments. |
fail_on_error | no | false | Fail the step when ingest fails. Default keeps the original CI failure visible. |
cli_version | no | latest | exl 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
- Universal ingest API — what the action calls under the hood.
- Exlogare CLI — same
exl ingestcommand for use outside Actions. - GitHub App integration — zero-config server-side alternative.