gitlab-org--gitlab-foss/lib/container_registry/gitlab_api_client.rb

55 lines
1.4 KiB
Ruby

# frozen_string_literal: true
module ContainerRegistry
class GitlabApiClient < BaseClient
include Gitlab::Utils::StrongMemoize
IMPORT_RESPONSES = {
200 => :already_imported,
202 => :ok,
401 => :unauthorized,
404 => :not_found,
409 => :already_being_imported,
424 => :pre_import_failed,
425 => :already_being_imported,
429 => :too_many_imports
}.freeze
REGISTRY_GITLAB_V1_API_FEATURE = 'gitlab_v1_api'
def self.supports_gitlab_api?
with_dummy_client(return_value_if_disabled: false) do |client|
client.supports_gitlab_api?
end
end
def supports_gitlab_api?
strong_memoize(:supports_gitlab_api) do
registry_features = Gitlab::CurrentSettings.container_registry_features || []
next true if ::Gitlab.com? && registry_features.include?(REGISTRY_GITLAB_V1_API_FEATURE)
response = faraday.get('/gitlab/v1/')
response.success? || response.status == 401
end
end
def pre_import_repository(path)
response = start_import_for(path, pre: true)
IMPORT_RESPONSES.fetch(response.status, :error)
end
def import_repository(path)
response = start_import_for(path, pre: false)
IMPORT_RESPONSES.fetch(response.status, :error)
end
private
def start_import_for(path, pre:)
faraday.put("/gitlab/v1/import/#{path}") do |req|
req.params['pre'] = pre.to_s
end
end
end
end