From 3c8b7623074969ba7d52bf7b094a086b3367c1a4 Mon Sep 17 00:00:00 2001 From: Wanderson Policarpo Date: Thu, 28 Aug 2025 18:29:29 +0100 Subject: [PATCH] Trigger Code Review flow when GitLab Duo Bot is assigned as a reviewer --- .../ee/merge_requests/base_service.rb | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/ee/app/services/ee/merge_requests/base_service.rb b/ee/app/services/ee/merge_requests/base_service.rb index a6ca25caff3b30..6369c2a27acdd2 100644 --- a/ee/app/services/ee/merge_requests/base_service.rb +++ b/ee/app/services/ee/merge_requests/base_service.rb @@ -71,7 +71,58 @@ def request_duo_code_review(merge_request) return if merge_request.merge_request_diff.empty? return unless merge_request.ai_review_merge_request_allowed?(current_user) - ::Llm::ReviewMergeRequestService.new(current_user, merge_request).execute + project = merge_request.project + organization = project.organization + + goal = '' + workflow_definition = 'review_code/experimental' + + create_workflow_params = { + goal: goal, + agent_privileges: [1, 2, 3, 4, 5], + pre_approved_agent_privileges: [1, 2, 3, 4, 5], + workflow_definition: workflow_definition, + allow_agent_to_request_user: true, + environment: 'web' + }.compact + + result = ::Ai::DuoWorkflows::CreateWorkflowService.new( + container: project, + current_user: current_user, + params: create_workflow_params + ).execute + + workflow = result[:workflow] + gitlab_oauth_token_result = ::Ai::DuoWorkflows::CreateOauthAccessTokenService.new( + current_user: current_user, + organization: organization, + workflow_definition: workflow_definition + ).execute + oauth_token = gitlab_oauth_token_result[:oauth_access_token] + + duo_workflow_token = ::Ai::DuoWorkflow::DuoWorkflowService::Client.new( + duo_workflow_service_url: ::Gitlab::DuoWorkflow::Client.url(user: current_user), + current_user: current_user, + secure: ::Gitlab::DuoWorkflow::Client.secure? + ).generate_token + + start_workflow_params = { + goal: goal, + workflow_definition: workflow_definition, + workflow_id: workflow.id, + workflow_oauth_token: oauth_token.plaintext_token, + workflow_service_token: duo_workflow_token[:token], + use_service_account: false, + source_branch: merge_request.source_branch, + workflow_metadata: ::Gitlab::DuoWorkflow::Client.metadata(current_user).to_json + } + + ::Ai::DuoWorkflows::StartWorkflowService.new( + workflow: workflow, + params: start_workflow_params + ).execute + + # ::Llm::ReviewMergeRequestService.new(current_user, merge_request).execute end def reset_approvals?(merge_request, _newrev) -- GitLab