Fixed a few stupid mistakes
This commit is contained in:
@@ -4,14 +4,13 @@ import asyncio
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
import httpx
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from gitea_codex_bot.config import Settings
|
||||
from gitea_codex_bot.db import get_session_factory
|
||||
from gitea_codex_bot.models import ReviewJob
|
||||
from gitea_codex_bot.services.comments import get_persistent_review_comment_id, upsert_persistent_review_comment_id
|
||||
from gitea_codex_bot.services.comments import upsert_persistent_review_comment_id
|
||||
from gitea_codex_bot.services.gitea import GiteaClient
|
||||
from gitea_codex_bot.services.jobs import claim_next_job, finish_job
|
||||
from gitea_codex_bot.services.review_format import format_disabled_ack, format_result_comment
|
||||
@@ -75,6 +74,16 @@ def _handle_non_review_command(
|
||||
return False, False, None, None
|
||||
|
||||
|
||||
def _post_review_failure_comment(gitea: GiteaClient, job: ReviewJob, error_message: str) -> None:
|
||||
message = (
|
||||
"⚠️ Codex review run failed after queueing.\n\n"
|
||||
f"- Commit: `{job.head_sha[:7]}`\n"
|
||||
f"- Error: `{error_message[:500]}`\n\n"
|
||||
"Please rerun `@codex rerun` after checking worker logs."
|
||||
)
|
||||
gitea.post_issue_comment(job.repo, job.pr_number, message)
|
||||
|
||||
|
||||
def process_one_job(settings: Settings) -> bool:
|
||||
session_factory = get_session_factory()
|
||||
with session_factory() as session:
|
||||
@@ -84,11 +93,27 @@ def process_one_job(settings: Settings) -> bool:
|
||||
|
||||
command = _command_from_job(job)
|
||||
gitea = GiteaClient(settings)
|
||||
logger.info(
|
||||
"Processing job id=%s repo=%s pr=%s command=%s args=%s head_sha=%s",
|
||||
job.id,
|
||||
job.repo,
|
||||
job.pr_number,
|
||||
command.name,
|
||||
command.arguments,
|
||||
job.head_sha,
|
||||
)
|
||||
|
||||
with session_factory() as session:
|
||||
db_job = session.execute(select(ReviewJob).where(ReviewJob.id == job.id)).scalar_one()
|
||||
handled, skipped, result, error = _handle_non_review_command(settings, session, gitea, db_job, command)
|
||||
if handled:
|
||||
logger.info(
|
||||
"Non-review command handled job id=%s command=%s skipped=%s error_present=%s",
|
||||
db_job.id,
|
||||
command.name,
|
||||
skipped,
|
||||
bool(error),
|
||||
)
|
||||
finish_job(session, job_id=db_job.id, success=error is None, skipped=skipped, result=result, error_message=error)
|
||||
return True
|
||||
|
||||
@@ -108,6 +133,15 @@ def process_one_job(settings: Settings) -> bool:
|
||||
)
|
||||
return True
|
||||
result, repo_cfg = run_review_ephemeral(settings, repo=job.repo, pr_number=job.pr_number, command=command)
|
||||
logger.info(
|
||||
"Runner returned job id=%s repo=%s pr=%s repo_cfg_enabled=%s repo_cfg_configured=%s result_keys=%s",
|
||||
job.id,
|
||||
job.repo,
|
||||
job.pr_number,
|
||||
repo_cfg.enabled,
|
||||
repo_cfg.configured,
|
||||
sorted(result.keys()),
|
||||
)
|
||||
if not repo_cfg.enabled:
|
||||
with session_factory() as session:
|
||||
gitea.post_issue_comment(job.repo, job.pr_number, format_disabled_ack())
|
||||
@@ -122,22 +156,14 @@ def process_one_job(settings: Settings) -> bool:
|
||||
return True
|
||||
comment_body = format_result_comment(job.head_sha, result, repo_configured=repo_cfg.configured)
|
||||
with session_factory() as session:
|
||||
comment_id = get_persistent_review_comment_id(session, job.repo, job.pr_number)
|
||||
if comment_id:
|
||||
try:
|
||||
gitea.edit_issue_comment(job.repo, comment_id, comment_body)
|
||||
except httpx.HTTPStatusError as exc:
|
||||
if exc.response.status_code != 404:
|
||||
raise
|
||||
logger.warning(
|
||||
"Persistent review comment not found; posting a new one repo=%s pr=%s old_comment_id=%s",
|
||||
job.repo,
|
||||
job.pr_number,
|
||||
comment_id,
|
||||
)
|
||||
comment_id = gitea.post_issue_comment(job.repo, job.pr_number, comment_body)
|
||||
else:
|
||||
comment_id = gitea.post_issue_comment(job.repo, job.pr_number, comment_body)
|
||||
comment_id = gitea.post_issue_comment(job.repo, job.pr_number, comment_body)
|
||||
logger.info(
|
||||
"Posted review comment job id=%s repo=%s pr=%s comment_id=%s",
|
||||
job.id,
|
||||
job.repo,
|
||||
job.pr_number,
|
||||
comment_id,
|
||||
)
|
||||
upsert_persistent_review_comment_id(
|
||||
session,
|
||||
repo=job.repo,
|
||||
@@ -145,11 +171,24 @@ def process_one_job(settings: Settings) -> bool:
|
||||
head_sha=job.head_sha,
|
||||
comment_id=comment_id,
|
||||
)
|
||||
logger.info(
|
||||
"Persistent comment mapping upserted job id=%s repo=%s pr=%s comment_id=%s head_sha=%s",
|
||||
job.id,
|
||||
job.repo,
|
||||
job.pr_number,
|
||||
comment_id,
|
||||
job.head_sha,
|
||||
)
|
||||
finish_job(session, job_id=job.id, success=True, skipped=False, result=result, error_message=None)
|
||||
except Exception as exc:
|
||||
logger.exception("Review job failed id=%s", job.id)
|
||||
error_text = str(exc).strip() or exc.__class__.__name__
|
||||
try:
|
||||
_post_review_failure_comment(gitea, job, error_text)
|
||||
except Exception:
|
||||
logger.exception("Failed to post review failure comment id=%s", job.id)
|
||||
with session_factory() as session:
|
||||
finish_job(session, job_id=job.id, success=False, skipped=False, result=None, error_message=str(exc))
|
||||
finish_job(session, job_id=job.id, success=False, skipped=False, result=None, error_message=error_text)
|
||||
return True
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user