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 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: []