minitest-distributed 0.2.10 → 0.2.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a59856c10fd7a252d95609f66242a4c9706f91d6e7fb57a226914a7e816e04ee
4
- data.tar.gz: 024e72b9de525b048dbdc0a6f97b7721a24fd39803030dec85cf080832dfcfd3
3
+ metadata.gz: 3755320df95c6d8e5ba5e32b04b44351043588d43c309d4d746cc36f96567132
4
+ data.tar.gz: 785503f39eadcfab72b7fc3df6e8f19d3ad0fbaea793e68f9f233ed08c4f6452
5
5
  SHA512:
6
- metadata.gz: 401e8fcb14acf32f0e3904038e30d15bbc801e1cf7672c93b16c09d506829c46dc58fff771766ddd508e46d8740748a5688a8c0125ce19bafa8fe2dd16a81909
7
- data.tar.gz: d0082e9f6d731b73651e26c6a6ea943ff782b93cca2c11de19308b1e97a415f06450770a858ea6e176153df5183710a6dd2f2bc327474dde930b1d8685f40c08
6
+ metadata.gz: fd42edc7fd402f38c08f22ff17fa8430b65cae6d1c53b27afa55446ab5cb6e90f0c0d8a92c6fa7a7665d7aba4a81768a52d9a5c1007da2ebf6407414c2538510
7
+ data.tar.gz: e3b5119c06eaec10a7f8befacec8b3fde636e17eb9c8a4b539ae4aedf95d00217a97911ccf067e14f08850e1dbc3a6d072723811b565ea06aff46be8fb2607ae
data/.rubocop.yml CHANGED
@@ -9,7 +9,6 @@ require:
9
9
  - rubocop-minitest
10
10
 
11
11
  AllCops:
12
- TargetRubyVersion: 2.6
13
12
  UseCache: true
14
13
  CacheRootDirectory: tmp/rubocop
15
14
  Exclude:
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.2.2
data/README.md CHANGED
@@ -23,12 +23,6 @@ flakiness. To combat flakiness, minitest-distributed implements resiliency
23
23
  patterns, like re-running a test on a different worker on failure, and a
24
24
  circuit breaker for misbehaving workers.
25
25
 
