bugsnag-maze-runner 9.7.0 → 9.8.0

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: f948d5bf3980cb7514127f60fbecb2ffdb4484c8d19a484e39ebccaaaebda535
4
- data.tar.gz: efb5c22b4c81824d63c2762ea0792ad6316dc8744660042b4c1d6357eb8b7a5c
3
+ metadata.gz: b6101c495b7debb939e4bb83f21dbc015c13f7bc58ce797d69fb90e618c6be6d
4
+ data.tar.gz: 69f5fdd5eec4c1f5bc8e9ed2aaa188531a6f54e80ec26471873ef93e7ecb1ecd
5
5
  SHA512:
6
- metadata.gz: 100b68e6b60360ea1a0bad3eb51c2b7e28fce9328e0ebc5a8bfeba089621714cfb834d7c4ae568f4c88c7399ff2e2b0fef351cbf8dd97397b3fb4da5cd39644b
7
- data.tar.gz: ba9d6bbf2e966981d14be78688c119967278d662b5c0cc166fedba5302c829a3e9b2e93a0c4dfefc30893c5a9cebd09e1f7408de7c71ee7986d3fe89995eb748
6
+ metadata.gz: '0438524dc2173c1f31b323cca182e651ea1fc095727ee4658c5bb14baa986b5a17230fcd64460dd9eb9e805469c84eae2d3eadb85ae47668501a70dd1211e090'
7
+ data.tar.gz: bcf7dfcf91d8093099733839d06b38b1cea25548617eebad4f88a01910d8f64d6e0db26de0de5ebe38977e1cfa2b64d3fed80f8bc693d5ec6071c8dc633f5bb0
@@ -34,6 +34,10 @@ module Maze
34
34
  interval = 10
35
35
  elsif error.message.include? 'Could not proxy command to the remote server'
36
36
  interval = 10
37
+ elsif error.message.include? 'Could not find a connected Android device'
38
+ interval = 10
39
+ elsif error.message.include? '\'platformVersion\' must be a valid version number.'
40
+ interval = 10
37
41
  else
38
42
  # Do not retry in any other case
39
43
  end
@@ -54,26 +58,24 @@ module Maze
54
58
  end
55
59
 
56
60
  def device_capabilities
57
- # Doubling up on capabilities in both the `appium:options` and `appium` sub dictionaries.
58
- # See PLAT-11087
59
61
  config = Maze.config
60
62
  common_caps = {
61
63
  'noReset' => true,
62
64
  'newCommandTimeout' => 600
63
65
  }
64
66
  capabilities = {
65
- 'appium:options' => common_caps,
66
- 'appium' => common_caps,
67
67
  'bitbar:options' => {
68
- # Some capabilities probably belong in the top level
69
- # of the hash, but BitBar picks them up from here.
70
68
  'apiKey' => config.access_key,
71
69
  'app' => config.app,
72
70
  'findDevice' => false,
73
71
  'testTimeout' => 7200
74
72
  }
75
73
  }
76
- capabilities.deep_merge! common_caps
74
+ if Maze.config.appium_version && Maze.config.appium_version.to_f < 2.0
75
+ capabilities.merge!(common_caps)
76
+ else
77
+ capabilities['appium:options'] = common_caps
78
+ end
77
79
  capabilities.deep_merge! BitBarClientUtils.dashboard_capabilities
78
80
  capabilities.deep_merge! BitBarDevices.get_available_device(config.device)
79
81
  capabilities['bitbar:options']['appiumVersion'] = config.appium_version unless config.appium_version.nil?
@@ -18,22 +18,44 @@ module Maze
18
18
  if device_group_ids
19
19
  # Device group found - find a free device in it
20
20
  $logger.trace "Got group ids #{device_group_ids} for #{device_or_group_names}"
21
- group_count, device = api_client.find_device_in_groups(device_group_ids)
22
- if device.nil?
23
- raise 'There are no devices available'
21
+ if device_group_ids.size > 1
22
+ group_id = false
23
+ group_count, device = api_client.find_device_in_groups(device_group_ids)
24
+ if device.nil?
25
+ raise 'There are no devices available'
26
+ else
27
+ $logger.info "#{group_count} device(s) currently available in group(s) '#{device_or_group_names}'"
28
+ end
24
29
  else
25
- $logger.info "#{group_count} device(s) currently available in group(s) '#{device_or_group_names}'"
30
+ # Since there is only one group, we can use it verbatim
31
+ $logger.info "Using device group #{device_or_group_names}"
32
+ group_id = true
33
+ device_name = device_group_ids.first
26
34
  end
27
35
  else
28
36
  # See if there is a device with the given name
29
37
  device = api_client.find_device device_or_group_names
30
38
  end
31
39
 
32
- device_name = device['displayName']
33
- platform = device['platform'].downcase
34
- platform_version = device['softwareVersion']['releaseVersion']
40
+ # If a single device has been identified use that to determine other characteristics
41
+ if device
42
+ device_name = device['displayName']
43
+ platform = device['platform'].downcase
44
+ platform_version = device['softwareVersion']['releaseVersion']
35
45
 
36
- $logger.info "Selected device: #{device_name} (#{platform} #{platform_version})"
46
+ $logger.info "Selected device: #{device_name} (#{platform} #{platform_version})"
47
+ else
48
+ # If a device group has been identified, extrapolate characteristics from the group name
49
+ if android_match = Regexp.new('(ANDROID|android)_(\d{1,2})').match(device_or_group_names)
50
+ platform = 'android'
51
+ platform_version = android_match[2]
52
+ elsif ios_match = Regexp.new('(IOS|ios)_(\d{1,2})').match(device_or_group_names)
53
+ platform = 'ios'
54
+ platform_version = ios_match[2]
55
+ end
56
+
57
+ $logger.info "Selected device group: #{device_or_group_names} (#{platform} #{platform_version})"
58
+ end
37
59
 
