gerrit2jiracomment 0.2.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/.gitignore +13 -0
- data/.rspec +3 -0
- data/.rubocop.yml +4 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +2 -0
- data/.travis.yml +17 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +75 -0
- data/Rakefile +13 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/exe/gerrit2jiracomment +7 -0
- data/gerrit2jiracomment.gemspec +34 -0
- data/lib/gerrit2jiracomment/version.rb +5 -0
- data/lib/gerrit2jiracomment.rb +234 -0
- data/readme.org +17 -0
- data/settings.yaml.example +5 -0
- metadata +173 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: bae95b41f97ca719c6fa6f50418e4e9392e2834b4b1c99a8a57161b4c569210f
|
|
4
|
+
data.tar.gz: 72a90d57cb1f7ff33e6014ad0026bbbeba2cf4d26a14acddee7c4bc422b1386a
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 7c91d240266ef60780260d6a4fdbeee7cd85db4c108ab5c1c2fe27049936d44a66c003f88d2e3f3048f0a924a120e89f9814701ef062e65ddebeac9a301da7bf
|
|
7
|
+
data.tar.gz: 0777b77ec37effe3b522cfaf1981927851dd3497a4d5c990db757356fee6b69ba03207bb795543754961c5275ba9fda8a209e9c5d0e20c281d5949e5fffcc158
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
data/.ruby-gemset
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
gerrit2jiracomment
|
data/.ruby-version
ADDED
data/.travis.yml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
language: ruby
|
|
2
|
+
rvm:
|
|
3
|
+
- 2.5.0
|
|
4
|
+
sudo: false
|
|
5
|
+
before_install:
|
|
6
|
+
- gem install bundler -v 1.16.1
|
|
7
|
+
before_script:
|
|
8
|
+
- bundle install
|
|
9
|
+
script:
|
|
10
|
+
- bundle exec rake spec build
|
|
11
|
+
deploy:
|
|
12
|
+
provider: rubygems
|
|
13
|
+
skip_cleanup: true
|
|
14
|
+
api_key:
|
|
15
|
+
secure: 5gAc1r58UKCjXVNCHYse1GiWM3tPMo0IHuiOA6A/C1rGzVRmimu1i4Q1JQyeViwIrGj1XP4hK1iCBcoFWJe/wY3FVI9UThA4Y76o4aqRRqxbxzFwnK7iRXb50STllMA78UnDQggKWhm0k6EDtkLYl9wIfeTG7Wcx/rr6kGYiROTsiqXKPy+KVFGAF0NtJvehAXxJu4zrLN5bcEPGCFQijd7rEjgwShsRwPs2k8BHmOTnqDIKLqAnRdzcoX4sNR1P3gggvDnJ4+cAqOGv6v3EWHaAMJEI4DE1sDNeRf8lY2OSGS7LZaFtcth6+k3W3rCiDgiJ7CIcPXxWat/IGC8kwV89jhRB8dZ12G5pBWfoiM23Zm7EZ2JEz8fH2dpqbznIEJblo2HbArCZyY0K/cdMfxHNTDPh856Oh0dX2iOdCL+PhgCMjmWWPJDphR06zVmfCxDrDo3zHzzG1EOQDAIE8BNDp1JvkadpuoxCUTL5T0Hyq1E/VJiMJtCmIQWssXn2e0oNK3qeiplMsPmhLNp+fmcqY3kH3P8uYlEedeJaaBMkBRj/vWC0xrajupllbPsVhj0RVD3joP+VrUbjvweagRN6UYR6v8NDgAVxXuSn1FPxFR3g6rQOZRQF1fEx+SqEcbIzQFdDG6Lym/TWJqzVu2dVZfikjw5Df0YOLhXXgXA=
|
|
16
|
+
# on:
|
|
17
|
+
# tags: true
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
gerrit2jiracomment (0.2.2)
|
|
5
|
+
byebug
|
|
6
|
+
jira-ruby
|
|
7
|
+
rx
|
|
8
|
+
|
|
9
|
+
GEM
|
|
10
|
+
remote: https://rubygems.org/
|
|
11
|
+
specs:
|
|
12
|
+
activesupport (5.1.4)
|
|
13
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
14
|
+
i18n (~> 0.7)
|
|
15
|
+
minitest (~> 5.1)
|
|
16
|
+
tzinfo (~> 1.1)
|
|
17
|
+
ast (2.3.0)
|
|
18
|
+
byebug (10.0.0)
|
|
19
|
+
concurrent-ruby (1.0.5)
|
|
20
|
+
diff-lcs (1.3)
|
|
21
|
+
i18n (0.9.3)
|
|
22
|
+
concurrent-ruby (~> 1.0)
|
|
23
|
+
jira-ruby (1.5.0)
|
|
24
|
+
activesupport
|
|
25
|
+
multipart-post
|
|
26
|
+
oauth (~> 0.5, >= 0.5.0)
|
|
27
|
+
minitest (5.11.3)
|
|
28
|
+
multipart-post (2.0.0)
|
|
29
|
+
oauth (0.5.4)
|
|
30
|
+
parallel (1.12.1)
|
|
31
|
+
parser (2.4.0.2)
|
|
32
|
+
ast (~> 2.3)
|
|
33
|
+
powerpack (0.1.1)
|
|
34
|
+
rainbow (3.0.0)
|
|
35
|
+
rake (12.3.0)
|
|
36
|
+
rspec (3.7.0)
|
|
37
|
+
rspec-core (~> 3.7.0)
|
|
38
|
+
rspec-expectations (~> 3.7.0)
|
|
39
|
+
rspec-mocks (~> 3.7.0)
|
|
40
|
+
rspec-core (3.7.0)
|
|
41
|
+
rspec-support (~> 3.7.0)
|
|
42
|
+
rspec-expectations (3.7.0)
|
|
43
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
44
|
+
rspec-support (~> 3.7.0)
|
|
45
|
+
rspec-mocks (3.7.0)
|
|
46
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
47
|
+
rspec-support (~> 3.7.0)
|
|
48
|
+
rspec-support (3.7.0)
|
|
49
|
+
rubocop (0.52.1)
|
|
50
|
+
parallel (~> 1.10)
|
|
51
|
+
parser (>= 2.4.0.2, < 3.0)
|
|
52
|
+
powerpack (~> 0.1)
|
|
53
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
54
|
+
ruby-progressbar (~> 1.7)
|
|
55
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
56
|
+
ruby-progressbar (1.9.0)
|
|
57
|
+
rx (0.0.3)
|
|
58
|
+
thread_safe (0.3.6)
|
|
59
|
+
tzinfo (1.2.4)
|
|
60
|
+
thread_safe (~> 0.1)
|
|
61
|
+
unicode-display_width (1.3.0)
|
|
62
|
+
|
|
63
|
+
PLATFORMS
|
|
64
|
+
ruby
|
|
65
|
+
|
|
66
|
+
DEPENDENCIES
|
|
67
|
+
bundler
|
|
68
|
+
gerrit2jiracomment!
|
|
69
|
+
rake
|
|
70
|
+
rspec
|
|
71
|
+
rspec-mocks
|
|
72
|
+
rubocop
|
|
73
|
+
|
|
74
|
+
BUNDLED WITH
|
|
75
|
+
1.16.1
|
data/Rakefile
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bundler/gem_tasks'
|
|
4
|
+
require 'rspec/core/rake_task'
|
|
5
|
+
require 'rubocop/rake_task'
|
|
6
|
+
|
|
7
|
+
RuboCop::RakeTask.new
|
|
8
|
+
# as soon as the project is clean enough, enable this
|
|
9
|
+
Rake::Task['build'].enhance(['rubocop:auto_correct'])
|
|
10
|
+
|
|
11
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
12
|
+
|
|
13
|
+
task default: :spec
|
data/bin/console
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'bundler/setup'
|
|
5
|
+
require 'gerrit2jiracomment'
|
|
6
|
+
|
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
9
|
+
|
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
11
|
+
# require "pry"
|
|
12
|
+
# Pry.start
|
|
13
|
+
|
|
14
|
+
require 'irb'
|
|
15
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
5
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
6
|
+
require 'gerrit2jiracomment/version'
|
|
7
|
+
|
|
8
|
+
Gem::Specification.new do |spec|
|
|
9
|
+
spec.name = 'gerrit2jiracomment'
|
|
10
|
+
spec.version = Gerrit2jiracomment::VERSION
|
|
11
|
+
spec.authors = ['Christian Koestlin']
|
|
12
|
+
spec.email = ['info@esrlabs.com']
|
|
13
|
+
|
|
14
|
+
spec.summary = 'Simple gem that listens on gerrit stream-events' \
|
|
15
|
+
' and puts comments to jira.'
|
|
16
|
+
spec.description = 'Nothing more to add'
|
|
17
|
+
spec.homepage = 'https://not.done.yet'
|
|
18
|
+
|
|
19
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
20
|
+
f.match(%r{^(test|spec|features)/})
|
|
21
|
+
end
|
|
22
|
+
spec.bindir = 'exe'
|
|
23
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
24
|
+
spec.require_paths = ['lib']
|
|
25
|
+
|
|
26
|
+
spec.add_dependency 'byebug'
|
|
27
|
+
spec.add_dependency 'jira-ruby'
|
|
28
|
+
spec.add_dependency 'rx'
|
|
29
|
+
spec.add_development_dependency 'bundler'
|
|
30
|
+
spec.add_development_dependency 'rake'
|
|
31
|
+
spec.add_development_dependency 'rspec'
|
|
32
|
+
spec.add_development_dependency 'rspec-mocks'
|
|
33
|
+
spec.add_development_dependency 'rubocop'
|
|
34
|
+
end
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'gerrit2jiracomment/version'
|
|
4
|
+
require 'logger'
|
|
5
|
+
require 'syslog/logger'
|
|
6
|
+
require 'json'
|
|
7
|
+
require 'open3'
|
|
8
|
+
require 'ostruct'
|
|
9
|
+
require 'byebug'
|
|
10
|
+
require 'jira-ruby'
|
|
11
|
+
require 'yaml'
|
|
12
|
+
require 'rx'
|
|
13
|
+
|
|
14
|
+
# Gerrit 2 jira sync module
|
|
15
|
+
module Gerrit2jiracomment
|
|
16
|
+
# wrapper for a logger that always adds tags
|
|
17
|
+
class LoggerWithTag
|
|
18
|
+
def initialize(log, tag)
|
|
19
|
+
@log = log
|
|
20
|
+
@tag = tag
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def debug(message)
|
|
24
|
+
@log.debug("#{@tag}†#{message}")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def info(message)
|
|
28
|
+
@log.info("#{@tag}†#{message}")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def error(message, error)
|
|
32
|
+
error_message = "#{error} #{error.backtrace.join('\\n\\t')}"
|
|
33
|
+
@log.error("#{@tag}†#{message}: #{error_message}")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def fail(c, message)
|
|
37
|
+
raise(c, "#{@tag}†#{message}")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.regexp
|
|
42
|
+
Regexp.new('\\b*[A-Z0-9]+-\\d+\\b*')
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Exception if something goes wrong with processing events
|
|
46
|
+
class ProcessException < RuntimeError
|
|
47
|
+
def initialize(msg)
|
|
48
|
+
super(msg)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# React on events by sending data to jira
|
|
53
|
+
class ToJira
|
|
54
|
+
def initialize(logger, jira)
|
|
55
|
+
@logger = logger
|
|
56
|
+
@jira = jira
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def gitiles_url(base_url, event)
|
|
60
|
+
gitiles = "#{base_url}/plugins/gitiles/"
|
|
61
|
+
"[#{event.patchSet.revision}|" \
|
|
62
|
+
"#{gitiles}#{event.change.project}/+/#{event.patchSet.revision}]"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def author_line(event)
|
|
66
|
+
"Author: #{event.patchSet.author.email}"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def submitter_line(event)
|
|
70
|
+
"Submitter: #{event.submitter.email}"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def commit_line(base_url, event)
|
|
74
|
+
"Commit: #{gitiles_url(base_url, event)}"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def changeset_line(event)
|
|
78
|
+
url = event.change.url
|
|
79
|
+
"Changeset: [#{url}|#{url}]"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def branch_line(event)
|
|
83
|
+
"Branch: #{event.change.branch}"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def project_line(server, event)
|
|
87
|
+
"Project: #{server}/#{event.change.project}"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def title_line(event)
|
|
91
|
+
"Title: #{event.change.subject}"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def assemble_change_merged_comment(event, server, uri)
|
|
95
|
+
base_url = "#{uri.scheme}://#{uri.host}"
|
|
96
|
+
[title_line(event), author_line(event), submitter_line(event),
|
|
97
|
+
changeset_line(event), branch_line(event),
|
|
98
|
+
project_line(server, event), commit_line(base_url, event)]
|
|
99
|
+
.join("\n")
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def handle_change_merged_issue_comment(issue, log, event, server)
|
|
103
|
+
log.debug("Found jira issue comment: '#{issue}'")
|
|
104
|
+
uri = URI.parse(event.change.url)
|
|
105
|
+
comment_text = assemble_change_merged_comment(event, server, uri)
|
|
106
|
+
log.debug("Adding #{comment_text} to jira #{issue}")
|
|
107
|
+
@jira.Issue.find(issue).comments.build.save!(body: comment_text)
|
|
108
|
+
true
|
|
109
|
+
rescue JIRA::HTTPError => e
|
|
110
|
+
log.error("Cannot find #{issue} in our jira", e)
|
|
111
|
+
false
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def change_merged(log, event, server)
|
|
115
|
+
log = LoggerWithTag.new(log, 'changeset')
|
|
116
|
+
|
|
117
|
+
log.debug("Send change merged to jira #{event}")
|
|
118
|
+
|
|
119
|
+
message = event.change.commitMessage
|
|
120
|
+
log.debug("Found commit: #{event.change.subject}\n#{message}")
|
|
121
|
+
|
|
122
|
+
found = false
|
|
123
|
+
message.scan(Gerrit2jiracomment.regexp).map(&:strip).each do |match|
|
|
124
|
+
found ||= handle_change_merged_issue_comment(match, log, event, server)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
found || log.fail(ProcessException, "No jira-issue found in #{event}")
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def self.parse_json(line)
|
|
132
|
+
JSON.parse(line, object_class: OpenStruct)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def self.stdout_in_utf8(command)
|
|
136
|
+
_stdin, stdout, _stderr = Open3.popen3(command)
|
|
137
|
+
stdout.set_encoding 'UTF-8:UTF-8'
|
|
138
|
+
stdout
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def self.receive_events(logger, from, sink)
|
|
142
|
+
Thread.new do
|
|
143
|
+
logger.debug("lifecycle†Connecting to event stream of #{from}")
|
|
144
|
+
stdout_in_utf8("ssh #{from} gerrit stream-events").each_line do |line|
|
|
145
|
+
sink.on_next([JSON.parse(line, object_class: OpenStruct), from])
|
|
146
|
+
end
|
|
147
|
+
logger.debug("lifecycle†Processing stream from #{from} finished")
|
|
148
|
+
rescue StandardError => e
|
|
149
|
+
logger.error(e.to_s)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def self.dispatch(log, e, sink)
|
|
154
|
+
logger = LoggerWithTag.new(log, 'events')
|
|
155
|
+
event = e.first
|
|
156
|
+
server = e[1]
|
|
157
|
+
return sink.send(event.type.tr('-', '_').to_sym, log, event, server)
|
|
158
|
+
rescue NoMethodError => e
|
|
159
|
+
logger.debug("Cannot handle event of type #{event.type} - #{e}")
|
|
160
|
+
false
|
|
161
|
+
rescue StandardError => error
|
|
162
|
+
logger.error('Cannot process event', error)
|
|
163
|
+
false
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def self.syslog_or_stdout_logger
|
|
167
|
+
Syslog::Logger.new 'g2jc'
|
|
168
|
+
rescue StandardError
|
|
169
|
+
Logger.new(STDOUT)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def self.tag_and_message(msg)
|
|
173
|
+
tag, m = msg.split('†')
|
|
174
|
+
unless m
|
|
175
|
+
m = tag
|
|
176
|
+
tag = 'gerrit2jiracomment'
|
|
177
|
+
end
|
|
178
|
+
[tag, m]
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def self.init_logger
|
|
182
|
+
logger = syslog_or_stdout_logger
|
|
183
|
+
logger.formatter = proc do |severity, datetime, _progname, msg|
|
|
184
|
+
tag, message = tag_and_message(msg)
|
|
185
|
+
format('%<year>04d-%<month>02d-%<day>02d %<hour>02d:%<min>02d:' \
|
|
186
|
+
"%<sec>02d.000 7331 %<severity>s %<tag>s: %<message>s\n",
|
|
187
|
+
year: datetime.year, month: datetime.month, day: datetime.day,
|
|
188
|
+
hour: datetime.hour, min: datetime.min, sec: datetime.sec,
|
|
189
|
+
severity: severity[0], tag: tag, message: message)
|
|
190
|
+
end
|
|
191
|
+
logger
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def self.load_settings(logger)
|
|
195
|
+
logger.debug('lifecycle†loading settings from settings.yaml.gpg')
|
|
196
|
+
YAML.safe_load(`gpg --decrypt settings.yaml.gpg 2> /dev/null`)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def self.to_jira(logger, settings)
|
|
200
|
+
ToJira.new(logger,
|
|
201
|
+
JIRA::Client.new(
|
|
202
|
+
username: settings['jira_user'],
|
|
203
|
+
password: settings['jira_password'],
|
|
204
|
+
site: 'https://esrlabs.atlassian.net/',
|
|
205
|
+
context_path: '', auth_type: :basic,
|
|
206
|
+
use_ssl: true,
|
|
207
|
+
ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE
|
|
208
|
+
))
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def self.connect(logger, subject, event_sink)
|
|
212
|
+
subject.as_observable.subscribe(
|
|
213
|
+
->(e) { dispatch(logger, e, event_sink) },
|
|
214
|
+
->(_err) { logger.error(error) },
|
|
215
|
+
-> { logger.info('lifecycle†finished') }
|
|
216
|
+
)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def self.run
|
|
220
|
+
logger = init_logger
|
|
221
|
+
|
|
222
|
+
settings = load_settings(logger)
|
|
223
|
+
|
|
224
|
+
subject = Rx::Subject.new
|
|
225
|
+
event_sink = to_jira(logger, settings)
|
|
226
|
+
|
|
227
|
+
connect(logger, subject, event_sink)
|
|
228
|
+
|
|
229
|
+
['gerrit.int.esrlabs.com', 'git.esrlabs.com']
|
|
230
|
+
.map { |server| receive_events(logger, server, subject) }
|
|
231
|
+
.each(&:join)
|
|
232
|
+
logger.info('lifecycle†exiting')
|
|
233
|
+
end
|
|
234
|
+
end
|
data/readme.org
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
* Gerrit2jiracomment [[https://github.com/gizmomogwai/gerrit2jiracomment][https://img.shields.io/github/tag/gizmomogwai/gerrit2jiracomment.svg?style=flat-square]] [[https://travis-ci.org/gizmomogwai/gerrit2jiracomment][https://img.shields.io/travis/gizmomogwai/gerrit2jiracomment/master.svg?style=flat-square]] [[https://codecov.io/gh/gizmomogwai/gerrit2jiracomment][https://img.shields.io/codecov/c/github/gizmomogwai/gerrit2jiracomment/master.svg?style=flat-square]] [[https://gizmomogwai.github.io/gerrit2jiracomment][https://img.shields.io/readthedocs/pip.svg?style=flat-square]]
|
|
2
|
+
|
|
3
|
+
Proof of concept implementation that listens on a gerrit stream and updated jira comments accordingly.
|
|
4
|
+
|
|
5
|
+
** Installation
|
|
6
|
+
|
|
7
|
+
first compile and install gerry 0.1.5.
|
|
8
|
+
then compile and install gerrit2jiracomment.
|
|
9
|
+
|
|
10
|
+
** Usage
|
|
11
|
+
|
|
12
|
+
`bundle exec exe/gerrit2jiracomment` for development or just gerrit2jiracomment
|
|
13
|
+
encode your settings with gpg -e -r user@email.com settings.yaml
|
|
14
|
+
|
|
15
|
+
** Development
|
|
16
|
+
|
|
17
|
+
** Contributing
|
metadata
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: gerrit2jiracomment
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Christian Koestlin
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2018-02-03 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: byebug
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: jira-ruby
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rx
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: bundler
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rake
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rspec
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: rspec-mocks
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: rubocop
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
125
|
+
description: Nothing more to add
|
|
126
|
+
email:
|
|
127
|
+
- info@esrlabs.com
|
|
128
|
+
executables:
|
|
129
|
+
- gerrit2jiracomment
|
|
130
|
+
extensions: []
|
|
131
|
+
extra_rdoc_files: []
|
|
132
|
+
files:
|
|
133
|
+
- ".gitignore"
|
|
134
|
+
- ".rspec"
|
|
135
|
+
- ".rubocop.yml"
|
|
136
|
+
- ".ruby-gemset"
|
|
137
|
+
- ".ruby-version"
|
|
138
|
+
- ".travis.yml"
|
|
139
|
+
- Gemfile
|
|
140
|
+
- Gemfile.lock
|
|
141
|
+
- Rakefile
|
|
142
|
+
- bin/console
|
|
143
|
+
- bin/setup
|
|
144
|
+
- exe/gerrit2jiracomment
|
|
145
|
+
- gerrit2jiracomment.gemspec
|
|
146
|
+
- lib/gerrit2jiracomment.rb
|
|
147
|
+
- lib/gerrit2jiracomment/version.rb
|
|
148
|
+
- readme.org
|
|
149
|
+
- settings.yaml.example
|
|
150
|
+
homepage: https://not.done.yet
|
|
151
|
+
licenses: []
|
|
152
|
+
metadata: {}
|
|
153
|
+
post_install_message:
|
|
154
|
+
rdoc_options: []
|
|
155
|
+
require_paths:
|
|
156
|
+
- lib
|
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
|
+
requirements:
|
|
159
|
+
- - ">="
|
|
160
|
+
- !ruby/object:Gem::Version
|
|
161
|
+
version: '0'
|
|
162
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - ">="
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '0'
|
|
167
|
+
requirements: []
|
|
168
|
+
rubyforge_project:
|
|
169
|
+
rubygems_version: 2.7.3
|
|
170
|
+
signing_key:
|
|
171
|
+
specification_version: 4
|
|
172
|
+
summary: Simple gem that listens on gerrit stream-events and puts comments to jira.
|
|
173
|
+
test_files: []
|