Thank you for your interest in contributing! This guide covers everything you need to get started.
- Node.js 22.12 or later
- pnpm 12 (installation)
- Git
- Rust + Cargo — only needed if working on Cargo.toml support in
@releasekit/versionor@releasekit/publish
git clone https://github.com/goosewobbler/releasekit.git
cd releasekit
pnpm install
pnpm build
pnpm testAll packages live under packages/. The monorepo is managed with pnpm workspaces and Turborepo.
| Prefix | Use for |
|---|---|
feature/ |
New features |
fix/ |
Bug fixes |
docs/ |
Documentation only changes |
refactor/ |
Code changes that don't affect behaviour |
chore/ |
Build, CI, dependency updates |
test/ |
Test additions or corrections |
Examples: feature/cargo-workspace-support, fix/version-tag-not-found, docs/publish-readme
# Build one package and its dependencies
pnpm turbo run build --filter=@releasekit/version
# Run tests for one package
pnpm --filter @releasekit/version test
# Watch mode during development
pnpm --filter @releasekit/version devThis project uses Conventional Commits. All commit messages must follow the format:
type(scope): short description
Optional body
Optional footer(s)
Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore,
revert
Scopes: version, notes, publish, release, config, core, ci, deps, root
Examples:
feat(version): add workspace-level tag template support
fix(publish): retry cargo publish on transient network error
docs(version): add monorepo versioning mode examples
chore(deps): update vitest to v4
Breaking changes: append ! after the scope, e.g. feat(core)!: rename VersionOutput fields.
PR titles are validated by the pr-title.yml CI workflow. Since PRs are squash-merged, the PR title becomes the final commit message on main.
- Strict mode is enabled (
strict: trueintsconfig.json) - Prefer
typeimports overimportfor type-only uses - No
any— useunknownand narrow, or define a proper type
- Biome formats and lints the repo, and ESLint adds a few rules for
packages/**/*.ts; the commit hook runs both on staged files - Run
pnpm lintbefore pushing; CI will reject formatting errors
- Tests are written with Vitest
- Run the full suite:
pnpm test - Run a single package:
pnpm --filter @releasekit/version test - Coverage:
pnpm --filter @releasekit/version test:coverage
All new features and bug fixes should include tests. Pull requests that reduce coverage will be asked to add tests before merging.
- Fork the repo and create a branch from
main - Make your changes with appropriate tests
- Run
pnpm lint && pnpm typecheck && pnpm test— all must pass - Open a PR against
mainusing the PR template - A maintainer will review and may request changes
PRs are squash-merged. The PR title becomes the squash commit message, so it must follow the Conventional Commits format.
Releases are fully automated via GitHub Actions:
@releasekit/versioncalculates the next version from commit history and updates package files@releasekit/notesgenerates changelogs@releasekit/publishpublishes to npm (with OIDC provenance) and creates GitHub releases
This project follows the Contributor Covenant Code of Conduct. By participating, you agree to uphold its standards. Please report unacceptable behaviour to goosewobbler@protonmail.com.