summaryrefslogtreecommitdiff
path: root/app/graphql/mutations
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-19 15:44:42 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-19 15:44:42 +0000
commit4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch)
tree5423a1c7516cffe36384133ade12572cf709398d /app/graphql/mutations
parente570267f2f6b326480d284e0164a6464ba4081bc (diff)
downloadgitlab-ce-4555e1b21c365ed8303ffb7a3325d773c9b8bf31.tar.gz
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'app/graphql/mutations')
-rw-r--r--app/graphql/mutations/alert_management/http_integration/create.rb2
-rw-r--r--app/graphql/mutations/alert_management/http_integration/http_integration_base.rb2
-rw-r--r--app/graphql/mutations/alert_management/http_integration/update.rb2
-rw-r--r--app/graphql/mutations/boards/create.rb2
-rw-r--r--app/graphql/mutations/boards/issues/issue_move_list.rb2
-rw-r--r--app/graphql/mutations/boards/lists/base_update.rb40
-rw-r--r--app/graphql/mutations/boards/lists/create.rb2
-rw-r--r--app/graphql/mutations/boards/lists/update.rb22
-rw-r--r--app/graphql/mutations/boards/update.rb2
-rw-r--r--app/graphql/mutations/ci/ci_cd_settings_update.rb2
-rw-r--r--app/graphql/mutations/ci/job/base.rb22
-rw-r--r--app/graphql/mutations/ci/job/play.rb29
-rw-r--r--app/graphql/mutations/ci/job/retry.rb29
-rw-r--r--app/graphql/mutations/commits/create.rb11
-rw-r--r--app/graphql/mutations/concerns/mutations/assignable.rb6
-rw-r--r--app/graphql/mutations/concerns/mutations/resolves_issuable.rb2
-rw-r--r--app/graphql/mutations/issues/common_mutation_arguments.rb5
-rw-r--r--app/graphql/mutations/issues/create.rb4
-rw-r--r--app/graphql/mutations/issues/move.rb2
-rw-r--r--app/graphql/mutations/issues/set_confidential.rb2
-rw-r--r--app/graphql/mutations/issues/set_due_date.rb15
-rw-r--r--app/graphql/mutations/issues/set_locked.rb2
-rw-r--r--app/graphql/mutations/issues/set_severity.rb2
-rw-r--r--app/graphql/mutations/issues/update.rb4
-rw-r--r--app/graphql/mutations/labels/create.rb13
-rw-r--r--app/graphql/mutations/merge_requests/accept.rb2
-rw-r--r--app/graphql/mutations/merge_requests/create.rb2
-rw-r--r--app/graphql/mutations/merge_requests/reviewer_rereview.rb2
-rw-r--r--app/graphql/mutations/merge_requests/set_draft.rb35
-rw-r--r--app/graphql/mutations/merge_requests/set_labels.rb6
-rw-r--r--app/graphql/mutations/merge_requests/set_locked.rb4
-rw-r--r--app/graphql/mutations/merge_requests/set_milestone.rb4
-rw-r--r--app/graphql/mutations/merge_requests/set_wip.rb2
-rw-r--r--app/graphql/mutations/merge_requests/update.rb2
-rw-r--r--app/graphql/mutations/namespace/package_settings/update.rb10
-rw-r--r--app/graphql/mutations/security/ci_configuration/configure_sast.rb17
-rw-r--r--app/graphql/mutations/security/ci_configuration/configure_secret_detection.rb48
37 files changed, 297 insertions, 63 deletions
diff --git a/app/graphql/mutations/alert_management/http_integration/create.rb b/app/graphql/mutations/alert_management/http_integration/create.rb
index 2d7bffb4333..54803855bcf 100644
--- a/app/graphql/mutations/alert_management/http_integration/create.rb
+++ b/app/graphql/mutations/alert_management/http_integration/create.rb
@@ -34,4 +34,4 @@ module Mutations
end
end
-Mutations::AlertManagement::HttpIntegration::Create.prepend_if_ee('::EE::Mutations::AlertManagement::HttpIntegration::Create')
+Mutations::AlertManagement::HttpIntegration::Create.prepend_mod_with('Mutations::AlertManagement::HttpIntegration::Create')
diff --git a/app/graphql/mutations/alert_management/http_integration/http_integration_base.rb b/app/graphql/mutations/alert_management/http_integration/http_integration_base.rb
index e33b7bb399a..efa92bfe895 100644
--- a/app/graphql/mutations/alert_management/http_integration/http_integration_base.rb
+++ b/app/graphql/mutations/alert_management/http_integration/http_integration_base.rb
@@ -33,4 +33,4 @@ module Mutations
end
end
-Mutations::AlertManagement::HttpIntegration::HttpIntegrationBase.prepend_if_ee('::EE::Mutations::AlertManagement::HttpIntegration::HttpIntegrationBase')
+Mutations::AlertManagement::HttpIntegration::HttpIntegrationBase.prepend_mod_with('Mutations::AlertManagement::HttpIntegration::HttpIntegrationBase')
diff --git a/app/graphql/mutations/alert_management/http_integration/update.rb b/app/graphql/mutations/alert_management/http_integration/update.rb
index b1e4ce841ee..4e6e7995c10 100644
--- a/app/graphql/mutations/alert_management/http_integration/update.rb
+++ b/app/graphql/mutations/alert_management/http_integration/update.rb
@@ -32,4 +32,4 @@ module Mutations
end
end
-Mutations::AlertManagement::HttpIntegration::Update.prepend_if_ee('::EE::Mutations::AlertManagement::HttpIntegration::Update')
+Mutations::AlertManagement::HttpIntegration::Update.prepend_mod_with('Mutations::AlertManagement::HttpIntegration::Update')
diff --git a/app/graphql/mutations/boards/create.rb b/app/graphql/mutations/boards/create.rb
index 003c4f7761b..44fc22cf883 100644
--- a/app/graphql/mutations/boards/create.rb
+++ b/app/graphql/mutations/boards/create.rb
@@ -30,4 +30,4 @@ module Mutations
end
end
-Mutations::Boards::Create.prepend_if_ee('::EE::Mutations::Boards::Create')
+Mutations::Boards::Create.prepend_mod_with('Mutations::Boards::Create')
diff --git a/app/graphql/mutations/boards/issues/issue_move_list.rb b/app/graphql/mutations/boards/issues/issue_move_list.rb
index f32205643da..4c9752c6343 100644
--- a/app/graphql/mutations/boards/issues/issue_move_list.rb
+++ b/app/graphql/mutations/boards/issues/issue_move_list.rb
@@ -86,4 +86,4 @@ module Mutations
end
end
-Mutations::Boards::Issues::IssueMoveList.prepend_if_ee('EE::Mutations::Boards::Issues::IssueMoveList')
+Mutations::Boards::Issues::IssueMoveList.prepend_mod_with('Mutations::Boards::Issues::IssueMoveList')
diff --git a/app/graphql/mutations/boards/lists/base_update.rb b/app/graphql/mutations/boards/lists/base_update.rb
new file mode 100644
index 00000000000..b06cb3b1e32
--- /dev/null
+++ b/app/graphql/mutations/boards/lists/base_update.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+module Mutations
+ module Boards
+ module Lists
+ class BaseUpdate < BaseMutation
+ argument :position, GraphQL::INT_TYPE,
+ required: false,
+ description: 'Position of list within the board.'
+
+ argument :collapsed, GraphQL::BOOLEAN_TYPE,
+ required: false,
+ description: 'Indicates if the list is collapsed for this user.'
+
+ def resolve(list: nil, **args)
+ if list.nil? || !can_read_list?(list)
+ raise_resource_not_available_error!
+ end
+
+ update_result = update_list(list, args)
+
+ {
+ list: update_result.payload[:list],
+ errors: update_result.errors
+ }
+ end
+
+ private
+
+ def update_list(list, args)
+ raise NotImplementedError
+ end
+
+ def can_read_list?(list)
+ raise NotImplementedError
+ end
+ end
+ end
+ end
+end
diff --git a/app/graphql/mutations/boards/lists/create.rb b/app/graphql/mutations/boards/lists/create.rb
index 673fa95fc56..590a905ab7b 100644
--- a/app/graphql/mutations/boards/lists/create.rb
+++ b/app/graphql/mutations/boards/lists/create.rb
@@ -34,4 +34,4 @@ module Mutations
end
end
-Mutations::Boards::Lists::Create.prepend_if_ee('::EE::Mutations::Boards::Lists::Create')
+Mutations::Boards::Lists::Create.prepend_mod_with('Mutations::Boards::Lists::Create')
diff --git a/app/graphql/mutations/boards/lists/update.rb b/app/graphql/mutations/boards/lists/update.rb
index 504082ec22c..d17dd5162a0 100644
--- a/app/graphql/mutations/boards/lists/update.rb
+++ b/app/graphql/mutations/boards/lists/update.rb
@@ -3,7 +3,7 @@
module Mutations
module Boards
module Lists
- class Update < BaseMutation
+ class Update < BaseUpdate
graphql_name 'UpdateBoardList'
argument :list_id, Types::GlobalIDType[List],
@@ -11,29 +11,11 @@ module Mutations
loads: Types::BoardListType,
description: 'Global ID of the list.'
- argument :position, GraphQL::INT_TYPE,
- required: false,
- description: 'Position of list within the board.'
-
- argument :collapsed, GraphQL::BOOLEAN_TYPE,
- required: false,
- description: 'Indicates if the list is collapsed for this user.'
-
field :list,
Types::BoardListType,
null: true,
description: 'Mutated list.'
- def resolve(list: nil, **args)
- raise_resource_not_available_error! unless can_read_list?(list)
- update_result = update_list(list, args)
-
- {
- list: update_result[:list],
- errors: list.errors.full_messages
- }
- end
-
private
def update_list(list, args)
@@ -42,8 +24,6 @@ module Mutations
end
def can_read_list?(list)
- return false unless list.present?
-
Ability.allowed?(current_user, :read_issue_board_list, list.board)
end
end
diff --git a/app/graphql/mutations/boards/update.rb b/app/graphql/mutations/boards/update.rb
index 628b3a3fadb..f1a1d57306b 100644
--- a/app/graphql/mutations/boards/update.rb
+++ b/app/graphql/mutations/boards/update.rb
@@ -42,4 +42,4 @@ module Mutations
end
end
-Mutations::Boards::Update.prepend_if_ee('::EE::Mutations::Boards::Update')
+Mutations::Boards::Update.prepend_mod_with('Mutations::Boards::Update')
diff --git a/app/graphql/mutations/ci/ci_cd_settings_update.rb b/app/graphql/mutations/ci/ci_cd_settings_update.rb
index d7451babaea..a484c2438a4 100644
--- a/app/graphql/mutations/ci/ci_cd_settings_update.rb
+++ b/app/graphql/mutations/ci/ci_cd_settings_update.rb
@@ -36,4 +36,4 @@ module Mutations
end
end
-Mutations::Ci::CiCdSettingsUpdate.prepend_if_ee('::EE::Mutations::Ci::CiCdSettingsUpdate')
+Mutations::Ci::CiCdSettingsUpdate.prepend_mod_with('Mutations::Ci::CiCdSettingsUpdate')
diff --git a/app/graphql/mutations/ci/job/base.rb b/app/graphql/mutations/ci/job/base.rb
new file mode 100644
index 00000000000..3359def159a
--- /dev/null
+++ b/app/graphql/mutations/ci/job/base.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+module Mutations
+ module Ci
+ module Job
+ class Base < BaseMutation
+ JobID = ::Types::GlobalIDType[::Ci::Build]
+
+ argument :id, JobID,
+ required: true,
+ description: 'The ID of the job to mutate.'
+
+ def find_object(id: )
+ # TODO: remove this line when the compatibility layer is removed
+ # See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883
+ id = JobID.coerce_isolated_input(id)
+ GlobalID::Locator.locate(id)
+ end
+ end
+ end
+ end
+end
diff --git a/app/graphql/mutations/ci/job/play.rb b/app/graphql/mutations/ci/job/play.rb
new file mode 100644
index 00000000000..f87904f8b25
--- /dev/null
+++ b/app/graphql/mutations/ci/job/play.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+module Mutations
+ module Ci
+ module Job
+ class Play < Base
+ graphql_name 'JobPlay'
+
+ field :job,
+ Types::Ci::JobType,
+ null: true,
+ description: 'The job after the mutation.'
+
+ authorize :update_build
+
+ def resolve(id:)
+ job = authorized_find!(id: id)
+ project = job.project
+
+ ::Ci::PlayBuildService.new(project, current_user).execute(job)
+ {
+ job: job,
+ errors: errors_on_object(job)
+ }
+ end
+ end
+ end
+ end
+end
diff --git a/app/graphql/mutations/ci/job/retry.rb b/app/graphql/mutations/ci/job/retry.rb
new file mode 100644
index 00000000000..a61d5dddb40
--- /dev/null
+++ b/app/graphql/mutations/ci/job/retry.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+module Mutations
+ module Ci
+ module Job
+ class Retry < Base
+ graphql_name 'JobRetry'
+
+ field :job,
+ Types::Ci::JobType,
+ null: true,
+ description: 'The job after the mutation.'
+
+ authorize :update_build
+
+ def resolve(id:)
+ job = authorized_find!(id: id)
+ project = job.project
+
+ ::Ci::RetryBuildService.new(project, current_user).execute(job)
+ {
+ job: job,
+ errors: errors_on_object(job)
+ }
+ end
+ end
+ end
+ end
+end
diff --git a/app/graphql/mutations/commits/create.rb b/app/graphql/mutations/commits/create.rb
index 84933fee5d2..2e06e1ea0c4 100644
--- a/app/graphql/mutations/commits/create.rb
+++ b/app/graphql/mutations/commits/create.rb
@@ -5,6 +5,11 @@ module Mutations
class Create < BaseMutation
include FindsProject
+ class UrlHelpers
+ include GitlabRoutingHelper
+ include Gitlab::Routing
+ end
+
graphql_name 'CommitCreate'
argument :project_path, GraphQL::ID_TYPE,
@@ -29,6 +34,11 @@ module Mutations
required: true,
description: 'Array of action hashes to commit as a batch.'
+ field :commit_pipeline_path,
+ GraphQL::STRING_TYPE,
+ null: true,
+ description: "ETag path for the commit's pipeline."
+
field :commit,
Types::CommitType,
null: true,
@@ -50,6 +60,7 @@ module Mutations
{
commit: (project.repository.commit(result[:result]) if result[:status] == :success),
+ commit_pipeline_path: UrlHelpers.new.graphql_etag_pipeline_sha_path(result[:result]),
errors: Array.wrap(result[:message])
}
end
diff --git a/app/graphql/mutations/concerns/mutations/assignable.rb b/app/graphql/mutations/concerns/mutations/assignable.rb
index d3ab0a1779a..e214a57500c 100644
--- a/app/graphql/mutations/concerns/mutations/assignable.rb
+++ b/app/graphql/mutations/concerns/mutations/assignable.rb
@@ -33,9 +33,9 @@ module Mutations
def assign!(resource, users, operation_mode)
update_service_class.new(
- resource.project,
- current_user,
- assignee_ids: assignee_ids(resource, users, operation_mode)
+ project: resource.project,
+ current_user: current_user,
+ params: { assignee_ids: assignee_ids(resource, users, operation_mode) }
).execute(resource)
end
diff --git a/app/graphql/mutations/concerns/mutations/resolves_issuable.rb b/app/graphql/mutations/concerns/mutations/resolves_issuable.rb
index 0fe2d09de6d..fd9031d3ea7 100644
--- a/app/graphql/mutations/concerns/mutations/resolves_issuable.rb
+++ b/app/graphql/mutations/concerns/mutations/resolves_issuable.rb
@@ -38,4 +38,4 @@ module Mutations
end
end
-Mutations::ResolvesIssuable.prepend_if_ee('::EE::Mutations::ResolvesIssuable')
+Mutations::ResolvesIssuable.prepend_mod_with('Mutations::ResolvesIssuable')
diff --git a/app/graphql/mutations/issues/common_mutation_arguments.rb b/app/graphql/mutations/issues/common_mutation_arguments.rb
index 4b5b246281f..65768b85d14 100644
--- a/app/graphql/mutations/issues/common_mutation_arguments.rb
+++ b/app/graphql/mutations/issues/common_mutation_arguments.rb
@@ -22,6 +22,11 @@ module Mutations
as: :discussion_locked,
required: false,
description: copy_field_description(Types::IssueType, :discussion_locked)
+
+ argument :type, Types::IssueTypeEnum,
+ as: :issue_type,
+ required: false,
+ description: copy_field_description(Types::IssueType, :type)
end
end
end
diff --git a/app/graphql/mutations/issues/create.rb b/app/graphql/mutations/issues/create.rb
index 37fddd92832..3a57e2434a5 100644
--- a/app/graphql/mutations/issues/create.rb
+++ b/app/graphql/mutations/issues/create.rb
@@ -73,7 +73,7 @@ module Mutations
project = authorized_find!(project_path)
params = build_create_issue_params(attributes.merge(author_id: current_user.id))
- issue = ::Issues::CreateService.new(project, current_user, params).execute
+ issue = ::Issues::CreateService.new(project: project, current_user: current_user, params: params).execute
if issue.spam?
issue.errors.add(:base, 'Spam detected.')
@@ -102,4 +102,4 @@ module Mutations
end
end
-Mutations::Issues::Create.prepend_if_ee('::EE::Mutations::Issues::Create')
+Mutations::Issues::Create.prepend_mod_with('Mutations::Issues::Create')
diff --git a/app/graphql/mutations/issues/move.rb b/app/graphql/mutations/issues/move.rb
index 0f2af99bf61..cb4f0f42b38 100644
--- a/app/graphql/mutations/issues/move.rb
+++ b/app/graphql/mutations/issues/move.rb
@@ -18,7 +18,7 @@ module Mutations
target_project = resolve_project(full_path: target_project_path).sync
begin
- moved_issue = ::Issues::MoveService.new(source_project, current_user).execute(issue, target_project)
+ moved_issue = ::Issues::MoveService.new(project: source_project, current_user: current_user).execute(issue, target_project)
rescue ::Issues::MoveService::MoveError => error
errors = error.message
end
diff --git a/app/graphql/mutations/issues/set_confidential.rb b/app/graphql/mutations/issues/set_confidential.rb
index 75befddc261..8e88b31d9ed 100644
--- a/app/graphql/mutations/issues/set_confidential.rb
+++ b/app/graphql/mutations/issues/set_confidential.rb
@@ -14,7 +14,7 @@ module Mutations
issue = authorized_find!(project_path: project_path, iid: iid)
project = issue.project
- ::Issues::UpdateService.new(project, current_user, confidential: confidential)
+ ::Issues::UpdateService.new(project: project, current_user: current_user, params: { confidential: confidential })
.execute(issue)
{
diff --git a/app/graphql/mutations/issues/set_due_date.rb b/app/graphql/mutations/issues/set_due_date.rb
index da7892f4ed4..9cefac96b25 100644
--- a/app/graphql/mutations/issues/set_due_date.rb
+++ b/app/graphql/mutations/issues/set_due_date.rb
@@ -7,14 +7,23 @@ module Mutations
argument :due_date,
Types::TimeType,
- required: true,
- description: 'The desired due date for the issue.'
+ required: false,
+ description: 'The desired due date for the issue, ' \
+ 'due date will be removed if absent or set to null'
+
+ def ready?(**args)
+ unless args.key?(:due_date)
+ raise Gitlab::Graphql::Errors::ArgumentError, 'Argument dueDate must be provided (`null` accepted)'
+ end
+
+ super
+ end
def resolve(project_path:, iid:, due_date:)
issue = authorized_find!(project_path: project_path, iid: iid)
project = issue.project
- ::Issues::UpdateService.new(project, current_user, due_date: due_date)
+ ::Issues::UpdateService.new(project: project, current_user: current_user, params: { due_date: due_date })
.execute(issue)
{
diff --git a/app/graphql/mutations/issues/set_locked.rb b/app/graphql/mutations/issues/set_locked.rb
index 611226e48ad..3a696a64dad 100644
--- a/app/graphql/mutations/issues/set_locked.rb
+++ b/app/graphql/mutations/issues/set_locked.rb
@@ -13,7 +13,7 @@ module Mutations
def resolve(project_path:, iid:, locked:)
issue = authorized_find!(project_path: project_path, iid: iid)
- ::Issues::UpdateService.new(issue.project, current_user, discussion_locked: locked)
+ ::Issues::UpdateService.new(project: issue.project, current_user: current_user, params: { discussion_locked: locked })
.execute(issue)
{
diff --git a/app/graphql/mutations/issues/set_severity.rb b/app/graphql/mutations/issues/set_severity.rb
index bc386e07178..778563ba053 100644
--- a/app/graphql/mutations/issues/set_severity.rb
+++ b/app/graphql/mutations/issues/set_severity.rb
@@ -12,7 +12,7 @@ module Mutations
issue = authorized_find!(project_path: project_path, iid: iid)
project = issue.project
- ::Issues::UpdateService.new(project, current_user, severity: severity)
+ ::Issues::UpdateService.new(project: project, current_user: current_user, params: { severity: severity })
.execute(issue)
{
diff --git a/app/graphql/mutations/issues/update.rb b/app/graphql/mutations/issues/update.rb
index eea2cd49aa0..eb16b7b38d0 100644
--- a/app/graphql/mutations/issues/update.rb
+++ b/app/graphql/mutations/issues/update.rb
@@ -31,7 +31,7 @@ module Mutations
issue = authorized_find!(project_path: project_path, iid: iid)
project = issue.project
- ::Issues::UpdateService.new(project, current_user, args).execute(issue)
+ ::Issues::UpdateService.new(project: project, current_user: current_user, params: args).execute(issue)
{
issue: issue,
@@ -42,4 +42,4 @@ module Mutations
end
end
-Mutations::Issues::Update.prepend_if_ee('::EE::Mutations::Issues::Update')
+Mutations::Issues::Update.prepend_mod_with('Mutations::Issues::Update')
diff --git a/app/graphql/mutations/labels/create.rb b/app/graphql/mutations/labels/create.rb
index ccbd1c37cbf..4da628d53ea 100644
--- a/app/graphql/mutations/labels/create.rb
+++ b/app/graphql/mutations/labels/create.rb
@@ -20,10 +20,21 @@ module Mutations
required: false,
description: 'Description of the label.'
+ argument :remove_on_close, GraphQL::BOOLEAN_TYPE,
+ required: false,
+ description: copy_field_description(Types::LabelType, :remove_on_close)
+
argument :color, GraphQL::STRING_TYPE,
required: false,
default_value: Label::DEFAULT_COLOR,
- description: "The color of the label given in 6-digit hex notation with leading '#' sign (e.g. #FFAABB) or one of the CSS color names in https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Color_keywords."
+ see: {
+ 'List of color keywords at mozilla.org' =>
+ 'https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Color_keywords'
+ },
+ description: <<~DESC
+ The color of the label given in 6-digit hex notation with leading '#' sign
+ (for example, `#FFAABB`) or one of the CSS color names.
+ DESC
authorize :admin_label
diff --git a/app/graphql/mutations/merge_requests/accept.rb b/app/graphql/mutations/merge_requests/accept.rb
index da94dcd8890..9994f793a01 100644
--- a/app/graphql/mutations/merge_requests/accept.rb
+++ b/app/graphql/mutations/merge_requests/accept.rb
@@ -47,7 +47,7 @@ module Mutations
merge_request = authorized_find!(project_path: project_path, iid: iid)
project = merge_request.target_project
merge_params = args.compact.with_indifferent_access
- merge_service = ::MergeRequests::MergeService.new(project, current_user, merge_params)
+ merge_service = ::MergeRequests::MergeService.new(project: project, current_user: current_user, params: merge_params)
if error = validate(merge_request, merge_service, merge_params)
return { merge_request: merge_request, errors: [error] }
diff --git a/app/graphql/mutations/merge_requests/create.rb b/app/graphql/mutations/merge_requests/create.rb
index 9ac8f70be95..4849c198677 100644
--- a/app/graphql/mutations/merge_requests/create.rb
+++ b/app/graphql/mutations/merge_requests/create.rb
@@ -42,7 +42,7 @@ module Mutations
project = authorized_find!(project_path)
params = attributes.merge(author_id: current_user.id)
- merge_request = ::MergeRequests::CreateService.new(project, current_user, params).execute
+ merge_request = ::MergeRequests::CreateService.new(project: project, current_user: current_user, params: params).execute
{
merge_request: merge_request.valid? ? merge_request : nil,
diff --git a/app/graphql/mutations/merge_requests/reviewer_rereview.rb b/app/graphql/mutations/merge_requests/reviewer_rereview.rb
index f6f4881654e..d1d5118e271 100644
--- a/app/graphql/mutations/merge_requests/reviewer_rereview.rb
+++ b/app/graphql/mutations/merge_requests/reviewer_rereview.rb
@@ -15,7 +15,7 @@ module Mutations
def resolve(project_path:, iid:, user:)
merge_request = authorized_find!(project_path: project_path, iid: iid)
- result = ::MergeRequests::RequestReviewService.new(merge_request.project, current_user).execute(merge_request, user)
+ result = ::MergeRequests::RequestReviewService.new(project: merge_request.project, current_user: current_user).execute(merge_request, user)
{
merge_request: merge_request,
diff --git a/app/graphql/mutations/merge_requests/set_draft.rb b/app/graphql/mutations/merge_requests/set_draft.rb
new file mode 100644
index 00000000000..80006c6f70e
--- /dev/null
+++ b/app/graphql/mutations/merge_requests/set_draft.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+module Mutations
+ module MergeRequests
+ class SetDraft < Base
+ graphql_name 'MergeRequestSetDraft'
+
+ argument :draft,
+ GraphQL::BOOLEAN_TYPE,
+ required: true,
+ description: <<~DESC
+ Whether or not to set the merge request as a draft.
+ DESC
+
+ def resolve(project_path:, iid:, draft: nil)
+ merge_request = authorized_find!(project_path: project_path, iid: iid)
+ project = merge_request.project
+
+ ::MergeRequests::UpdateService.new(project: project, current_user: current_user, params: { wip_event: wip_event(draft) })
+ .execute(merge_request)
+
+ {
+ merge_request: merge_request,
+ errors: errors_on_object(merge_request)
+ }
+ end
+
+ private
+
+ def wip_event(wip)
+ wip ? 'wip' : 'unwip'
+ end
+ end
+ end
+end
diff --git a/app/graphql/mutations/merge_requests/set_labels.rb b/app/graphql/mutations/merge_requests/set_labels.rb
index 712c68c9425..a77c2731a05 100644
--- a/app/graphql/mutations/merge_requests/set_labels.rb
+++ b/app/graphql/mutations/merge_requests/set_labels.rb
@@ -9,14 +9,14 @@ module Mutations
[::Types::GlobalIDType[Label]],
required: true,
description: <<~DESC
- The Label IDs to set. Replaces existing labels by default.
+ The Label IDs to set. Replaces existing labels by default.
DESC
argument :operation_mode,
Types::MutationOperationModeEnum,
required: false,
description: <<~DESC
- Changes the operation mode. Defaults to REPLACE.
+ Changes the operation mode. Defaults to REPLACE.
DESC
def resolve(project_path:, iid:, label_ids:, operation_mode: Types::MutationOperationModeEnum.enum[:replace])
@@ -38,7 +38,7 @@ module Mutations
:label_ids
end
- ::MergeRequests::UpdateService.new(project, current_user, attribute_name => label_ids)
+ ::MergeRequests::UpdateService.new(project: project, current_user: current_user, params: { attribute_name => label_ids })
.execute(merge_request)
{
diff --git a/app/graphql/mutations/merge_requests/set_locked.rb b/app/graphql/mutations/merge_requests/set_locked.rb
index c49d5186a03..e9e607551a6 100644
--- a/app/graphql/mutations/merge_requests/set_locked.rb
+++ b/app/graphql/mutations/merge_requests/set_locked.rb
@@ -9,14 +9,14 @@ module Mutations
GraphQL::BOOLEAN_TYPE,
required: true,
description: <<~DESC
- Whether or not to lock the merge request.
+ Whether or not to lock the merge request.
DESC
def resolve(project_path:, iid:, locked:)
merge_request = authorized_find!(project_path: project_path, iid: iid)
project = merge_request.project
- ::MergeRequests::UpdateService.new(project, current_user, discussion_locked: locked)
+ ::MergeRequests::UpdateService.new(project: project, current_user: current_user, params: { discussion_locked: locked })
.execute(merge_request)
{
diff --git a/app/graphql/mutations/merge_requests/set_milestone.rb b/app/graphql/mutations/merge_requests/set_milestone.rb
index abcb1bda1f3..ed5139c4af9 100644
--- a/app/graphql/mutations/merge_requests/set_milestone.rb
+++ b/app/graphql/mutations/merge_requests/set_milestone.rb
@@ -10,14 +10,14 @@ module Mutations
required: false,
loads: Types::MilestoneType,
description: <<~DESC
- The milestone to assign to the merge request.
+ The milestone to assign to the merge request.
DESC
def resolve(project_path:, iid:, milestone: nil)
merge_request = authorized_find!(project_path: project_path, iid: iid)
project = merge_request.project
- ::MergeRequests::UpdateService.new(project, current_user, milestone: milestone)
+ ::MergeRequests::UpdateService.new(project: project, current_user: current_user, params: { milestone: milestone })
.execute(merge_request)
{
diff --git a/app/graphql/mutations/merge_requests/set_wip.rb b/app/graphql/mutations/merge_requests/set_wip.rb
index beb042ce93f..6f52b240840 100644
--- a/app/graphql/mutations/merge_requests/set_wip.rb
+++ b/app/graphql/mutations/merge_requests/set_wip.rb
@@ -16,7 +16,7 @@ module Mutations
merge_request = authorized_find!(project_path: project_path, iid: iid)
project = merge_request.project
- ::MergeRequests::UpdateService.new(project, current_user, wip_event: wip_event(merge_request, wip))
+ ::MergeRequests::UpdateService.new(project: project, current_user: current_user, params: { wip_event: wip_event(merge_request, wip) })
.execute(merge_request)
{
diff --git a/app/graphql/mutations/merge_requests/update.rb b/app/graphql/mutations/merge_requests/update.rb
index 6a94d2f37b2..246e468c34c 100644
--- a/app/graphql/mutations/merge_requests/update.rb
+++ b/app/graphql/mutations/merge_requests/update.rb
@@ -29,7 +29,7 @@ module Mutations
attributes = args.compact
::MergeRequests::UpdateService
- .new(merge_request.project, current_user, attributes)
+ .new(project: merge_request.project, current_user: current_user, params: attributes)
.execute(merge_request)
errors = errors_on_object(merge_request)
diff --git a/app/graphql/mutations/namespace/package_settings/update.rb b/app/graphql/mutations/namespace/package_settings/update.rb
index ca21c3418fc..75c80cfbd3e 100644
--- a/app/graphql/mutations/namespace/package_settings/update.rb
+++ b/app/graphql/mutations/namespace/package_settings/update.rb
@@ -25,6 +25,16 @@ module Mutations
required: false,
description: copy_field_description(Types::Namespace::PackageSettingsType, :maven_duplicate_exception_regex)
+ argument :generic_duplicates_allowed,
+ GraphQL::BOOLEAN_TYPE,
+ required: false,
+ description: copy_field_description(Types::Namespace::PackageSettingsType, :generic_duplicates_allowed)
+
+ argument :generic_duplicate_exception_regex,
+ Types::UntrustedRegexp,
+ required: false,
+ description: copy_field_description(Types::Namespace::PackageSettingsType, :generic_duplicate_exception_regex)
+
field :package_settings,
Types::Namespace::PackageSettingsType,
null: true,
diff --git a/app/graphql/mutations/security/ci_configuration/configure_sast.rb b/app/graphql/mutations/security/ci_configuration/configure_sast.rb
index e4a3f815396..237aff1f052 100644
--- a/app/graphql/mutations/security/ci_configuration/configure_sast.rb
+++ b/app/graphql/mutations/security/ci_configuration/configure_sast.rb
@@ -7,6 +7,11 @@ module Mutations
include FindsProject
graphql_name 'ConfigureSast'
+ description <<~DESC
+ Configure SAST for a project by enabling SAST in a new or modified
+ `.gitlab-ci.yml` file in a new branch. The new branch and a URL to
+ create a Merge Request are a part of the response.
+ DESC
argument :project_path, GraphQL::ID_TYPE,
required: true,
@@ -16,12 +21,12 @@ module Mutations
required: true,
description: 'SAST CI configuration for the project.'
- field :status, GraphQL::STRING_TYPE, null: false,
- description: 'Status of creating the commit for the supplied SAST CI configuration.'
-
field :success_path, GraphQL::STRING_TYPE, null: true,
description: 'Redirect path to use when the response is successful.'
+ field :branch, GraphQL::STRING_TYPE, null: true,
+ description: 'Branch that has the new/modified `.gitlab-ci.yml` file.'
+
authorize :push_code
def resolve(project_path:, configuration:)
@@ -35,9 +40,9 @@ module Mutations
def prepare_response(result)
{
- status: result[:status],
- success_path: result[:success_path],
- errors: Array(result[:errors])
+ branch: result.payload[:branch],
+ success_path: result.payload[:success_path],
+ errors: result.errors
}
end
end
diff --git a/app/graphql/mutations/security/ci_configuration/configure_secret_detection.rb b/app/graphql/mutations/security/ci_configuration/configure_secret_detection.rb
new file mode 100644
index 00000000000..32ad670edaa
--- /dev/null
+++ b/app/graphql/mutations/security/ci_configuration/configure_secret_detection.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+module Mutations
+ module Security
+ module CiConfiguration
+ class ConfigureSecretDetection < BaseMutation
+ include FindsProject
+
+ graphql_name 'ConfigureSecretDetection'
+ description <<~DESC
+ Configure Secret Detection for a project by enabling Secret Detection
+ in a new or modified `.gitlab-ci.yml` file in a new branch. The new
+ branch and a URL to create a Merge Request are a part of the
+ response.
+ DESC
+
+ argument :project_path, GraphQL::ID_TYPE,
+ required: true,
+ description: 'Full path of the project.'
+
+ field :success_path, GraphQL::STRING_TYPE, null: true,
+ description: 'Redirect path to use when the response is successful.'
+
+ field :branch, GraphQL::STRING_TYPE, null: true,
+ description: 'Branch that has the new/modified `.gitlab-ci.yml` file.'
+
+ authorize :push_code
+
+ def resolve(project_path:)
+ project = authorized_find!(project_path)
+
+ result = ::Security::CiConfiguration::SecretDetectionCreateService.new(project, current_user).execute
+ prepare_response(result)
+ end
+
+ private
+
+ def prepare_response(result)
+ {
+ branch: result.payload[:branch],
+ success_path: result.payload[:success_path],
+ errors: result.errors
+ }
+ end
+ end
+ end
+ end
+end