spectracer 1.1.1 → 1.2.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/CHANGELOG.md +6 -0
- data/lib/spectracer/core/spec_selector.rb +19 -3
- data/lib/spectracer/orchestrators/spec_run_determiner.rb +14 -1
- data/lib/spectracer/version.rb +1 -1
- 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: 2bbbcdd6d7c46e2cb7fe5d192b4f2e16022c4982844a66751c73032514f66914
|
|
4
|
+
data.tar.gz: 70bc03c6c1faa3232a92bd062bfd42a5e2893aea11538db0c94b2a7d516df946
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ea4c07133b4c81c73b4092f4bf46b88f8aafe3c1c9a176b08378b70dfbf043cb91bc6556300f17a5f528753bf2c7e01de0850ca851c5b3184e677b362a5fb1f5
|
|
7
|
+
data.tar.gz: 32754832d52ee9b5729cea19f87417446138925a92475951e92d932d31da67c7deb5e09091c553c25a8256e6c1b910dd874176fc1072f2afb6dc23dfa6fe9afd
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.2.0] - 2026-02-02
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Debug logging for changed files to specs mapping: when debug mode is enabled, outputs a prettified JSON map showing which specs will run for each changed file
|
|
8
|
+
|
|
3
9
|
## [1.1.1] - 2026-02-01
|
|
4
10
|
|
|
5
11
|
### Fixed
|
|
@@ -3,25 +3,41 @@
|
|
|
3
3
|
module Spectracer
|
|
4
4
|
module Core
|
|
5
5
|
class SpecSelector
|
|
6
|
+
Result = Struct.new(:specs, :file_to_specs_map, keyword_init: true)
|
|
7
|
+
|
|
6
8
|
def call(changed_files:, inverse_deps:, globs:, on_empty:)
|
|
7
9
|
spec_set = Set.new
|
|
10
|
+
file_to_specs = {}
|
|
8
11
|
|
|
9
12
|
changed_files.each do |file|
|
|
10
|
-
|
|
13
|
+
matched_specs = []
|
|
14
|
+
|
|
15
|
+
if file.end_with?("_spec.rb")
|
|
16
|
+
spec_set.add(file)
|
|
17
|
+
matched_specs << file
|
|
18
|
+
end
|
|
11
19
|
|
|
12
20
|
file_key = file.start_with?("./") ? file : "./#{file}"
|
|
13
21
|
if (specs = inverse_deps[file_key])
|
|
14
22
|
spec_set.merge(specs)
|
|
23
|
+
matched_specs.concat(specs)
|
|
15
24
|
end
|
|
16
25
|
|
|
17
26
|
globs.each do |glob, pattern|
|
|
18
27
|
normalized_glob = glob.sub(%r{\A\./}, "")
|
|
19
|
-
|
|
28
|
+
if File.fnmatch?(normalized_glob, file)
|
|
29
|
+
spec_set.add(pattern)
|
|
30
|
+
matched_specs << pattern
|
|
31
|
+
end
|
|
20
32
|
end
|
|
33
|
+
|
|
34
|
+
file_to_specs[file] = matched_specs.uniq.sort unless matched_specs.empty?
|
|
21
35
|
end
|
|
22
36
|
|
|
23
37
|
files = spec_set.to_a.sort
|
|
24
|
-
files.empty? ? on_empty : files.join(",")
|
|
38
|
+
specs_result = files.empty? ? on_empty : files.join(",")
|
|
39
|
+
|
|
40
|
+
Result.new(specs: specs_result, file_to_specs_map: file_to_specs)
|
|
25
41
|
end
|
|
26
42
|
end
|
|
27
43
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "json"
|
|
4
|
+
|
|
3
5
|
module Spectracer
|
|
4
6
|
module Orchestrators
|
|
5
7
|
class SpecRunDeterminer
|
|
@@ -30,12 +32,16 @@ module Spectracer
|
|
|
30
32
|
|
|
31
33
|
log_debug_info(config, changed_files)
|
|
32
34
|
|
|
33
|
-
@selector.call(
|
|
35
|
+
result = @selector.call(
|
|
34
36
|
changed_files: changed_files,
|
|
35
37
|
inverse_deps: dependencies,
|
|
36
38
|
globs: config[:globs],
|
|
37
39
|
on_empty: config[:on_empty_spec_set]
|
|
38
40
|
)
|
|
41
|
+
|
|
42
|
+
log_file_to_specs_map(result.file_to_specs_map)
|
|
43
|
+
|
|
44
|
+
result.specs
|
|
39
45
|
rescue => e
|
|
40
46
|
@logger&.error("Error determining specs: #{e.message}")
|
|
41
47
|
@logger&.error(e.backtrace&.join("\n"))
|
|
@@ -59,6 +65,13 @@ module Spectracer
|
|
|
59
65
|
@logger&.debug("Configuration: #{config.inspect}")
|
|
60
66
|
@logger&.debug("Changed files: #{changed_files.inspect}")
|
|
61
67
|
end
|
|
68
|
+
|
|
69
|
+
def log_file_to_specs_map(file_to_specs_map)
|
|
70
|
+
return if file_to_specs_map.empty?
|
|
71
|
+
|
|
72
|
+
@logger&.debug("Changed files to specs mapping:")
|
|
73
|
+
@logger&.debug(JSON.pretty_generate(file_to_specs_map))
|
|
74
|
+
end
|
|
62
75
|
end
|
|
63
76
|
end
|
|
64
77
|
end
|
data/lib/spectracer/version.rb
CHANGED