Stop spelunking CI logs. Add one step to your failure path and get a deterministic, evidence-backed diagnosis from faultline.
- name: Diagnose failure
if: failure()
uses: faultline-cli/faultline-action@0.1.0
with:
log: build.logThat's it. Faultline installs itself, analyzes the log, writes a diagnosis to the job summary, and uploads the JSON artifacts.
| Input | Required | Default | Description |
|---|---|---|---|
log |
yes | — | Path to the failing build log file |
version |
no | latest | Faultline version to install (e.g. v0.4.3) |
format |
no | markdown |
Output format for the human-readable summary: text or markdown |
annotations |
no | false |
Emit GitHub-native CI annotations alongside the summary |
json |
no | true |
Produce a machine-readable JSON analysis artifact |
bayes |
no | false |
Add Bayesian ranking hints to the JSON analysis output |
workflow |
no | true |
Produce a deterministic workflow.v1 handoff artifact |
workflow-mode |
no | agent |
Mode passed to faultline workflow: agent or human |
fail-on-silent |
no | false |
Exit non-zero if silent failure detectors fire |
delta |
no | false |
Enable experimental delta analysis against the last successful run on the same branch |
github-token |
no | '' |
GitHub token for the delta provider (required when delta is true) |
upload-artifacts |
no | true |
Upload JSON and markdown outputs as workflow artifacts |
artifact-retention-days |
no | 30 |
Number of days to retain uploaded artifacts |
job-summary |
no | true |
Append the markdown analysis to the GitHub Actions job summary |
| Output | Description |
|---|---|
summary-markdown |
Path to the markdown analysis summary file |
analysis-json |
Path to the JSON analysis artifact (when json is true) |
workflow-json |
Path to the workflow.v1 JSON artifact (when workflow is true) |
failure-id |
The matched failure ID from the top diagnosis (empty when no match) |
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: make build 2>&1 | tee build.log
- name: Diagnose failure
if: failure()
uses: faultline-cli/faultline-action@0.1.0
with:
log: build.log- name: Diagnose failure
if: failure()
uses: faultline-cli/faultline-action@0.1.0
with:
log: build.log
version: v0.4.3- name: Diagnose failure
if: failure()
uses: faultline-cli/faultline-action@0.1.0
with:
log: build.log
annotations: 'true'- name: Diagnose failure
if: failure()
id: diagnosis
uses: faultline-cli/faultline-action@0.1.0
with:
log: build.log
- name: Open remediation issue
if: failure() && steps.diagnosis.outputs.failure-id != ''
run: |
echo "Failure: ${{ steps.diagnosis.outputs.failure-id }}"
# hand off to your automation here- name: Diagnose failure
if: failure()
uses: faultline-cli/faultline-action@0.1.0
with:
log: build.log
json: 'true'
bayes: 'true'
delta: 'true'
github-token: ${{ secrets.GITHUB_TOKEN }}- name: Check for silent failures
uses: faultline-cli/faultline-action@0.1.0
with:
log: build.log
fail-on-silent: 'true'- name: Diagnose failure
if: failure()
uses: faultline-cli/faultline-action@0.1.0
with:
log: build.log
workflow: 'false'
upload-artifacts: 'false'When upload-artifacts is true (the default), the action uploads a faultline-analysis artifact containing:
faultline-summary.md— the human-readable markdown diagnosisfaultline-analysis.json— the structured analysis (whenjsonistrue)faultline-workflow.json— theworkflow.v1remediation handoff (whenworkflowistrue)
The JSON schemas are stable. See workflow.v1 contract for details.
- Install — downloads the faultline binary from the faultline releases using the official install script
- Analyze — runs
faultline analyzeto match the log against 187 bundled playbooks and produce evidence-backed diagnosis - Workflow — optionally runs
faultline workflowto produce a typedworkflow.v1handoff artifact for downstream automation - Summary — writes the markdown diagnosis to the GitHub Actions job summary
- Upload — optionally uploads the JSON and markdown outputs as workflow artifacts
No AI, no guesswork. The same log in always produces the same diagnosis out.
MIT