7.5 KiB
Contribution conventions
Branch conventions
<type>/<subject>[/<subsubject>, ...]
<type>
This should be one of:
featureFor work on a feature, look atfeatcommit type description for further info.fixFor fixing a bug in a feature, look atfixcommit type descriptionrefactorLook atrefactorcommit type descriptionhotfixTemporary quick fixes of critical errors to masterreleasePre-release finalization changes
Examples:
feature/note_preview- working on featurenote_previewinsrc/feature/note_previewdirectoryfeature/note_graph/note_graph_ui- working of submodulenote_graph_uiof modulenote_graphinsrc/feature/note_graphdirectoryfix/configuration- fixing how configuration works (it was doing unwraps/expects, rewrite it to returningResults, which is breaking API change and technically crash fix so not refactor, and not a feature because nothing new was added)- This is now the branch that addedfeature/graph-traitsrc/lib/graph.rswas named. At first i was thinking that it is hard to fit such a fundamental thing to the feature model, but it's not that fundamental.
It's primarily a part ofnote_graphfeature, and so ones like this should be named feature-first, not library-first.
Most of the time if you adding something you add it for some feature. If most of your work in this branch is a library, for example a force-directed placement implementation or a environment variable substitution parser, it is still done first for some feature, specificallynote_graphand accordinglyconfigurationin that case.
<subject>
This should be one of, in priority order:
feature/module name that you're currently working on- meaningful short description or a naming for your scope, separated with dashes (
-), one or a couple of words
<subsubject>
This should be one of, in priority order:
feature/submodule, likenote_graph/note_graph_ui- meaningful short description or a naming for your scope, separated with dashes (
-), one or a couple of words
Commit conventions
Pull requests
For pull request merges, use the default message, which is Merge pull request #N from <branch-name>
Merges
Don't use merges for your own local things. Use rebases.
Merge branch '<branch name>'
Follows default git merge message
TODO: maybe rebase all the history to be the above with some changes to it (it has to have the pull request number in it)
Default
This convention is based on Conventional Commits, but uses a local syntax for multiple types, scopes, and change markers.
The format is:
<message> ::= <clause>[; <clause>...]
<clause> ::= <type>[, <type>...][?][!]: [<scope>: ...] <subject>
[<body>]
[<footers>]
Including the empty lines
!
- This means that this commit introduces a breaking change.
?
- This means that the change has not passed testing or validation yet.
- Put it after all types and before
!and:. fix?: ...is an unverified fix;feat?!: ...is an unverified breaking feature.
<type>
Specify one or more types to reflect the nature of the changes.
- Allowed types:
featCommits, that adds a new feature or changes how the old feature works. Should only be user-presented features, changes to logic that does not affect what user of the app sees isrefactor.fixCommits, that fix a bugrefactorCommits, that rewrite/restructure your code, however does not change any behaviourperfCommits are specialrefactorcommits, that improve performance
styleCommits, that do not affect the meaning (white-space, formatting, missing semi-colons, etc)testCommits, that add missing tests or correcting existing testsdocsCommits, that affect documentation onlybuildCommits, that affect build components like build tool, dependencies, project version, ...ciCommits, that affect the CI pipelinechoreMiscellaneous commits e.g. modifying.gitignorerevertCommits that revert other commits
- Multiple types:
- When one change has multiple types, list them before the first
:, separated by commas:feat, fix: .... - Do not wrap types in
{}.
- When one change has multiple types, list them before the first
, and ;
- Before the first
:, a comma separates types that apply to the same change:build, fix: deployment: ~Dockerfile. - In a subject, a comma separates sibling change items that share the same
types and scope:
feat: web: +navigation, +search. - A semicolon separates independent change clauses. Each clause repeats its
own types, modifiers, and scope:
fix: auth: ~token renewal; feat: admin: +session list.
<scope>
Scopes are optional context segments between the type and subject. Separate
them with :, without parentheses. Use one or more segments, from broad to
specific.
A scope should be one of, in priority order:
feature/module name that you're currently working on- meaningful short description or a naming for your scope, separated with dashes (
-), one or a couple of words
Examples:
feat: authentication: +OAuth2 supportfeat: `note_graph`: `note_graph_ui`: +zoom controlsfix: api: user-management: ~permission check
Use backticks for exact code, package, service, command, or file identifiers when that improves clarity:
feat: `proxydoe-bot`: control-panel: +pagination
Change markers
Change markers concisely describe the operation performed on the affected item:
+itemThe item was added, created, or enabled.~itemThe item was changed, updated, or reworked.-itemThe item was removed, deleted, or disabled.
Markers are optional. Put a marker directly before the affected item, without a space. The commit type explains the nature of the change; the marker explains the operation.
<subject>
- Without a change marker, use the imperative, present tense: "change" not "changed", "add" not "added"
- After a change marker, use a concise name or noun phrase:
+runner,~authentication flow,-legacy API - Don't capitalize the first letter
- No dot (.) at the end
<body>
- Use the imperative, present tense: "change" not "changed", "add" not "added"
- This is the place to mention issue identifiers and their relations
<footers>
List of format:
<subject>: <description>
BREAKING CHANGE: <description>Same as the!, but with description. Can't be included without the!.- Mention closed issues
- Example:
Closes: #1
- Example:
- Stuff like skip CI for tools like Github Actions
Examples
Single Type Commit
feat: configuration: +environment-variable support
Allow users to define configuration using environment variables.
Closes: #42
Multiple Types Commit
build, fix: deployment: ~Dockerfile, ~dependencies
- Fix a typo in the Dockerfile that causes build failures.
- Update dependencies to compatible versions.
Closes: #101
Breaking Unverified Commit
refactor?!: api: ~authentication method to OAuth2
Switch from basic authentication to OAuth2. This change has not passed the
integration test suite yet.
BREAKING CHANGE: The authentication method has changed from basic auth to OAuth2. Clients must update their authentication mechanism.
Closes: #202
Multiple Change Clauses
test: note_graph: note_graph_ui: +zoom tests; docs: note_graph: ~zoom documentation
- Add unit tests for note graph UI zoom controls.
- Update the README with zoom-control instructions.
Related: #303