The version_boss gem

Gem Version Documentation Change Log Build Status Maintainability Test Coverage Conventional
Commits Slack

Parse, compare, and increment Gem and SemVer versions.

This gem installs the gem-version-boss command-line tool to display and increment a gem's version based on Semantic Versioning rules.

gem-version-boss can replace the bump command from the bump gem for incrementing gem version strings.

How gem-version-boss differs from bump:

  • gem-version-boss can manage pre-release versions
  • gem-version-boss can not commit or tag the version file changes it makes
  • gem-version-boss can not update multiple files at a time

Example CLI commands:

# Increment the gem version
gem-version-boss {next-major|next-minor|next-patch} [--pre [--pretype=TYPE]] [--dryrun]
gem-version-boss next-pre [--pretype=TYPE] [--dryrun]
gem-version-boss next-release [--dryrun]

# Command to display the current gem version
gem-version-boss current

# Display the gem version file
gem-version-boss file

# Validate that a version is valid
gem-version-boss validate VERSION

# Get more detailed help for each command listed above
gem-version-boss help [COMMAND]

Installation

To install the gem, add to the following line to your application's gemspec OR Gemfile:

gemspec:

  spec.add_development_dependency "version_boss", '~> 0.1'

Gemfile:

gem "version_boss", "~> 0.1", groups: [:development, :test]

and then run bundle install.

If bundler is not being used to manage dependencies, install the gem by executing:

gem install version_boss

Command Line

Usage

The gem-version-boss command line has built in help for all its commands. List the commands by invoking gem-version-boss with no arguments or gem-version-boss help as follows:

gem-version-boss help

The output is the following:

Commands:
  gem-version-boss current [-q]                                   # Show the current gem version
  gem-version-boss file [-q]                                      # Show the path to the file containing the gem version
  gem-version-boss help [COMMAND]                                 # Describe available commands or one specific command
  gem-version-boss next-major [VERSION] [-p [-t TYPE]] [-n] [-q]  # Increment the version's major part
  gem-version-boss next-minor [VERSION] [-p [-t TYPE]] [-n] [-q]  # Increment the version's minor part
  gem-version-boss next-patch [VERSION] [-p [-t TYPE]] [-n] [-q]  # Increment the version's patch part
  gem-version-boss next-pre [VERSION] [-t TYPE] [-n] [-q]         # Increment the version's pre-release part
  gem-version-boss next-release [VERSION] [-n] [-q]               # Increment a pre-release version to the release version
  gem-version-boss validate VERSION [-q]                          # Validate the given version

The gem-version-boss help COMMAND command will give further help for a specific command:

gem-version-boss help current

The output is the following:

Usage:
  gem-version-boss current [-q]

Options:
  -q, [--quiet], [--no-quiet], [--skip-quiet]  # Do not print the current version to stdout

Description:
  Output the current gem version from the file that stores the gem version.

  The command fails if the gem version could not be found or is invalid.

  Use `--quiet` to ensure that a gem version could be found and is valid without producing any output.

Examples

Assuming the gem version starts at 1.2.3:

$ gem-version-boss current
1.2.3

$ gem-version-boss next-patch
1.2.4

$ gem-version-boss next-minor
1.3.0

$ gem-version-boss next-major
2.0.0

# Create a pre-release version for the next major version
$ gem-version-boss next-major --pre --pre-type=alpha
3.0.0.alpha1

# Increment the pre-release version
$ gem-version-boss next-pre
3.0.0.alpha2

# Change the pre-release type to "beta"
$ gem-version-boss next-pre --pre-type=beta
3.0.0.beta1

# Create a release version from the pre-release version
$ gem-version-boss next-release
3.0.0

Library Usage

Detailed API documenation is hosted on rubygems.org.

The main classes are:

VersionBoss::Gem classes

  • VersionBoss::Gem::Version knows how to parse, validate, and compare Ruby Gem version strings which may include prerelease versions.

  • VersionBoss::Gem::IncrementableVersion knows how to increment Ruby Gem version strings according to SemVer rules.

  • VersionBoss::Gem::VersionFileFactory: find the gem's version file and returns a VersionBoss::Gem::VersionFile that knows it's path, the contained version, and how to update the version file with a new version.

VersionBoss::Semver classes

  • VersionBoss::Semver::Version knows how to parse, validate, and compare version strings that conform to SemVer 2.0.0

  • VersionBoss::Semver::IncrementableVersion knows how to increment Semver version strings according to SemVer rules.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/main-branch/version_boss.

Commit message guidelines

All commit messages must follow the Conventional Commits standard. This helps us maintain a clear and structured commit history, automate versioning, and generate changelogs effectively.

To ensure compliance, this project includes:

  • A git commit-msg hook that validates your commit messages before they are accepted.

To activate the hook, you must have node installed and run npm install.

  • A GitHub Actions workflow that will enforce the Conventional Commit standard as part of the continuous integration pipeline.

Any commit message that does not conform to the Conventional Commits standard will cause the workflow to fail and not allow the PR to be merged.

Pull request guidelines

All pull requests must be merged using rebase merges. This ensures that commit messages from the feature branch are preserved in the release branch, keeping the history clean and meaningful.

License

The gem is available as open source under the terms of the MIT License.