kennel 1.116.0 → 1.117.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 +4 -4
- data/lib/kennel/file_cache.rb +7 -1
- data/lib/kennel/syncer.rb +30 -1
- data/lib/kennel/utils.rb +2 -2
- data/lib/kennel/version.rb +1 -1
- data/lib/kennel.rb +7 -2
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83531b8281e71f8a5f8e307320c81f2ecf4c320da617c27777b08325f1394ed1
|
4
|
+
data.tar.gz: 1d3bce11c52a35f07a48546d37147213a8ca407e7e30710a8efaedc59be8dcd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fddea7652c95c90fb529520ab1422f8a8dca9d27f3fd05dd6d3abb0892e831c1fb91af4455b77eba748cd635f86537d19b473eacd2004721ce0717e342efc25d
|
7
|
+
data.tar.gz: 537d25042eb17f6a86a65edba83e57001f1da160eacad93478062aec665cdad2798040a946b21bab53818fec2bed6089d1f15b22ca5fddc15e85fc5f1aa0d036
|
data/lib/kennel/file_cache.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "tempfile"
|
4
|
+
|
3
5
|
# cache that reads everything from a single file
|
4
6
|
# - avoids doing multiple disk reads while iterating all definitions
|
5
7
|
# - has a global expiry to not keep deleted resources forever
|
@@ -44,7 +46,11 @@ module Kennel
|
|
44
46
|
def persist
|
45
47
|
dir = File.dirname(@file)
|
46
48
|
FileUtils.mkdir_p(dir) unless File.directory?(dir)
|
47
|
-
|
49
|
+
|
50
|
+
Tempfile.create do |tmp|
|
51
|
+
Marshal.dump @data, tmp
|
52
|
+
File.rename tmp.path, @file
|
53
|
+
end
|
48
54
|
end
|
49
55
|
|
50
56
|
# keep the cache small to make loading it fast (5MB ~= 100ms)
|
data/lib/kennel/syncer.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "diff/lcs"
|
4
|
+
|
2
5
|
module Kennel
|
3
6
|
class Syncer
|
4
7
|
DELETE_ORDER = ["dashboard", "slo", "monitor", "synthetics/tests"].freeze # dashboards references monitors + slos, slos reference monitors
|
@@ -196,16 +199,22 @@ module Kennel
|
|
196
199
|
|
197
200
|
def print_diff(diff)
|
198
201
|
diff.each do |type, field, old, new|
|
202
|
+
use_diff = false
|
199
203
|
if type == "+"
|
200
204
|
temp = Utils.pretty_inspect(new)
|
201
205
|
new = Utils.pretty_inspect(old)
|
202
206
|
old = temp
|
207
|
+
elsif old.is_a?(String) && new.is_a?(String) && (old.include?("\n") || new.include?("\n"))
|
208
|
+
use_diff = true
|
203
209
|
else # ~ and -
|
204
210
|
old = Utils.pretty_inspect(old)
|
205
211
|
new = Utils.pretty_inspect(new)
|
206
212
|
end
|
207
213
|
|
208
|
-
if
|
214
|
+
if use_diff
|
215
|
+
Kennel.out.puts " #{type}#{field}"
|
216
|
+
Kennel.out.puts(diff(old, new).map { |l| " #{l}" })
|
217
|
+
elsif (old + new).size > 100
|
209
218
|
Kennel.out.puts " #{type}#{field}"
|
210
219
|
Kennel.out.puts " #{old} ->"
|
211
220
|
Kennel.out.puts " #{new}"
|
@@ -215,6 +224,26 @@ module Kennel
|
|
215
224
|
end
|
216
225
|
end
|
217
226
|
|
227
|
+
# display diff for multi-line strings
|
228
|
+
# must stay readable when color is off too
|
229
|
+
def diff(old, new)
|
230
|
+
Diff::LCS.sdiff(old.split("\n", -1), new.split("\n", -1)).flat_map do |diff|
|
231
|
+
case diff.action
|
232
|
+
when "-"
|
233
|
+
Utils.color(:red, "- #{diff.old_element}")
|
234
|
+
when "+"
|
235
|
+
Utils.color(:green, "+ #{diff.new_element}")
|
236
|
+
when "!"
|
237
|
+
[
|
238
|
+
Utils.color(:red, "- #{diff.old_element}"),
|
239
|
+
Utils.color(:green, "+ #{diff.new_element}")
|
240
|
+
]
|
241
|
+
else
|
242
|
+
" #{diff.old_element}"
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
218
247
|
# We've already validated the desired objects ('generated') in isolation.
|
219
248
|
# Now that we have made the plan, we can perform some more validation.
|
220
249
|
def validate_plan
|
data/lib/kennel/utils.rb
CHANGED
@@ -113,7 +113,7 @@ module Kennel
|
|
113
113
|
done[i] =
|
114
114
|
begin
|
115
115
|
yield item
|
116
|
-
rescue
|
116
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
117
117
|
work.clear
|
118
118
|
e
|
119
119
|
end
|
@@ -121,7 +121,7 @@ module Kennel
|
|
121
121
|
end
|
122
122
|
end
|
123
123
|
workers.each(&:join)
|
124
|
-
done.each { |d| raise d if d.is_a?(
|
124
|
+
done.each { |d| raise d if d.is_a?(Exception) }
|
125
125
|
end
|
126
126
|
|
127
127
|
def natural_order(name)
|
data/lib/kennel/version.rb
CHANGED
data/lib/kennel.rb
CHANGED
@@ -138,8 +138,12 @@ module Kennel
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def project_filter
|
141
|
-
|
142
|
-
|
141
|
+
projects = ENV["PROJECT"]&.split(",")
|
142
|
+
tracking_projects = tracking_id_filter&.map { |id| id.split(":", 2).first }
|
143
|
+
if projects && tracking_projects && projects != tracking_projects
|
144
|
+
raise "do not set PROJECT= when using TRACKING_ID="
|
145
|
+
end
|
146
|
+
projects || tracking_projects
|
143
147
|
end
|
144
148
|
|
145
149
|
def tracking_id_filter
|
@@ -164,6 +168,7 @@ module Kennel
|
|
164
168
|
Dir.exist?("teams") && loader.push_dir("teams", namespace: Teams)
|
165
169
|
Dir.exist?("parts") && loader.push_dir("parts")
|
166
170
|
loader.setup
|
171
|
+
loader.eager_load # TODO: this should not be needed but we see hanging CI processes when it's not added
|
167
172
|
|
168
173
|
# TODO: also auto-load projects and update expected path too
|
169
174
|
["projects"].each do |folder|
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kennel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.117.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: diff-lcs
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: faraday
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|