diff options
Diffstat (limited to 'lib/gitlab/ci/config/entry/job.rb')
-rw-r--r-- | lib/gitlab/ci/config/entry/job.rb | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/lib/gitlab/ci/config/entry/job.rb b/lib/gitlab/ci/config/entry/job.rb index 1ce7060df22..85e3514499c 100644 --- a/lib/gitlab/ci/config/entry/job.rb +++ b/lib/gitlab/ci/config/entry/job.rb @@ -31,6 +31,7 @@ module Gitlab validates :dependencies, array_of_strings: true validates :resource_group, type: String + validates :allow_failure, hash_or_boolean: true end validates :start_in, duration: { limit: '1 week' }, if: :delayed? @@ -117,9 +118,14 @@ module Gitlab description: 'Parallel configuration for this job.', inherit: false + entry :allow_failure, ::Gitlab::Ci::Config::Entry::AllowFailure, + description: 'Indicates whether this job is allowed to fail or not.', + inherit: false + attributes :script, :tags, :when, :dependencies, :needs, :retry, :parallel, :start_in, - :interruptible, :timeout, :resource_group, :release + :interruptible, :timeout, :resource_group, + :release, :allow_failure def self.matching?(name, config) !name.to_s.start_with?('.') && @@ -166,11 +172,32 @@ module Gitlab release: release_value, after_script: after_script_value, ignore: ignored?, + allow_failure_criteria: allow_failure_criteria, needs: needs_defined? ? needs_value : nil, resource_group: resource_group, scheduling_type: needs_defined? ? :dag : :stage ).compact end + + def ignored? + allow_failure_defined? ? static_allow_failure : manual_action? + end + + private + + def allow_failure_criteria + return unless ::Gitlab::Ci::Features.allow_failure_with_exit_codes_enabled? + + if allow_failure_defined? && allow_failure_value.is_a?(Hash) + allow_failure_value + end + end + + def static_allow_failure + return false if allow_failure_value.is_a?(Hash) + + allow_failure_value + end end end end |