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:
Diffstat (limited to 'app/finders/ci/runners_finder.rb')
-rw-r--r--app/finders/ci/runners_finder.rb149
1 files changed, 75 insertions, 74 deletions
diff --git a/app/finders/ci/runners_finder.rb b/app/finders/ci/runners_finder.rb
index 945d332ff47..18be2aec2e2 100644
--- a/app/finders/ci/runners_finder.rb
+++ b/app/finders/ci/runners_finder.rb
@@ -14,18 +14,25 @@ module Ci
end
def execute
- search!
- filter_by_active!
- filter_by_status!
- filter_by_upgrade_status!
- filter_by_runner_type!
- filter_by_tag_list!
- filter_by_creator_id!
- filter_by_version_prefix!
- sort!
- request_tag_list!
-
- @runners
+ items = if @project
+ project_runners
+ elsif @group
+ group_runners
+ else
+ all_runners
+ end
+
+ items = search(items)
+ items = by_active(items)
+ items = by_status(items)
+ items = by_upgrade_status(items)
+ items = by_runner_type(items)
+ items = by_tag_list(items)
+ items = by_creator_id(items)
+ items = by_version_prefix(items)
+ items = request_tag_list(items)
+
+ sort(items)
end
def sort_key
@@ -40,110 +47,104 @@ module Ci
%w[contacted_asc contacted_desc created_at_asc created_at_desc created_date token_expires_at_asc token_expires_at_desc]
end
- def search!
- if @project
- project_runners
- elsif @group
- group_runners
- else
- all_runners
- end
-
- @runners = @runners.search(@params[:search]) if @params[:search].present?
- end
-
def all_runners
raise Gitlab::Access::AccessDeniedError unless @current_user&.can_admin_all_resources?
- @runners = Ci::Runner.all
+ Ci::Runner.all
end
def group_runners
raise Gitlab::Access::AccessDeniedError unless can?(@current_user, :read_group_runners, @group)
- @runners = case @params[:membership]
- when :direct
- Ci::Runner.belonging_to_group(@group.id)
- when :descendants, nil
- Ci::Runner.belonging_to_group_or_project_descendants(@group.id)
- when :all_available
- unless can?(@current_user, :read_group_all_available_runners, @group)
- raise Gitlab::Access::AccessDeniedError
- end
-
- Ci::Runner.usable_from_scope(@group)
- else
- raise ArgumentError, 'Invalid membership filter'
- end
+ case @params[:membership]
+ when :direct
+ Ci::Runner.belonging_to_group(@group.id)
+ when :descendants, nil
+ Ci::Runner.belonging_to_group_or_project_descendants(@group.id)
+ when :all_available
+ unless can?(@current_user, :read_group_all_available_runners, @group)
+ raise Gitlab::Access::AccessDeniedError
+ end
+
+ Ci::Runner.usable_from_scope(@group)
+ else
+ raise ArgumentError, 'Invalid membership filter'
+ end
end
def project_runners
raise Gitlab::Access::AccessDeniedError unless can?(@current_user, :read_project_runners, @project)
- @runners = ::Ci::Runner.owned_or_instance_wide(@project.id)
+ ::Ci::Runner.owned_or_instance_wide(@project.id)
+ end
+
+ def search(items)
+ return items unless @params[:search].present?
+
+ items.search(@params[:search])
end
- def filter_by_active!
- @runners = @runners.active(@params[:active]) if @params.include?(:active)
+ def by_active(items)
+ return items if @params.exclude?(:active)
+
+ items.active(@params[:active])
end
- def filter_by_status!
- filter_by!(:status_status, Ci::Runner::AVAILABLE_STATUSES)
+ def by_status(items)
+ status = @params[:status_status].presence
+ return items unless status
+
+ items.with_status(status)
end
- def filter_by_upgrade_status!
+ def by_upgrade_status(items)
upgrade_status = @params[:upgrade_status]
- return unless upgrade_status
+ return items unless upgrade_status
unless Ci::RunnerVersion.statuses.key?(upgrade_status)
raise ArgumentError, "Invalid upgrade status value '#{upgrade_status}'"
end
- @runners = @runners.with_upgrade_status(upgrade_status)
+ items.with_upgrade_status(upgrade_status)
end
- def filter_by_runner_type!
- filter_by!(:type_type, Ci::Runner::AVAILABLE_TYPES)
+ def by_runner_type(items)
+ runner_type = @params[:type_type].presence
+ return items unless runner_type
+
+ items.with_runner_type(runner_type)
end
- def filter_by_tag_list!
+ def by_tag_list(items)
tag_list = @params[:tag_name].presence
+ return items unless tag_list
- if tag_list
- @runners = @runners.tagged_with(tag_list)
- end
+ items.tagged_with(tag_list)
end
- def filter_by_creator_id!
- creator_id = @params[:creator_id]
- @runners = @runners.with_creator_id(creator_id) if creator_id.present?
- end
+ def by_creator_id(items)
+ creator_id = @params[:creator_id].presence
+ return items unless creator_id
- def filter_by_version_prefix!
- return @runners unless @params[:version_prefix]
-
- sanitized_prefix = @params[:version_prefix][/^[\d+.]+/]
-
- return @runners unless sanitized_prefix
-
- @runners = @runners.with_version_prefix(sanitized_prefix)
+ items.with_creator_id(creator_id)
end
- def sort!
- @runners = @runners.order_by(sort_key)
+ def by_version_prefix(items)
+ sanitized_prefix = @params.fetch(:version_prefix, '')[/^[\d+.]+/]
+ return items unless sanitized_prefix
+
+ items.with_version_prefix(sanitized_prefix)
end
- def request_tag_list!
- @runners = @runners.with_tags if !@params[:preload].present? || @params.dig(:preload, :tag_name)
+ def sort(items)
+ items.order_by(sort_key)
end
- def filter_by!(scope_name, available_scopes)
- scope = @params[scope_name]
+ def request_tag_list(items)
+ return items if @params.include?(:preload) && !@params.dig(:preload, :tag_name) # Backward-compatible behavior
- if scope.present? && available_scopes.include?(scope)
- @runners = @runners.public_send(scope) # rubocop:disable GitlabSecurity/PublicSend
- end
+ items.with_tags
end
end
end