diff options
Diffstat (limited to 'app/models/ci/build.rb')
-rw-r--r-- | app/models/ci/build.rb | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 9172a46b35f..e97d32e2c0b 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -38,12 +38,12 @@ module Ci class Build < CommitStatus include Gitlab::Application.routes.url_helpers - include Build::Erasable LAZY_ATTRIBUTES = ['trace'] belongs_to :runner, class_name: 'Ci::Runner' belongs_to :trigger_request, class_name: 'Ci::TriggerRequest' + belongs_to :erased_by, class_name: 'User' serialize :options @@ -367,6 +367,33 @@ module Ci Gitlab::Ci::Build::Artifacts::Metadata.new(artifacts_metadata.path, path, **options).to_entry end + def erase(opts = {}) + return false unless erasable? + + remove_artifacts_file! + remove_artifacts_metadata! + erase_trace! + update_erased!(opts[:erased_by]) + end + + def erasable? + complete? && (artifacts? || has_trace?) + end + + def erased? + !self.erased_at.nil? + end + + private + + def erase_trace! + self.trace = nil + end + + def update_erased!(user = nil) + self.update(erased_by: user, erased_at: Time.now) + end + private def yaml_variables |