Block Runner publishes to npm from CI with provenance via Trusted Publishing
(OIDC) — there is no long-lived npm token in this repo. The publish runs on
.github/workflows/release.yml when a GitHub Release is published.
- Create the package owner / org on npmjs.com that will own
block-runner. - Enable 2FA on that npm account (Account → Two-Factor Authentication). Publishing requires it, and it's a visible trust signal.
- Configure Trusted Publishing for the package:
Package settings → Trusted Publisher → add a GitHub Actions publisher with
- Repository:
humanmade/block-runner - Workflow filename:
release.ymlThis lets the workflow authenticate via OIDC with no token.
For the very first publish, the package must exist. Either publish
0.1.0once manually (npm publish --provenance --access publicfrom a 2FA'd local login), then wire trusted publishing for all subsequent releases — or create the package placeholder and configure trusted publishing before the first CI publish. - Repository:
0.9.x is a testing release line for registered-block authoring. Publish it with the
testing npm dist-tag; it must not be described as the 1.0 stability promise. Before creating a
release, run the deterministic release candidate gates from the candidate checkout:
npm run release:check -- --manual-review proof/reviews/0.9-testing/manual-review.json --receipt release/0.9-testing/receipts/<version>.jsonThe 13-fixture registered-block authoring benchmark is optional and does not participate in the deterministic testing-release status. Run it separately only when reviewed candidate plans and a WordPress/browser worker are available:
npm run authoring:prove -- --plans /absolute/path/to/saved-plansThe release checker never creates plans or calls a model. Its receipt records the optional benchmark as pending/unscored unless that separate work is supplied.
Keep the resulting receipt with the release. It records the authoring suite/scorer/prompt/guide,
template, dependency, WordPress, theme, and browser hashes; the workload, model/effort, invalid
counts, and timing method; and the package, skill, and activation matrix. A browser or visual gate
without a receipt is blocked, not passed. The optional authoring benchmark is recorded as
pending/unscored unless its separate plans and worker run is retained. The detailed matrix and
product-preview state live in
release/0.9-testing.
- Bump the version:
npm version patch|minor|major(commits + tags). - Push the tag:
git push --follow-tags. - Draft a GitHub Release for that tag and Publish it.
- The Release workflow runs the complete release candidate check then publishes 0.9 tags with
npm publish --provenance --access public --tag testing. - Confirm afterward:
npm view block-runner@testing versionshows the new 0.9 version, andnpm audit signaturespasses (provenance attestation present).
While on 0.x, any release may include breaking changes — that's expected semver for 0.x.
Do not promote 0.9 to 1.0 merely because the release matrix is green: 1.0 remains contingent
on real-project feedback and resolution of all release failures. Move to 1.0.0 only when the
public API (CLI flags + library exports) is stable enough to promise backward compatibility and
those conditions are satisfied. At that point, consider adopting
changesets to automate version bumps, changelogs, and
the publish PR.