Module: Legion::Extensions::Validator::Runners::Validator

Extended by:
Validator
Included in:
Validator
Defined in:
lib/legion/extensions/validator/runners/validator.rb

Instance Method Summary collapse

Instance Method Details

#validate(results: nil, work_item: nil, args: nil) ⇒ Object

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/legion/extensions/validator/runners/validator.rb', line 10

def validate(results: nil, work_item: nil, args: nil, **)
  results = json_load(results) if results.is_a?(String)
  work_item ||= results&.dig(:work_item) || args&.dig(:work_item)
  raise ArgumentError, "work_item is nil in #{__method__}" if work_item.nil?

  started_at = Time.now.utc.iso8601
  validation_config = work_item.dig(:config, :validation) || {}

  if validation_config[:enabled] == false
    return build_result(work_item: work_item, verdict: 'approved',
                        score: perfect_score, issues: [], merged_feedback: [],
                        skip_reason: 'validation disabled', started_at: started_at)
  end

  check_tests_lint_security(work_item: work_item, config: validation_config) => {
    test_result:, lint_result:, security_result:
  }

  early = pr_guard_check(work_item: work_item, started_at: started_at)
  return early if early

  review_result = run_review_if_enabled(work_item: work_item, config: validation_config)
  score = build_score(test_result: test_result, lint_result: lint_result,
                      security_result: security_result, review_result: review_result)
  threshold = Legion::Settings.dig(:fleet, :validation, :quality_gate_threshold) || 0.8
  verdict = determine_verdict(review_result: review_result, score: score, threshold: threshold)
  merged_feedback = collect_feedback(review_result: review_result, test_result: test_result,
                                     lint_result: lint_result, security_result: security_result)

  build_result(work_item: work_item, verdict: verdict, score: score,
               issues: merged_feedback, merged_feedback: merged_feedback, started_at: started_at)
end