42 lines
1.0 KiB
Ruby
42 lines
1.0 KiB
Ruby
|
|
require 'jira-ruby'
|
||
|
|
|
||
|
|
|
||
|
|
class JiraClient
|
||
|
|
|
||
|
|
def initialize(config)
|
||
|
|
@label_name = config['labelName']
|
||
|
|
@jira_filter = sprintf(config['jql'], @label_name)
|
||
|
|
@options = {
|
||
|
|
:username => config['user'],
|
||
|
|
:password => config['pass'],
|
||
|
|
:site => config['url'],
|
||
|
|
:context_path => '',
|
||
|
|
:auth_type => :basic,
|
||
|
|
:use_ssl => true
|
||
|
|
}
|
||
|
|
@max_results = config['maxResults']
|
||
|
|
end
|
||
|
|
|
||
|
|
def query_new_epics
|
||
|
|
jira = JIRA::Client.new(@options)
|
||
|
|
result = []
|
||
|
|
jira.Issue.jql(@jira_filter,
|
||
|
|
fields: %w(summary description),
|
||
|
|
max_results: @max_results
|
||
|
|
).each do |epic|
|
||
|
|
next unless epic.summary.downcase.start_with?("integrate")
|
||
|
|
wp_name = epic.summary.match /^integrate\s+(?:wp)?(.*?)\s*$/i
|
||
|
|
result.push ["wp" + wp_name[1].downcase, epic.key]
|
||
|
|
end
|
||
|
|
result
|
||
|
|
end
|
||
|
|
|
||
|
|
def set_epic_completed(key)
|
||
|
|
jira = JIRA::Client.new(@options)
|
||
|
|
issue = jira.Issue.find(key)
|
||
|
|
labels = issue.labels
|
||
|
|
labels.push(@label_name)
|
||
|
|
issue.save({:fields => {:labels => labels}})
|
||
|
|
end
|
||
|
|
end
|