in lib/instance_agent/plugins/codedeploy/command_executor.rb [317:376]
def download_from_github(deployment_spec, account, repo, commit, anonymous, token)
retries = 0
errors = []
unless (deployment_spec.bundle_type)
if InstanceAgent::Platform.util.supported_oses.include? 'windows'
deployment_spec.bundle_type = 'zip'
else
deployment_spec.bundle_type = 'tar'
end
end
if deployment_spec.bundle_type == 'zip'
format = 'zipball'
elsif deployment_spec.bundle_type == 'tar'
format = 'tarball'
else
raise ArgumentError.new("GitHub revision specified with bundle_type other than zip or tar [bundle_type=#{deployment_spec.bundle_type}")
end
uri = URI.parse("https://api.github.com/repos/#{account}/#{repo}/#{format}/#{commit}")
options = {:ssl_verify_mode => OpenSSL::SSL::VERIFY_PEER, :redirect => true, :ssl_ca_cert => ENV['AWS_SSL_CA_DIRECTORY']}
if anonymous
log(:debug, "Anonymous GitHub repository download requested.")
else
log(:debug, "Authenticated GitHub repository download requested.")
options.update({'Authorization' => "token #{token}"})
end
begin
log(:info, "Requesting URL: '#{uri.to_s}'")
File.open(artifact_bundle(deployment_spec), 'w+b') do |file|
uri.open(options) do |github|
log(:debug, "GitHub response: '#{github.meta.to_s}'")
while (buffer = github.read(8 * 1024 * 1024))
file.write buffer
end
end
end
rescue OpenURI::HTTPError => e
log(:error, "Could not download bundle at '#{uri.to_s}'. Server returned code #{e.io.status[0]} '#{e.io.status[1]}'")
log(:debug, "Server returned error response body #{e.io.string}")
errors << "#{e.io.status[0]} '#{e.io.status[1]}'"
if retries < 3
time_to_sleep = (10 * (3 ** retries))
log(:info, "Retrying download in #{time_to_sleep} seconds.")
sleep(time_to_sleep)
retries += 1
retry
else
raise "Could not download bundle at '#{uri.to_s}' after #{retries} retries. Server returned codes: #{errors.join("; ")}."
end
end
end