module WTBuildHelpers::JIRA

Constants

Options

Public Class Methods

commandline_jira_update(args) click to toggle source
# File lib/jira.rb, line 221
def self.commandline_jira_update(args)
    options = args ? Parser.parse(ARGV) : Options.new

    if ENV["TRAVIS"]
        pull_travis_options(options)
    # Detect running on TeamCity for common prarams
    elsif ENV["TEAMCITY_VERSION"]
        pull_team_city_options(options)
    end
    pull_common_options(options)

    if validate_options(options)    
        logs = get_git_history(options.commit_range)
        issue_set = find_jira_issues(logs)
        
        if issue_set.size > 0
            jira_info = JiraInfo.new options.site, options.username, options.password 
            jira_update(jira_info, issue_set, options.build)
        end
    end
end
find_jira_issues(logs) click to toggle source
# File lib/jira.rb, line 115
def self.find_jira_issues(logs)
    issue_set = Set.new
    logs.each do |log|
        issues = log.scan(/[A-Za-z][A-Za-z]+-[1-9][0-9]*/)
        issue_set.merge(issues)
    end
    
    return issue_set
end
get_git_history(commit_range) click to toggle source
# File lib/jira.rb, line 125
def self.get_git_history(commit_range)
    puts "Getting git history for #{commit_range}"
    happyface = "\u263A".encode('utf-8')
    extra_params = commit_range.index('..') == nil ? "-n 1" : ""
    git_log = `git --no-pager log --format="%B#{happyface}" #{commit_range} #{extra_params}`
    puts(git_log)

    #parse out the log
    logs = git_log.split(happyface)
    
    return logs
end
jira_update(jira_info, issues, build) click to toggle source
# File lib/jira.rb, line 138
def self.jira_update(jira_info, issues, build)
    if !jira_info.fixed_in_build_field_id
        jira_info.update_fixed_in_build
    end
    
    # Something's wrong. We're not on our JIRA
    return unless jira_info.fixed_in_build_field_id
    
    issues.each do |issue_key|
        #try to perform the transition
        if !jira_info.build_complete_transition_id
            jira_info.update_build_complete_transition(issue_key)
        end
        
        #still nil? Can't perform this transition
        if !jira_info.build_complete_transition_id
            puts "Could not update issue #{issue_key}: could not find transition"
            next
        end
        
        params = {
            transition: {
                id: jira_info.build_complete_transition_id
            },
            fields: {
                jira_info.fixed_in_build_field_id => build
            }
        }

        puts "Updating issue #{issue_key}"
        begin
            issue_response = jira_info.client["issue/#{issue_key}/transitions"].post(JSON.generate(params))
        rescue RestClient::Exception => e
            puts "Error updating issue #{issue_key}: Error code #{e.response.code}"
        end
    end
end
print_help() click to toggle source
pull_common_options(options) click to toggle source
# File lib/jira.rb, line 188
def self.pull_common_options(options)
    options.site = ENV["JIRA_URL"] if options.site == nil
    options.username = ENV["JIRA_USERNAME"] if options.username == nil
    options.password = ENV["JIRA_PASSWORD"] if options.password == nil
end
pull_team_city_options(options) click to toggle source
# File lib/jira.rb, line 182
def self.pull_team_city_options(options)
    puts "Pulling parameters from TeamCity environment variables where needed...."
    options.commit_range = ENV["TEAMCITY_COMMIT_RANGE"] if options.commit_range == nil
    options.build = ENV["BUILD_NUMBER"] if options.build == nil
end
pull_travis_options(options) click to toggle source
# File lib/jira.rb, line 176
def self.pull_travis_options(options)
    puts "Pulling parameters from Travis-CI environment variables where needed...."
    options.commit_range = ENV["TRAVIS_COMMIT_RANGE"] if options.commit_range == nil
    options.build = ENV["TRAVIS_BUILD_NUMBER"] if options.build == nil
end
validate_options(options) click to toggle source
# File lib/jira.rb, line 194
def self.validate_options(options)
    valid_options = true
    if options.commit_range == nil 
        puts "Commit range is required. None specified."
        puts "You can specify this in TeamCity by running 'teamcity_fetch_git_range' before this step." if ENV["TEAMCITY_VERSION"]
        valid_options = false
    end
    if options.site == nil
        puts "Site parameter is required, or use JIRA_URL environment variable on build servers"
        valid_options = false
    end
    if options.username == nil
        puts "No username for JIRA provided. Use JIRA_USERNAME environment variable on build servers"
        valid_options = false
    end
    if options.password == nil
        puts "No password for JIRA provided. Use JIRA_PASSWORD environment variable on build servers"
        valid_options = false
    end

    valid_options
end