/
build.rb
79 lines (68 loc) · 2.5 KB
/
build.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
class Event::Build < Event::Package
self.description = 'Package has finished building'
self.abstract_class = true
payload_keys :repository, :arch, :release, :readytime, :srcmd5,
:rev, :reason, :bcnt, :verifymd5, :hostarch, :starttime, :endtime, :workerid, :versrel
def my_message_id
# we put the verifymd5 sum in the message id, so new checkins get new thread, but it doesn't have to be very correct
md5 = payload['verifymd5'][0..6]
domain = URI.parse(::Configuration.first.obs_url)
mid = Digest::MD5.hexdigest("#{payload['project']}-#{payload['package']}-#{payload['repository']}-#{md5}")
"<build-#{mid}@#{domain.host.downcase}>"
end
def custom_headers
mid = my_message_id
h = super
h['In-Reply-To'] = mid
h['References'] = mid
h
end
end
class Event::BuildSuccess < Event::Build
self.raw_type = 'BUILD_SUCCESS'
self.description = 'Package has succeeded building'
end
class Event::BuildFail < Event::Build
include BuildLogSupport
self.raw_type = 'BUILD_FAIL'
self.description = 'Package has failed to build'
receiver_roles :maintainer
def subject
"Build failure of #{payload['project']}/#{payload['package']} in #{payload['repository']}/#{payload['arch']}"
end
def faillog
begin
size = get_size_of_log(payload['project'], payload['package'], payload['repository'], payload['arch'])
offset = size - 18 * 1024
offset = 0 if offset < 0
log = raw_log_chunk(payload['project'], payload['package'], payload['repository'], payload['arch'], offset, size)
begin
log.encode!(invalid: :replace, undef: :replace, universal_newline: true)
rescue Encoding::UndefinedConversionError
# encode is documented not to throw it if undef: is :replace, but at least we tried - and ruby 1.9.3 is buggy
end
log = log.chomp.lines
if log.length > 30
log = log.slice(-29, log.length)
end
log.join
rescue ActiveXML::Transport::Error
nil
end
end
def expanded_payload
payload.merge('faillog' => faillog)
end
def custom_headers
h = super
h['X-OBS-Package'] = "#{payload['project']}/#{payload['package']}"
h['X-OBS-Repository'] = "#{payload['repository']}/#{payload['arch']}"
h['X-OBS-Worker'] = payload['workerid']
h['X-OBS-Rebuild-Reason'] = payload['reason']
h
end
end
class Event::BuildUnchanged < Event::Build
# no raw_type as it should not go to plugins
self.description = 'Package has succeeded building with unchanged result'
end