diff options
Diffstat (limited to 'qa/qa/resource/registry_repository.rb')
-rw-r--r-- | qa/qa/resource/registry_repository.rb | 56 |
1 files changed, 49 insertions, 7 deletions
diff --git a/qa/qa/resource/registry_repository.rb b/qa/qa/resource/registry_repository.rb index 1e43d93a784..3de409232dd 100644 --- a/qa/qa/resource/registry_repository.rb +++ b/qa/qa/resource/registry_repository.rb @@ -6,7 +6,7 @@ module QA module Resource class RegistryRepository < Base attr_accessor :name, - :repository_id + :tag_name attribute :project do Project.fabricate_via_api! do |resource| @@ -15,9 +15,17 @@ module QA end end + attribute :id do + registry_repositories = project.registry_repositories + + return unless (this_registry_repository = registry_repositories&.find { |registry_repository| registry_repository[:path] == name }) # rubocop:disable Cop/AvoidReturnFromBlocks + + this_registry_repository[:id] + end + def initialize @name = project.path_with_namespace - @repository_id = nil + @tag_name = 'master' end def fabricate! @@ -31,23 +39,57 @@ module QA def remove_via_api! registry_repositories = project.registry_repositories - if registry_repositories && !registry_repositories.empty? - this_registry_repository = registry_repositories.find { |registry_repository| registry_repository[:path] == name } - - @repository_id = this_registry_repository[:id] + if registry_repositories && !registry_repositories.empty? QA::Runtime::Logger.debug("Deleting registry '#{name}'") super end end def api_delete_path - "/projects/#{project.id}/registry/repositories/#{@repository_id}" + "/projects/#{project.id}/registry/repositories/#{id}" + end + + def api_delete_tag_path + "/projects/#{project.id}/registry/repositories/#{id}/tags/#{tag_name}" end def api_get_path "/projects/#{project.id}/registry/repositories" end + + def api_get_tags_path + "/projects/#{project.id}/registry/repositories/#{id}/tags" + end + + def has_tag?(tag_name) + response = get Runtime::API::Request.new(api_client, api_get_tags_path).url + + raise ResourceNotFoundError, "Request returned (#{response.code}): `#{response}`." if response.code == HTTP_STATUS_NOT_FOUND + + tag_list = parse_body(response) + tag_list.any? { |tag| tag[:name] == tag_name } + end + + def has_no_tag?(tag_name) + response = get Runtime::API::Request.new(api_client, api_get_tags_path).url + + raise ResourceNotFoundError, "Request returned (#{response.code}): `#{response}`." if response.code == HTTP_STATUS_NOT_FOUND + + tag_list = parse_body(response) + tag_list.none? { |tag| tag[:name] == tag_name } + end + + def delete_tag + QA::Runtime::Logger.debug("Deleting registry tag '#{tag_name}'") + + request = Runtime::API::Request.new(api_client, api_delete_tag_path) + response = delete(request.url) + + unless [HTTP_STATUS_NO_CONTENT, HTTP_STATUS_ACCEPTED, HTTP_STATUS_OK].include? response.code + raise ResourceNotDeletedError, "Resource at #{request.mask_url} could not be deleted (#{response.code}): `#{response}`." + end + end end end end |