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 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
@@ -0,0 +1,3 @@
1
+ module GitReleaseNotes
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,6 @@
1
+ require 'git_release_notes/git_adapter'
2
+ require 'git_release_notes/jira_adapter'
3
+ require 'git_release_notes/jira_release_notes'
4
+ require 'git_release_notes/jira_issue'
5
+ require 'git_release_notes/issue_entry'
6
+ require 'git_release_notes/release_notes'
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: []