lita-buildkite 0.2.0 → 0.3.0
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
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
|