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>2021-12-20 16:37:47 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-12-20 16:37:47 +0300
commitaee0a117a889461ce8ced6fcf73207fe017f1d99 (patch)
tree891d9ef189227a8445d83f35c1b0fc99573f4380 /app/graphql/resolvers
parent8d46af3258650d305f53b819eabf7ab18d22f59e (diff)
Add latest changes from gitlab-org/gitlab@14-6-stable-eev14.6.0-rc42
Diffstat (limited to 'app/graphql/resolvers')
-rw-r--r--app/graphql/resolvers/base_issues_resolver.rb6
-rw-r--r--app/graphql/resolvers/ci/jobs_resolver.rb2
-rw-r--r--app/graphql/resolvers/ci/runner_status_resolver.rb24
-rw-r--r--app/graphql/resolvers/ci/runners_resolver.rb5
-rw-r--r--app/graphql/resolvers/clusters/agent_activity_events_resolver.rb25
-rw-r--r--app/graphql/resolvers/clusters/agents_resolver.rb5
-rw-r--r--app/graphql/resolvers/container_repository_tags_resolver.rb49
-rw-r--r--app/graphql/resolvers/design_management/designs_resolver.rb10
-rw-r--r--app/graphql/resolvers/design_management/version/design_at_version_resolver.rb8
-rw-r--r--app/graphql/resolvers/kas/agent_configurations_resolver.rb2
-rw-r--r--app/graphql/resolvers/package_pipelines_resolver.rb57
-rw-r--r--app/graphql/resolvers/project_jobs_resolver.rb1
-rw-r--r--app/graphql/resolvers/project_pipeline_resolver.rb7
-rw-r--r--app/graphql/resolvers/project_pipelines_resolver.rb2
-rw-r--r--app/graphql/resolvers/snippets/blobs_resolver.rb2
-rw-r--r--app/graphql/resolvers/users/participants_resolver.rb13
16 files changed, 201 insertions, 17 deletions
diff --git a/app/graphql/resolvers/base_issues_resolver.rb b/app/graphql/resolvers/base_issues_resolver.rb
index 54ebb697cb2..dca93444907 100644
--- a/app/graphql/resolvers/base_issues_resolver.rb
+++ b/app/graphql/resolvers/base_issues_resolver.rb
@@ -4,13 +4,13 @@ module Resolvers
class BaseIssuesResolver < BaseResolver
prepend IssueResolverArguments
- argument :state, Types::IssuableStateEnum,
- required: false,
- description: 'Current state of this issue.'
argument :sort, Types::IssueSortEnum,
description: 'Sort issues by this criteria.',
required: false,
default_value: :created_desc
+ argument :state, Types::IssuableStateEnum,
+ required: false,
+ description: 'Current state of this issue.'
type Types::IssueType.connection_type, null: true
diff --git a/app/graphql/resolvers/ci/jobs_resolver.rb b/app/graphql/resolvers/ci/jobs_resolver.rb
index 5ae9e721cc8..df138a15538 100644
--- a/app/graphql/resolvers/ci/jobs_resolver.rb
+++ b/app/graphql/resolvers/ci/jobs_resolver.rb
@@ -29,7 +29,7 @@ module Resolvers
job_types: security_report_types
).execute
else
- pipeline.statuses
+ pipeline.statuses_order_id_desc
end
end
end
diff --git a/app/graphql/resolvers/ci/runner_status_resolver.rb b/app/graphql/resolvers/ci/runner_status_resolver.rb
new file mode 100644
index 00000000000..d916a8a13f0
--- /dev/null
+++ b/app/graphql/resolvers/ci/runner_status_resolver.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+module Resolvers
+ module Ci
+ # NOTE: This class was introduced to allow modifying the meaning of certain values in RunnerStatusEnum
+ # while preserving backward compatibility. It can be removed in 15.0 once the API has stabilized.
+ class RunnerStatusResolver < BaseResolver
+ type Types::Ci::RunnerStatusEnum, null: false
+
+ alias_method :runner, :object
+
+ argument :legacy_mode,
+ type: GraphQL::Types::String,
+ default_value: '14.5',
+ required: false,
+ description: 'Compatibility mode. A null value turns off compatibility mode.',
+ deprecated: { reason: 'Will be removed in 15.0. From that release onward, the field will behave as if legacyMode is null', milestone: '14.6' }
+
+ def resolve(legacy_mode:, **args)
+ runner.status(legacy_mode)
+ end
+ end
+ end
+end
diff --git a/app/graphql/resolvers/ci/runners_resolver.rb b/app/graphql/resolvers/ci/runners_resolver.rb
index 07105701daa..9848b5a503f 100644
--- a/app/graphql/resolvers/ci/runners_resolver.rb
+++ b/app/graphql/resolvers/ci/runners_resolver.rb
@@ -7,6 +7,10 @@ module Resolvers
type Types::Ci::RunnerType.connection_type, null: true
+ argument :active, ::GraphQL::Types::Boolean,
+ required: false,
+ description: 'Filter runners by active (true) or paused (false) status.'
+
argument :status, ::Types::Ci::RunnerStatusEnum,
required: false,
description: 'Filter runners by status.'
@@ -38,6 +42,7 @@ module Resolvers
def runners_finder_params(params)
{
+ active: params[:active],
status_status: params[:status]&.to_s,
type_type: params[:type],
tag_name: params[:tag_list],
diff --git a/app/graphql/resolvers/clusters/agent_activity_events_resolver.rb b/app/graphql/resolvers/clusters/agent_activity_events_resolver.rb
new file mode 100644
index 00000000000..b6fec3d3772
--- /dev/null
+++ b/app/graphql/resolvers/clusters/agent_activity_events_resolver.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+module Resolvers
+ module Clusters
+ class AgentActivityEventsResolver < BaseResolver
+ type Types::Clusters::AgentActivityEventType, null: true
+
+ alias_method :agent, :object
+
+ delegate :project, to: :agent
+
+ def resolve(**args)
+ return ::Clusters::Agents::ActivityEvent.none unless can_view_activity_events?
+
+ agent.activity_events
+ end
+
+ private
+
+ def can_view_activity_events?
+ current_user.can?(:admin_cluster, project)
+ end
+ end
+ end
+end
diff --git a/app/graphql/resolvers/clusters/agents_resolver.rb b/app/graphql/resolvers/clusters/agents_resolver.rb
index 9b8cea52e3b..5ad66ed7cdd 100644
--- a/app/graphql/resolvers/clusters/agents_resolver.rb
+++ b/app/graphql/resolvers/clusters/agents_resolver.rb
@@ -28,7 +28,10 @@ module Resolvers
private
def preloads
- { tokens: :last_used_agent_tokens }
+ {
+ activity_events: { activity_events: [:user, agent_token: :agent] },
+ tokens: :last_used_agent_tokens
+ }
end
end
end
diff --git a/app/graphql/resolvers/container_repository_tags_resolver.rb b/app/graphql/resolvers/container_repository_tags_resolver.rb
new file mode 100644
index 00000000000..55a83dd49da
--- /dev/null
+++ b/app/graphql/resolvers/container_repository_tags_resolver.rb
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+module Resolvers
+ class ContainerRepositoryTagsResolver < BaseResolver
+ type Types::ContainerRepositoryTagType.connection_type, null: true
+
+ argument :sort, Types::ContainerRepositoryTagsSortEnum,
+ description: 'Sort tags by these criteria.',
+ required: false,
+ default_value: nil
+
+ argument :name, GraphQL::Types::String,
+ description: 'Search by tag name.',
+ required: false,
+ default_value: nil
+
+ def resolve(sort:, **filters)
+ result = tags
+
+ if filters[:name]
+ result = tags.filter do |tag|
+ tag.name.include?(filters[:name])
+ end
+ end
+
+ result = sort_tags(result, sort) if sort
+ result
+ end
+
+ private
+
+ def sort_tags(to_be_sorted, sort)
+ raise StandardError unless Types::ContainerRepositoryTagsSortEnum.enum.include?(sort)
+
+ sort_value, _, direction = sort.to_s.rpartition('_')
+
+ sorted = to_be_sorted.sort_by(&sort_value.to_sym)
+ return sorted.reverse if direction == 'desc'
+
+ sorted
+ end
+
+ def tags
+ object.tags
+ rescue Faraday::Error
+ raise ::Gitlab::Graphql::Errors::ResourceNotAvailable, "Can't connect to the Container Registry. If this error persists, please review the troubleshooting documentation."
+ end
+ end
+end
diff --git a/app/graphql/resolvers/design_management/designs_resolver.rb b/app/graphql/resolvers/design_management/designs_resolver.rb
index dec778fac80..a62ef6d76e5 100644
--- a/app/graphql/resolvers/design_management/designs_resolver.rb
+++ b/app/graphql/resolvers/design_management/designs_resolver.rb
@@ -8,16 +8,16 @@ module Resolvers
type ::Types::DesignManagement::DesignType.connection_type, null: true
- argument :ids, [DesignID],
+ argument :at_version, VersionID,
required: false,
- description: 'Filters designs by their ID.'
+ description: 'Filters designs to only those that existed at the version. ' \
+ 'If argument is omitted or nil then all designs will reflect the latest version'
argument :filenames, [GraphQL::Types::String],
required: false,
description: 'Filters designs by their filename.'
- argument :at_version, VersionID,
+ argument :ids, [DesignID],
required: false,
- description: 'Filters designs to only those that existed at the version. ' \
- 'If argument is omitted or nil then all designs will reflect the latest version'
+ description: 'Filters designs by their ID.'
def self.single
::Resolvers::DesignManagement::DesignResolver
diff --git a/app/graphql/resolvers/design_management/version/design_at_version_resolver.rb b/app/graphql/resolvers/design_management/version/design_at_version_resolver.rb
index d879c1434dc..76e365c40b1 100644
--- a/app/graphql/resolvers/design_management/version/design_at_version_resolver.rb
+++ b/app/graphql/resolvers/design_management/version/design_at_version_resolver.rb
@@ -16,16 +16,16 @@ module Resolvers
authorize :read_design
- argument :id, DesignAtVersionID,
- required: false,
- as: :design_at_version_id,
- description: 'ID of the DesignAtVersion.'
argument :design_id, DesignID,
required: false,
description: 'ID of a specific design.'
argument :filename, GraphQL::Types::String,
required: false,
description: 'Filename of a specific design.'
+ argument :id, DesignAtVersionID,
+ required: false,
+ as: :design_at_version_id,
+ description: 'ID of the DesignAtVersion.'
def self.single
self
diff --git a/app/graphql/resolvers/kas/agent_configurations_resolver.rb b/app/graphql/resolvers/kas/agent_configurations_resolver.rb
index 238dae0bf12..a1b1d3bfe4c 100644
--- a/app/graphql/resolvers/kas/agent_configurations_resolver.rb
+++ b/app/graphql/resolvers/kas/agent_configurations_resolver.rb
@@ -14,7 +14,7 @@ module Resolvers
return [] unless can_read_agent_configuration?
kas_client.list_agent_config_files(project: project)
- rescue GRPC::BadStatus => e
+ rescue GRPC::BadStatus, Gitlab::Kas::Client::ConfigurationError => e
raise Gitlab::Graphql::Errors::ResourceNotAvailable, e.class.name
end
diff --git a/app/graphql/resolvers/package_pipelines_resolver.rb b/app/graphql/resolvers/package_pipelines_resolver.rb
new file mode 100644
index 00000000000..59a1cd173a4
--- /dev/null
+++ b/app/graphql/resolvers/package_pipelines_resolver.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+module Resolvers
+ class PackagePipelinesResolver < BaseResolver
+ include Gitlab::Graphql::Authorize::AuthorizeResource
+
+ type Types::Ci::PipelineType.connection_type, null: true
+ extension Gitlab::Graphql::Extensions::ExternallyPaginatedArrayExtension
+
+ authorizes_object!
+ authorize :read_pipeline
+
+ alias_method :package, :object
+
+ def resolve(first: nil, last: nil, after: nil, before: nil, lookahead:)
+ finder = ::Packages::BuildInfosFinder.new(
+ package,
+ first: first,
+ last: last,
+ after: decode_cursor(after),
+ before: decode_cursor(before),
+ max_page_size: context.schema.default_max_page_size,
+ support_next_page: lookahead.selects?(:page_info)
+ )
+
+ build_infos = finder.execute
+
+ # this .pluck_pipeline_ids can load max 101 pipelines ids
+ ::Ci::Pipeline.id_in(build_infos.pluck_pipeline_ids)
+ end
+
+ # we manage the pagination manually, so opt out of the connection field extension
+ def self.field_options
+ super.merge(
+ connection: false,
+ extras: [:lookahead]
+ )
+ end
+
+ private
+
+ def decode_cursor(encoded)
+ return unless encoded
+
+ decoded = Gitlab::Json.parse(context.schema.cursor_encoder.decode(encoded, nonce: true))
+ id_from_cursor(decoded)
+ rescue JSON::ParserError
+ raise Gitlab::Graphql::Errors::ArgumentError, "Please provide a valid cursor"
+ end
+
+ def id_from_cursor(cursor)
+ cursor&.fetch('id')
+ rescue KeyError
+ raise Gitlab::Graphql::Errors::ArgumentError, "Please provide a valid cursor"
+ end
+ end
+end
diff --git a/app/graphql/resolvers/project_jobs_resolver.rb b/app/graphql/resolvers/project_jobs_resolver.rb
index 75068014242..8a2693ee46b 100644
--- a/app/graphql/resolvers/project_jobs_resolver.rb
+++ b/app/graphql/resolvers/project_jobs_resolver.rb
@@ -33,6 +33,7 @@ module Resolvers
def preloads
{
+ previous_stage_jobs_and_needs: [:needs, :pipeline],
artifacts: [:job_artifacts],
pipeline: [:user]
}
diff --git a/app/graphql/resolvers/project_pipeline_resolver.rb b/app/graphql/resolvers/project_pipeline_resolver.rb
index 5acd7f95606..ea733ab08ad 100644
--- a/app/graphql/resolvers/project_pipeline_resolver.rb
+++ b/app/graphql/resolvers/project_pipeline_resolver.rb
@@ -24,7 +24,6 @@ module Resolvers
super
end
- # the preloads are defined on ee/app/graphql/ee/resolvers/project_pipeline_resolver.rb
def resolve(iid: nil, sha: nil, **args)
self.lookahead = args.delete(:lookahead)
@@ -42,5 +41,11 @@ module Resolvers
end
end
end
+
+ def unconditional_includes
+ [
+ { statuses: [:needs] }
+ ]
+ end
end
end
diff --git a/app/graphql/resolvers/project_pipelines_resolver.rb b/app/graphql/resolvers/project_pipelines_resolver.rb
index 5a1e92efc96..47a8b028d4d 100644
--- a/app/graphql/resolvers/project_pipelines_resolver.rb
+++ b/app/graphql/resolvers/project_pipelines_resolver.rb
@@ -18,7 +18,7 @@ module Resolvers
def preloads
{
- jobs: [:statuses],
+ jobs: { statuses_order_id_desc: [:needs] },
upstream: [:triggered_by_pipeline],
downstream: [:triggered_pipelines]
}
diff --git a/app/graphql/resolvers/snippets/blobs_resolver.rb b/app/graphql/resolvers/snippets/blobs_resolver.rb
index 00f41517422..cbbc65d7263 100644
--- a/app/graphql/resolvers/snippets/blobs_resolver.rb
+++ b/app/graphql/resolvers/snippets/blobs_resolver.rb
@@ -35,3 +35,5 @@ module Resolvers
end
end
end
+
+Resolvers::Snippets::BlobsResolver.prepend_mod
diff --git a/app/graphql/resolvers/users/participants_resolver.rb b/app/graphql/resolvers/users/participants_resolver.rb
new file mode 100644
index 00000000000..9e87b60fa34
--- /dev/null
+++ b/app/graphql/resolvers/users/participants_resolver.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Resolvers
+ module Users
+ class ParticipantsResolver < BaseResolver
+ type Types::UserType.connection_type, null: true
+
+ def resolve(**args)
+ object.visible_participants(current_user)
+ end
+ end
+ end
+end