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.8.0(2mo ago)2968.6k↑57.7%3[4 issues](https://github.com/johnbillion/plugin-infrastructure/issues)5MITShellPHP &gt;=7.4CI passing

Since Jun 24Pushed 1mo 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 1mo ago

READMEChangelog (10)Dependencies (8)Versions (57)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
            - Octoscan
            - Zizmor
            - Poutine
        - 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

51

—

FairBetter than 96% of packages

Maintenance84

Actively maintained with recent releases

Popularity41

Moderate usage in the ecosystem

Community21

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90.6% 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 ~8 days

Total

31

Last Release

81d 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 (530 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

[deployer/deployer

Deployment Tool

11.1k25.4M207](/packages/deployer-deployer)[appwrite/server-ce

End to end backend server for frontend and mobile apps.

55.3k84.2k](/packages/appwrite-server-ce)[pragmarx/health

Laravel Server &amp; App Health Monitor and Notifier

2.0k1.0M2](/packages/pragmarx-health)[felixfbecker/language-server-protocol

PHP classes for the Language Server Protocol

22476.7M6](/packages/felixfbecker-language-server-protocol)[heroku/heroku-buildpack-php

Toolkit for starting a PHP application locally, with or without foreman, using the same config for PHP and Apache2/Nginx as on Heroku

8161.3M10](/packages/heroku-heroku-buildpack-php)[tiamo/phpas2

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

4674.7k](/packages/tiamo-phpas2)

PHPackages © 2026

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