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 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
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "jira_fix_version_release"
5
+
6
+ require "irb"
7
+ IRB.start
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "jira_fix_version_release"
5
+
6
+ options = JiraFixVersionRelease.parse(ARGV)
7
+ JiraFixVersionRelease.execute_options(options)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -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
@@ -0,0 +1,3 @@
1
+ module JiraFixVersionRelease
2
+ VERSION = "0.1.0"
3
+ 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: []