kennel 2.15.0 → 2.16.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/filter.rb +7 -11
- data/lib/kennel/parts_serializer.rb +30 -11
- data/lib/kennel/projects_provider.rb +2 -1
- data/lib/kennel/syncer/resolver.rb +1 -1
- data/lib/kennel/syncer.rb +1 -1
- data/lib/kennel/version.rb +1 -1
- data/lib/kennel.rb +4 -3
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3f5c11c126af9e586c2e7f48564760b8625248626204bdd76359001d78cd2038
|
|
4
|
+
data.tar.gz: 7ec6271b5eb235c8ee4b0bbaf3b9d59dc3b3f8796c5cf8288f6d753094e99a3c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6778c767c1b28ad451f42e0a7f86557382e93627bfee517d7fcd857f90a674bd63294d67253704975c5653d4de616f731524eaf37bd11ff41822635dfcf78c8a
|
|
7
|
+
data.tar.gz: 626e57f6a9e8a8c8080defd2496d983fa93e0a9fcdf63e5ad87aad662c3f4aaca42ff7e5b0c6c9cb0d94fc66d43808fd10dee65add9d0ca3d1d60b76d2c801e9
|
data/lib/kennel/filter.rb
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Kennel
|
|
4
4
|
class Filter
|
|
5
|
+
ID_SEPARATOR = ":"
|
|
5
6
|
attr_reader :project_filter
|
|
6
7
|
|
|
7
8
|
def initialize
|
|
@@ -22,23 +23,18 @@ module Kennel
|
|
|
22
23
|
!project_filter.nil?
|
|
23
24
|
end
|
|
24
25
|
|
|
25
|
-
def
|
|
26
|
+
def filters_project_id?(project_id)
|
|
26
27
|
!filtering? || project_filter.include?(project_id)
|
|
27
28
|
end
|
|
28
29
|
|
|
29
|
-
def
|
|
30
|
+
def filters_tracking_id?(tracking_id)
|
|
30
31
|
return true unless filtering?
|
|
31
32
|
return tracking_id_filter.include?(tracking_id) if tracking_id_filter
|
|
32
33
|
|
|
33
|
-
project_id = tracking_id.split(
|
|
34
|
+
project_id = tracking_id.split(ID_SEPARATOR, 2).first
|
|
34
35
|
project_filter.include?(project_id)
|
|
35
36
|
end
|
|
36
37
|
|
|
37
|
-
def tracking_id_for_path(tracking_id)
|
|
38
|
-
return tracking_id unless tracking_id.end_with?(".json")
|
|
39
|
-
tracking_id.sub("generated/", "").sub(".json", "").sub("/", ":")
|
|
40
|
-
end
|
|
41
|
-
|
|
42
38
|
private
|
|
43
39
|
|
|
44
40
|
attr_reader :tracking_id_filter
|
|
@@ -46,7 +42,7 @@ module Kennel
|
|
|
46
42
|
# needs to be called after read_tracking_id_filter_from_env
|
|
47
43
|
def read_project_filter_from_env
|
|
48
44
|
project_names = ENV["PROJECT"]&.split(",")&.sort&.uniq
|
|
49
|
-
tracking_project_names = tracking_id_filter&.map { |id| id.split(
|
|
45
|
+
tracking_project_names = tracking_id_filter&.map { |id| id.split(ID_SEPARATOR, 2).first }&.sort&.uniq
|
|
50
46
|
if project_names && tracking_project_names && project_names != tracking_project_names
|
|
51
47
|
# avoid everything being filtered out
|
|
52
48
|
raise "do not set a different PROJECT= when using TRACKING_ID="
|
|
@@ -57,8 +53,8 @@ module Kennel
|
|
|
57
53
|
def read_tracking_id_filter_from_env
|
|
58
54
|
return unless (tracking_id = ENV["TRACKING_ID"])
|
|
59
55
|
tracking_id.split(",").map do |id|
|
|
60
|
-
# allow
|
|
61
|
-
tracking_id_for_path(id)
|
|
56
|
+
# allow using the generated/ path from `git diff` to update objects without manually converting
|
|
57
|
+
id.include?(ID_SEPARATOR) ? id : PartsSerializer.tracking_id_for_path(id)
|
|
62
58
|
end.sort.uniq
|
|
63
59
|
end
|
|
64
60
|
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
module Kennel
|
|
4
4
|
class PartsSerializer
|
|
5
|
+
FILE_EXTENSION = ".json"
|
|
6
|
+
FOLDER = "generated"
|
|
7
|
+
|
|
5
8
|
def initialize(filter:)
|
|
6
9
|
@filter = filter
|
|
7
10
|
end
|
|
@@ -9,8 +12,15 @@ module Kennel
|
|
|
9
12
|
def write(parts)
|
|
10
13
|
Progress.progress "Storing" do
|
|
11
14
|
existing = existing_files_and_folders
|
|
12
|
-
used = write_changed(parts)
|
|
13
|
-
FileUtils.rm_rf(existing - used)
|
|
15
|
+
used, changed = write_changed(parts)
|
|
16
|
+
FileUtils.rm_rf(existing - used) # cleanup abandoned
|
|
17
|
+
suggest_using_project_filter(changed)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class << self
|
|
22
|
+
def tracking_id_for_path(path)
|
|
23
|
+
path.sub("#{FOLDER}/", "").sub(FILE_EXTENSION, "").sub("/", ":")
|
|
14
24
|
end
|
|
15
25
|
end
|
|
16
26
|
|
|
@@ -20,28 +30,29 @@ module Kennel
|
|
|
20
30
|
|
|
21
31
|
def write_changed(parts)
|
|
22
32
|
used = []
|
|
33
|
+
changed = []
|
|
23
34
|
|
|
24
35
|
Utils.parallel(parts, max: 2) do |part|
|
|
25
36
|
path = path_for_tracking_id(part.tracking_id)
|
|
26
37
|
|
|
38
|
+
# match paths returned from existing_files_and_folders
|
|
27
39
|
used << File.dirname(path) # we have 1 level of sub folders, so this is enough
|
|
28
40
|
used << path
|
|
29
41
|
|
|
30
42
|
content = part.as_json.merge(api_resource: part.class.api_resource)
|
|
31
|
-
write_file_if_necessary(path, content)
|
|
43
|
+
changed << path if write_file_if_necessary(path, content)
|
|
32
44
|
end
|
|
33
|
-
|
|
34
|
-
used
|
|
45
|
+
[used, changed]
|
|
35
46
|
end
|
|
36
47
|
|
|
37
48
|
def existing_files_and_folders
|
|
38
|
-
paths = Dir["
|
|
49
|
+
paths = Dir["#{FOLDER}/**/*"] # we rely on this returning folders and files, see write_changed
|
|
39
50
|
|
|
40
51
|
# when filtering we only need the files we are going to write
|
|
41
52
|
if filter.filtering?
|
|
42
53
|
paths.select! do |path|
|
|
43
|
-
tracking_id =
|
|
44
|
-
filter.
|
|
54
|
+
tracking_id = self.class.tracking_id_for_path(path)
|
|
55
|
+
filter.filters_tracking_id?(tracking_id)
|
|
45
56
|
end
|
|
46
57
|
end
|
|
47
58
|
|
|
@@ -49,7 +60,7 @@ module Kennel
|
|
|
49
60
|
end
|
|
50
61
|
|
|
51
62
|
def path_for_tracking_id(tracking_id)
|
|
52
|
-
"
|
|
63
|
+
"#{FOLDER}/#{tracking_id.tr("/", ":").sub(":", "/")}#{FILE_EXTENSION}"
|
|
53
64
|
end
|
|
54
65
|
|
|
55
66
|
def write_file_if_necessary(path, content)
|
|
@@ -58,13 +69,21 @@ module Kennel
|
|
|
58
69
|
|
|
59
70
|
# 99% case
|
|
60
71
|
begin
|
|
61
|
-
return if File.read(path) == content
|
|
62
|
-
rescue Errno::ENOENT
|
|
72
|
+
return false if File.read(path) == content
|
|
73
|
+
rescue Errno::ENOENT # file or even folder did not exist
|
|
63
74
|
FileUtils.mkdir_p(File.dirname(path))
|
|
64
75
|
end
|
|
65
76
|
|
|
66
77
|
# slow 1% case
|
|
67
78
|
File.write(path, content)
|
|
79
|
+
true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def suggest_using_project_filter(changed)
|
|
83
|
+
return if filter.filtering?
|
|
84
|
+
projects = changed.map { |path| path.split("/")[1] }.uniq
|
|
85
|
+
return if projects.size != 1
|
|
86
|
+
warn "Hint: Using PROJECT=#{projects[0]} is faster"
|
|
68
87
|
end
|
|
69
88
|
end
|
|
70
89
|
end
|
|
@@ -12,7 +12,8 @@ module Kennel
|
|
|
12
12
|
# All requested projects. This is a slow operation when loading all projects.
|
|
13
13
|
def projects
|
|
14
14
|
load_requested
|
|
15
|
-
loaded_projects.map(&:new)
|
|
15
|
+
projects = loaded_projects.map(&:new)
|
|
16
|
+
@filter.filter_projects projects # in case we loaded more though dependencies
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
private
|
|
@@ -27,7 +27,7 @@ module Kennel
|
|
|
27
27
|
# ignore when deleted from the codebase
|
|
28
28
|
# (when running with filters we cannot see the other resources in the codebase)
|
|
29
29
|
api_resource = a.fetch(:klass).api_resource
|
|
30
|
-
next if !id_map.get(api_resource, tracking_id) && filter.
|
|
30
|
+
next if !id_map.get(api_resource, tracking_id) && filter.filters_tracking_id?(tracking_id)
|
|
31
31
|
|
|
32
32
|
id_map.set(api_resource, tracking_id, a.fetch(:id))
|
|
33
33
|
if a.fetch(:klass).api_resource == "synthetics/tests"
|
data/lib/kennel/syncer.rb
CHANGED
data/lib/kennel/version.rb
CHANGED
data/lib/kennel.rb
CHANGED
|
@@ -69,7 +69,9 @@ module Kennel
|
|
|
69
69
|
|
|
70
70
|
def generate
|
|
71
71
|
parts = generated
|
|
72
|
-
|
|
72
|
+
if ENV["STORE"] != "false" # quicker when debugging
|
|
73
|
+
PartsSerializer.new(filter: filter).write(parts)
|
|
74
|
+
end
|
|
73
75
|
parts
|
|
74
76
|
end
|
|
75
77
|
|
|
@@ -109,8 +111,7 @@ module Kennel
|
|
|
109
111
|
def generated(**kwargs)
|
|
110
112
|
@generated ||= begin
|
|
111
113
|
projects = Progress.progress "Loading projects", **kwargs do
|
|
112
|
-
|
|
113
|
-
filter.filter_projects projects
|
|
114
|
+
ProjectsProvider.new(filter: filter).projects
|
|
114
115
|
end
|
|
115
116
|
|
|
116
117
|
parts = Progress.progress "Finding parts", **kwargs do
|