From 765c840120a85a6093921469695036954923eff4 Mon Sep 17 00:00:00 2001 From: JiriUhlir <149317995+JiriUhlir@users.noreply.github.com> Date: Fri, 29 May 2026 09:30:54 +0200 Subject: [PATCH] kontrola na jobs na nedoployovatelne repositare --- app/routes/jobs.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app/routes/jobs.py b/app/routes/jobs.py index 23f3421..beb5e4b 100644 --- a/app/routes/jobs.py +++ b/app/routes/jobs.py @@ -17,6 +17,7 @@ LIVE_STATUSES = {"queued", "running", "cancelled_requested"} JOB_STATUSES = {"queued", "running", "cancelled_requested", "cancelled", "success", "failed"} JOB_FILTER_STATUSES = ("queued", "running", "success", "failed", "cancelled") JOB_FILTER_TYPES = ("deploy_app", "deploy_core_service") +IGNORED_RETRY_REPOSITORIES = {"appfactory-tools", "appfactory-infrastructure"} def render_job_status(status: str | None) -> str: @@ -56,6 +57,17 @@ def render_options(values: tuple[str, ...], selected: str, empty_label: str) -> return "".join(options) +def can_retry_job(job: dict) -> bool: + job_type = job.get("type") or "" + target_id = job.get("target_id") or "" + + if job_type == "deploy_core_service": + return True + if job_type == "deploy_app" and target_id not in IGNORED_RETRY_REPOSITORIES: + return True + return False + + @router.get("/jobs", response_class=HTMLResponse) def jobs_page( request: Request, @@ -188,12 +200,15 @@ def job_detail_page(job_id: int, request: Request, user=Depends(require_user)): result = html.escape(pretty_json(job.get("result_json"))) error_text = html.escape(job.get("error_text", "") or "") actions = "" - if status_value == "failed": + retry_blocked_notice = "" + if status_value == "failed" and can_retry_job(job): actions += f"""
""" + elif status_value == "failed" and (job.get("target_id") or "") in IGNORED_RETRY_REPOSITORIES: + retry_blocked_notice = '

Tento repozitář není deployovatelná služba.

' if status_value in {"queued", "running"}: actions += f"""
@@ -233,6 +248,7 @@ def job_detail_page(job_id: int, request: Request, user=Depends(require_user)): ← Zpět na joby Detail targetu

+ {retry_blocked_notice} {actions} @@ -280,6 +296,8 @@ def retry_job_action(job_id: int, user=Depends(require_user)): raise HTTPException(status_code=404, detail="Job not found") if (job.get("status") or "").lower() != "failed": raise HTTPException(status_code=400, detail="Only failed jobs can be retried") + if not can_retry_job(job): + raise HTTPException(status_code=400, detail="This job cannot be retried") new_job_id = retry_failed_job(job_id, user) if not new_job_id: