Cruise Control.rb is moving to Lighthouse
So, following rSpec’s example, we’re moving from JIRA to Lighthouse. Check us out at http://cruisecontrolrb.lighthouseapp.com/
I have to say I wasn’t thrilled about Jira. It does everything, and it does it slowly, with a UI that is bloated at best. Lighthouse, on the other hand, keeps it REALLY simple. And does not a lot more than what we need. It also just opened itself up for OSS projects (which is cool).
How did we migrate all of our stories from JIRA to Lighthouse? I thought you’d never ask.
Lighthouse exposes a slick RESTful API for managing your data. I exported the JIRA issues into a csv file, wrote a short ruby script, waited about 5 minutes for it to run, and I was done.
Here’s the script:
#!/usr/bin/env ruby require 'rubygems' require 'csv' JiraIssue = Struct.new(:issue_type, :key, :status, :assign_to, :summary, :description, :fix_version, :reporter, :priority, :original_estimate, :votes) def load_issues(csv_file) header = true issues = [] CSV.open(csv_file, 'r') do |row| if header header = false else issues << JiraIssue.new(*row) end end issues end issues = load_issues(File.dirname(__FILE__) + "/jiraissues.csv") # this code is just to examine what our JIRA data looks like def show(issues, field) puts "#{field} = #{issues.map{|i| i.send(field)}.uniq.inspect}" end show issues, :issue_type show issues, :status show issues, :assign_to show issues, :fix_version show issues, :reporter show issues, :priority show issues, :original_estimate show issues, :votes # these hashes translate between JIRA and Lighthouse states = { "Open" => 'open', "Resolved" => 'resolved', "Closed" => 'invalid' } users = { "Unassigned" => nil, "Alexey Verkhovsky" => 10545, "Rolf Russell" => 17992, "Jeremy Stell-Smith" => 10638, "Zhang Lin" => nil, "Jeff Xiong" => nil } milestones = { "1" => 9885, "1.1" => 9886, "1.2" => 9887, "1.3" => 9888, "1.4" => 9889, "\302\240 " => nil, } require File.dirname(__FILE__) + "/lib/lighthouse" include Lighthouse Lighthouse.account = "cruisecontrolrb" # enter your own user, password here... Lighthouse.authenticate "jeremystellsmith@gmail.com", "*******" issues.each do |i| # enter your own project id here... ticket = Ticket.new :project_id => 9150 ticket.title = i.summary ticket.body = i.description ticket.state = states[i.status.to_s.strip] ticket.assigned_user_id = users[i.assign_to.to_s.strip] ticket.milestone_id = milestones[i.fix_version] ticket.tags
There was another step. I ran the first part of the script a couple times to tell me what the different issue_types, statuses, assigned users, fix versions, etc were that my JIRA data was using. I then found or created the appropriate data in Lighthouse and added some hashes to translate for me.
All in all, I’m pretty thrilled with how easy this was.
Tags: cruisecontrolrb, lighthouse
April 23rd, 2008 at 4:12 pm
Hey Jeremy,
I appreciate your write-up. I managed to use this script with Unfuddle and after a little bit of time I got it to play great.
Thanks!