38
60
  # TODO: Setting the config here is rather a side effect and factoring it out would be better.
39
61
  # For now, though, it means not having to provide the --os and --os-version options on the command line.
@@ -42,9 +64,9 @@ module Maze
42
64
 
43
65
  case platform
44
66
  when 'android'
45
- make_android_hash(device_name)
67
+ make_android_hash(device_name, group_id)
46
68
  when 'ios'
47
- make_ios_hash(device_name)
69
+ make_ios_hash(device_name, group_id)
48
70
  else
49
71
  throw "Invalid device platform specified #{platform}"
50
72
  end
@@ -90,9 +112,7 @@ module Maze
90
112
  end
91
113
  end
92
114
 
93
- def make_android_hash(device)
94
- # Tripling up on capabilities in the `appium:options`, `appium` sub dictionaries and base dictionary.
95
- # See PLAT-11087
115
+ def android_base_hash
96
116
  appium_options = {
97
117
  'automationName' => 'UiAutomator2',
98
118
  'autoGrantPermissions' => true,
@@ -103,20 +123,31 @@ module Maze
103
123
  appium_options['appPackage'] = Maze.config.app_package unless Maze.config.app_package.nil?
104
124
  hash = {
105
125
  'platformName' => 'Android',
106
- 'deviceName' => 'Android Phone',
107
- 'appium:options' => appium_options,
108
- 'appium' => appium_options,
109
- 'bitbar:options' => {
110
- 'device' => device,
111
- }
126
+ 'deviceName' => 'Android Phone'
112
127
  }
113
- hash.merge!(appium_options)
128
+ if Maze.config.appium_version && Maze.config.appium_version.to_f < 2.0
129
+ hash.merge!(appium_options)
130
+ else
131
+ hash['appium:options'] = appium_options
132
+ end
133
+ hash.dup
134
+ end
135
+
136
+ def make_android_hash(device, group_id = false)
137
+ hash = android_base_hash
138
+ if group_id
139
+ hash['bitbar:options'] = {
140
+ 'deviceGroupId' => device
141
+ }
142
+ else
143
+ hash['bitbar:options'] = {
144
+ 'device' => device
145
+ }
146
+ end
114
147
  hash.freeze
115
148
  end
116
149
 
117
- def make_ios_hash(device)
118
- # Tripling up on capabilities in the `appium:options`, `appium` sub dictionaries and base dictionary.
119
- # See PLAT-11087
150
+ def ios_base_hash
120
151
  appium_options = {
121
152
  'automationName' => 'XCUITest',
122
153
  'shouldTerminateApp' => 'true',
@@ -125,13 +156,26 @@ module Maze
125
156
  hash = {
126
157
  'platformName' => 'iOS',
127
158
  'deviceName' => 'iPhone device',
128
- 'appium:options' => appium_options,
129
- 'appium' => appium_options,
130
- 'bitbar:options' => {
159
+ }
160
+ if Maze.config.appium_version && Maze.config.appium_version.to_f < 2.0
161
+ hash.merge!(appium_options)
162
+ else
163
+ hash['appium:options'] = appium_options
164
+ end
165
+ hash.dup
166
+ end
167
+
168
+ def make_ios_hash(device, group_id = false)
169
+ hash = ios_base_hash
170
+ if group_id
171
+ hash['bitbar:options'] = {
172
+ 'deviceGroupId' => device
173
+ }
174
+ else
175
+ hash['bitbar:options'] = {
131
176
  'device' => device
132
177
  }
133
- }
134
- hash.merge!(appium_options)
178
+ end
135
179
  hash.freeze
136
180
  end
137
181
  end
data/lib/maze/server.rb CHANGED
@@ -242,6 +242,7 @@ module Maze
242
242
  server.mount '/logs', Servlets::LogServlet
243
243
  server.mount '/metrics', Servlets::Servlet, :metrics
244
244
  server.mount '/reflect', Servlets::ReflectiveServlet
245
+ server.mount '/docs', WEBrick::HTTPServlet::FileHandler, Maze.config.document_server_root unless Maze.config.document_server_root.nil?
245
246
  server.start
246
247
  rescue StandardError => e
247
248
  Bugsnag.notify e
data/lib/maze.rb CHANGED
@@ -7,7 +7,7 @@ require_relative 'maze/timers'
7
7
  # Glues the various parts of MazeRunner together that need to be accessed globally,
8
8
  # providing an alternative to the proliferation of global variables or singletons.
9
9
  module Maze
10
- VERSION = '9.7.0'
10
+ VERSION = '9.8.0'
11
11
 
12
12
  class << self
13
13
  attr_accessor :check, :driver, :internal_hooks, :mode, :start_time, :dynamic_retry, :public_address,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bugsnag-maze-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.7.0
4
+ version: 9.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Kirkland
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-08 00:00:00.000000000 Z
11
+ date: 2024-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -240,14 +240,14 @@ dependencies:
240
240
  requirements:
241
241
  - - "~>"
242
242
  - !ruby/object:Gem::Version
243
- version: 6.12.0
243
+ version: '7.0'
244
244
  type: :development
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - "~>"
249
249
  - !ruby/object:Gem::Version
250
- version: 6.12.0
250
+ version: '7.0'
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: markdown
253
253
  requirement: !ruby/object:Gem::Requirement