Skip to content

Commit a832259

Browse files
committed
docs: announce and document guidelines for using Conventional Commits
1 parent 880d38e commit a832259

File tree

2 files changed

+102
-49
lines changed

2 files changed

+102
-49
lines changed

CONTRIBUTING.md

Lines changed: 74 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
- [Output processing](#output-processing)
1919
- [Coding standards](#coding-standards)
2020
- [Commit message guidelines](#commit-message-guidelines)
21+
- [What does this mean for contributors?](#what-does-this-mean-for-contributors)
22+
- [What to know about Conventional Commits](#what-to-know-about-conventional-commits)
2123
- [Unit tests](#unit-tests)
2224
- [Continuous integration](#continuous-integration)
2325
- [Documentation](#documentation)
@@ -63,7 +65,8 @@ thoroughly as possible to describe the issue or feature request.
6365
There is a three-step process for submitting code or documentation changes:
6466

6567
1. [Commit your changes to a fork of
66-
`ruby-git`](#commit-your-changes-to-a-fork-of-ruby-git)
68+
`ruby-git`](#commit-your-changes-to-a-fork-of-ruby-git) using [Conventional
69+
Commits](#commit-message-guidelines)
6770
2. [Create a pull request](#create-a-pull-request)
6871
3. [Get your pull request reviewed](#get-your-pull-request-reviewed)
6972

@@ -155,23 +158,81 @@ requirements:
155158

156159
### Commit message guidelines
157160

158-
All commit messages must follow the [Conventional Commits
159-
standard](https://www.conventionalcommits.org/en/v1.0.0/). This helps us maintain a
160-
clear and structured commit history, automate versioning, and generate changelogs
161-
effectively.
161+
To enhance our development workflow, enable automated changelog generation, and pave
162+
the way for Continuous Delivery, the `ruby-git` project has adopted the [Conventional
163+
Commits standard](https://www.conventionalcommits.org/en/v1.0.0/) for all commit
164+
messages.
162165

163-
To ensure compliance, this project includes:
166+
This structured approach to commit messages allows us to:
164167

165-
- A git commit-msg hook that validates your commit messages before they are accepted.
168+
- **Automate versioning and releases:** Tools can now automatically determine the
169+
semantic version bump (patch, minor, major) based on the types of commits merged.
170+
- **Generate accurate changelogs:** We can automatically create and update a
171+
`CHANGELOG.md` file, providing a clear history of changes for users and
172+
contributors.
173+
- **Improve commit history readability:** A standardized format makes it easier for
174+
everyone to understand the nature of changes at a glance.
166175

167-
To activate the hook, you must have node installed and run `bin/setup` or
168-
`npm install`.
176+
#### What does this mean for contributors?
169177

170-
- A GitHub Actions workflow that will enforce the Conventional Commit standard as
171-
part of the continuous integration pipeline.
178+
Going forward, all commits to this repository **MUST** adhere to the [Conventional
179+
Commits standard](https://www.conventionalcommits.org/en/v1.0.0/). Commits not
180+
adhering to this standard will cause the CI build to fail. PRs will not be merged if
181+
they include non-conventional commits.
172182

173-
Any commit message that does not conform to the Conventional Commits standard will
174-
cause the workflow to fail and not allow the PR to be merged.
183+
A git pre-commit hook may be installed to validate your conventional commit messages
184+
before pushing them to GitHub by running `bin/setup` in the project root.
185+
186+
#### What to know about Conventional Commits
187+
188+
The simplist conventional commit is in the form `type: description` where `type`
189+
indicates the type of change and `description` is your usual commit message (with
190+
some limitations).
191+
192+
- Types include: `feat`, `fix`, `docs`, `test`, `refactor`, and `chore`. See the full
193+
list of types supported in [.commitlintrc.yml](.commitlintrc.yml).
194+
- The description must (1) not start with an upper case letter, (2) be no more than
195+
100 characters, and (3) not end with punctuation.
196+
197+
Examples of valid commits:
198+
199+
- `feat: add the --merges option to Git::Lib.log`
200+
- `fix: exception thrown by Git::Lib.log when repo has no commits`
201+
- `docs: add conventional commit announcement to README.md`
202+
203+
Commits that include breaking changes must include an exclaimation mark before the
204+
colon:
205+
206+
- `feat!: removed Git::Base.commit_force`
207+
208+
The commit messages will drive how the version is incremented for each release:
209+
210+
- a release containing a **breaking change** will do a **major** version increment
211+
- a release containing a **new feature** will do a **minor** increment
212+
- a release containing **neither a breaking change nor a new feature** will do a
213+
**patch** version increment
214+
215+
The full conventional commit format is:
216+
217+
```text
218+
<type>[optional scope][!]: <description>
219+
220+
[optional body]
221+
222+
[optional footer(s)]
223+
```
224+
225+
- `optional body` may include multiple lines of descriptive text limited to 100 chars
226+
each
227+
- `optional footers` only uses `BREAKING CHANGE: <description>` where description
228+
should describe the nature of the backward incompatibility.
229+
230+
Use of the `BREAKING CHANGE:` footer flags a backward incompatible change even if it
231+
is not flagged with an exclaimation mark after the `type`. Other footers are allowed
232+
by not acted upon.
233+
234+
See [the Conventional Commits
235+
specification](https://www.conventionalcommits.org/en/v1.0.0/) for more details.
175236

176237
### Unit tests
177238

README.md

Lines changed: 28 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,34 @@
99
[![Documentation](https://img.shields.io/badge/Documentation-Latest-green)](https://rubydoc.info/gems/git/)
1010
[![Change Log](https://img.shields.io/badge/CHANGELOG-Latest-green)](https://rubydoc.info/gems/git/file/CHANGELOG.md)
1111
[![Build Status](https://github.com/ruby-git/ruby-git/workflows/CI/badge.svg?branch=master)](https://github.com/ruby-git/ruby-git/actions?query=workflow%3ACI)
12-
[![Code Climate](https://codeclimate.com/github/ruby-git/ruby-git.png)](https://codeclimate.com/github/ruby-git/ruby-git)
13-
14-
* [Summary](#summary)
15-
* [v2.x Release](#v2x-release)
16-
* [Install](#install)
17-
* [Major Objects](#major-objects)
18-
* [Errors Raised By This Gem](#errors-raised-by-this-gem)
19-
* [Specifying And Handling Timeouts](#specifying-and-handling-timeouts)
20-
* [Examples](#examples)
21-
* [Ruby version support policy](#ruby-version-support-policy)
22-
* [License](#license)
12+
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white)](https://conventionalcommits.org)
13+
14+
- [📢 We've Switched to Conventional Commits 📢](#-weve-switched-to-conventional-commits-)
15+
- [Summary](#summary)
16+
- [Install](#install)
17+
- [Major Objects](#major-objects)
18+
- [Errors Raised By This Gem](#errors-raised-by-this-gem)
19+
- [Specifying And Handling Timeouts](#specifying-and-handling-timeouts)
20+
- [Examples](#examples)
21+
- [Ruby version support policy](#ruby-version-support-policy)
22+
- [License](#license)
23+
24+
## 📢 We've Switched to Conventional Commits 📢
25+
26+
To enhance our development workflow, enable automated changelog generation, and pave
27+
the way for Continuous Delivery, the `ruby-git` project has adopted the [Conventional
28+
Commits standard](https://www.conventionalcommits.org/en/v1.0.0/) for all commit
29+
messages.
30+
31+
Going forward, all commits to this repository **MUST** adhere to the Conventional
32+
Commits standard. Commits not adhering to this standard will cause the CI build to
33+
fail. PRs will not be merged if they include non-conventional commits.
34+
35+
A git pre-commit hook may be installed to validate your conventional commit messages
36+
before pushing them to GitHub by running `bin/setup` in the project root.
37+
38+
Read more about this change in the [Commit Message Guidelines section of
39+
CONTRIBUTING.md](CONTRIBUTING.md#commit-message-guidelines)
2340

2441
## Summary
2542

@@ -34,31 +51,6 @@ Get started by obtaining a repository object by:
3451

3552
Methods that can be called on a repository object are documented in [Git::Base](https://rubydoc.info/gems/git/Git/Base)
3653

37-
## v2.x Release
38-
39-
git 2.0.0 has recently been released. Please give it a try.
40-
41-
**If you have problems with the 2.x release, open an issue and use the 1.x version
42-
instead.** We will do our best to fix your issues in a timely fashion.
43-
44-
**JRuby on Windows is not yet supported by the 2.x release line. Users running JRuby
45-
on Windows should continue to use the 1.x release line.**
46-
47-
The changes in this major release include:
48-
49-
* Added a dependency on the activesupport gem to use the deprecation functionality
50-
* Create a policy of supported Ruby versions to support only non-EOL Ruby versions
51-
* Create a policy of supported Git CLI versions (released 2020-12-25)
52-
* Update the required Ruby version to at least 3.0 (released 2020-07-27)
53-
* Update the required Git command line version to at least 2.28
54-
* Update how CLI commands are called to use the [process_executer](https://github.com/main-branch/process_executer)
55-
gem which is built on top of [Kernel.spawn](https://ruby-doc.org/3.3.0/Kernel.html#method-i-spawn).
56-
See [PR #684](https://github.com/ruby-git/ruby-git/pull/684) for more details
57-
on the motivation for this implementation.
58-
59-
The `master` branch will be used for `2.x` development. If needed, fixes for `1.x`
60-
version will be done on the `v1` branch.
61-
6254
## Install
6355

6456
Install the gem and add to the application's Gemfile by executing:

0 commit comments

Comments
 (0)