gitlab-org--gitlab-foss/app/services/ci/build_erase_service.rb

50 lines
1.3 KiB
Ruby

# frozen_string_literal: true
module Ci
class BuildEraseService
include BaseServiceUtility
def initialize(build, current_user)
@build = build
@current_user = current_user
end
def execute
unless build.erasable?
return ServiceResponse.error(message: _('Build cannot be erased'), http_status: :unprocessable_entity)
end
if build.project.refreshing_build_artifacts_size?
Gitlab::ProjectStatsRefreshConflictsLogger.warn_artifact_deletion_during_stats_refresh(
method: 'Ci::BuildEraseService#execute',
project_id: build.project_id
)
end
destroy_artifacts
erase_trace!
update_erased!
ServiceResponse.success(payload: build)
end
private
attr_reader :build, :current_user
def destroy_artifacts
# fix_expire_at is false because in this case we want to explicitly delete the job artifacts
# this flag is a workaround that will be removed with https://gitlab.com/gitlab-org/gitlab/-/issues/355833
Ci::JobArtifacts::DestroyBatchService.new(build.job_artifacts, fix_expire_at: false).execute
end
def erase_trace!
build.trace.erase!
end
def update_erased!
build.update(erased_by: current_user, erased_at: Time.current, artifacts_expire_at: nil)
end
end
end