lita-buildkite 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 953eff0635c21e6f0ba534ae8f83f2e03f25e8bb3601df454ab4a6a4deba7884
|
4
|
+
data.tar.gz: 3445aeec102832ad704e80e1dee4be328d22cc40311956bea6fa8d5966f8c3af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8f366eba228d5c038f4e101c51fdcac0865ffa878af7fb0a55e5bda3196d27e8ac53b06f1c540bad6a218b96040b29f34d98788a716488abff1b65d67994104
|
7
|
+
data.tar.gz: f2937b54070e20ae5364ba75d97b884fe05cb3177c5a51c4f00803fe26df3e6804dc93b3a5cb6301bd82de91ef233982def94b99a3c4d5f8d6c969fbd7b32ba6
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class BuildStatusReport
|
2
|
+
def initialize(event, days_since_last_failure, prev_days_since_last_failure, most_successful_days)
|
3
|
+
@event = event
|
4
|
+
@days_since_last_failure = days_since_last_failure
|
5
|
+
@prev_days_since_last_failure = prev_days_since_last_failure
|
6
|
+
@most_successful_days = most_successful_days
|
7
|
+
|
8
|
+
yield message if message
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def message
|
14
|
+
@message ||= begin
|
15
|
+
if @days_since_last_failure > @prev_days_since_last_failure
|
16
|
+
"#{@event.pipeline} is #{@days_since_last_failure} days without a failure"
|
17
|
+
elsif @days_since_last_failure < @prev_days_since_last_failure
|
18
|
+
if @prev_days_since_last_failure >= @most_successful_days
|
19
|
+
"#{@event.pipeline} ended it's record breaking run of #{@prev_days_since_last_failure} days without a failure 😢"
|
20
|
+
else
|
21
|
+
"#{@event.pipeline} failed after #{@prev_days_since_last_failure} days, previous best was #{@most_successful_days}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -24,16 +24,15 @@ module Lita
|
|
24
24
|
private
|
25
25
|
|
26
26
|
def process_build_finished(event, &block)
|
27
|
-
repository
|
28
|
-
|
29
|
-
if days_since_last_failure < prev_days_since_last_failure
|
30
|
-
yield "Oh Oh, #{days_since_last_failure} day(s) since the last master failure on #{event.pipeline}"
|
31
|
-
elsif days_since_last_failure > prev_days_since_last_failure
|
32
|
-
yield "Congratulations! #{days_since_last_failure} day(s) since the last master failure on #{event.pipeline}"
|
33
|
-
end
|
27
|
+
repository(event).record_result(event) do |message|
|
28
|
+
yield message
|
34
29
|
end
|
35
30
|
end
|
36
31
|
|
32
|
+
def repository(event)
|
33
|
+
DaysSinceMasterFailureRepository.new(redis, event.pipeline)
|
34
|
+
end
|
35
|
+
|
37
36
|
def target
|
38
37
|
Source.new(room: Lita::Room.find_by_name(config.channel_name) || "general")
|
39
38
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'lita/build_status_report'
|
2
|
+
|
1
3
|
# Provides all persistence logic for the DaysSinceMasterFailure handler, insulating
|
2
4
|
# the handler from any knowledge of redis
|
3
5
|
class DaysSinceMasterFailureRepository
|
@@ -5,18 +7,29 @@ class DaysSinceMasterFailureRepository
|
|
5
7
|
@redis = redis
|
6
8
|
@last_failure_key = "last-failure-at-#{pipeline_name}"
|
7
9
|
@last_reported_days_key = "last-reported-days-#{pipeline_name}"
|
10
|
+
@most_successful_days_key = "most-successful-days-#{pipeline_name}"
|
8
11
|
|
9
12
|
initialise_last_failure_at_if_not_set
|
13
|
+
initialise_most_successful_days_if_not_set
|
10
14
|
end
|
11
15
|
|
12
|
-
def record_result(
|
13
|
-
touch_last_failure_at if !
|
14
|
-
|
16
|
+
def record_result(event, &block)
|
17
|
+
touch_last_failure_at if !event.passed?
|
18
|
+
touch_most_successful_days if !event.passed? && new_record?
|
19
|
+
|
20
|
+
BuildStatusReport.new(event, days_since_last_failure, last_reported_days, most_successful_days) do |message|
|
21
|
+
yield message
|
22
|
+
end
|
23
|
+
|
15
24
|
touch_last_reported_days
|
16
25
|
end
|
17
26
|
|
18
27
|
private
|
19
28
|
|
29
|
+
def new_record?
|
30
|
+
last_reported_days > most_successful_days
|
31
|
+
end
|
32
|
+
|
20
33
|
def seconds_to_days(secs)
|
21
34
|
secs.to_i / 60 / 60 / 24
|
22
35
|
end
|
@@ -33,6 +46,10 @@ class DaysSinceMasterFailureRepository
|
|
33
46
|
set_last_reported_days(days_since_last_failure)
|
34
47
|
end
|
35
48
|
|
49
|
+
def touch_most_successful_days
|
50
|
+
set_most_successful_days(last_reported_days)
|
51
|
+
end
|
52
|
+
|
36
53
|
def fetch_last_failure_at
|
37
54
|
@redis.get(@last_failure_key).to_i
|
38
55
|
end
|
@@ -41,11 +58,23 @@ class DaysSinceMasterFailureRepository
|
|
41
58
|
@redis.set(@last_reported_days_key, days.to_i)
|
42
59
|
end
|
43
60
|
|
61
|
+
def set_most_successful_days(days)
|
62
|
+
@redis.set(@most_successful_days_key, days.to_i)
|
63
|
+
end
|
64
|
+
|
44
65
|
def last_reported_days
|
45
66
|
@redis.get(@last_reported_days_key).to_i
|
46
67
|
end
|
47
68
|
|
69
|
+
def most_successful_days
|
70
|
+
@redis.get(@most_successful_days_key).to_i
|
71
|
+
end
|
72
|
+
|
48
73
|
def initialise_last_failure_at_if_not_set
|
49
74
|
@redis.setnx(@last_failure_key, ::Time.now.to_i)
|
50
75
|
end
|
76
|
+
|
77
|
+
def initialise_most_successful_days_if_not_set
|
78
|
+
@redis.setnx(@most_successful_days_key, days_since_last_failure)
|
79
|
+
end
|
51
80
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-buildkite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Healy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- MIT-LICENSE
|
94
94
|
- README.md
|
95
95
|
- lib/lita-buildkite.rb
|
96
|
+
- lib/lita/build_status_report.rb
|
96
97
|
- lib/lita/buildkite.rb
|
97
98
|
- lib/lita/buildkite_build_finished_event.rb
|
98
99
|
- lib/lita/buildkite_event.rb
|
@@ -121,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
122
|
version: '0'
|
122
123
|
requirements: []
|
123
124
|
rubyforge_project:
|
124
|
-
rubygems_version: 2.
|
125
|
+
rubygems_version: 2.7.3
|
125
126
|
signing_key:
|
126
127
|
specification_version: 4
|
127
128
|
summary: Lita handler for interacting with buildkite.com, a continuous integration
|