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-16 13:42:19 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2024-01-16 13:42:19 +0300
commit84d1bd786125c1c14a3ba5f63e38a4cc736a9027 (patch)
treef550fa965f507077e20dbb6d61a8269a99ef7107 /app/graphql/resolvers
parent3a105e36e689f7b75482236712f1a47fd5a76814 (diff)
Add latest changes from gitlab-org/gitlab@16-8-stable-eev16.8.0-rc42
Diffstat (limited to 'app/graphql/resolvers')
-rw-r--r--app/graphql/resolvers/ci/catalog/resources/versions_resolver.rb10
-rw-r--r--app/graphql/resolvers/ci/runner_owner_project_resolver.rb2
-rw-r--r--app/graphql/resolvers/ci/runner_projects_resolver.rb2
-rw-r--r--app/graphql/resolvers/ci/runner_resolver.rb27
-rw-r--r--app/graphql/resolvers/ci/runners_resolver.rb2
-rw-r--r--app/graphql/resolvers/concerns/resolves_groups.rb28
-rw-r--r--app/graphql/resolvers/container_repository_tags_resolver.rb8
-rw-r--r--app/graphql/resolvers/full_path_resolver.rb6
-rw-r--r--app/graphql/resolvers/group_resolver.rb6
-rw-r--r--app/graphql/resolvers/ml/find_models_resolver.rb35
-rw-r--r--app/graphql/resolvers/namespace_resolver.rb6
-rw-r--r--app/graphql/resolvers/organizations/organizations_resolver.rb19
-rw-r--r--app/graphql/resolvers/organizations/projects_resolver.rb19
-rw-r--r--app/graphql/resolvers/project_resolver.rb6
-rw-r--r--app/graphql/resolvers/projects/fork_targets_resolver.rb11
-rw-r--r--app/graphql/resolvers/users_resolver.rb26
16 files changed, 166 insertions, 47 deletions
diff --git a/app/graphql/resolvers/ci/catalog/resources/versions_resolver.rb b/app/graphql/resolvers/ci/catalog/resources/versions_resolver.rb
index 9332076a493..899b407b180 100644
--- a/app/graphql/resolvers/ci/catalog/resources/versions_resolver.rb
+++ b/app/graphql/resolvers/ci/catalog/resources/versions_resolver.rb
@@ -11,12 +11,18 @@ module Resolvers
# field is evaluated on more than one node, it causes performance degradation.
extension ::Gitlab::Graphql::Limit::FieldCallCount, limit: 1
+ argument :name, GraphQL::Types::String,
+ required: false,
+ description: 'Name of the version.'
+
argument :sort, Types::Ci::Catalog::Resources::VersionSortEnum,
required: false,
description: 'Sort versions by given criteria.'
- def resolve(sort: nil)
- ::Ci::Catalog::Resources::VersionsFinder.new(object, current_user, sort: sort).execute
+ alias_method :catalog_resource, :object
+
+ def resolve(name: nil, sort: nil)
+ ::Ci::Catalog::Resources::VersionsFinder.new(catalog_resource, current_user, name: name, sort: sort).execute
end
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 f4e044b81c9..28c39427872 100644
--- a/app/graphql/resolvers/ci/runner_owner_project_resolver.rb
+++ b/app/graphql/resolvers/ci/runner_owner_project_resolver.rb
@@ -34,7 +34,7 @@ module Resolvers
def resolve_owner
return unless runner.project_type?
- BatchLoader::GraphQL.for(runner.id).batch(key: :runner_owner_projects) do |runner_ids, loader|
+ BatchLoader::GraphQL.for(runner.id).batch do |runner_ids, loader|
# rubocop: disable CodeReuse/ActiveRecord
runner_and_projects_with_row_number =
::Ci::RunnerProject
diff --git a/app/graphql/resolvers/ci/runner_projects_resolver.rb b/app/graphql/resolvers/ci/runner_projects_resolver.rb
index c5037965e20..99c9bba1bd6 100644
--- a/app/graphql/resolvers/ci/runner_projects_resolver.rb
+++ b/app/graphql/resolvers/ci/runner_projects_resolver.rb
@@ -28,7 +28,7 @@ module Resolvers
return unless runner.project_type?
# rubocop:disable CodeReuse/ActiveRecord
- BatchLoader::GraphQL.for(runner.id).batch(key: :runner_projects) do |runner_ids, loader|
+ BatchLoader::GraphQL.for(runner.id).batch do |runner_ids, loader|
plucked_runner_and_project_ids = ::Ci::RunnerProject
.select(:runner_id, :project_id)
.where(runner_id: runner_ids)
diff --git a/app/graphql/resolvers/ci/runner_resolver.rb b/app/graphql/resolvers/ci/runner_resolver.rb
index 4250b069d20..60fb4163afe 100644
--- a/app/graphql/resolvers/ci/runner_resolver.rb
+++ b/app/graphql/resolvers/ci/runner_resolver.rb
@@ -6,13 +6,12 @@ module Resolvers
include LooksAhead
type Types::Ci::RunnerType, null: true
- extras [:lookahead]
description 'Runner information.'
argument :id,
- type: ::Types::GlobalIDType[::Ci::Runner],
- required: true,
- description: 'Runner ID.'
+ type: ::Types::GlobalIDType[::Ci::Runner],
+ required: true,
+ description: 'Runner ID.'
def resolve_with_lookahead(id:)
find_runner(id: id)
@@ -21,19 +20,13 @@ module Resolvers
private
def find_runner(id:)
- runner_id = GitlabSchema.parse_gid(id, expected_type: ::Ci::Runner).model_id.to_i
- key = {
- preload_tag_list: lookahead.selects?(:tag_list),
- preload_creator: lookahead.selects?(:created_by)
- }
-
- BatchLoader::GraphQL.for(runner_id).batch(key: key) do |ids, loader, batch|
- results = ::Ci::Runner.id_in(ids)
- results = results.with_tags if batch[:key][:preload_tag_list]
- results = results.with_creator if batch[:key][:preload_creator]
-
- results.each { |record| loader.call(record.id, record) }
- end
+ preloads = []
+ preloads << :creator if lookahead.selects?(:created_by)
+ preloads << :tags if lookahead.selects?(:tag_list)
+
+ runner_id = GitlabSchema.parse_gid(id, expected_type: ::Ci::Runner).model_id
+
+ ::Gitlab::Graphql::Loaders::BatchModelLoader.new(::Ci::Runner, runner_id, preloads).find
end
end
end
diff --git a/app/graphql/resolvers/ci/runners_resolver.rb b/app/graphql/resolvers/ci/runners_resolver.rb
index 9121c413b1f..38d2ebe046b 100644
--- a/app/graphql/resolvers/ci/runners_resolver.rb
+++ b/app/graphql/resolvers/ci/runners_resolver.rb
@@ -82,7 +82,7 @@ module Resolvers
creator_id:
params[:creator_id] ? ::GitlabSchema.parse_gid(params[:creator_id], expected_type: ::User).model_id : nil,
version_prefix: params[:version_prefix],
- preload: false # we'll handle preloading ourselves
+ preload: {} # we'll handle preloading ourselves
}.compact
.merge(parent_param)
end
diff --git a/app/graphql/resolvers/concerns/resolves_groups.rb b/app/graphql/resolvers/concerns/resolves_groups.rb
index 86dda5cb1cb..1673b1bd37f 100644
--- a/app/graphql/resolvers/concerns/resolves_groups.rb
+++ b/app/graphql/resolvers/concerns/resolves_groups.rb
@@ -5,6 +5,19 @@ module ResolvesGroups
extend ActiveSupport::Concern
include LooksAhead
+ PRELOADS = {
+ container_repositories_count: [:container_repositories],
+ custom_emoji: [:custom_emoji],
+ full_path: [:route],
+ path: [:route],
+ web_url: [:route],
+ dependency_proxy_blob_count: [:dependency_proxy_blobs],
+ dependency_proxy_blobs: [:dependency_proxy_blobs],
+ dependency_proxy_image_count: [:dependency_proxy_manifests],
+ dependency_proxy_image_ttl_policy: [:dependency_proxy_image_ttl_policy],
+ dependency_proxy_setting: [:dependency_proxy_setting]
+ }.freeze
+
def resolve_with_lookahead(...)
apply_lookahead(resolve_groups(...))
end
@@ -17,17 +30,8 @@ module ResolvesGroups
end
def preloads
- {
- container_repositories_count: [:container_repositories],
- custom_emoji: [:custom_emoji],
- full_path: [:route],
- path: [:route],
- web_url: [:route],
- dependency_proxy_blob_count: [:dependency_proxy_blobs],
- dependency_proxy_blobs: [:dependency_proxy_blobs],
- dependency_proxy_image_count: [:dependency_proxy_manifests],
- dependency_proxy_image_ttl_policy: [:dependency_proxy_image_ttl_policy],
- dependency_proxy_setting: [:dependency_proxy_setting]
- }
+ PRELOADS
end
end
+
+ResolvesGroups.prepend_mod
diff --git a/app/graphql/resolvers/container_repository_tags_resolver.rb b/app/graphql/resolvers/container_repository_tags_resolver.rb
index 50adf98fa07..d3929451bd0 100644
--- a/app/graphql/resolvers/container_repository_tags_resolver.rb
+++ b/app/graphql/resolvers/container_repository_tags_resolver.rb
@@ -14,6 +14,11 @@ module Resolvers
required: false,
default_value: nil
+ argument :referrers, GraphQL::Types::Boolean,
+ description: 'Include tag referrers.',
+ required: false,
+ default_value: nil
+
alias_method :container_repository, :object
def resolve(sort:, **filters)
@@ -25,7 +30,8 @@ module Resolvers
last: filters[:after],
sort: map_sort_field(sort),
name: filters[:name],
- page_size: page_size
+ page_size: page_size,
+ referrers: filters[:referrers]
)
Gitlab::Graphql::ExternallyPaginatedArray.new(
diff --git a/app/graphql/resolvers/full_path_resolver.rb b/app/graphql/resolvers/full_path_resolver.rb
index b8df54f49ab..2c64d08a219 100644
--- a/app/graphql/resolvers/full_path_resolver.rb
+++ b/app/graphql/resolvers/full_path_resolver.rb
@@ -4,10 +4,10 @@ module Resolvers
module FullPathResolver
extend ActiveSupport::Concern
- prepended do
+ included do
argument :full_path, GraphQL::Types::ID,
- required: true,
- description: 'Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`.'
+ required: true,
+ description: "Full path of the #{target_type}. For example, `gitlab-org/gitlab-foss`."
end
def model_by_full_path(model, full_path)
diff --git a/app/graphql/resolvers/group_resolver.rb b/app/graphql/resolvers/group_resolver.rb
index 4260e18829e..e3b651b6493 100644
--- a/app/graphql/resolvers/group_resolver.rb
+++ b/app/graphql/resolvers/group_resolver.rb
@@ -2,7 +2,11 @@
module Resolvers
class GroupResolver < BaseResolver
- prepend FullPathResolver
+ def self.target_type
+ 'group'
+ end
+
+ include FullPathResolver
type Types::GroupType, null: true
diff --git a/app/graphql/resolvers/ml/find_models_resolver.rb b/app/graphql/resolvers/ml/find_models_resolver.rb
new file mode 100644
index 00000000000..b9901100e22
--- /dev/null
+++ b/app/graphql/resolvers/ml/find_models_resolver.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+module Resolvers
+ module Ml
+ class FindModelsResolver < Resolvers::BaseResolver
+ extension ::Gitlab::Graphql::Limit::FieldCallCount, limit: 1
+
+ type ::Types::Ml::ModelType.connection_type, null: true
+
+ argument :name, GraphQL::Types::String,
+ required: false,
+ description: 'Search for names that include the string.'
+
+ argument :order_by, ::Types::Ml::ModelsOrderByEnum,
+ required: false,
+ description: 'Ordering column. Default is created_at.'
+
+ argument :sort, ::Types::SortDirectionEnum,
+ required: false,
+ description: 'Ordering column. Default is desc.'
+
+ def resolve(**args)
+ return unless current_user.can?(:read_model_registry, object)
+
+ find_params = {
+ name: args[:name],
+ order_by: args[:order_by].to_s,
+ sort: args[:sort].to_s
+ }
+
+ ::Projects::Ml::ModelFinder.new(object, find_params).execute
+ end
+ end
+ end
+end
diff --git a/app/graphql/resolvers/namespace_resolver.rb b/app/graphql/resolvers/namespace_resolver.rb
index 17b3800d151..a0b16758625 100644
--- a/app/graphql/resolvers/namespace_resolver.rb
+++ b/app/graphql/resolvers/namespace_resolver.rb
@@ -2,7 +2,11 @@
module Resolvers
class NamespaceResolver < BaseResolver
- prepend FullPathResolver
+ def self.target_type
+ 'namespace'
+ end
+
+ include FullPathResolver
type Types::NamespaceType, null: true
diff --git a/app/graphql/resolvers/organizations/organizations_resolver.rb b/app/graphql/resolvers/organizations/organizations_resolver.rb
new file mode 100644
index 00000000000..ab21a84645b
--- /dev/null
+++ b/app/graphql/resolvers/organizations/organizations_resolver.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Resolvers
+ module Organizations
+ class OrganizationsResolver < BaseResolver
+ include Gitlab::Graphql::Authorize::AuthorizeResource
+
+ type Types::Organizations::OrganizationType.connection_type, null: true
+ authorize :read_organization
+
+ def resolve
+ # For the Organization MVC, all the organizations are public. We need to change this to only accessible
+ # organizations once we start supporting private organizations.
+ # See https://gitlab.com/groups/gitlab-org/-/epics/10649.
+ ::Organizations::Organization.all
+ end
+ end
+ end
+end
diff --git a/app/graphql/resolvers/organizations/projects_resolver.rb b/app/graphql/resolvers/organizations/projects_resolver.rb
new file mode 100644
index 00000000000..836fe0ae059
--- /dev/null
+++ b/app/graphql/resolvers/organizations/projects_resolver.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Resolvers
+ module Organizations
+ class ProjectsResolver < BaseResolver
+ include Gitlab::Graphql::Authorize::AuthorizeResource
+
+ type Types::ProjectType, null: true
+
+ authorize :read_project
+
+ alias_method :organization, :object
+
+ def resolve
+ ::ProjectsFinder.new(current_user: current_user, params: { organization: organization }).execute
+ end
+ end
+ end
+end
diff --git a/app/graphql/resolvers/project_resolver.rb b/app/graphql/resolvers/project_resolver.rb
index 2132447da5e..931fefcea50 100644
--- a/app/graphql/resolvers/project_resolver.rb
+++ b/app/graphql/resolvers/project_resolver.rb
@@ -2,7 +2,11 @@
module Resolvers
class ProjectResolver < BaseResolver
- prepend FullPathResolver
+ def self.target_type
+ 'project'
+ end
+
+ include FullPathResolver
type Types::ProjectType, null: true
diff --git a/app/graphql/resolvers/projects/fork_targets_resolver.rb b/app/graphql/resolvers/projects/fork_targets_resolver.rb
index 5e8be325d43..27797b9f0af 100644
--- a/app/graphql/resolvers/projects/fork_targets_resolver.rb
+++ b/app/graphql/resolvers/projects/fork_targets_resolver.rb
@@ -3,7 +3,7 @@
module Resolvers
module Projects
class ForkTargetsResolver < BaseResolver
- include ResolvesGroups
+ include LooksAhead
include Gitlab::Graphql::Authorize::AuthorizeResource
type Types::NamespaceType.connection_type, null: true
@@ -17,10 +17,15 @@ module Resolvers
required: false,
description: 'Search query for path or name.'
+ def resolve_with_lookahead(**args)
+ fork_targets = ForkTargetsFinder.new(project, current_user).execute(args)
+ apply_lookahead(fork_targets)
+ end
+
private
- def resolve_groups(**args)
- ForkTargetsFinder.new(project, current_user).execute(args)
+ def preloads
+ ResolvesGroups::PRELOADS
end
end
end
diff --git a/app/graphql/resolvers/users_resolver.rb b/app/graphql/resolvers/users_resolver.rb
index 90a6bd3e6b2..a512c6bafe1 100644
--- a/app/graphql/resolvers/users_resolver.rb
+++ b/app/graphql/resolvers/users_resolver.rb
@@ -28,10 +28,19 @@ module Resolvers
default_value: false,
description: 'Return only admin users.'
- def resolve(ids: nil, usernames: nil, sort: nil, search: nil, admins: nil)
+ argument :group_id, ::Types::GlobalIDType[::Group],
+ required: false,
+ description: 'Return users member of a given group.'
+
+ def resolve(ids: nil, usernames: nil, sort: nil, search: nil, admins: nil, group_id: nil)
authorize!(usernames)
- ::UsersFinder.new(context[:current_user], finder_params(ids, usernames, sort, search, admins)).execute
+ group = group_id ? find_authorized_group!(group_id) : nil
+
+ ::UsersFinder.new(
+ context[:current_user],
+ finder_params(ids, usernames, sort, search, admins, group)
+ ).execute
end
def ready?(**args)
@@ -52,16 +61,27 @@ module Resolvers
private
- def finder_params(ids, usernames, sort, search, admins)
+ def finder_params(ids, usernames, sort, search, admins, group)
params = {}
params[:sort] = sort if sort
params[:username] = usernames if usernames
params[:id] = parse_gids(ids) if ids
params[:search] = search if search
params[:admins] = admins if admins
+ params[:group] = group if group
params
end
+ def find_authorized_group!(group_id)
+ group = GitlabSchema.find_by_gid(group_id).sync
+
+ unless Ability.allowed?(current_user, :read_group, group)
+ raise_resource_not_available_error! "Could not find a Group with ID #{group_id}"
+ end
+
+ group
+ end
+
def parse_gids(gids)
gids.map { |gid| GitlabSchema.parse_gid(gid, expected_type: ::User).model_id }
end