26
- | | |
27
- |----------------|--------------------------------------------------------------------------------------------------------------------------------------|
28
- | Current status | Ongoing |
29
- | Owner | [@Shopify/test-infra](https://github.com/orgs/Shopify/teams/test-infra) |
30
- | Help | [#team-test-infra](https://shopify.slack.com/archives/team-test-infra) |
31
-
32
26
  ## Commands
33
27
  **Distributed invocation**
34
28
 
data/dev.yml CHANGED
@@ -3,5 +3,5 @@ name: minitest-distributed
3
3
  type: ruby
4
4
 
5
5
  up:
6
- - ruby: 3.2.0
6
+ - ruby
7
7
  - bundler
@@ -105,15 +105,17 @@ module Minitest
105
105
 
106
106
  sig { returns(Coordinators::CoordinatorInterface) }
107
107
  def coordinator
108
- @coordinator = T.let(@coordinator, T.nilable(Coordinators::CoordinatorInterface))
109
- @coordinator ||= case coordinator_uri.scheme
110
- when "redis"
111
- Coordinators::RedisCoordinator.new(configuration: self)
112
- when "memory"
113
- Coordinators::MemoryCoordinator.new(configuration: self)
114
- else
115
- raise NotImplementedError, "Unknown coordinator implementation: #{coordinator_uri.scheme}"
116
- end
108
+ @coordinator ||= T.let(
109
+ case coordinator_uri.scheme
110
+ when "redis"
111
+ Coordinators::RedisCoordinator.new(configuration: self)
112
+ when "memory"
113
+ Coordinators::MemoryCoordinator.new(configuration: self)
114
+ else
115
+ raise NotImplementedError, "Unknown coordinator implementation: #{coordinator_uri.scheme}"
116
+ end,
117
+ T.nilable(Coordinators::CoordinatorInterface),
118
+ )
117
119
  end
118
120
  end
119
121
  end
@@ -273,8 +273,7 @@ module Minitest
273
273
 
274
274
  sig { returns(String) }
275
275
  def register_consumergroup_script
276
- @register_consumergroup_script = T.let(@register_consumergroup_script, T.nilable(String))
277
- @register_consumergroup_script ||= redis.script(:load, <<~LUA)
276
+ @register_consumergroup_script ||= T.let(redis.script(:load, <<~LUA), T.nilable(String))
278
277
  -- Try to create the consumergroup. This will raise an error if the
279
278
  -- consumergroup has already been registered by somebody else, which
280
279
  -- means another worker will be acting as leader.
@@ -61,8 +61,7 @@ module Minitest
61
61
 
62
62
  sig { returns(T::Boolean) }
63
63
  def success?
64
- @success = T.let(@success, T.nilable(T::Boolean))
65
- @success ||= @block.call
64
+ @success ||= T.let(@block.call, T.nilable(T::Boolean))
66
65
  end
67
66
 
68
67
  sig { returns(T::Boolean) }
@@ -72,14 +71,12 @@ module Minitest
72
71
 
73
72
  sig { returns(Commit) }
74
73
  def self.success
75
- @success = T.let(@success, T.nilable(Commit))
76
- @success ||= new { true }
74
+ @success ||= T.let(new { true }, T.nilable(Commit))
77
75
  end
78
76
 
79
77
  sig { returns(Commit) }
80
78
  def self.failure
81
- @failure = T.let(@failure, T.nilable(Commit))
82
- @failure ||= new { false }
79
+ @failure ||= T.let(new { false }, T.nilable(Commit))
83
80
  end
84
81
  end
85
82
 
@@ -106,13 +103,18 @@ module Minitest
106
103
 
107
104
  sig { returns(Minitest::Result) }
108
105
  def committed_result
109
- @committed_result = T.let(@committed_result, T.nilable(Minitest::Result))
110
- @committed_result ||= if final? && commit.failure?
111
- # If a runnable result is final, but the acked failed, we will discard the result.
112
- Minitest::Discard.wrap(initial_result, test_timeout_seconds: enqueued_runnable.test_timeout_seconds)
113
- else
114
- initial_result
115
- end
106
+ @committed_result ||= T.let(
107
+ if final? && commit.failure?
108
+ # If a runnable result is final, but the acked failed, we will discard the result.
109
+ Minitest::Discard.wrap(
110
+ initial_result,
111
+ test_timeout_seconds: enqueued_runnable.test_timeout_seconds,
112
+ )
113
+ else
114
+ initial_result
115
+ end,
116
+ T.nilable(Minitest::Result),
117
+ )
116
118
  end
117
119
  end
118
120
 
@@ -67,14 +67,12 @@ module Minitest
67
67
 
68
68
  sig { returns(ResultAggregate) }
69
69
  def local_results
70
- @local_results = T.let(@local_results, T.nilable(ResultAggregate))
71
- @local_results ||= configuration.coordinator.local_results
70
+ @local_results ||= T.let(configuration.coordinator.local_results, T.nilable(ResultAggregate))
72
71
  end
73
72
 
74
73
  sig { returns(ResultAggregate) }
75
74
  def combined_results
76
- @combined_results = T.let(@combined_results, T.nilable(ResultAggregate))
77
- @combined_results ||= configuration.coordinator.combined_results
75
+ @combined_results ||= T.let(configuration.coordinator.combined_results, T.nilable(ResultAggregate))
78
76
  end
79
77
 
80
78
  sig { returns(Configuration) }
@@ -3,6 +3,6 @@
3
3
 
4
4
  module Minitest
5
5
  module Distributed
6
- VERSION = "0.2.10"
6
+ VERSION = "0.2.11"
7
7
  end
8
8
  end
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative "./distributed"
4
+ require_relative "distributed"
5
5
 
6
6
  module Minitest
7
7
  class << self
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.homepage = "https://github.com/Shopify/minitest-distributed"
29
29
  spec.license = "MIT"
30
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
30
+ spec.required_ruby_version = ">= 2.7.0"
31
31
 
32
32
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
33
33
 
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
38
38
  # Specify which files should be added to the gem when it is released.
39
39
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
40
40
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
41
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
41
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|.shopify-build|.github)/}) }
42
42
  end
43
43
  spec.bindir = "exe"
