This document is for maintainers of the OSpec release repository.
npm publishing is automated by GitHub Actions in .github/workflows/publish-npm.yml.
Normal pushes to main do not publish.
Only a pushed version tag such as 0.3.1 triggers npm publishing.
Version tags should remain bare semantic versions. Do not use a v prefix.
- Bump the package version.
- Verify the packaged release.
- Commit the version change.
- Push the commit to
main. - Create and push the matching version tag.
- Let GitHub Actions publish to npm.
- Upload the matching GitHub Release notes from your local release metadata file.
Cut a local patch release:
npm run release:cut:patchCut and push a patch release:
npm run release:cut:patch -- --pushGeneric form:
npm run release:cut -- patch
npm run release:cut -- minor --push
npm run release:cut -- major --pushWhat release:cut does:
- requires a clean working tree
- bumps the version and syncs release-facing files
- runs
node dist/cli.js --version - runs
npm run release:check - runs
npm run release:smoke - runs
npm run release:notes - commits the release as
Release X.Y.Z - creates the matching bare Git tag
X.Y.Z - optionally pushes
mainand the tag when you pass--push - does not upload GitHub Release notes; that stays a separate local step
release:notes now generates a structured release title and a user-facing release body with New, Improved, Fixed, and Docs sections.
If a local .skills/ospec-release-notes/releases/<version>.json file exists for the release tag, local preview commands use that metadata first.
GitHub Actions no longer creates GitHub Releases for this repository.
Patch release:
npm run release:bump:patchMinor release:
npm run release:bump:minorMajor release:
npm run release:bump:majorThe version bump updates:
package.jsonpackage-lock.jsondist/cli.jsdocs/usage.mddocs/usage.zh-CN.md
Minimum verification:
node dist/cli.js --version
npm run release:checkRecommended verification:
npm run release:smoke
npm run release:notesIf you did not use release:cut -- --push, after the version bump is committed on main, create and push the matching tag:
git tag X.Y.Z
git push origin X.Y.ZExample:
git tag 0.3.1
git push origin 0.3.1The workflow rejects the release if the Git tag does not exactly match package.json.
For higher-quality wording, generate a local release metadata file before tagging in your local .skills/ directory:
.skills/ospec-release-notes/releases/<version>.jsonRecommended local flow:
- ask Codex to generate release notes for the target version using your local release-notes skill
- review or edit
.skills/ospec-release-notes/releases/<version>.json - cut and push the release as usual
- run
npm run release:upload-notes -- --tag <version>to create or update the GitHub Release from the local file
End-to-end AI-assisted maintainers flow:
- ask Codex to prepare the next version bump and draft local release notes
- let Codex run the release bump, checks, commit, tag, and push flow
- let Codex run
npm run release:upload-notes -- --tag <version>after the tag is on the remote
npm run release:notes previews the generated release title and release body locally before you commit or push.
npm run release:upload-notes -- --tag <version> uploads the local file to GitHub using your local GitHub credentials.
Configure npm Trusted Publishing for this package and repository before using the workflow.
This workflow uses GitHub Actions OIDC and does not require NPM_TOKEN.