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
|