Contentrain uses Changesets as the single source of truth for package versioning, changelogs, tags, and npm publishing.
For contributors:
pnpm changesetThat creates a .changeset/*.md file describing:
- which package changed
- whether the bump is
patch,minor, ormajor - the changelog summary
For maintainers:
pnpm version-packages
pnpm releaseIn normal operation you do not run those commands locally. GitHub Actions handles them automatically.
The Release workflow runs on pushes to main and uses changesets/action.
It does one of two things:
- If there are unreleased changesets, it opens or updates a release PR.
- If the release PR has been merged, it publishes changed packages to npm and creates package tags and GitHub releases.
This is the expected day-to-day flow:
- Contributors merge PRs with changesets.
- GitHub updates the release PR.
- A maintainer reviews and merges that PR.
- GitHub publishes packages and writes changelogs automatically.
Changesets updates CHANGELOG.md files automatically for the packages included in a release.
Changelog entries come from the text written in .changeset/*.md.
Tags are package-specific, not monorepo-global.
Examples:
@contentrain/mcp@1.0.1@contentrain/query@5.1.0contentrain@0.2.0
This is the standard Changesets model for independently versioned monorepos.
| Command | Purpose |
|---|---|
pnpm changeset |
Create a release note for changed packages |
pnpm version-packages |
Apply pending changesets and update changelogs |
pnpm release:status |
Inspect pending changesets and release state |
pnpm release:check |
Verify publish metadata and package readiness |
pnpm release:pack |
Build tarballs for all public packages |
pnpm release |
Build and publish changed packages with Changesets |
If GitHub Actions is unavailable and you need to release manually:
pnpm installpnpm lintpnpm typecheckpnpm testpnpm release:checkpnpm version-packages- review the generated package version changes and
CHANGELOG.mdfiles pnpm release
The GitHub Release workflow expects:
NPM_TOKEN
GITHUB_TOKEN is provided automatically by GitHub Actions.
- Do not edit package versions manually.
- Do not maintain a custom release manifest.
- Do not create manual monorepo-wide release tags.
- Internal workspaces such as
docsandpackages/cli/src/serve-uimust remainprivate: true.
@contentrain/mcp ships the remote providers as optional peers so
consumers only install what they use:
@octokit/rest— required when usingGitHubProvider.@gitbeaker/rest— required when usingGitLabProvider.
Stdio + LocalProvider flows (the default) do not need either. When
the MCP server is invoked with a provider whose peer is missing,
the factory throws a helpful error pointing at the install command.
Release audits do not need to bundle these peers — npm's
peerDependenciesMeta.optional: true handles it.