git_release_notes 0.0.2
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/lib/git_release_notes/git_adapter.rb +32 -0
- data/lib/git_release_notes/issue_entry.rb +21 -0
- data/lib/git_release_notes/jira_adapter.rb +49 -0
- data/lib/git_release_notes/jira_issue.rb +21 -0
- data/lib/git_release_notes/jira_release_notes.rb +33 -0
- data/lib/git_release_notes/release_notes.rb +31 -0
- data/lib/git_release_notes/version.rb +3 -0
- data/lib/git_release_notes.rb +6 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 50469c04df077ddd3d7de4d834f4d1268cdc47ba1cf86b9a43c723b88caa0cdd
|
4
|
+
data.tar.gz: df3c3fbe9d2e3d4b07285f8ee6dd8b5f19ab72c59c6c2692f6b053b575481978
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1f6afa38a975d86201b8e92400afe5c6d8ceaf329305156973e477ba7f8c511e3c79ad5566bae70354b14eaf88886d59ec8bfc3196430461b4a21e845f7e12e1
|
7
|
+
data.tar.gz: a0ebfa57bfb2e1bb065efd24623f019ddb16e4691f44f59c75d02a6f14f3bdac2fc6cbdad263f05a31d2b576177819fa3568f02f4fb62db5e82054d8a0204dc4
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'git'
|
2
|
+
|
3
|
+
module GitReleaseNotes
|
4
|
+
class GitAdapter
|
5
|
+
def initialize(dir=Dir.pwd)
|
6
|
+
@dir = dir
|
7
|
+
end
|
8
|
+
|
9
|
+
def messages_for_pattern(commit, regexp)
|
10
|
+
logs = logs_messages_between_sha(commit);
|
11
|
+
logs
|
12
|
+
.select { |l| l[regexp] }
|
13
|
+
.map { |l| { key: l[regexp], git_message: l } }
|
14
|
+
end
|
15
|
+
|
16
|
+
def logs_messages_between_sha(commit)
|
17
|
+
logs = client.log.between(commit, 'HEAD')
|
18
|
+
logs.map do |c|
|
19
|
+
puts c.message
|
20
|
+
c.message
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# def pattern_instances(pattern m )
|
27
|
+
|
28
|
+
def client
|
29
|
+
@client ||= Git.open(@dir)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module GitReleaseNotes
|
2
|
+
class IssueEntry
|
3
|
+
attr_accessor :issue_no, :git_message, :git_timestamp, :jira_summary, :jira_status
|
4
|
+
|
5
|
+
def to_md_string
|
6
|
+
"#{jira_md_link} #{summary}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def jira_md_link
|
10
|
+
"[#{issue_no}](#{jira_path})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def jira_path
|
14
|
+
"#{ENV['JIRA_URL']}/browse/#{issue_no}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def summary
|
18
|
+
jira_summary || "[git] #{git_message}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "HTTParty"
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module GitReleaseNotes
|
5
|
+
class JiraAdapter
|
6
|
+
|
7
|
+
def available?
|
8
|
+
response = client.get('/')
|
9
|
+
response.code == '200'
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_issue(issue)
|
13
|
+
issue_url = "#{api_path}/issue/#{issue.issue_no}"
|
14
|
+
response = HTTParty.get(issue_url, headers: headers, basic_auth: basic_auth)
|
15
|
+
return nil unless response.code == 200
|
16
|
+
issue_from_jira_response(issue, response.body)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def issue_from_jira_response(issue, response_body)
|
22
|
+
json_issue = JSON.parse(response_body)
|
23
|
+
issue.jira_summary = json_issue.summary
|
24
|
+
puts "issue_from_jira_response"
|
25
|
+
puts issue
|
26
|
+
issue
|
27
|
+
end
|
28
|
+
|
29
|
+
def api_path
|
30
|
+
"#{ENV['JIRA_URL']}/rest/api/3"
|
31
|
+
end
|
32
|
+
|
33
|
+
def headers
|
34
|
+
{
|
35
|
+
'Content-Type' => 'application/json',
|
36
|
+
'Accept' => 'application/json'
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def basic_auth
|
41
|
+
pass = ENV['JIRA_API_TOKEN'] || ENV['PASSWORD']
|
42
|
+
|
43
|
+
{
|
44
|
+
:username => ENV['JIRA_USERNAME'],
|
45
|
+
:password => pass
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# require 'json'
|
2
|
+
#
|
3
|
+
# module GitReleaseNotes
|
4
|
+
# class JiraIssue
|
5
|
+
# def initialize(json)
|
6
|
+
# puts "JSON"
|
7
|
+
# puts json
|
8
|
+
# @json_issue = JSON.parse(json) unless json.nil?
|
9
|
+
# puts @json_issue
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# def title
|
13
|
+
# fetched? ? @json_issue["fields"]["summary"] : ""
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# def fetched?
|
17
|
+
# puts "is fetched #{!@json_issue.nil?}"
|
18
|
+
# !@json_issue.nil?
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
# end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module GitReleaseNotes
|
2
|
+
class JiraReleaseNotes
|
3
|
+
def initialize(jira_adapter, git_adapter)
|
4
|
+
@jira_adapter = jira_adapter
|
5
|
+
@git_adapter = git_adapter
|
6
|
+
end
|
7
|
+
|
8
|
+
def jira_tickets_from_commit(project_prefix, commit)
|
9
|
+
git_messages = @git_adapter.messages_for_pattern(commit,jira_issue_pattern(project_prefix))
|
10
|
+
messages = git_messages.map do |m|
|
11
|
+
issue = IssueEntry.new
|
12
|
+
issue.issue_no = m[:key]
|
13
|
+
issue.git_message = m[:git_message]
|
14
|
+
puts "Issue"
|
15
|
+
puts issue
|
16
|
+
issue_fill_from_jira(issue)
|
17
|
+
issue
|
18
|
+
end
|
19
|
+
puts "Messages"
|
20
|
+
puts messages
|
21
|
+
messages
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def jira_issue_pattern(project_prefix)
|
27
|
+
/(#{project_prefix.upcase}|#{project_prefix.downcase})-\d+/
|
28
|
+
end
|
29
|
+
def issue_fill_from_jira(issue)
|
30
|
+
@jira_adapter.get_issue(issue)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module GitReleaseNotes
|
2
|
+
class ReleaseNotes
|
3
|
+
def initialize(project_code, commit)
|
4
|
+
@project_prefix = project_code
|
5
|
+
@from_commit = commit
|
6
|
+
@git_dir = Dir.pwd
|
7
|
+
end
|
8
|
+
|
9
|
+
def set_git_dir(dir)
|
10
|
+
@git_dir = dir
|
11
|
+
end
|
12
|
+
|
13
|
+
def jira_project_prefix(project_code)
|
14
|
+
@project_prefix = project_code
|
15
|
+
end
|
16
|
+
def release_notes_from_commit
|
17
|
+
rn = get_release_notes
|
18
|
+
issues = rn.jira_tickets_from_commit(@project_prefix, @from_commit)
|
19
|
+
notes = issues.map do |i|
|
20
|
+
i.to_md_string
|
21
|
+
end
|
22
|
+
notes.join(" \n")
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_release_notes
|
26
|
+
ga = GitReleaseNotes::GitAdapter.new(@git_dir)
|
27
|
+
ja = GitReleaseNotes::JiraAdapter.new
|
28
|
+
rn = GitReleaseNotes::JiraReleaseNotes.new(ja, ga)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: git_release_notes
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Filip Jakubowski-Drzrwiecki
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-11-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: git
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.12'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.12'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '13.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '13.6'
|
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.12'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.12'
|
55
|
+
description: Building Release Notes from JIRA based on Git commits.
|
56
|
+
email:
|
57
|
+
- don.o.phelippe@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- lib/git_release_notes.rb
|
63
|
+
- lib/git_release_notes/git_adapter.rb
|
64
|
+
- lib/git_release_notes/issue_entry.rb
|
65
|
+
- lib/git_release_notes/jira_adapter.rb
|
66
|
+
- lib/git_release_notes/jira_issue.rb
|
67
|
+
- lib/git_release_notes/jira_release_notes.rb
|
68
|
+
- lib/git_release_notes/release_notes.rb
|
69
|
+
- lib/git_release_notes/version.rb
|
70
|
+
homepage: https://github.com/filipjakubowski
|
71
|
+
licenses:
|
72
|
+
- MIT
|
73
|
+
metadata:
|
74
|
+
source_code_uri: https://github.com/filipjakubowski/git_release_notes
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubygems_version: 3.3.7
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Jira Issues
|
94
|
+
test_files: []
|