Case Studies WP Plugin CI: one-step quality gate for plugins

WP Plugin CI: one-step quality gate for plugins

2 min read

WP Plugin CI: one-step quality gate for plugins
TL;DR Setting up CI for a WordPress plugin means stitching together PHP lint, readme validation, and the Plugin Check, once per plugin. WP Plugin CI packages all of it into a single GitHub Action step, so a new plugin gets a real quality gate in a couple of lines.

Every WordPress plugin I ship needs the same handful of checks in CI: does the PHP parse, does the readme validate, does it pass the Plugin Check. Setting that up by hand for each new plugin got old fast. WP Plugin CI is that setup, packaged once.

The problem

A good plugin CI pipeline is not complicated, but it is fiddly and repetitive. For each plugin you wire up:

  • PHP lint, so a syntax error never reaches a release.
  • readme.txt validation, because a malformed readme breaks how the plugin directory reads your plugin.
  • The WordPress Plugin Check, which flags common compliance and best-practice issues before a reviewer does.

None of that is hard, but doing it correctly for every plugin, and keeping the workflows in step as they evolve, is exactly the kind of repeated work that drifts and rots.

The approach

Package the whole gate into one reusable Action step.

  • One step runs the lint, the readme validation, and the optional Plugin Check.
  • A new plugin adds it in a couple of lines, and gets the same correct checks as every other plugin.
  • When the gate improves, every plugin using it benefits, instead of each carrying its own slightly different copy.

What shipped

WP Plugin CI is a GitHub Action that runs PHP lint, readme.txt validation, and the optional WordPress Plugin Check in a single step. Drop it into a plugin's workflow and it has a real quality gate immediately, catching the mechanical problems in the pull request rather than at WordPress.org review or, worse, in the wild.

What I learned building it

The lesson was the value of collapsing repeated setup into one honest default. The individual checks were never the hard part; the friction was doing them consistently across many plugins. A single Action turns "I should set up CI for this" from a chore you skip into two lines you always add. It pairs naturally with WP Plugin Version Guard, which guards the version numbers the same way.

WP Plugin CI is free on the GitHub Marketplace, with source on my GitHub.

FAQ

What does WP Plugin CI check?

It runs PHP lint to catch syntax errors, validates the readme.txt so the plugin directory can parse it, and can run the official WordPress Plugin Check for common compliance issues. Three checks that together catch most of what would otherwise fail at review.

Why package this as one Action?

Because wiring those checks up by hand for every plugin is repetitive and easy to get subtly wrong. A single Action means every plugin gets the same, correct quality gate in a couple of lines, instead of a bespoke workflow each time.

Does it replace WordPress.org review?

No, it catches the common problems before you submit, so review is less likely to bounce you for something mechanical. It is a fast local gate, not a substitute for the directory's own checks.