class Dependabot::Clients::GithubWithRetries
Constants
- DEFAULT_CLIENT_ARGS
- RETRYABLE_ERRORS
Public Class Methods
for_github_dot_com(credentials:)
click to toggle source
# File lib/dependabot/clients/github_with_retries.rb, line 42 def self.for_github_dot_com(credentials:) access_tokens = credentials. select { |cred| cred["type"] == "git_source" }. select { |cred| cred["host"] == "github.com" }. select { |cred| cred["password"] }. map { |cred| cred.fetch("password") } new(access_tokens: access_tokens) end
for_source(source:, credentials:)
click to toggle source
Constructor methods #
# File lib/dependabot/clients/github_with_retries.rb, line 28 def self.for_source(source:, credentials:) access_tokens = credentials. select { |cred| cred["type"] == "git_source" }. select { |cred| cred["host"] == source.hostname }. select { |cred| cred["password"] }. map { |cred| cred.fetch("password") } new( access_tokens: access_tokens, api_endpoint: source.api_endpoint ) end
new(max_retries: 3, **args)
click to toggle source
Proxying #
# File lib/dependabot/clients/github_with_retries.rb, line 73 def initialize(max_retries: 3, **args) args = DEFAULT_CLIENT_ARGS.merge(args) access_tokens = args.delete(:access_tokens) || [] access_tokens << args[:access_token] if args[:access_token] access_tokens << nil if access_tokens.empty? access_tokens.uniq! @max_retries = max_retries || 3 @clients = access_tokens.map do |token| Octokit::Client.new(args.merge(access_token: token)) end end
Public Instance Methods
fetch_commit(repo, branch)
click to toggle source
VCS Interface #
# File lib/dependabot/clients/github_with_retries.rb, line 57 def fetch_commit(repo, branch) response = ref(repo, "heads/#{branch}") raise Octokit::NotFound if response.is_a?(Array) response.object.sha end
fetch_default_branch(repo)
click to toggle source
# File lib/dependabot/clients/github_with_retries.rb, line 65 def fetch_default_branch(repo) repository(repo).default_branch end
method_missing(method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/dependabot/clients/github_with_retries.rb, line 87 def method_missing(method_name, *args, &block) untried_clients = @clients.dup client = untried_clients.pop begin retry_connection_failures do if client.respond_to?(method_name) mutatable_args = args.map(&:dup) client.public_send(method_name, *mutatable_args, &block) else super end end rescue Octokit::NotFound, Octokit::Unauthorized, Octokit::Forbidden raise unless (client = untried_clients.pop) retry end end
respond_to_missing?(method_name, include_private = false)
click to toggle source
Calls superclass method
# File lib/dependabot/clients/github_with_retries.rb, line 107 def respond_to_missing?(method_name, include_private = false) @clients.first.respond_to?(method_name) || super end
retry_connection_failures() { || ... }
click to toggle source
# File lib/dependabot/clients/github_with_retries.rb, line 111 def retry_connection_failures retry_attempt = 0 begin yield rescue *RETRYABLE_ERRORS retry_attempt += 1 retry_attempt <= @max_retries ? retry : raise end end