pipefort.com/harden is a free, no-sign-in tool:
paste a GitHub Actions workflow, choose which fixes to apply, and get the
hardened YAML back to copy into your repo.
It runs the same in-memory auto-fixer as the app’s
Open fix PR button — Pipefort scans the pasted content,
then rewrites it deterministically. The workflow you paste is never stored:
the transform happens on the request and the result is returned inline.
How it works
- Paste your
.github/workflows/*.ymlinto the editor (or load the example). - Harden — Pipefort scans the YAML and applies every available fix, then shows the result as a line-by-line diff so you can see every change before taking any of it.
- Tick the fixes you want — the applicable fixes sit in a rail beside the diff. Unticking one re-hardens without it and its lines revert in place; hovering one dims every change that is not its own. Then Copy the result.
hunks it produced (see the
API reference). If a change
somehow belongs to no fix, the rail says so rather than presenting the
checkboxes as if they covered the whole diff.
What it fixes
The hardener applies the auto-fixable subset of Pipefort’s rules, grouped into selectable fixes:
The exact set reflects Pipefort’s auto-fixable rules and grows as more fixers
land. Only the fixes that actually apply to your workflow are shown.
Pinning to a SHA resolves the tag over the public GitHub API. That step
needs network access, so a very large workflow with many unpinned actions can
take a few seconds — or you can uncheck Pin actions to a commit SHA to skip
it. Every other fix is a purely local text transform.
When there is nothing to fix
A workflow that already passes all five controls gets a result, not a shrug: what held, the file itself with a5 / 5 controls mark, and two things
to do next — copy a README badge, or check another file.
It also says what a clean file does not prove. One clean workflow is not a
clean repo: the SHAs pinned in it go stale, and the next person to edit it will
not know these rules exist. That is the part a scanner in CI does and a paste
box cannot.
The README badge
Copy a README badge gives you the markdown forGET /api/badge/{owner}/{repo}.svg — the embeddable status badge, which is
also documented as part of the public scan surface.
The badge reports the latest public scan of a whole repository, which is a
different claim from the one the hardener just made about one pasted file. So
the hardener copies the snippet with
OWNER/REPO left for you to fill in, and
says so — a badge asserting “secured” on the strength of a single clean file
would be wrong in the most damaging way: true-looking, in a README, for years.
On a shared public-scan page, where the repository is known, the snippet is
filled in for you.