diff options
Diffstat (limited to 'lib/gitlab/ci/pipeline/seed/build.rb')
-rw-r--r-- | lib/gitlab/ci/pipeline/seed/build.rb | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/lib/gitlab/ci/pipeline/seed/build.rb b/lib/gitlab/ci/pipeline/seed/build.rb index 91dbcc616ea..2271915a72b 100644 --- a/lib/gitlab/ci/pipeline/seed/build.rb +++ b/lib/gitlab/ci/pipeline/seed/build.rb @@ -60,6 +60,7 @@ module Gitlab @seed_attributes .deep_merge(pipeline_attributes) .deep_merge(rules_attributes) + .deep_merge(allow_failure_criteria_attributes) .deep_merge(cache_attributes) end @@ -154,9 +155,15 @@ module Gitlab end def rules_attributes - return {} unless @using_rules + strong_memoize(:rules_attributes) do + next {} unless @using_rules - rules_result.build_attributes + if ::Gitlab::Ci::Features.rules_variables_enabled?(@pipeline.project) + rules_result.build_attributes(@seed_attributes) + else + rules_result.build_attributes + end + end end def rules_result @@ -176,6 +183,17 @@ module Gitlab @cache.build_attributes end end + + # If a job uses `allow_failure:exit_codes` and `rules:allow_failure` + # we need to prevent the exit codes from being persisted because they + # would break the behavior defined by `rules:allow_failure`. + def allow_failure_criteria_attributes + return {} unless ::Gitlab::Ci::Features.allow_failure_with_exit_codes_enabled? + return {} if rules_attributes[:allow_failure].nil? + return {} unless @seed_attributes.dig(:options, :allow_failure_criteria) + + { options: { allow_failure_criteria: nil } } + end end end end |