gitlab-org--gitlab-foss/app/workers/merge_requests/close_issue_worker.rb

53 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module MergeRequests
class CloseIssueWorker
include ApplicationWorker
data_consistency :always
feature_category :code_review
urgency :low
idempotent!
# Issues:CloseService execute webhooks which are treated as external dependencies
worker_has_external_dependencies!
# This worker only accepts ID of an Issue. We are intentionally using this
# worker to close Issues asynchronously as we only experience SQL timeouts
# when closing an Issue.
def perform(project_id, user_id, issue_id, merge_request_id)
project = Project.find_by_id(project_id)
unless project
logger.info(structured_payload(message: 'Project not found.', project_id: project_id))
return
end
user = User.find_by_id(user_id)
unless user
logger.info(structured_payload(message: 'User not found.', user_id: user_id))
return
end
issue = Issue.find_by_id(issue_id)
unless issue
logger.info(structured_payload(message: 'Issue not found.', issue_id: issue_id))
return
end
merge_request = MergeRequest.find_by_id(merge_request_id)
unless merge_request
logger.info(structured_payload(message: 'Merge request not found.', merge_request_id: merge_request_id))
return
end
Issues::CloseService
.new(project: project, current_user: user)
.execute(issue, commit: merge_request)
end
end
end