/app_version_tasks

Rake tasks to manage application semantic version.

Primary LanguageRubyOtherNOASSERTION

Build Status Code Climate Test Coverage Issue Count Inline docs Gem Version

AppVersionTasks

Rake tasks for application semantic version and release management. Inspired by:

Installation

$ gem install app_version_tasks

Configuration for a ruby gem

Add this gem and then bundle install:

Gem::Specification.new do |spec|
  spec.add_development_dependency 'app_version_tasks'
end

In the Rakefile, try this snippet and customize as required.

require 'app_version_tasks'
spec = Gem::Specification.find_by_name 'app_version_tasks'
load "#{spec.gem_dir}/lib/tasks/app_version_tasks.rake"
AppVersionTasks.configure do |config|
  config.application_name = 'GreatGem'
  config.version_file_path = File.join('lib', 'great_gem', 'version.rb')
end

Configuration for a rails application

Add this gem and bundle install:

gem 'app_version_tasks'

In the Rakefile, load and configure with this snippet:

require 'app_version_tasks'
spec = Gem::Specification.find_by_name 'app_version_tasks'
load "#{spec.gem_dir}/lib/tasks/app_version_tasks.rake"
AppVersionTasks.configure do |config|
  # the following settings are the defaults
  config.application_name = Rails.application.class.parent_name
  config.version_file_path = File.join(Rails.root, 'config', 'version.rb')
  config.git_working_directory = Rails.root.to_s
end

Each of the rake tasks that bump the semantic version will modify an application version file; by default, the template for that file looks like this:

# Rails.root/config/version.rb
module #{Rails.application.class.parent_name}
  class Application
    VERSION = '0.0.0'
  end
end

If the version file does not exist, it will be created automatically from that template. If it exists already, it is assumed that it contains a single quoted string matching the regex pattern: /'\d+.\d+.\d+'/

The default version_file_path is Rails.root/config/version.rb, but that can be configured (see above). When the default location is used, the version file can be included in the config/application.rb using:

# Rails.root/config/application.rb
require_relative 'version'

If a different version file is used and it does not contain the structure above, it might work with this gem. The code in this gem simply assumes the version file contains a semantic version surrounded by single quotes, e.g. 'x.y.z', where the single quotes around the version string are an important assumption.

Usage

rake -T should include these version tasks:

version:bump:major - bump and commit the major version (x in x.0.0)
                   - resets the minor and patch versions to zero
                   - does not push the local workspace to 'origin'
version:bump:minor - bump and commit the minor version (y in x.y.0)
                   - resets the patch version to zero
                   - does not push the local workspace to 'origin'
version:bump:patch - bump and commit the patch version (z in x.y.z)
                   - does not push the local workspace to 'origin'
version:current    - the current version
version:release    - tag and push the current version
                   - pushes to 'origin/{current_branch}'

Report the current version

bundle exec rake version:current

Bump and commit a patch version

# Example: 0.0.0 moves to 0.0.1
# Example: 1.1.1 moves to 1.1.2
bundle exec rake version:bump:patch

Bump and commit a minor version

# Example: 0.0.1 moves to 0.1.0
# Example: 1.1.2 moves to 1.2.0
bundle exec rake version:bump:minor

Bump and commit a major version

# Example: 0.1.0 moves to 1.0.0
# Example: 1.2.0 moves to 2.0.0
bundle exec rake version:bump:major

Tag and push the current version

# Example: tag 'v2.0.0' and push to origin
bundle exec rake version:release

Development

After checking out the repo, run ./bin/setup to install dependencies. Then, run rake 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 tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/darrenleeweber/app_version_tasks