Milestoner
Milestoner is a command line interface for crafting Git repository tags (milestones) using semantic versions. Each milestone is a summary of all commits made since the last milestone. You can use Milestoner to inspect what is currently unreleased or create a new release via a single command. By having a tool, like Milestoner, you can quickly manage/automate releases in a consistent and reliable fashion. Milestoner also pairs well with Git Lint for further ensuring you have commit messages of high quality for your release notes.
Features
-
Uses Versionaire for Semantic Versioning.
-
Format:
<major>.<minor>.<patch>
. -
Example:
0.1.0
.
-
-
Ensures Git commits since last tag (or initialization of repository) are included.
-
Ensures Git commit messages are grouped by prefix, in order defined. For more details, see Git Lint Commit Subject Prefix for details. Defaults (can be customized):
-
Fixed
-
Added
-
Updated
-
Removed
-
Refactored
-
-
Ensures Git commit messages are alphabetically sorted.
-
Ensures duplicate Git commit messages are removed (if any).
-
Provides optional security for signing Git tags with GnuPG signing key.
Setup
To install, run:
gem install milestoner
Usage
Command Line Interface (CLI)
From the command line, type: milestoner --help
USAGE: -c, --config ACTION Manage gem configuration. Actions: edit || view. -h, --help Show this message. -P, --publish VERSION Tag and push milestone to remote repository. -s, --status Show project status. -v, --version Show gem version. SECURITY OPTIONS: --[no-]sign Sign with GPG key. Default: false.
Examples:
milestoner --config edit
milestoner --config view
milestoner --help
milestoner --publish 0.1.0
milestoner --publish 0.1.0 --sign
milestoner --publish 0.1.0 --no-sign
milestoner --status
milestoner --version
Customization
This gem can be configured via a global configuration:
~/.config/milestoner/configuration.yml
It can also be configured via XDG environment variables.
The default configuration is as follows:
:documentation:
:format: "md"
:prefixes:
- Fixed
- Added
- Updated
- Removed
- Refactored
:sign: false
Feel free to take this default configuration, modify, and save as your own custom
configuration.yml
.
The configuration.yml
file can be configured as follows:
-
Documenation Format: Determines what format the status information should be rendered. Defaults to Markdown (i.e.
md
) but ASCII Doc (i.e.adoc
) is supported too. -
Git Commit Prefixes: Should the default prefixes not be desired, you can define Git commit prefixes that match your style. NOTE: Prefix order is important with the first prefix defined taking precedence over the second and so forth. Special characters are allowed for prefixes but should be enclosed in quotes. To disable prefix usage completely, use an empty array. Example:
:prefixes: []
. -
Git Tag Sign: Defaults to
false
but can be enabled by setting totrue
. When enabled, a Git tag will require GPG signing for enhanced security and include a signed signature as part of the Git tag. This is useful for public milestones where the author of a milestone can be verified to ensure milestone integrity/security.
Security
To securely sign your Git tags, install and configure GPG:
brew install gpg
gpg --gen-key
When creating your GPG key, choose these settings:
-
Key kind: RSA and RSA (default)
-
Key size: 4096
-
Key validity: 0
-
Real Name:
<your name>
-
Email:
<your email>
-
Passphrase:
<your passphrase>
To obtain your key, run the following and take the part after the forward slash:
gpg --list-keys | grep pub
Add your key to your global Git configuration in the [user]
section. Example:
[user] signingkey = <your GPG key>
Now, when publishing a new milestone (i.e. milestoner --publish <version> --sign
), signing of
your Git tag will happen automatically. You will be prompted for the GPG Passphrase each time but
that is to be expected.
Development
To contribute, run:
git clone https://github.com/bkuhlmann/milestoner.git
cd milestoner
bin/setup
You can also use the IRB console for direct access to all objects:
bin/console
Tests
To test, run:
bundle exec spec
Credits
-
Built with Gemsmith.
-
Engineered by Brooke Kuhlmann.