44
44
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -47,4 +47,5 @@ Gem::Specification.new do |spec|
47
47
  spec.add_dependency('minitest', '~> 5.12')
48
48
  spec.add_dependency('redis', '>= 5.0.6', '< 6')
49
49
  spec.add_dependency('sorbet-runtime')
50
+ spec.add_dependency('rexml')
50
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-distributed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-18 00:00:00.000000000 Z
11
+ date: 2024-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rexml
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
61
75
  description: |
62
76
  minitest-distributed is a plugin for minitest for executing tests on a
63
77
  distributed set of unreliable workers.
@@ -80,12 +94,10 @@ executables: []
80
94
  extensions: []
81
95
  extra_rdoc_files: []
82
96
  files:
83
- - ".github/ISSUE_TEMPLATE/bug_report.md"
84
- - ".github/dependabot.yml"
85
- - ".github/workflows/ruby.yml"
86
97
  - ".gitignore"
87
98
  - ".rubocop.yml"
88
99
  - ".rubocop_todo.yml"
100
+ - ".ruby-version"
89
101
  - CODEOWNERS
90
102
  - CODE_OF_CONDUCT.md
91
103
  - Gemfile
@@ -157,7 +169,7 @@ metadata:
157
169
  allowed_push_host: https://rubygems.org
158
170
  homepage_uri: https://github.com/Shopify/minitest-distributed
159
171
  source_code_uri: https://github.com/Shopify/minitest-distributed
160
- post_install_message:
172
+ post_install_message:
161
173
  rdoc_options: []
162
174
  require_paths:
163
175
  - lib
@@ -165,15 +177,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
177
  requirements:
166
178
  - - ">="
167
179
  - !ruby/object:Gem::Version
168
- version: 2.3.0
180
+ version: 2.7.0
169
181
  required_rubygems_version: !ruby/object:Gem::Requirement
170
182
  requirements:
171
183
  - - ">="
172
184
  - !ruby/object:Gem::Version
173
185
  version: '0'
174
186
  requirements: []
175
- rubygems_version: 3.4.18
176
- signing_key:
187
+ rubygems_version: 3.5.18
188
+ signing_key:
177
189
  specification_version: 4
178
190
  summary: Distributed test executor plugin for Minitest
179
191
  test_files: []
