diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-12-19 14:01:45 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-12-19 14:01:45 +0300 |
commit | 9297025d0b7ddf095eb618dfaaab2ff8f2018d8b (patch) | |
tree | 865198c01d1824a9b098127baa3ab980c9cd2c06 /lib/gitlab/ci/pipeline/chain | |
parent | 6372471f43ee03c05a7c1f8b0c6ac6b8a7431dbe (diff) |
Add latest changes from gitlab-org/gitlab@16-7-stable-eev16.7.0-rc42
Diffstat (limited to 'lib/gitlab/ci/pipeline/chain')
-rw-r--r-- | lib/gitlab/ci/pipeline/chain/assign_partition.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb | 6 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/chain/create.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/chain/evaluate_workflow_rules.rb | 11 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/chain/helpers.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/chain/populate.rb | 11 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/chain/populate_metadata.rb | 36 |
7 files changed, 64 insertions, 8 deletions
diff --git a/lib/gitlab/ci/pipeline/chain/assign_partition.rb b/lib/gitlab/ci/pipeline/chain/assign_partition.rb index 4b8efe13d44..0740226ac9b 100644 --- a/lib/gitlab/ci/pipeline/chain/assign_partition.rb +++ b/lib/gitlab/ci/pipeline/chain/assign_partition.rb @@ -21,7 +21,7 @@ module Gitlab if @command.creates_child_pipeline? @command.parent_pipeline_partition_id else - ::Ci::Pipeline.current_partition_value + ::Ci::Pipeline.current_partition_value(project) end end end diff --git a/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb b/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb index dcaaefee98f..14ec86c5d62 100644 --- a/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb +++ b/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb @@ -6,7 +6,11 @@ module Gitlab module Chain class CancelPendingPipelines < Chain::Base def perform! - ::Ci::CancelRedundantPipelinesWorker.perform_async(pipeline.id) + if pipeline.schedule? + ::Ci::LowUrgencyCancelRedundantPipelinesWorker.perform_async(pipeline.id) + else + ::Ci::CancelRedundantPipelinesWorker.perform_async(pipeline.id) + end end def break? diff --git a/lib/gitlab/ci/pipeline/chain/create.rb b/lib/gitlab/ci/pipeline/chain/create.rb index d4c4f94c7d3..d1153a0990e 100644 --- a/lib/gitlab/ci/pipeline/chain/create.rb +++ b/lib/gitlab/ci/pipeline/chain/create.rb @@ -34,7 +34,7 @@ module Gitlab pipeline .stages .flat_map(&:statuses) - .select { |status| status.respond_to?(:tag_list) } + .select { |status| status.respond_to?(:tag_list=) } end end end diff --git a/lib/gitlab/ci/pipeline/chain/evaluate_workflow_rules.rb b/lib/gitlab/ci/pipeline/chain/evaluate_workflow_rules.rb index cceaa52de16..ab37eb93f18 100644 --- a/lib/gitlab/ci/pipeline/chain/evaluate_workflow_rules.rb +++ b/lib/gitlab/ci/pipeline/chain/evaluate_workflow_rules.rb @@ -11,7 +11,16 @@ module Gitlab def perform! @command.workflow_rules_result = workflow_rules_result - error('Pipeline filtered out by workflow rules.') unless workflow_passed? + return if workflow_passed? + + if Feature.enabled?(:always_set_pipeline_failure_reason, @command.project) + drop_reason = :filtered_by_workflow_rules + end + + error( + 'Pipeline filtered out by workflow rules.', + drop_reason: drop_reason + ) end def break? diff --git a/lib/gitlab/ci/pipeline/chain/helpers.rb b/lib/gitlab/ci/pipeline/chain/helpers.rb index 343a189f773..0e55928ff80 100644 --- a/lib/gitlab/ci/pipeline/chain/helpers.rb +++ b/lib/gitlab/ci/pipeline/chain/helpers.rb @@ -35,7 +35,7 @@ module Gitlab def drop_pipeline!(drop_reason) return if pipeline.readonly? - if drop_reason && command.save_incompleted + if Enums::Ci::Pipeline.persistable_failure_reason?(drop_reason) && command.save_incompleted # Project iid must be called outside a transaction, so we ensure it is set here # otherwise it may be set within the state transition transaction of the drop! call # which it will lock the InternalId row for the whole transaction @@ -44,6 +44,8 @@ module Gitlab pipeline.drop!(drop_reason) else command.increment_pipeline_failure_reason_counter(drop_reason) + + pipeline.set_failed(drop_reason) if Feature.enabled?(:always_set_pipeline_failure_reason, command.project) end end end diff --git a/lib/gitlab/ci/pipeline/chain/populate.rb b/lib/gitlab/ci/pipeline/chain/populate.rb index c59ef2ba6a4..f73addcd098 100644 --- a/lib/gitlab/ci/pipeline/chain/populate.rb +++ b/lib/gitlab/ci/pipeline/chain/populate.rb @@ -18,8 +18,15 @@ module Gitlab pipeline.stages = @command.pipeline_seed.stages if stage_names.empty? - return error('Pipeline will not run for the selected trigger. ' \ - 'The rules configuration prevented any jobs from being added to the pipeline.') + if Feature.enabled?(:always_set_pipeline_failure_reason, @command.project) + drop_reason = :filtered_by_rules + end + + return error( + 'Pipeline will not run for the selected trigger. ' \ + 'The rules configuration prevented any jobs from being added to the pipeline.', + drop_reason: drop_reason + ) end if pipeline.invalid? diff --git a/lib/gitlab/ci/pipeline/chain/populate_metadata.rb b/lib/gitlab/ci/pipeline/chain/populate_metadata.rb index e7a9009f8f4..3ac910da752 100644 --- a/lib/gitlab/ci/pipeline/chain/populate_metadata.rb +++ b/lib/gitlab/ci/pipeline/chain/populate_metadata.rb @@ -9,6 +9,8 @@ module Gitlab def perform! set_pipeline_name + set_auto_cancel + return if pipeline.pipeline_metadata.nil? || pipeline.pipeline_metadata.valid? message = pipeline.pipeline_metadata.errors.full_messages.join(', ') @@ -29,13 +31,45 @@ module Gitlab return if name.blank? - pipeline.build_pipeline_metadata(project: pipeline.project, name: name.strip) + assign_to_metadata(name: name.strip) + end + + def set_auto_cancel + auto_cancel = @command.yaml_processor_result.workflow_auto_cancel + + return if auto_cancel.blank? + + set_auto_cancel_on_new_commit(auto_cancel) + set_auto_cancel_on_job_failure(auto_cancel) + end + + def set_auto_cancel_on_new_commit(auto_cancel) + auto_cancel_on_new_commit = auto_cancel[:on_new_commit] + + return if auto_cancel_on_new_commit.blank? + + assign_to_metadata(auto_cancel_on_new_commit: auto_cancel_on_new_commit) + end + + def set_auto_cancel_on_job_failure(auto_cancel) + return if Feature.disabled?(:auto_cancel_pipeline_on_job_failure, pipeline.project) + + auto_cancel_on_job_failure = auto_cancel[:on_job_failure] + + return if auto_cancel_on_job_failure.blank? + + assign_to_metadata(auto_cancel_on_job_failure: auto_cancel_on_job_failure) end def global_context Gitlab::Ci::Build::Context::Global.new( pipeline, yaml_variables: @command.pipeline_seed.root_variables) end + + def assign_to_metadata(attributes) + metadata = pipeline.pipeline_metadata || pipeline.build_pipeline_metadata(project: pipeline.project) + metadata.assign_attributes(attributes) + end end end end |