Milestoner Icon

# Milestoner [![Gem Version](https://badge.fury.io/rb/milestoner.svg)](http://badge.fury.io/rb/milestoner) [![Code Climate Maintainability](https://api.codeclimate.com/v1/badges/4cf2547433410a9c7150/maintainability)](https://codeclimate.com/github/bkuhlmann/milestoner/maintainability) [![Code Climate Test Coverage](https://api.codeclimate.com/v1/badges/4cf2547433410a9c7150/test_coverage)](https://codeclimate.com/github/bkuhlmann/milestoner/test_coverage) [![Circle CI Status](https://circleci.com/gh/bkuhlmann/milestoner.svg?style=svg)](https://circleci.com/gh/bkuhlmann/milestoner) A command line interface for crafting Git repository milestones (also known as *tags*). ## Table of Contents - [Features](#features) - [Screencasts](#screencasts) - [Requirements](#requirements) - [Setup](#setup) - [Usage](#usage) - [Command Line Interface (CLI)](#command-line-interface-cli) - [Customization](#customization) - [Security](#security) - [Tests](#tests) - [Versioning](#versioning) - [Code of Conduct](#code-of-conduct) - [Contributions](#contributions) - [License](#license) - [History](#history) - [Credits](#credits) ## Features - Uses [Versionaire](https://github.com/bkuhlmann/versionaire) for [Semantic Versioning](https://semver.org). - Format: `..`. - 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. Defaults (can be customized): - Fixed - Added - Updated - Removed - Refactored - Ensures Git commit merge messages are excluded. - Ensures Git commit messages are alphabetically sorted. - Ensures duplicate Git commit messages are removed (if any). - Ensures Git commit messages are sanitized by removing extra spaces and `[ci skip]` text within each Git tag message. - Provides optional security for signing Git tags with [GnuPG](https://www.gnupg.org) signing key. ## Screencasts [![asciicast](https://asciinema.org/a/263060.svg)](https://asciinema.org/a/263060) ## Requirements 1. A UNIX-based system. 1. [Ruby 2.6.x](https://www.ruby-lang.org). 1. [GnuPG](https://www.gnupg.org). ## Setup Type the following to install: gem install milestoner ## Usage ### Command Line Interface (CLI) From the command line, type: `milestoner help` milestoner -C, [--commits] # Show commits for next milestone. milestoner -P, [--publish=VERSION] # Tag and push milestone to remote repository. milestoner -c, [--config] # Manage gem configuration. milestoner -h, [--help=COMMAND] # Show this message or get help for a command. milestoner -p, [--push=VERSION] # Push local tag to remote repository. milestoner -t, [--tag=VERSION] # Tag local repository with new version. milestoner -v, [--version] # Show gem version. For config options, type: `milestoner help --config` -e, [--edit], [--no-edit] # Edit gem configuration. -i, [--info], [--no-info] # Print gem configuration info. For tag options, type: `milestoner help --tag` -s, [--sign], [--no-sign] # Sign tag with GPG key. For publish options, type: `milestoner help --publish` -s, [--sign], [--no-sign] # Sign tag with GPG key. When using Milestoner, the `--publish` command is intended to be the only command necessary for publishing a new release as it handles all of the steps necessary for tagging and pushing a new milestone. Should individual steps be needed, then the `--tag` and `--push` options are available. ### Customization This gem can be configured via a global configuration: ~/.config/milestoner/configuration.yml It can also be configured via [XDG](https://github.com/bkuhlmann/xdg) environment variables. The default configuration is as follows: :git_commit_prefixes: - Fixed - Added - Updated - Removed - Refactored :git_tag_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: - `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 if used. To disable prefix usage completely, use an empty array. Example: `:git_commit_prefixes: []`. - `git_tag_sign`: Defaults to `false` but can be enabled by setting to `true`. 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](https://www.gnupg.org): 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: `` - Email: `` - 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 = Now, when publishing a new milestone (i.e. `milestoner --publish --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. ## Tests To test, run: bundle exec spec ## Versioning Read [Semantic Versioning](https://semver.org) for details. Briefly, it means: - Major (X.y.z) - Incremented for any backwards incompatible public API changes. - Minor (x.Y.z) - Incremented for new, backwards compatible, public API enhancements/fixes. - Patch (x.y.Z) - Incremented for small, backwards compatible, bug fixes. ## Code of Conduct Please note that this project is released with a [CODE OF CONDUCT](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. ## Contributions Read [CONTRIBUTING](CONTRIBUTING.md) for details. ## License Copyright 2015 [Alchemists](https://www.alchemists.io). Read [LICENSE](LICENSE.md) for details. ## History Read [CHANGES](CHANGES.md) for details. Built with [Gemsmith](https://github.com/bkuhlmann/gemsmith). ## Credits Developed by [Brooke Kuhlmann](https://www.alchemists.io) at [Alchemists](https://www.alchemists.io).