rake + rspec + gemcutter

Today I’m going to talk about how I release new versions of ice_cube. I’ve set up a rake task called ‘release’, which makes sure that all of my tests pass before deploying tagging and pushing to RubyGems. I got the basis of the idea from ayehuda katz blog post.

require ‘spec/rake/spectask’

require ‘lib/ice_cube/version’

task :build => :test do

system "gem build ice_cube.gemspec"


task :release => :build do

# tag and push

system "git tag v#{IceCube::VERSION}"

system "git push origin –tags"

# push the gem

system "gem push ice_cube-#{IceCube::VERSION}.gem"


Spec::Rake::SpecTask.new(:test) do |t|

t.spec_files = FileList['spec/**/*_spec.rb']

t.fail_on_error = true # be explicit


Then you can just update the version.rb file:

module IceCube VERSION = "0.3.9" end

and type:

$ rake release

Voila! Using this simple release method (thanks to rake and rspec), will make sure you don’t accidentally push broken versions ever (again).

Tags: ,