chore: add Conventional Commits message normalizer#180
Open
iamlasse wants to merge 2 commits into
Open
Conversation
Add internal/commits with pure Normalize/validate functions enforcing the project's Conventional Commits rules (known type set, lowercase type, lowercase subject, 72-char subject limit, whitespace trimming, and 72-column body wrapping). Wire it into the CLI as 'nightshift commit normalize' (positional, --file, and stdin sources; --check to validate only), ship a commit-msg git hook under scripts/, and document the format and installation in docs/commit-messages.md. Nightshift-Task: commit-normalize Nightshift-Ref: https://github.com/marcus/nightshift
Extend the Makefile `install-hooks` target to also symlink `scripts/commit-msg.sh` into `.git/hooks/commit-msg` (and chmod +x it), alongside the existing pre-commit hook, and fix the target's echo string. Document the Conventional Commits requirement, allowed types, and the `make install-hooks` workflow in the README Development section and the AGENTS.md Conventions section so contributors learn the standardized format. Nightshift-Task: commit-normalize Nightshift-Ref: https://github.com/marcus/nightshift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Standardizes nightshift's commit messages by enforcing
Conventional Commits across the project.
What's included
internal/commitsnormalizer package — a pure, well-testedNormalizefunction that validates the allowed type, enforces a lowercase subject,
caps subject length (72), strips trailing periods, and wraps the body at
72 columns. Normalization is idempotent (
Normalize(Normalize(m)) == Normalize(m)).Messages that require a human decision (missing/unknown type, missing subject,
capitalized or overlong subject) are rejected with typed errors.
nightshift commit normalize [MESSAGE]command (cmd/nightshift/commands/commit.go)— reads a message from a positional arg,
--file, or stdin, and rewrites itto canonical form.
--checkvalidates only; exit code is non-zero when amessage cannot be normalized.
scripts/commit-msg.shhook — rewrites the commit message file intocanonical form before the commit is created and rejects non-conforming
messages with a non-zero exit.
make install-hooks— extended to also symlinkscripts/commit-msg.shinto
.git/hooks/commit-msg(andchmod +xit) alongside the existingpre-commit hook.
docs/commit-messages.md(format reference), plus READMEDevelopment and AGENTS.md Conventions sections documenting the requirement,
allowed types, and
make install-hooks.Verification
go build ./...✓go vet ./...✓go test ./internal/commits/...✓go test ./...✓ (all packages)Normalizeapplied twice yields identical output).commit normalize --checkexits 0 on conforming messages and non-zero onnon-conforming ones.
conforming message normalized in place (exit 0).
Nightshift-Task: commit-normalize
Nightshift-Ref: https://github.com/marcus/nightshift
Automated by nightshift