diff --git a/src/api/toolchain_routes.py b/src/api/toolchain_routes.py index 504e884..cb443ee 100644 --- a/src/api/toolchain_routes.py +++ b/src/api/toolchain_routes.py @@ -489,6 +489,13 @@ async def gitea_webhook( logger.warning("Failed to parse webhook payload") return Response(status_code=200, content="invalid payload") + # 2. 幂等检查(需要在 payload 解析后,以支持内容去重) + if x_gitea_event and x_gitea_delivery: + async with _idempotency_lock: + if _is_duplicate(x_gitea_event, x_gitea_delivery, payload): + logger.debug("Duplicate webhook: %s/%s", x_gitea_event, x_gitea_delivery) + return Response(status_code=200, content="duplicate") + # 4. 查找 handler handler = _EVENT_HANDLERS.get(x_gitea_event or "") if not handler: