affected_tests 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
2
  SHA256:
3
- metadata.gz: 96f592851e15e03100476ea65886d785a8baf5c8fa954beb0c628c3b4db99fa5
4
- data.tar.gz: a25451d7b286eeed185ea9dee6783512364252607efbc5b26055f687811bdc6d
3
+ metadata.gz: f6c26808768b7b2110367dfd84f0da252499ea6e78e3e19c05620556b56ea761
4
+ data.tar.gz: 9d2060dd26c7342686491144a0c63609ef1669c30d2c07c67d2881ebf688b174
5
5
  SHA512:
6
- metadata.gz: 27bd7c5b5b591a7f082a849830350621b24a178db62b338862ed609332e79618a26c6a3c8e8409c3c5573840bb7f6c84475f47ec5a3bfeb61a2cc397601ca0c7
7
- data.tar.gz: 98dc67e1439bb8a7cc6bc10700028dd99e6e6ea7ddf0c0c59a510b73cee33f1fe0ee50404d1de6cd729003a55f30dbef4a9834c9d5bfc5b81914f7a049e885fc
6
+ metadata.gz: dbbed873c50948dea8d76b4b52fdda4c7a78d8ef9387c807d993b82cd4b31456fe57b814a833159850ecb485fd5c517b50c265a2f62262a2f6e718e1cf544f92
7
+ data.tar.gz: 80240e18765d971e153827bbb7ef1b1c8688fe997ca9c16bd78ace0b10d81bb3e31890c841dca829f6ac16c4610abb69612ca21ed3021131f87ba1b27ed34738
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- affected_tests (0.1.0)
4
+ affected_tests (0.3.0)
5
5
  rotoscope
6
6
 
7
7
  GEM
@@ -11,7 +11,7 @@ GEM
11
11
  rotoscope (0.3.0)
12
12
 
13
13
  PLATFORMS
14
- arm64-darwin-21
14
+ ruby
15
15
 
16
16
  DEPENDENCIES
17
17
  affected_tests!
data/README.md CHANGED
@@ -29,10 +29,28 @@ require "affected_tests/rspec"
29
29
  AffectedTests.setup(
30
30
  project_path: File.expand_path("../../", __FILE__),
31
31
  test_dir_path: "spec/",
32
- output_path: "log/affected-tests-map.json"
32
+ output_path: "log/affected-tests-map.json",
33
+ revision: "1cf22fdb86e2b2d6107" # or git rev-parse HEAD > REVISION
33
34
  )
34
35
  ```
35
36
 
37
+ this will write associated test files per file on `log/affected-tests-map.json`:
38
+
39
+ ```json
40
+ {
41
+ "revision": "1cf22fdb86e2b2d6107",
42
+ "map": {
43
+ "app/controllers/comments_controller.rb": [
44
+ "spec/requests/comments_spec.rb"
45
+ ],
46
+ "app/views/comments/index.html.erb": [
47
+ "spec/requests/comments_spec.rb",
48
+ "spec/views/comments/index.html.erb_spec.rb"
49
+ ]
50
+ }
51
+ }
52
+ ```
53
+
36
54
  ### Get Diff
37
55
 
38
56
  #### Schema
@@ -76,6 +94,17 @@ pp target_tests
76
94
 
77
95
  See also: `scripts/calculate-target-tests`
78
96
 
97
+ #### Merge results from parallel test
98
+
99
+ ```
100
+ require "affected_tests/map_merger"
101
+
102
+ AffectedTests::MapMerger.run(
103
+ map_file_paths: %w[node1-result.json node2-result.json node3-result.json],
104
+ output_path: "merged-result.json"
105
+ )
106
+ ```
107
+
79
108
  ## Development
80
109
 
81
110
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "set"
5
+
6
+ module AffectedTests
7
+ module MapMerger
8
+ module_function
9
+
10
+ def run(map_file_paths:, output_path:)
11
+ map_infos = map_file_paths.map do |map_file_path|
12
+ JSON.parse(File.read(map_file_path))
13
+ end
14
+
15
+ revisions = map_infos.map { |map_info| map_info["revision"] }.uniq
16
+ raise "map files weren't generated by same revision" if revisions.size != 1
17
+
18
+ keys = map_infos.flat_map { |map_info| map_info["map"].keys }.uniq
19
+
20
+ result_map = {}
21
+ keys.each do |key|
22
+ map_infos.each do |map_info|
23
+ map = map_info["map"]
24
+ next if map[key].nil?
25
+
26
+ result_map[key] ||= Set.new
27
+ map[key].each do |test_file_path|
28
+ result_map[key] << test_file_path
29
+ end
30
+ end
31
+ end
32
+
33
+ result = {
34
+ revision: revisions.first,
35
+ map: result_map.transform_values(&:to_a)
36
+ }
37
+
38
+ File.write(output_path, JSON.dump(result))
39
+ end
40
+ end
41
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AffectedTests
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
@@ -10,10 +10,11 @@ require_relative "affected_tests/version"
10
10
  module AffectedTests
11
11
  module_function
12
12
 
13
- def setup(project_path:, test_dir_path:, output_path:)
13
+ def setup(project_path:, test_dir_path:, output_path:, revision: nil)
14
14
  @project_path = project_path
15
15
  @test_dir_path = test_dir_path
16
16
  @output_path = output_path
17
+ @revision = revision
17
18
  @rotoscope = Rotoscope.new do |call|
18
19
  next if self == call.receiver
19
20
 
@@ -74,6 +75,8 @@ module AffectedTests
74
75
  end
75
76
 
76
77
  def revision
78
+ return @revision if @revision
79
+
77
80
  revision_path = File.expand_path("../../REVISION", __FILE__)
78
81
  if File.exist?(revision_path)
79
82
  File.read(revision_path).strip
@@ -15,11 +15,23 @@ target_sha = ARGV.shift
15
15
 
16
16
  client = Octokit::Client.new(access_token: ENV["GITHUB_TOKEN"])
17
17
 
18
- targets = client.compare(repository, base_sha, target_sha).files.map do |info|
19
- {
20
- filename: info.filename,
21
- status: info.status
22
- }
18
+ targets = client.compare(repository, base_sha, target_sha).files.each_with_object([]) do |info, arr|
19
+ # https://docs.github.com/en/rest/commits/commits#get-a-commit
20
+ case info.status
21
+ when "modified", "added", "removed"
22
+ arr << { filename: info.filename, status: info.status }
23
+ when "renamed"
24
+ arr << { filename: info.filename, status: "added" }
25
+ arr << { filename: info.previous_filename, status: "removed" }
26
+ when "copied"
27
+ arr << { filename: info.filename, status: "added" }
28
+ when "changed"
29
+ arr << { filename: info.filename, status: "modified" }
30
+ when "unchanged"
31
+ # do nothing
32
+ else
33
+ raise "Unknown status: #{info.status}"
34
+ end
23
35
  end
24
36
 
25
37
  puts JSON.dump(targets)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: affected_tests
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shia
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-20 00:00:00.000000000 Z
11
+ date: 2022-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rotoscope
@@ -39,6 +39,7 @@ files:
39
39
  - Rakefile
40
40
  - lib/affected_tests.rb
41
41
  - lib/affected_tests/differ.rb
42
+ - lib/affected_tests/map_merger.rb
42
43
  - lib/affected_tests/rspec.rb
43
44
  - lib/affected_tests/version.rb
44
45
  - scripts/calculate-target-tests