jira_fix_version_release 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/console +7 -0
- data/bin/jira_fix_version_release +7 -0
- data/bin/setup +8 -0
- data/lib/jira_fix_version_release.rb +116 -0
- data/lib/jira_fix_version_release/jira_client.rb +49 -0
- data/lib/jira_fix_version_release/jira_options.rb +79 -0
- data/lib/jira_fix_version_release/version.rb +3 -0
- metadata +96 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 77854af991a1fcebcbdc3c961d693cafbe2480e9
|
4
|
+
data.tar.gz: 6e54dc11f2fb2469f0d4936b88045f625510f9f3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 69bed46f21151618d7013d498a03c2f32c2c2e2918eb12676cfc4bf609c8f86e52de20879d1ff14e643c246e54d211e48f39e7633f6e594ec2edd2e3b8019359
|
7
|
+
data.tar.gz: 2b332b955b17c67f8d411850cfd063539c9f1f973ea58adc67fb43bf5760de631c75c448855577b4a23a331ea89a50e8b5e782c1e10a30d3d538dd8e4808cf75
|
data/bin/console
ADDED
data/bin/setup
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
require "jira_fix_version_release/version"
|
2
|
+
require 'jira_fix_version_release/jira_options'
|
3
|
+
|
4
|
+
module JiraFixVersionRelease
|
5
|
+
def self.parse(args)
|
6
|
+
options = {}
|
7
|
+
opt_parser = OptionParser.new do |opts|
|
8
|
+
opts.banner = "Usage: jira_fix_version_release [options]"
|
9
|
+
opts.separator " "
|
10
|
+
opts.separator "Specific options:"
|
11
|
+
|
12
|
+
opts.on("-h", "--help", "Displays help") do
|
13
|
+
puts opts
|
14
|
+
exit
|
15
|
+
end
|
16
|
+
|
17
|
+
opts.on("-u", "--username=USERNAME",
|
18
|
+
"JIRA username is required") do |username|
|
19
|
+
options[:username] = username
|
20
|
+
end
|
21
|
+
|
22
|
+
opts.on("-p", "--password=PASSWORD",
|
23
|
+
"JIRA password is required") do |password|
|
24
|
+
options[:password] = password
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("-j", "--project_key=PROJECT_KEY",
|
28
|
+
"JIRA project key is required") do |project_key|
|
29
|
+
options[:project_key] = project_key
|
30
|
+
end
|
31
|
+
|
32
|
+
opts.on("-v", "--fix_version=FIX_VERSION",
|
33
|
+
"JIRA fix version is required") do |v|
|
34
|
+
options[:fix_version] = v
|
35
|
+
end
|
36
|
+
|
37
|
+
opts.on("-f", "--jql_filter=JQL_FILTER",
|
38
|
+
"JQL filter query is required") do |jql_filter|
|
39
|
+
options[:jql_filter] = jql_filter
|
40
|
+
end
|
41
|
+
|
42
|
+
opts.on("-d", "--jira_domain=JIRA_DOMAIN",
|
43
|
+
"JIRA domain is required") do |d|
|
44
|
+
options[:jira_domain] = d
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on("-c", "--commits",
|
48
|
+
"displays commit history") do |commits|
|
49
|
+
options[:commits] = commits
|
50
|
+
end
|
51
|
+
|
52
|
+
end.parse!
|
53
|
+
|
54
|
+
if options[:username] == nil
|
55
|
+
print 'Enter JIRA username: '
|
56
|
+
options[:username] = gets.chomp
|
57
|
+
end
|
58
|
+
|
59
|
+
if options[:password] == nil
|
60
|
+
options[:password] = `read -s -p "Enter JIRA password: " password; echo $password`.chomp
|
61
|
+
puts ""
|
62
|
+
end
|
63
|
+
|
64
|
+
if options[:project_key] == nil
|
65
|
+
print 'Enter JIRA project KEY: '
|
66
|
+
options[:project_key] = gets.chomp
|
67
|
+
end
|
68
|
+
|
69
|
+
if options[:fix_version] == nil
|
70
|
+
print 'Enter JIRA fix version: '
|
71
|
+
options[:fix_version] = gets.chomp
|
72
|
+
end
|
73
|
+
|
74
|
+
if options[:jira_domain] == nil
|
75
|
+
print 'Enter JIRA url: '
|
76
|
+
options[:jira_domain] = gets.chomp
|
77
|
+
end
|
78
|
+
|
79
|
+
if options[:jql_filter] == nil
|
80
|
+
print 'Enter JQL filter: '
|
81
|
+
options[:jql_filter] = gets.chomp
|
82
|
+
end
|
83
|
+
|
84
|
+
return options
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.execute_options(options)
|
88
|
+
fix_version = options[:fix_version]
|
89
|
+
|
90
|
+
jira = JIRAOptions.new(options[:username], options[:password], options[:jira_domain])
|
91
|
+
|
92
|
+
puts "Running script please wait...", ""
|
93
|
+
issues = jira.getUnreleasedJiraTickets(options[:project_key], options)
|
94
|
+
|
95
|
+
puts "Discovered ready to release tickets!"
|
96
|
+
|
97
|
+
release = jira.createFixVersion(fix_version)
|
98
|
+
puts "Fix version: #{fix_version} created in JIRA"
|
99
|
+
|
100
|
+
issues.each do |issue|
|
101
|
+
#puts issue['key']
|
102
|
+
jira.updateFixVersion(issue['key'], fix_version)
|
103
|
+
end
|
104
|
+
puts "Successfully updated Fix Versions!"
|
105
|
+
|
106
|
+
issues.each do |issue|
|
107
|
+
if options[:commits] != nil
|
108
|
+
puts "Commit History"
|
109
|
+
puts jira.getCommitMessages(issue['id'])
|
110
|
+
STDOUT.flush
|
111
|
+
end
|
112
|
+
end
|
113
|
+
jira.releaseFixVersion(release['id'])
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rest_client'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class JIRAClient
|
6
|
+
|
7
|
+
def initialize(username, password, jira_domain)
|
8
|
+
@username = username
|
9
|
+
@password = password
|
10
|
+
@jira_domain = jira_domain
|
11
|
+
end
|
12
|
+
|
13
|
+
def run(method=nil, url=nil, headers=nil, payload=nil, username=@username, password=@password)
|
14
|
+
raise ArgumentError, "Missing required parameters" if (method==nil or url==nil or username==nil or password==nil)
|
15
|
+
raise ArgumentError, "Payload required for post/put request" if ((method=="post" or method=="put") and payload==nil)
|
16
|
+
|
17
|
+
options = Hash.new
|
18
|
+
options[:method] = method.to_sym
|
19
|
+
options[:url] = @jira_domain + url
|
20
|
+
options[:user] = username
|
21
|
+
options[:password] = password
|
22
|
+
options[:headers] = headers if headers != nil
|
23
|
+
options[:payload] = payload if payload !=nil and method != "get"
|
24
|
+
response = RestClient::Request.execute(options)
|
25
|
+
if(response.code < 200 or response.code > 299)
|
26
|
+
raise "Error with the http request!"
|
27
|
+
end
|
28
|
+
|
29
|
+
return response
|
30
|
+
end
|
31
|
+
|
32
|
+
def getResponseBody(response)
|
33
|
+
begin
|
34
|
+
data = JSON.parse(response.body)
|
35
|
+
rescue
|
36
|
+
data = nil
|
37
|
+
end
|
38
|
+
return data
|
39
|
+
end
|
40
|
+
|
41
|
+
def getResponseHeaders(response)
|
42
|
+
begin
|
43
|
+
data = JSON.parse(response.headers)
|
44
|
+
rescue
|
45
|
+
data = nil
|
46
|
+
end
|
47
|
+
return data
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'date'
|
3
|
+
require 'jira_fix_version_release/jira_client'
|
4
|
+
|
5
|
+
module JiraFixVersionRelease
|
6
|
+
class JIRAOptions
|
7
|
+
def initialize(username, password, jira_domain)
|
8
|
+
jira_domain << '/' unless jira_domain.end_with?('/')
|
9
|
+
@jira_client = JIRAClient.new(username, password, jira_domain)
|
10
|
+
@headers = {:content_type => 'application/json'}
|
11
|
+
end
|
12
|
+
|
13
|
+
def updateFixVersion(issue_key, version_name="default")
|
14
|
+
url = "rest/api/2/issue/#{issue_key}"
|
15
|
+
payload = '{"update": {"fixVersions" : [{"set":[{"name" : "'+ version_name +'"}]}]}}'
|
16
|
+
response = @jira_client.run("put", url, @headers, payload)
|
17
|
+
data = @jira_client.getResponseBody(response)
|
18
|
+
return data
|
19
|
+
end
|
20
|
+
|
21
|
+
def getUnreleasedJiraTickets(project_key, options)
|
22
|
+
filter = options[:jql_filter]
|
23
|
+
|
24
|
+
jira_url = "rest/api/2/search?jql="
|
25
|
+
url = jira_url + filter
|
26
|
+
|
27
|
+
response = @jira_client.run("get", url, @headers)
|
28
|
+
data = @jira_client.getResponseBody(response)
|
29
|
+
return data['issues']
|
30
|
+
end
|
31
|
+
|
32
|
+
def createFixVersion(version_name="default", description=Date.today.strftime("%d/%b/%Y"), project_key=nil, released='true', userStartDate=Date.today.strftime("%d/%b/%Y"), userReleaseDate=Date.today.strftime("%d/%b/%Y"))
|
33
|
+
url = "rest/api/2/version"
|
34
|
+
payload = '{"name": "'+ version_name +'", "description": "'+ description +'", "project": "'+ project_key +'", "released": ' + released + ', "userStartDate": "'+ userStartDate +'" , "userReleaseDate": "'+ userReleaseDate +'"}'
|
35
|
+
|
36
|
+
response = @jira_client.run("post", url, @headers, payload)
|
37
|
+
data = @jira_client.getResponseBody(response)
|
38
|
+
return data
|
39
|
+
end
|
40
|
+
|
41
|
+
def releaseFixVersion(fix_version_id, released='true', userStartDate=Date.today.strftime("%d/%b/%Y"), userReleaseDate=Date.today.strftime("%d/%b/%Y"))
|
42
|
+
url = "rest/api/2/version/#{fix_version_id}"
|
43
|
+
payload = '{"released": ' + released + '}'
|
44
|
+
|
45
|
+
response = @jira_client.run("put", url, @headers, payload)
|
46
|
+
data = @jira_client.getResponseBody(response)
|
47
|
+
return data
|
48
|
+
end
|
49
|
+
|
50
|
+
def getCommitMessages(issue_id)
|
51
|
+
url = "rest/dev-status/1.0/issue/detail?issueId=#{issue_id}&applicationType=stash&dataType=repository"
|
52
|
+
commit_description = Array.new
|
53
|
+
response = @jira_client.run("get", url, @headers)
|
54
|
+
data = @jira_client.getResponseBody(response)
|
55
|
+
repositories = data['detail'][0]['repositories']
|
56
|
+
|
57
|
+
for i in 0..repositories.length-1
|
58
|
+
commits = repositories[i]["commits"]
|
59
|
+
repo_name = repositories[i]["name"]
|
60
|
+
for j in 0..commits.length-1
|
61
|
+
commit_id = commits[j]['id']
|
62
|
+
commit_msg = commits[j]['message']
|
63
|
+
commit_description.push("Repository: #{repo_name}, Commit id: #{commit_id}, Message: #{commit_msg}")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
return commit_description
|
67
|
+
end
|
68
|
+
|
69
|
+
def isUserPasswordValid
|
70
|
+
#wip
|
71
|
+
url = "rest/api/2/project"
|
72
|
+
response = @jira_client.run("get", url, @headers)
|
73
|
+
puts response
|
74
|
+
data = @jira_client.getResponseHeaders(response)
|
75
|
+
return data
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jira_fix_version_release
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Abdullah Jubayer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description: A utility to create and release jira fix versions
|
56
|
+
email:
|
57
|
+
- ajubayer@ondeck.com
|
58
|
+
- ajsunny86@yahoo.com
|
59
|
+
executables:
|
60
|
+
- jira_fix_version_release
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- bin/console
|
65
|
+
- bin/jira_fix_version_release
|
66
|
+
- bin/setup
|
67
|
+
- lib/jira_fix_version_release.rb
|
68
|
+
- lib/jira_fix_version_release/jira_client.rb
|
69
|
+
- lib/jira_fix_version_release/jira_options.rb
|
70
|
+
- lib/jira_fix_version_release/version.rb
|
71
|
+
homepage: https://github.com/abdullah-jubayer/jira_fix_version_release
|
72
|
+
licenses:
|
73
|
+
- MIT
|
74
|
+
metadata:
|
75
|
+
company_name: OnDeck
|
76
|
+
post_install_message:
|
77
|
+
rdoc_options: []
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
requirements: []
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 2.6.7
|
93
|
+
signing_key:
|
94
|
+
specification_version: 4
|
95
|
+
summary: Create and release jira fix versions
|
96
|
+
test_files: []
|