@@ -1,43 +0,0 @@
1
- ---
2
- name: Bug report
3
- about: Create a report to help us improve
4
- title: "[BUG]"
5
- labels: bug
6
- assignees: ''
7
-
8
- ---
9
-
10
- **Describe the issue**
11
- A clear and concise description of the issue you're facing.
12
-
13
- **To Reproduce**
14
- Steps to reproduce the behaviour:
15
- 1. Go to '...'
16
- 2. Click on '....'
17
- 3. Scroll down to '....'
18
- 4. See error
19
-
20
- **Expected behaviour**
21
- A clear and concise description of what you expected to happen.
22
-
23
- **Screenshots**
24
- If applicable, add screenshots to help explain your problem.
25
-
26
- **What team are you on?**
27
- Please provide the name of your team.
28
-
29
- **Helpful links (Logs, Link to Build, Repo, PR etc.)**
30
- Please provide any helpful links for investigating the issue.
31
-
32
- **Is there a Slack thread related to this bug?**
33
- After submitting this issue, you can use: @spy github issues create_comment repo=minitest-distributed issue_id=$NEW_ISSUE_ID on any relevant Slack threads to save that information here.
34
-
35
- **Additional context**
36
- Add any other context about the problem here.
37
-
38
- If possible, assign appropriate severity level, priority (high, medium, low) and difficulty (easy, normal, difficult) labels to the issue.
39
- SEV-1 <24-72h - Critical issue that actively impacts multiple users/products.
40
- SEV-2 <14 days - Limited impact app or major inconvenience to app users, workarounds available.
41
- SEV-3 <60 days - Minor issue requiring action, but not affecting a users ability to use the app.
42
- SEV-4 <180 days - Minimal impact but something the team wants to fix eventually.
43
- SEV-5 No timeline - Cosmetic issue or bugs, no effect on user's ability to use tooling.
@@ -1,20 +0,0 @@
1
- version: 2
2
- registries:
3
- rubygems-server-pkgs-shopify-io:
4
- type: rubygems-server
5
- url: https://pkgs.shopify.io
6
- username: ${{secrets.RUBYGEMS_SERVER_PKGS_SHOPIFY_IO_USERNAME}}
7
- password: ${{secrets.RUBYGEMS_SERVER_PKGS_SHOPIFY_IO_PASSWORD}}
8
- github-com:
9
- type: git
10
- url: https://github.com
11
- username: ${{secrets.DEPENDENCIES_GITHUB_USER}}
12
- password: ${{secrets.DEPENDENCIES_GITHUB_TOKEN}}
13
- updates:
14
- - package-ecosystem: bundler
15
- directory: "/"
16
- schedule:
17
- interval: daily
18
- open-pull-requests-limit: 100
19
- insecure-external-code-execution: allow
20
- registries: "*"
@@ -1,111 +0,0 @@
1
- # This workflow uses actions that are not certified by GitHub.
2
- # They are provided by a third-party and are governed by
3
- # separate terms of service, privacy policy, and support
4
- # documentation.
5
- # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
- # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
-
8
- name: Ruby
9
-
10
- on: push
11
-
12
- jobs:
13
- test_32:
14
- runs-on: shopify-ubuntu-latest
15
- container: ruby:3.2
16
-
17
- services:
18
- redis:
19
- image: redis
20
- toxiproxy:
21
- image: ghcr.io/shopify/toxiproxy:2.5.0
22
-
23
- steps:
24
- - uses: actions/checkout@v2
25
- - name: Install dependencies
26
- run: gem install bundler && bundle install
27
- - name: Run tests
28
- run: bin/rake test
29
- env:
30
- REDIS_URL: redis://toxiproxy:22220
31
- TOXIPROXY_HOST: http://toxiproxy:8474
32
-
33
- test_31:
34
- runs-on: shopify-ubuntu-latest
35
- container: ruby:3.1
36
-
37
- services:
38
- redis:
39
- image: redis
40
- toxiproxy:
41
- image: ghcr.io/shopify/toxiproxy:2.5.0
42
-
43
- steps:
44
- - uses: actions/checkout@v2
45
- - name: Install dependencies
46
- run: gem install bundler && bundle install
47
- - name: Run tests
48
- run: bin/rake test
49
- env:
50
- REDIS_URL: redis://toxiproxy:22220
51
- TOXIPROXY_HOST: http://toxiproxy:8474
52
-
53
- test_30:
54
- runs-on: shopify-ubuntu-latest
55
- container: ruby:3.0
56
-
57
- services:
58
- redis:
59
- image: redis
60
- toxiproxy:
61
- image: ghcr.io/shopify/toxiproxy:2.5.0
62
-
63
- steps:
64
- - uses: actions/checkout@v2
65
- - name: Install dependencies
66
- run: gem install bundler && bundle install
67
- - name: Run tests
68
- run: bin/rake test
69
- env:
70
- REDIS_URL: redis://toxiproxy:22220
71
- TOXIPROXY_HOST: http://toxiproxy:8474
72
-
73
- test_27:
74
- runs-on: shopify-ubuntu-latest
75
- container: ruby:2.7
76
-
77
- services:
78
- redis:
79
- image: redis
80
- toxiproxy:
81
- image: ghcr.io/shopify/toxiproxy:2.5.0
82
-
83
- steps:
84
- - uses: actions/checkout@v2
85
- - name: Install dependencies
86
- run: gem install bundler && bundle install
87
- - name: Run tests
88
- run: bin/rake test
89
- env:
90
- REDIS_URL: redis://toxiproxy:22220
91
- TOXIPROXY_HOST: http://toxiproxy:8474
92
-
93
- typecheck:
94
- runs-on: shopify-ubuntu-latest
95
- container: ruby:2.7
96
- steps:
97
- - uses: actions/checkout@v2
98
- - name: Install dependencies
99
- run: gem install bundler && bundle install
100
- - name: Typecheck Ruby code
101
- run: bin/srb tc
102
-
103
- lint:
104
- runs-on: shopify-ubuntu-latest
105
- container: ruby:3.2
106
- steps:
107
- - uses: actions/checkout@v2
108
- - name: Install dependencies
109
- run: gem install bundler && bundle install
110
- - name: Lint Ruby code
111
- run: bin/rubocop