Repository navigation
Runs the PLC Lint analyzer on your PLCopenXML exports (CODESYS, TwinCAT) as part of a
GitHub workflow. The analysis happens on the runner: no network calls, nothing uploaded,
standard library only.
- uses: actions/checkout@v4
- uses: caspershes/plc-lint@v1
with:
path: exports/ # files, globs or a directory
fail-on: high # break the build on high-severity findingsResults appear on the job summary as a table — score, POU count and findings per export.
High-severity findings become annotations, and fail-on decides whether the step fails.
Inputs: path, fail-on, profile (heating, plcopen-naming), lang (en/ru),
html, summary, annotations, python-version.
Outputs: score, high, medium, low, files, json — so you can gate on the
score instead of severity:
- id: lint
uses: caspershes/plc-lint@v1
with: { path: exports/, fail-on: none }
- run: test "${{ steps.lint.outputs.score }}" -ge 7034 rules: uncalled timers, divide-by-zero, setpoint truncation, unreachable branches,
disabled watchdogs, copy-paste errors between control loops, plus hygiene checks.
Full reference in RULES.md, a known-bad example project in examples/.
The engine is MIT licensed and also runs as a standalone tool — python cli.py project.xml,
or a single .exe on Windows.