♻️ refactor: update ci-gates.ts

swadhinbiswas committed 3 months ago
4647d12
1 parent a8ef223
commit 4647d12
1 file changed
+21 -4
Showing 1 changed file+21-4
▼src/lib/ci-gates.ts
+21-4
210
210
const approvals = pr.reviews?.filter(r => r.state === "approved") || [];
211
211
const changesRequested = pr.reviews?.some(r => r.state === "changes_requested");
212
212
213
- if (approvals.length === 0) {
213
+ const requiredReviewers = await db.query.pullRequestReviewers?.findMany({
214
+ where: and(
215
+ eq(schema.pullRequestReviewers.pullRequestId, prId),
216
+ eq(schema.pullRequestReviewers.isRequired, true)
217
+ )
218
+ }) || [];
219
+
220
+ const missingRequired = requiredReviewers.filter(rr => !approvals.some(a => a.reviewerId === rr.userId));
221
+
222
+ if (changesRequested) {
214
223
results.push({
215
224
passed: false,
216
225
gateName: "Review",
217
- message: "At least one approval required",
226
+ message: "Changes requested by reviewer",
218
227
details: { gateType: "review" },
219
228
});
220
- } else if (changesRequested) {
229
+ } else if (missingRequired.length > 0) {
221
230
results.push({
222
231
passed: false,
223
232
gateName: "Review",
224
- message: "Changes requested by reviewer",
233
+ message: `Missing ${missingRequired.length} required approval(s)`,
234
+ details: { gateType: "review", missingCount: missingRequired.length },
235
+ });
236
+ } else if (approvals.length === 0 && requiredReviewers.length === 0) {
237
+ // Fallback: if no specific reviewers are required, still require at least 1 approval
238
+ results.push({
239
+ passed: false,
240
+ gateName: "Review",
241
+ message: "At least one approval required",
225
242
details: { gateType: "review" },
226
243
});
227
244
} else {
228
245