4.9 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	COMMITS
When committing / reviewing commits
Follow/encourage the commit conventions (see below). Here they are in
brief: - Commit messages must begin with a prefix, one or more
colon-terminated words indicating the topic. - Commits causing
user-visible changes must additionally begin with feat:,
imp: or fix: (feature, improvement, or
bugfix). These will be mentioned in release notes. - Add a leading
; to commits where a CI build is not needed, to reduce
waste. - Add a ! to highlight commits causing
breaking/incompatible changes. - Mention any relevant issue numbers,
usually parenthesised at the end. (#NNNN) - Try to write
commit messages as changelog-ready documentation that will tell their
intended audience (which might be users, installers, packagers, and/or
developers) what they need to know.
When committing / pushing / merging:
- run bin/commitlintbefore push, to check recent commits
- or, run it automatically before each commit
(make installcommithookto configure your local repo)
- it also runs in CI on github for pull requests, etc.
Commit conventions
Since the 1.23 release cycle, we try to follow certain conventions for commit messages, to
- encourage considered, focussed, well documented changes
- reduce the cost of code review, maintaining changelogs and release notes, and releasing
- increase our throughput (rate of shipping useful, reliable, documented, maintainable features)
hledger commit conventions:
- Commit messages in hledger’s main repo follow this pattern: - type: [optionaltopic:] summary [Optional description, more details here when needed.]
- Every top-level commit must have a type prefix, ending with a colon and optional space. This indicates the change’s intended audience and the general type of change. Here are the current types: - Changes visible to end users (including users of hledger-web’s HTTP API). These will appear in release notes and changelogs: - feat- a new feature
- imp- an improvement to existing features
- fix- a bugfix
 
- Changes affecting packagers, builders, and library users. These will appear in changelogs: - cha- a generic package/lib change. Or, one of these specific types:
- pkg- something to do with the haskell packages, dependencies etc.
- lib- a change in the package’s library API
- …some other type that seems useful…
 
- Changes interesting only to hledger developers/documentors/debuggers. These will usually appear only in the commit history, not in changelogs or release notes: - dev- a generic developer change. Or, one of these specific types:
- ref- refactoring
- cln- cleanup
- doc- documentation-related
- test- tests-related
- ci- continuous integration-related
- …some other type that seems useful…
 
 - There’s a bit of ambiguity/overlap between the cha/dev types and topics. Eg the - doctype indicates a boring doc change, but there’s also a- doctopic which might be used for interesting doc changes, as in- feat:doc:.... TBD.
- If this is a “breaking change”, introducing a compatibility or migration issue, the type is followed by - !, and the issue and advice to users are included in the description. This will most often be seen with the end-user types, eg:- feat!:,- imp!:,- fix!:.
- If the first character of the commit message is - ;, this commit (more precisely, the push ending with this commit) will be excluded from the usual CI checks. Our CI tends to do a lot of building, so you can use this to save energy and carbon emissions when pushing harmless changes.
- A topic prefix, and maybe even a subtopic prefix, can be added before the summary if useful. These are standard prefixes similar to what I have been using for some time, see topics. They help with readability in the commit history, changelogs and release notes. 
- Any relevant issues should be mentioned, often parenthesised at the end of the summary: - (#NNNN).
- The summary, and description if any, communicate this change’s purpose as clearly as possible to its intended audience: end users, builders/packagers/library users, or developers/debuggers. The text (or its first sentence/first paragraphs) should be ready for use in changelogs/release notes when applicable. 
Crafting good commit messages (and thereby good commits, good change documentation, easier code review, faster merging) is an art and a habit. Just use your best judgement and we’ll check and polish as part of CI and code review. Examples will be added here in due course.
Related: