jira_fix_version_release 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|