Thursday, December 20, 2012

Rake task to update build version No. with latest tag name

The following code will help us to automate the process of updating build version No. by considering latest tag name available in git repo.

Assuming, you are deploying your Rails app using Capistrano.

1) In your deploy.rb add the following hook,

after "deploy", "installed_version:update"

And add a task(installed_version:update)

namespace :installed_version do
 task :update, :roles => :app, :except => { :no_release => true } do
   run "cd #{current_path} && RAILS_ENV=#{rails_env} rake update:version"
 end
end


2) Create a new rake task file in your rails app(lib/tasks/update_build_version.rake)

Add below lines,

namespace "update" do
 desc "This will update the installed version no. in DB from the latest tag name"
 task :version => :environment do
    tag = `git rev-list --tags --max-count=1`
    tag_name = `git describe --tags #{tag}`.chomp
    puts "Latest Tag No.#{tag_name}"
    attributes = {:version_no => tag_name, :build_dt => Time.now}
   Version.create(attributes) 
# assuming you have versions tbl   
    puts "Build updated with Version No.\"#{tag_name}\""
 end
end



That's all, we are done !!!

Note: Before every deployment you need to tag your code with some version No.(ex: 1.2.1) and then run cap deploy. The above code will read the latest tag name(1.2.1) and update into versions table.

This post would be really helpful when you want to automate your Build Management process.

No comments: