1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-08-09 04:22:45 +03:00
Files
authentication-service/policies/util/coveralls.rego
2022-11-18 22:37:55 +01:00

52 lines
1014 B
Rego

package coveralls
import future.keywords
from_opa := {"source_files": coverage}
coverage contains obj if {
some file, report in input.files
obj := {"name": file, "coverage": to_lines(report)}
}
covered_map(report) = cm if {
covered := object.get(report, "covered", [])
cm := {line: 1 |
some item in covered
some line in numbers.range(item.start.row, item.end.row)
}
}
not_covered_map(report) = ncm if {
not_covered := object.get(report, "not_covered", [])
ncm := {line: 0 |
some item in not_covered
some line in numbers.range(item.start.row, item.end.row)
}
}
to_lines(report) = lines if {
cm := covered_map(report)
ncm := not_covered_map(report)
keys := sort([line | some line, _ in object.union(cm, ncm)])
last := keys[count(keys) - 1]
lines := [value |
some i in numbers.range(1, last)
value := to_value(cm, ncm, i)
]
}
to_value(cm, _, line) = 1 if {
cm[line]
}
to_value(_, ncm, line) = 0 if {
ncm[line]
}
to_value(cm, ncm, line) = null if {
not cm[line]
not ncm[line]
}