feat. Enforce repo review config
This commit is contained in:
@@ -18,8 +18,10 @@ from gitea_codex_bot.db import Base, get_engine, get_session
|
||||
from gitea_codex_bot.services.commands import parse_command
|
||||
from gitea_codex_bot.services.gitea import GiteaClient
|
||||
from gitea_codex_bot.services.jobs import cooldown_remaining_seconds, enqueue_job, persist_webhook_event
|
||||
from gitea_codex_bot.services.repo_config import RepoReviewConfig, parse_repo_review_config_text
|
||||
from gitea_codex_bot.services.review_format import (
|
||||
format_cooldown_ack,
|
||||
format_disabled_ack,
|
||||
format_queue_ack,
|
||||
format_unsupported_ack,
|
||||
)
|
||||
@@ -137,6 +139,15 @@ async def lifespan(app: FastAPI):
|
||||
app = FastAPI(title="Gitea Codex Review Bot", lifespan=lifespan)
|
||||
|
||||
|
||||
def _load_repo_review_config_for_pr(gitea: GiteaClient, repo: str, pr_number: int) -> tuple[RepoReviewConfig, str]:
|
||||
pr_ctx = gitea.get_pull_request(repo, pr_number)
|
||||
head_sha = pr_ctx.head_sha
|
||||
cfg_text = gitea.get_file_content(repo, ".codex-review.yml", ref=head_sha)
|
||||
if cfg_text is None:
|
||||
return RepoReviewConfig(configured=False), head_sha
|
||||
return parse_repo_review_config_text(cfg_text, configured=True), head_sha
|
||||
|
||||
|
||||
def _render_landing_page() -> str:
|
||||
return """<!doctype html>
|
||||
<html lang="en">
|
||||
@@ -317,11 +328,20 @@ async def gitea_webhook(
|
||||
|
||||
gitea = GiteaClient(settings)
|
||||
if parsed_command.name in {"review", "rerun"}:
|
||||
repo_cfg: RepoReviewConfig | None = None
|
||||
try:
|
||||
repo_cfg, resolved_head_sha = _load_repo_review_config_for_pr(gitea, repo, pr_number)
|
||||
head_sha = resolved_head_sha
|
||||
except Exception:
|
||||
repo_cfg = None
|
||||
if head_sha == "unknown":
|
||||
try:
|
||||
head_sha = gitea.get_pull_request(repo, pr_number).head_sha
|
||||
except Exception:
|
||||
pass
|
||||
if repo_cfg and not repo_cfg.enabled:
|
||||
gitea.post_issue_comment(repo, pr_number, format_disabled_ack())
|
||||
return {"accepted": True, "reason": "review disabled by repo config"}
|
||||
if parsed_command.name != "rerun":
|
||||
remaining = cooldown_remaining_seconds(session, repo, pr_number, settings.cooldown_seconds)
|
||||
if remaining > 0:
|
||||
|
||||
Reference in New Issue
Block a user