Welcome to mirror list, hosted at ThFree Co, Russian Federation.

build_erase_service.rb « ci « services « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 8a468e094ebcbdbab1647f4c44390d735a796f3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 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