diff options
Diffstat (limited to 'app/graphql/mutations')
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 |