1# frozen_string_literal: true
2
3class MergeRequestMergeabilityCheckWorker
4  include ApplicationWorker
5
6  data_consistency :always
7
8  sidekiq_options retry: 3
9
10  feature_category :code_review
11  idempotent!
12
13  def logger
14    @logger ||= Sidekiq.logger
15  end
16
17  def perform(merge_request_id)
18    merge_request = MergeRequest.find_by_id(merge_request_id)
19
20    unless merge_request
21      logger.error(worker: self.class.name, message: "Failed to find merge request", merge_request_id: merge_request_id)
22      return
23    end
24
25    result =
26      ::MergeRequests::MergeabilityCheckService
27        .new(merge_request)
28        .execute(recheck: false, retry_lease: false)
29
30    logger.error(worker: self.class.name, message: "Failed to check mergeability of merge request: #{result.message}", merge_request_id: merge_request_id) if result.error?
31  end
32end
33