PHPackages                             johnbillion/plugin-infrastructure - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [DevOps &amp; Deployment](/categories/devops)
4. /
5. johnbillion/plugin-infrastructure

ActiveLibrary[DevOps &amp; Deployment](/categories/devops)

johnbillion/plugin-infrastructure
=================================

Reusable infrastructure relating to testing, building, and deploying my WordPress plugins

2.9.5(3w ago)2982.7k↑144.2%3[4 issues](https://github.com/johnbillion/plugin-infrastructure/issues)5MITShellPHP &gt;=7.4CI passing

Since Jun 24Pushed 3w ago4 watchersCompare

[ Source](https://github.com/johnbillion/plugin-infrastructure)[ Packagist](https://packagist.org/packages/johnbillion/plugin-infrastructure)[ GitHub Sponsors](https://github.com/sponsors/johnbillion)[ RSS](/packages/johnbillion-plugin-infrastructure/feed)WikiDiscussions trunk Synced 2d ago

READMEChangelog (10)Dependencies (24)Versions (71)Used By (5)

Plugin Infrastructure
=====================

[](#plugin-infrastructure)

Reusable infrastructure relating to testing, building, linting, deploying, and verifying my WordPress plugins (see the "Used by" section below).

Provided without support, warranty, guarantee, backwards compatibility, fitness for purpose, resilience, safety, sanity, beauty, or support for any plugin that isn't one of mine.

Used by
-------

[](#used-by)

- [Extended CPTs](https://github.com/johnbillion/extended-cpts)
- [Query Monitor](https://github.com/johnbillion/query-monitor)
- [User Switching](https://github.com/johnbillion/user-switching)
- [WP Crontrol](https://github.com/johnbillion/wp-crontrol)

Features
--------

[](#features)

- Containerised test environment
- Support for an npm build step
- Acceptance testing
- Integration testing
- Coding standards testing
- Static analysis
- Workflow file linting
- Deployment to WordPress.org
- GitHub milestone management
- GitHub build provenance attestation
- SLSA v1.0 Build level 3 facilitation
- Ongoing supply chain assurance

Plugins that use this library all use a similar setup in their workflows:

Acceptance testing
------------------

[](#acceptance-testing)

- Push to a main branch or pull request, `acceptance-tests.yml` fires
    - Constructs a matrix of supported PHP and WordPress versions
    - Uses `reusable-acceptance-tests.yml`
        - Installs PHP and WordPress
        - Runs the build
        - Runs acceptance testing with Playwright

Integration testing
-------------------

[](#integration-testing)

- Push to a main branch or pull request, `integration-tests.yml` fires
    - Constructs a matrix of supported PHP and WordPress versions
    - Uses `reusable-integration-tests.yml`
        - Installs PHP and WordPress
        - Runs the build
        - Runs integration testing with PHPUnit, once for:
            - Single site
            - Multisite

Coding standards testing
------------------------

[](#coding-standards-testing)

- Push to a main branch or pull request, `coding-standards.yml` fires
    - Uses `reusable-coding-standards.yml`
        - Installs PHP
        - Checks coding standards with PHPCS

Static analysis
---------------

[](#static-analysis)

- Push to a main branch or pull request, `static-analysis.yml` fires
    - Constructs a matrix of supported PHP versions
    - Uses `reusable-static-analysis.yml`
        - Installs PHP
        - Runs static analysis with PHPStan

Workflow file linting
---------------------

[](#workflow-file-linting)

- Push to a main branch or pull request, `lint-workflows.yml` fires
    - Uses `reusable-workflow-lint.yml`
        - Lints all GitHub Actions workflow files for correctness and security using ActionLint and Zizmor
        - Uploads results to GitHub Code Scanning

Deployment
----------

[](#deployment)

### WordPress.org

[](#wordpressorg)

- Push to the `release` branch, `build.yml` fires
    - Uses `reusable-build.yml`
        - Runs the build
        - Reads version from `package.json`
        - Commits built files
        - Pushes to `release-$VERSION`
        - Tags the new version and pushes
        - Creates a draft release
- Publish the release, `deploy-tag.yml` fires
    - Uses `reusable-deploy-tag.yml`
        - Creates a changelog entry from the release notes
        - Uses `10up/action-wordpress-plugin-deploy`
            - Deploys the new version to WordPress.org
            - Generates a zip file
        - Uses `johnbillion/action-wordpress-plugin-attestation`
            - Fetches the zip from WordPress.org
            - Generates a build provenance attestation if the zip contents matches the build

### Packagist

[](#packagist)

- Happens automatically with each release via the auto-update mechanism on Packagist.org
- Always identical to the version deployed to WordPress.org

### GitHub

[](#github)

- Automatically closes the completed milestone for each release
- Automatically creates the next major, minor, and patch release milestones after each release

Supply chain assurance
----------------------

[](#supply-chain-assurance)

- Hourly scheduled workflow runs in `verify-distribution.yml`
    - Uses `reusable-verify-distribution.yml`
        - Verifies the provenance of the plugin on WordPress.org
        - Verifies the `api.wordpress.org` response for the plugin info

Licence
-------

[](#licence)

MIT

###  Health Score

55

—

FairBetter than 97% of packages

Maintenance92

Actively maintained with recent releases

Popularity42

Moderate usage in the ecosystem

Community22

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 91% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~9 days

Total

37

Last Release

26d ago

Major Versions

1.2.1 → 2.0.0-beta.22025-09-12

1.2.2 → 2.5.22026-01-03

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/208434?v=4)[John Blackbourn](/maintainers/johnbillion)[@johnbillion](https://github.com/johnbillion)

---

Top Contributors

[![johnbillion](https://avatars.githubusercontent.com/u/208434?v=4)](https://github.com/johnbillion "johnbillion (557 commits)")[![szepeviktor](https://avatars.githubusercontent.com/u/952007?v=4)](https://github.com/szepeviktor "szepeviktor (29 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (26 commits)")

### Embed Badge

![Health badge](/badges/johnbillion-plugin-infrastructure/health.svg)

```
[![Health](https://phpackages.com/badges/johnbillion-plugin-infrastructure/health.svg)](https://phpackages.com/packages/johnbillion-plugin-infrastructure)
```

###  Alternatives

[roots/wordpress

WordPress is open source software you can use to create a beautiful website, blog, or app.

20418.0M305](/packages/roots-wordpress)[in2code/in2publish_core

Content publishing extension to connect stage and production server

40143.4k](/packages/in2code-in2publish-core)[tiamo/phpas2

PHPAS2 is a php-based implementation of the EDIINT AS2 standard

4778.9k](/packages/tiamo-phpas2)[wapmorgan/php-rpm-packager

RPM packager for PHP applications.

106.6k](/packages/wapmorgan-php-rpm-packager)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
