Thanks for vibing with us. ๐ This project releases automatically, so a few small habits keep things smooth.
Requires Node 20+.
npm ci
npm test # unit tests (node --test)
npm run test:local # run the action end-to-end with a mocked toolkit
npm run build # bundle src/ -> dist/index.js with @vercel/ncc
npm run all # test + build (run this before you push)GitHub runs the action from the committed bundle in dist/, not from src/. So whenever you change anything under src/:
npm run build && git add dist/CI will fail the build-is-committed check if dist/ is out of date. (Your PR also gets vibe-checked by the action itself โ dogfooding. ๐ฎ)
We use Conventional Commits. release-please reads them to decide the next version and build the changelog, so the prefix matters.
| Prefix | Use for | Version bump |
|---|---|---|
feat: |
a new feature / input / output | minor (1.2.0 โ 1.3.0) |
fix: |
a bug fix | patch (1.2.0 โ 1.2.1) |
perf: |
a performance improvement | patch |
docs: |
docs only | none |
refactor: |
code change that isn't a feat/fix | none |
test: |
adding or fixing tests | none |
build: / ci: |
build system or CI changes | none |
chore: |
tooling, deps, housekeeping | none |
Breaking changes bump the major version (1.x โ 2.0.0). Mark them either way:
feat!: rename the `mode` input to `engine`
BREAKING CHANGE: workflows using `mode:` must switch to `engine:`.
Examples:
feat: add `min-files` input to relax the focus check
fix: handle PRs with a null body without crashing
docs: clarify AI mode setup in the README
test: cover the docs-only PR scoring path
- You merge Conventional Commits into
main. - release-please opens/updates a release PR with the version bump +
CHANGELOG.md. - A maintainer merges it โ
vX.Y.Zis tagged and a GitHub Release is published. - The
tag-majorjob moves the floatingvX/vX.Ytags to the new commit.
See .github/workflows/release.yml.
- Plain CommonJS, no build step for
src/other than thenccbundle. - Keep
src/vibe.jspure (no I/O) โ prompts, diff summary, comment rendering, rating parsing. That's what makes it easy to test; new logic goes there with a matching test intest/vibe.test.js. src/anthropic.jsis the Claude call (nativefetch);src/index.jswires up GitHub. Both take their dependencies via injection sotest/local-run.jscan mock@actions/core,@actions/github, andfetch.
-
npm run allpasses anddist/is committed - Tests cover the change
- A clear title + description (it'll score better ๐)
- Linked to an issue where relevant
By contributing you agree your work is licensed under the MIT License.