Reference
GitHub Action
Run Overfull checks in GitHub Actions with amet13/overfull@v3, its inputs and outputs, and how it differs from the template workflow that builds in Docker.
There are two ways to run Overfull in GitHub Actions.
- The Action (
amet13/overfull@v3) checks files your workflow already produced: the log, the PDF, the bibliography. Use it to add Overfull to an existing LaTeX workflow. - The template workflow (
.github/workflows/paper.ymlin each template) builds the PDF in the Overfull Docker image, runs every check including veraPDF, and builds a highlighted-changes PDF for pull requests. The slides template runs only the checks itsoverfull.ymllists.
The Action
name: paper
on: [push, pull_request]
permissions:
contents: read
jobs:
check:
runs-on: ubuntu-26.04
steps:
- uses: actions/checkout@v7
# ... your existing step that builds paper.pdf and paper.log ...
- uses: amet13/overfull@v3
id: overfull
with:
pdf: paper.pdf
log: paper.log
bib: references.bib
aux: paper.aux
profile: paper
mailto: you@example.org
fail-on: error
- run: echo "Overfull status ${{ steps.overfull.outputs.status }}"
if: always()
The file names must match your build’s jobname: paper in the paper
template, thesis in the thesis template, set in .latexmkrc ($jobname) or
in overfull.yml (jobname:). Without a jobname, latexmk names the files after
the main file (main.pdf). You can leave pdf, log and aux out: the Action
then uses <jobname>.pdf and so on from overfull.yml. A file you name
explicitly must exist: if it does not, the step fails with a message naming
the missing file, so a wrong name cannot silently skip a check.
Pinning. @v3 follows every 3.x release. For fully reproducible CI, pin
a release commit by its full 40-character SHA instead,
uses: amet13/overfull@<full commit SHA> # v3.0.0; GitHub rejects short SHAs
in uses:, and Dependabot keeps SHA pins up to date.
The Action writes problems as annotations (at most 50), adds a Markdown report
to the job summary, and fails the step according to fail-on. It does not build
the document or run latexdiff. It runs veraPDF only if verapdf is installed on
the runner; otherwise the accessibility check reports verapdf-not-run as
info. For full PDF/UA validation, use the template workflow (which builds and
checks in the Docker image) or install veraPDF on the runner before this step. An invalid input or overfull.yml fails the step with exit code 2.
Text from your documents (log excerpts, titles, file names, error messages)
could contain GitHub workflow commands. Overfull neutralizes it: stderr is
always escaped, and the commands Overfull itself prints run inside a
stop-commands guard on stderr, so only the annotations it writes on purpose
take effect. The --json and --markdown output of the CLI stays clean in
Actions.
Inputs
| Input | Default | Meaning |
|---|---|---|
working-directory |
. |
Project directory, where overfull.yml, the log and the PDF are. |
checks |
from overfull.yml, else all |
Comma-separated checks to run: build,output,references,accessibility,venue. |
profile |
from overfull.yml |
Venue profile: generic, thesis, paper, arxiv or double-blind. |
pdf |
<jobname>.pdf |
Built PDF, relative to working-directory. Must exist if given. |
log |
<jobname>.log |
TeX log, relative to working-directory. Must exist if given. |
bib |
from overfull.yml or main.tex |
Comma-separated .bib files. |
aux |
<jobname>.aux |
.aux file (cited keys, end label page). Must exist if given. |
fail-on |
error |
error, warning or never. |
offline |
false |
true to skip reference lookups. |
mailto |
references.mailto, else $OVERFULL_MAILTO |
Contact address for CrossRef’s polite pool. |
annotations |
true |
Write problems as file annotations. |
summary |
true |
Write a Markdown report to the job summary. |
Inputs you leave out come from overfull.yml in working-directory, where
present. Checks whose default inputs are missing are reported as skipped;
an input you give explicitly that points to a missing file fails the step.
Outputs
| Output | Meaning |
|---|---|
status |
pass, warn or fail. |
report |
Path to the JSON report file, written to $RUNNER_TEMP. The content has the same schema as overfull check --json. |
The template workflow
Projects made with overfull init include a workflow that runs its job in
ghcr.io/amet13/overfull (TeX Live 2026, pinned) and:
- builds the PDF with
latexmk(the paper template also builds with pdfLaTeX,latexmk -pdf -jobname=paper-arxiv, because arXiv does not run LuaLaTeX); - runs
overfull checkthree times: once to write the Markdown report to the job summary, once to print annotations, and once to set the job status. veraPDF is part of the image, so the accessibility check runs it; - on pull requests, runs
overfull diffagainst the base branch; - uploads the PDFs (including the highlighted-changes PDF) and logs as one
artifact named
pdf.
Use it as is, or copy its steps into your own workflow. Because the build runs
in the same image as make build, a PDF that builds locally builds in CI.
Reference lookups in CI
The references check queries CrossRef, doi.org, arXiv and DBLP from the runner.
Set mailto so CrossRef requests go to its polite pool. To add OpenAlex title
search, pass the key as an environment variable on the step:
- uses: amet13/overfull@v3
env:
OPENALEX_API_KEY: ${{ secrets.OPENALEX_API_KEY }}
For forks or restricted networks, set offline: true and run reference checks
locally.