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>2024-01-18 09:09:25 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2024-01-18 09:09:25 +0300
commit0baa744d45735fa9ec826a11e2ad22c113693fff (patch)
tree88b8fbc4c468b46cd382d6e8f98b7b4433717cd0 /app/services/ci/drop_pipelines_and_disable_schedules_for_user_service.rb
parent1b6c7847cee9c54848d4b9df0ea3c5170f76b64e (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/ci/drop_pipelines_and_disable_schedules_for_user_service.rb')
-rw-r--r--app/services/ci/drop_pipelines_and_disable_schedules_for_user_service.rb62
1 files changed, 62 insertions, 0 deletions
diff --git a/app/services/ci/drop_pipelines_and_disable_schedules_for_user_service.rb b/app/services/ci/drop_pipelines_and_disable_schedules_for_user_service.rb
new file mode 100644
index 00000000000..e6c18b2f27b
--- /dev/null
+++ b/app/services/ci/drop_pipelines_and_disable_schedules_for_user_service.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+
+module Ci
+ class DropPipelinesAndDisableSchedulesForUserService
+ def execute(user, reason: :user_blocked, include_owned_projects_and_groups: false)
+ if include_owned_projects_and_groups
+ # Projects in the user namespace
+ Project.personal(user).each_batch do |relation|
+ project_ids = relation.pluck_primary_key
+
+ drop_pipelines_for_projects(user, project_ids, reason)
+ disable_schedules_for_projects(project_ids)
+ end
+
+ # Projects in group and descendant namespaces owned by the user
+ user.owned_groups.select(:id).each_batch do |owned_groups_relation|
+ owned_groups_relation.each do |owned_group|
+ Project.in_namespace(owned_group.self_and_descendant_ids).each_batch do |project_relation|
+ project_ids = project_relation.pluck_primary_key
+
+ drop_pipelines_for_projects(user, project_ids, reason)
+ disable_schedules_for_projects(project_ids)
+ end
+ end
+ end
+ end
+
+ drop_pipelines_for_user(user, reason)
+ disable_schedules_for_user(user)
+ end
+
+ private
+
+ def drop_pipelines_for_user(user, reason)
+ Ci::DropPipelineService.new.execute_async_for_all(
+ Ci::Pipeline.for_user(user),
+ reason,
+ user
+ )
+ end
+
+ def drop_pipelines_for_projects(user, project_ids, reason)
+ Ci::DropPipelineService.new.execute_async_for_all(
+ Ci::Pipeline.for_project(project_ids),
+ reason,
+ user
+ )
+ end
+
+ def disable_schedules_for_user(user)
+ Ci::PipelineSchedule.owned_by(user).active.each_batch do |relation|
+ relation.update_all(active: false)
+ end
+ end
+
+ def disable_schedules_for_projects(project_ids)
+ Ci::PipelineSchedule.for_project(project_ids).active.each_batch do |relation|
+ relation.update_all(active: false)
+ end
+ end
+ end
+end