lechnerio-git-hooks
v1.3.2
Published
Shared git hooks for lechnerio projects
Readme
lechnerio-git-hooks
Shared git hooks for all lechnerio projects. Install once, get commit linting, lint-staged, version bumping, and changelog generation.
Install
pnpm add -D lechnerio-git-hooks
pnpm approve-builds
pnpm installFor pnpm workspaces, add the -w flag:
pnpm add -wD lechnerio-git-hooksWhat it does
On install, the package automatically:
- Copies
pre-commit,commit-msg, andpost-commithooks into.husky/ - Copies
generate-changelog.mjsintoscripts/ - Copies
commitlint.config.jsand.lintstagedrc.jsinto the project root - Adds a
lint-stagedscript topackage.json - Configures git to use
.husky/as the hooks path
Hooks
| Hook | What it does |
| ------------- | -------------------------------------------------------------------------------------------- |
| pre-commit | Runs lint-staged (eslint --fix + prettier) |
| commit-msg | Enforces conventional commits via commitlint |
| post-commit | Interactive version bump (subtle/patch/minor/major), changelog generation with optional skip flag, push/merge prompt |
Changelog versioning model
Commits belong to the version that was current while they were made. A Minor or Major bump closes the running version — all work since the previous bump stays under it, including the commit that triggered the bump — and opens the new version with a Version Upgrade to <version> marker entry. Future commits then accumulate under the new version.
AI release summaries
On Minor and Major version bumps, the post-commit hook sends the non-skipped commit messages of the version being closed to the Gemini API and stores the result as summary_en and summary_ger fields (English and German) on that version entry in data/changelog.json. This requires GITHOOKS_GEMINI_API_KEY in the project's .env file or environment; without it the summary step is skipped silently. Run node scripts/generate-changelog.mjs --summarize-version <version> to generate the summary for any version by hand (accepts the version with or without the v prefix, subtle suffixes are normalized). Summaries are only generated when summary_en or summary_ger is missing on the entry — to regenerate one, delete both fields from data/changelog.json first.
Peer dependencies (auto-installed)
@commitlint/cli@commitlint/config-conventionallint-staged
Project requirements
These are not included and must be installed by the project:
eslintprettier
Environment variables
For non-interactive usage (CI, scripts):
| Variable | Values |
| -------------- | --------------------------------------------------------------- |
| VERSION_BUMP | 1 = subtle, 2 = patch, 3 = minor, 4 = major, 0 = skip |
| POST_ACTION | 1 = push, 2 = merge to main, 0 = skip |
| CHANGELOG_ADD | 1 = keep commit in changelog, 0 = mark it skipped (asked when version bump is skipped) |
| GITHOOKS_GEMINI_API_KEY | Gemini API key for AI release summaries; unset = feature disabled |
| GITHOOKS_GEMINI_MODEL | Optional Gemini model for summaries, defaults to gemini-flash-latest |
Update
pnpm update lechnerio-git-hooksRemoving old setup
If migrating from a manual setup, remove these before installing:
Remove-Item .husky\post-commit
Remove-Item .husky\pre-commit
Remove-Item .husky\commit-msg
Remove-Item commitlint.config.js
Remove-Item .lintstagedrc.js
Remove-Item scripts\generate-changelog.mjsAlso remove these from devDependencies if present:
pnpm remove @commitlint/cli @commitlint/config-conventional husky lint-staged