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
# File lib/jira.rb, line 217 def self.print_help() Parser.parse(["--help"]) end
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