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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-12-19 14:01:45 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-12-19 14:01:45 +0300
commit9297025d0b7ddf095eb618dfaaab2ff8f2018d8b (patch)
tree865198c01d1824a9b098127baa3ab980c9cd2c06 /lib/gitlab/ci/pipeline/chain
parent6372471f43ee03c05a7c1f8b0c6ac6b8a7431dbe (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.rb2
-rw-r--r--lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines.rb6
-rw-r--r--lib/gitlab/ci/pipeline/chain/create.rb2
-rw-r--r--lib/gitlab/ci/pipeline/chain/evaluate_workflow_rules.rb11
-rw-r--r--lib/gitlab/ci/pipeline/chain/helpers.rb4
-rw-r--r--lib/gitlab/ci/pipeline/chain/populate.rb11
-rw-r--r--lib/gitlab/ci/pipeline/chain/populate_metadata.rb36
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