summaryrefslogtreecommitdiff
path: root/lib/api/container_registry.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/container_registry.rb')
-rw-r--r--lib/api/container_registry.rb149
1 files changed, 0 insertions, 149 deletions
diff --git a/lib/api/container_registry.rb b/lib/api/container_registry.rb
deleted file mode 100644
index 7dad20a822a..00000000000
--- a/lib/api/container_registry.rb
+++ /dev/null
@@ -1,149 +0,0 @@
-# frozen_string_literal: true
-
-module API
- class ContainerRegistry < Grape::API
- include PaginationParams
-
- REGISTRY_ENDPOINT_REQUIREMENTS = API::NAMESPACE_OR_PROJECT_REQUIREMENTS.merge(
- tag_name: API::NO_SLASH_URL_PART_REGEX)
-
- before { error!('404 Not Found', 404) unless Feature.enabled?(:container_registry_api, user_project, default_enabled: true) }
- before { authorize_read_container_images! }
-
- params do
- requires :id, type: String, desc: 'The ID of a project'
- end
- resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
- desc 'Get a project container repositories' do
- detail 'This feature was introduced in GitLab 11.8.'
- success Entities::ContainerRegistry::Repository
- end
- params do
- use :pagination
- end
- get ':id/registry/repositories' do
- repositories = user_project.container_repositories.ordered
-
- present paginate(repositories), with: Entities::ContainerRegistry::Repository
- end
-
- desc 'Delete repository' do
- detail 'This feature was introduced in GitLab 11.8.'
- end
- params do
- requires :repository_id, type: Integer, desc: 'The ID of the repository'
- end
- delete ':id/registry/repositories/:repository_id', requirements: REGISTRY_ENDPOINT_REQUIREMENTS do
- authorize_admin_container_image!
-
- DeleteContainerRepositoryWorker.perform_async(current_user.id, repository.id)
-
- status :accepted
- end
-
- desc 'Get a list of repositories tags' do
- detail 'This feature was introduced in GitLab 11.8.'
- success Entities::ContainerRegistry::Tag
- end
- params do
- requires :repository_id, type: Integer, desc: 'The ID of the repository'
- use :pagination
- end
- get ':id/registry/repositories/:repository_id/tags', requirements: REGISTRY_ENDPOINT_REQUIREMENTS do
- authorize_read_container_image!
-
- tags = Kaminari.paginate_array(repository.tags)
- present paginate(tags), with: Entities::ContainerRegistry::Tag
- end
-
- desc 'Delete repository tags (in bulk)' do
- detail 'This feature was introduced in GitLab 11.8.'
- end
- params do
- requires :repository_id, type: Integer, desc: 'The ID of the repository'
- requires :name_regex, type: String, desc: 'The tag name regexp to delete, specify .* to delete all'
- optional :keep_n, type: Integer, desc: 'Keep n of latest tags with matching name'
- optional :older_than, type: String, desc: 'Delete older than: 1h, 1d, 1month'
- end
- delete ':id/registry/repositories/:repository_id/tags', requirements: REGISTRY_ENDPOINT_REQUIREMENTS do
- authorize_admin_container_image!
-
- message = 'This request has already been made. You can run this at most once an hour for a given container repository'
- render_api_error!(message, 400) unless obtain_new_cleanup_container_lease
-
- CleanupContainerRepositoryWorker.perform_async(current_user.id, repository.id,
- declared_params.except(:repository_id)) # rubocop: disable CodeReuse/ActiveRecord
-
- status :accepted
- end
-
- desc 'Get a details about repository tag' do
- detail 'This feature was introduced in GitLab 11.8.'
- success Entities::ContainerRegistry::TagDetails
- end
- params do
- requires :repository_id, type: Integer, desc: 'The ID of the repository'
- requires :tag_name, type: String, desc: 'The name of the tag'
- end
- get ':id/registry/repositories/:repository_id/tags/:tag_name', requirements: REGISTRY_ENDPOINT_REQUIREMENTS do
- authorize_read_container_image!
- validate_tag!
-
- present tag, with: Entities::ContainerRegistry::TagDetails
- end
-
- desc 'Delete repository tag' do
- detail 'This feature was introduced in GitLab 11.8.'
- end
- params do
- requires :repository_id, type: Integer, desc: 'The ID of the repository'
- requires :tag_name, type: String, desc: 'The name of the tag'
- end
- delete ':id/registry/repositories/:repository_id/tags/:tag_name', requirements: REGISTRY_ENDPOINT_REQUIREMENTS do
- authorize_destroy_container_image!
- validate_tag!
-
- tag.delete
-
- status :ok
- end
- end
-
- helpers do
- def authorize_read_container_images!
- authorize! :read_container_image, user_project
- end
-
- def authorize_read_container_image!
- authorize! :read_container_image, repository
- end
-
- def authorize_destroy_container_image!
- authorize! :destroy_container_image, repository
- end
-
- def authorize_admin_container_image!
- authorize! :admin_container_image, repository
- end
-
- def obtain_new_cleanup_container_lease
- Gitlab::ExclusiveLease
- .new("container_repository:cleanup_tags:#{repository.id}",
- timeout: 1.hour)
- .try_obtain
- end
-
- def repository
- @repository ||= user_project.container_repositories.find(params[:repository_id])
- end
-
- def tag
- @tag ||= repository.tag(params[:tag_name])
- end
-
- def validate_tag!
- not_found!('Tag') unless tag.valid?
- end
- end
- end
-end