27 lines
805 B
Ruby
27 lines
805 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Deployments
|
|
# This service archives old deploymets and deletes deployment refs for
|
|
# keeping the project repository performant.
|
|
class ArchiveInProjectService < ::BaseService
|
|
BATCH_SIZE = 100
|
|
|
|
def execute
|
|
unless ::Feature.enabled?(:deployments_archive, project, default_enabled: :yaml)
|
|
return error('Feature flag is not enabled')
|
|
end
|
|
|
|
deployments = Deployment.archivables_in(project, limit: BATCH_SIZE)
|
|
|
|
return success(result: :empty) if deployments.empty?
|
|
|
|
ids = deployments.map(&:id)
|
|
ref_paths = deployments.map(&:ref_path)
|
|
|
|
project.repository.delete_refs(*ref_paths)
|
|
project.deployments.id_in(ids).update_all(archived: true)
|
|
|
|
success(result: :archived, count: ids.count)
|
|
end
|
|
end
|
|
end
|