deepmage121 commited on
Commit
eb706ee
·
1 Parent(s): e4c8b1d

added modification to listen to content changes

Browse files
Files changed (1) hide show
  1. app.py +33 -1
app.py CHANGED
@@ -6,6 +6,7 @@ files with Pydantic, checks for duplicates, and comments results on the PR.
6
 
7
  import logging
8
  import os
 
9
  import tempfile
10
  import threading
11
  from datetime import datetime, timezone
@@ -329,12 +330,27 @@ threading.Thread(target=startup_sweep, daemon=True).start()
329
  # Webhook endpoint
330
  # ---------------------------------------------------------------------------
331
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
  @webhook_endpoint
333
  async def validate(payload):
334
  """Handle incoming webhook events from HuggingFace."""
335
  logger.info("Received webhook event: %s", payload.event)
336
 
337
- # Filter: only dataset PRs, ignore comments
338
  if payload.event.scope == "discussion.comment":
339
  logger.info("Skipping comment event")
340
  return {"status": "skipped", "reason": "comment event"}
@@ -343,6 +359,22 @@ async def validate(payload):
343
  logger.info("Skipping non-dataset event (type=%s)", payload.repo.type)
344
  return {"status": "skipped", "reason": "not a dataset repo"}
345
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
346
  if not payload.discussion or not payload.discussion.isPullRequest:
347
  logger.info("Skipping non-PR event")
348
  return {"status": "skipped", "reason": "not a pull request"}
 
6
 
7
  import logging
8
  import os
9
+ import re
10
  import tempfile
11
  import threading
12
  from datetime import datetime, timezone
 
330
  # Webhook endpoint
331
  # ---------------------------------------------------------------------------
332
 
333
+ PR_REF_RE = re.compile(r"^refs/pr/(\d+)$")
334
+
335
+
336
+ def _extract_pr_nums_from_refs(payload) -> list[int]:
337
+ """Extract PR numbers from updatedRefs in repo.content events."""
338
+ if not payload.updatedRefs:
339
+ return []
340
+ pr_nums = []
341
+ for ref in payload.updatedRefs:
342
+ m = PR_REF_RE.match(ref.ref)
343
+ if m:
344
+ pr_nums.append(int(m.group(1)))
345
+ return pr_nums
346
+
347
+
348
  @webhook_endpoint
349
  async def validate(payload):
350
  """Handle incoming webhook events from HuggingFace."""
351
  logger.info("Received webhook event: %s", payload.event)
352
 
353
+ # Filter: ignore comments
354
  if payload.event.scope == "discussion.comment":
355
  logger.info("Skipping comment event")
356
  return {"status": "skipped", "reason": "comment event"}
 
359
  logger.info("Skipping non-dataset event (type=%s)", payload.repo.type)
360
  return {"status": "skipped", "reason": "not a dataset repo"}
361
 
362
+ # Route 1: repo.content events (new commits pushed to PR branches)
363
+ if payload.event.scope == "repo.content":
364
+ pr_nums = _extract_pr_nums_from_refs(payload)
365
+ if not pr_nums:
366
+ logger.info("No PR refs in repo.content event")
367
+ return {"status": "skipped", "reason": "no PR refs"}
368
+ results = []
369
+ for pr_num in pr_nums:
370
+ try:
371
+ results.append(process_pr(pr_num))
372
+ except Exception:
373
+ logger.exception("Failed to process PR #%d", pr_num)
374
+ results.append({"status": "error", "pr": pr_num})
375
+ return {"status": "ok", "results": results}
376
+
377
+ # Route 2: discussion events (status changes, merges)
378
  if not payload.discussion or not payload.discussion.isPullRequest:
379
  logger.info("Skipping non-PR event")
380
  return {"status": "skipped", "reason": "not a pull request"}