diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-26 21:08:27 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-26 21:08:27 +0300 |
commit | a683d38a36aadac5c244299d37325424d85fa9e5 (patch) | |
tree | 781918595397211ce4e6adb4757f6c54bcd902c6 /app/services/container_expiration_policies | |
parent | a1908447b77a6d005a77f1be2f717cd35274c82d (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/container_expiration_policies')
-rw-r--r-- | app/services/container_expiration_policies/cleanup_service.rb | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/app/services/container_expiration_policies/cleanup_service.rb b/app/services/container_expiration_policies/cleanup_service.rb new file mode 100644 index 00000000000..f2bc2beab63 --- /dev/null +++ b/app/services/container_expiration_policies/cleanup_service.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +module ContainerExpirationPolicies + class CleanupService + attr_reader :repository + + def initialize(repository) + @repository = repository + end + + def execute + return ServiceResponse.error(message: 'no repository') unless repository + + repository.start_expiration_policy! + + result = Projects::ContainerRepository::CleanupTagsService + .new(project, nil, policy_params.merge('container_expiration_policy' => true)) + .execute(repository) + + if result[:status] == :success + repository.update!( + expiration_policy_cleanup_status: :cleanup_unscheduled, + expiration_policy_started_at: nil + ) + success(:finished) + else + repository.cleanup_unfinished! + + success(:unfinished) + end + end + + private + + def success(cleanup_status) + ServiceResponse.success(message: "cleanup #{cleanup_status}", payload: { cleanup_status: cleanup_status, container_repository_id: repository.id }) + end + + def policy_params + return {} unless policy + + policy.policy_params + end + + def policy + project.container_expiration_policy + end + + def project + repository&.project + end + end +end |