Skip to content

Commit

Permalink
Add a retry option on getting builds for a train (fastlane#9331)
Browse files Browse the repository at this point in the history
  • Loading branch information
ohayon authored and David Christiandy committed Aug 31, 2017
1 parent 53d27f6 commit 806cbf8
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 9 deletions.
2 changes: 1 addition & 1 deletion fastlane_core/lib/fastlane_core/build_watcher.rb
Expand Up @@ -30,7 +30,7 @@ def watching_build(app_id: nil, platform: nil)
end

def matching_build(watched_build: nil, app_id: nil, platform: nil)
matched_builds = Spaceship::TestFlight::Build.builds_for_train(app_id: app_id, platform: platform, train_version: watched_build.train_version)
matched_builds = Spaceship::TestFlight::Build.builds_for_train(app_id: app_id, platform: platform, train_version: watched_build.train_version, retry_count: 2)
matched_builds.find { |build| build.build_version == watched_build.build_version }
end

Expand Down
6 changes: 5 additions & 1 deletion spaceship/lib/spaceship/client.rb
Expand Up @@ -514,7 +514,11 @@ def itc_service_key

def with_retry(tries = 5, &_block)
return yield
rescue Faraday::Error::ConnectionFailed, Faraday::Error::TimeoutError, AppleTimeoutError => ex # New Faraday version: Faraday::TimeoutError => ex
rescue \
Faraday::Error::ConnectionFailed,
Faraday::Error::TimeoutError,
AppleTimeoutError,
InternalServerError => ex # New Faraday version: Faraday::TimeoutError => ex
tries -= 1
unless tries.zero?
logger.warn("Timeout received: '#{ex.message}'. Retrying after 3 seconds (remaining: #{tries})...")
Expand Down
4 changes: 2 additions & 2 deletions spaceship/lib/spaceship/test_flight/build.rb
Expand Up @@ -85,8 +85,8 @@ def self.all(app_id: nil, platform: nil)
trains.values.flatten
end

def self.builds_for_train(app_id: nil, platform: nil, train_version: nil)
builds_data = client.get_builds_for_train(app_id: app_id, platform: platform, train_version: train_version)
def self.builds_for_train(app_id: nil, platform: nil, train_version: nil, retry_count: 0)
builds_data = client.get_builds_for_train(app_id: app_id, platform: platform, train_version: train_version, retry_count: retry_count)
builds_data.map { |data| self.new(data) }
end

Expand Down
11 changes: 7 additions & 4 deletions spaceship/lib/spaceship/test_flight/client.rb
Expand Up @@ -27,11 +27,12 @@ def get_build_trains(app_id: nil, platform: "ios")
handle_response(response)
end

def get_builds_for_train(app_id: nil, platform: "ios", train_version: nil)
def get_builds_for_train(app_id: nil, platform: "ios", train_version: nil, retry_count: 0)
assert_required_params(__method__, binding)

response = request(:get, "providers/#{team_id}/apps/#{app_id}/platforms/#{platform}/trains/#{train_version}/builds")
handle_response(response)
with_retry(retry_count: retry_count) do
response = request(:get, "providers/#{team_id}/apps/#{app_id}/platforms/#{platform}/trains/#{train_version}/builds")
handle_response(response)
end
end

##
Expand Down Expand Up @@ -190,6 +191,8 @@ def handle_response(response)
return
end

raise InternalServerError, "Server error got #{response.status}" if (500...600).cover?(response.status)

unless response.body.kind_of?(Hash)
raise UnexpectedResponse, response.body
end
Expand Down
9 changes: 8 additions & 1 deletion spaceship/spec/test_flight/client_spec.rb
Expand Up @@ -47,11 +47,18 @@ def handle_response(response)
end

it 'raises an exception on a HTTP error' do
response = double('Response', body: '<html>Server Error</html>', status: 500)
response = double('Response', body: '<html>Server Error</html>', status: 400)
expect do
subject.handle_response(response)
end.to raise_error(Spaceship::Client::UnexpectedResponse)
end

it 'raises an InternalServerError exception on a HTTP 500 error' do
response = double('Response', body: '<html>Server Error</html>', status: 500)
expect do
subject.handle_response(response)
end.to raise_error(Spaceship::Client::InternalServerError)
end
end

##
Expand Down

0 comments on commit 806cbf8

Please sign in to comment.