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/graphql/resolvers/ci')
-rw-r--r--app/graphql/resolvers/ci/project_runners_resolver.rb15
-rw-r--r--app/graphql/resolvers/ci/runner_groups_resolver.rb45
-rw-r--r--app/graphql/resolvers/ci/runner_jobs_resolver.rb12
-rw-r--r--app/graphql/resolvers/ci/runner_owner_project_resolver.rb26
-rw-r--r--app/graphql/resolvers/ci/runner_projects_resolver.rb14
5 files changed, 98 insertions, 14 deletions
diff --git a/app/graphql/resolvers/ci/project_runners_resolver.rb b/app/graphql/resolvers/ci/project_runners_resolver.rb
new file mode 100644
index 00000000000..378fa73c065
--- /dev/null
+++ b/app/graphql/resolvers/ci/project_runners_resolver.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Resolvers
+ module Ci
+ class ProjectRunnersResolver < RunnersResolver
+ type Types::Ci::RunnerType.connection_type, null: true
+
+ def parent_param
+ raise 'Expected project missing' unless parent.is_a?(Project)
+
+ { project: parent }
+ end
+ end
+ end
+end
diff --git a/app/graphql/resolvers/ci/runner_groups_resolver.rb b/app/graphql/resolvers/ci/runner_groups_resolver.rb
new file mode 100644
index 00000000000..3360e820bd2
--- /dev/null
+++ b/app/graphql/resolvers/ci/runner_groups_resolver.rb
@@ -0,0 +1,45 @@
+# frozen_string_literal: true
+
+module Resolvers
+ module Ci
+ class RunnerGroupsResolver < BaseResolver
+ include Gitlab::Graphql::Authorize::AuthorizeResource
+ include ResolvesGroups
+
+ type Types::GroupConnection, null: true
+
+ authorize :read_runner
+ authorizes_object!
+
+ alias_method :runner, :object
+
+ def resolve_with_lookahead(**args)
+ return unless runner.group_type?
+
+ BatchLoader::GraphQL.for(runner.id).batch(key: :runner_namespaces) do |runner_ids, loader|
+ plucked_runner_and_namespace_ids =
+ ::Ci::RunnerNamespace
+ .for_runner(runner_ids)
+ .select(:runner_id, :namespace_id)
+ .pluck(:runner_id, :namespace_id) # rubocop: disable CodeReuse/ActiveRecord)
+
+ namespace_ids = plucked_runner_and_namespace_ids.collect(&:last).uniq
+ groups = apply_lookahead(::Group.id_in(namespace_ids))
+ Preloaders::GroupPolicyPreloader.new(groups, current_user).execute
+ groups_by_id = groups.index_by(&:id)
+
+ runner_group_ids_by_runner_id =
+ plucked_runner_and_namespace_ids
+ .group_by { |runner_id, _namespace_id| runner_id }
+ .transform_values { |values| values.filter_map { |_runner_id, namespace_id| groups_by_id[namespace_id] } }
+
+ runner_ids.each do |runner_id|
+ runner_namespaces = runner_group_ids_by_runner_id[runner_id] || []
+
+ loader.call(runner_id, runner_namespaces)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/app/graphql/resolvers/ci/runner_jobs_resolver.rb b/app/graphql/resolvers/ci/runner_jobs_resolver.rb
index de00aadaea8..b818be3f018 100644
--- a/app/graphql/resolvers/ci/runner_jobs_resolver.rb
+++ b/app/graphql/resolvers/ci/runner_jobs_resolver.rb
@@ -27,9 +27,17 @@ module Resolvers
def preloads
{
- previous_stage_jobs_and_needs: [:needs, :pipeline],
+ previous_stage_jobs_or_needs: [:needs, :pipeline],
artifacts: [:job_artifacts],
- pipeline: [:user]
+ pipeline: [:user],
+ detailed_status: [
+ :metadata,
+ { pipeline: [:merge_request] },
+ { project: [:route, { namespace: :route }] }
+ ],
+ commit_path: [:pipeline, { project: [:route, { namespace: [:route] }] }],
+ short_sha: [:pipeline],
+ tags: [:tags]
}
end
end
diff --git a/app/graphql/resolvers/ci/runner_owner_project_resolver.rb b/app/graphql/resolvers/ci/runner_owner_project_resolver.rb
index da8fab93619..f4e044b81c9 100644
--- a/app/graphql/resolvers/ci/runner_owner_project_resolver.rb
+++ b/app/graphql/resolvers/ci/runner_owner_project_resolver.rb
@@ -13,20 +13,22 @@ module Resolvers
resolve_owner
end
- def preloads
- {
- full_path: [:route]
- }
- end
-
private
- def filtered_preloads
- selection = lookahead
+ def node_selection(selection = lookahead)
+ # There are no nodes or edges selections in RunnerOwnerProjectResolver, but rather a project directly
+ selection
+ end
+
+ def unconditional_includes
+ [:project_feature]
+ end
- preloads.each.flat_map do |name, requirements|
- selection&.selects?(name) ? requirements : []
- end
+ def preloads
+ {
+ full_path: [:route, { namespace: [:route] }],
+ web_url: [:route, { namespace: [:route] }]
+ }
end
def resolve_owner
@@ -48,7 +50,7 @@ module Resolvers
.transform_values { |runner_projects| runner_projects.first.project_id }
project_ids = owner_project_id_by_runner_id.values.uniq
- projects = Project.where(id: project_ids)
+ projects = apply_lookahead(Project.id_in(project_ids))
Preloaders::ProjectPolicyPreloader.new(projects, current_user).execute
projects_by_id = projects.index_by(&:id)
diff --git a/app/graphql/resolvers/ci/runner_projects_resolver.rb b/app/graphql/resolvers/ci/runner_projects_resolver.rb
index af9a67acfda..2a2d63f85de 100644
--- a/app/graphql/resolvers/ci/runner_projects_resolver.rb
+++ b/app/graphql/resolvers/ci/runner_projects_resolver.rb
@@ -40,6 +40,7 @@ module Resolvers
params: project_finder_params(args),
project_ids_relation: project_ids)
.execute
+ projects = apply_lookahead(projects)
Preloaders::ProjectPolicyPreloader.new(projects, current_user).execute
projects_by_id = projects.index_by(&:id)
@@ -58,6 +59,19 @@ module Resolvers
end
# rubocop:enable CodeReuse/ActiveRecord
end
+
+ private
+
+ def unconditional_includes
+ [:project_feature]
+ end
+
+ def preloads
+ super.merge({
+ full_path: [:route, { namespace: [:route] }],
+ web_url: [:route, { namespace: [:route] }]
+ })
+ end
end
end
end