Releasing
Releases are published to npm by GitHub Actions from version tags.
Prerequisites
mainbranch is green (CI passes).package.jsonversion matches the tag you are about to create.
Release flow
- Bump the version in
package.json. - Update
CHANGELOG.mdwith a release section for the new version. - Commit the release prep:
bash
git commit -am "release: vX.Y.Z"- Create an annotated semver tag:
bash
git tag -a vX.Y.Z -m "vX.Y.Z"- Push the commit and tag:
bash
git push origin main --follow-tagsWatch
.github/workflows/publish-npm.yml. The workflow:- checks out the repo
- installs dependencies (
npm ci) - builds TypeScript (
npm run build→tsc) - runs tests (
npm test→ Vitest with--experimental-vm-modules) - verifies the tag version matches
package.json - skips publish if the version is already on npm
- publishes to npm with
--provenance --access public
Verify the package is live:
bash
npm view @mobrienv/autoloop@X.Y.ZCI pipeline
Every push to main and every PR triggers .github/workflows/ci.yml:
| Step | Command |
|---|---|
| Build | npm run build (tsc → dist/) |
| Test | npm test (Vitest) |
Node 24 is used in both CI and publish workflows.
Local quality checks
bash
npm run check # biome lint + tsc --noEmit + vitest with coverage
npm run lint # biome check src/ test/
npm test # vitest runnpm publish details
- Package name:
@mobrienv/autoloop - Access: public (scoped)
- Provenance: enabled — npm attestations are generated via OIDC
id-token: writepermission - Trigger: push of a
v*tag, or manualworkflow_dispatch - Idempotent: if the version is already published, the workflow exits cleanly without error
- Trusted publishing: the workflow upgrades npm to latest for OIDC-based provenance support
- GitHub Releases: npm publish is automated; GitHub release notes still need to be created separately if you want a public release page for launch links or social posts
What gets published
The files field in package.json controls the npm tarball contents:
bin/autoloop— Node.js entry point (#!/usr/bin/env node, importsdist/main.js)dist/— compiled TypeScript output (ES2022, Node16 module resolution, with source maps and declarations)plugins/autoloop— Claude plugin metadata and bundled skill assets- explicit
presets/<name>/entries for the supported bundled presets only (avoids shipping stray local preset directories) README.md
Engine requirement
The package declares "engines": { "node": ">=18" }.