Finalizes a deployment, setting up aliases and updating Traefik config.
(ctx, deployment_id: str)
| 381 | |
| 382 | |
| 383 | async def finalize_deployment(ctx, deployment_id: str): |
| 384 | """Finalizes a deployment, setting up aliases and updating Traefik config.""" |
| 385 | settings = get_settings() |
| 386 | redis_client = get_redis_client() |
| 387 | service = DeploymentService() |
| 388 | log_prefix = f"[DeployFinalize:{deployment_id}]" |
| 389 | logger.info(f"{log_prefix} Finalizing deployment") |
| 390 | |
| 391 | queue: ArqRedis | None = ctx.get("redis") if isinstance(ctx, dict) else None |
| 392 | |
| 393 | async with AsyncSessionLocal() as db: |
| 394 | deployment = None |
| 395 | try: |
| 396 | deployment = ( |
| 397 | await db.execute( |
| 398 | select(Deployment) |
| 399 | .options(joinedload(Deployment.project)) |
| 400 | .where(Deployment.id == deployment_id) |
| 401 | ) |
| 402 | ).scalar_one() |
| 403 | |
| 404 | if deployment.conclusion == "canceled": |
| 405 | logger.info( |
| 406 | "%s Deployment already canceled; skipping finalize.", log_prefix |
| 407 | ) |
| 408 | return |
| 409 | |
| 410 | await DeploymentService().setup_aliases(deployment, db, settings) |
| 411 | await db.commit() |
| 412 | |
| 413 | # Update Traefik dynamic config |
| 414 | try: |
| 415 | await DeploymentService().update_traefik_config( |
| 416 | deployment.project, |
| 417 | db, |
| 418 | settings, |
| 419 | include_deployment_ids={deployment.id}, |
| 420 | ) |
| 421 | except Exception as e: |
| 422 | logger.error(f"{log_prefix} Failed to update Traefik config: {e}") |
| 423 | |
| 424 | await service.update_status( |
| 425 | db, |
| 426 | deployment, |
| 427 | status="completed", |
| 428 | conclusion="succeeded", |
| 429 | error=None, |
| 430 | redis_client=redis_client, |
| 431 | ) |
| 432 | |
| 433 | # Cleanup inactive deployments |
| 434 | queue: ArqRedis = ctx["redis"] |
| 435 | await queue.enqueue_job( |
| 436 | "cleanup_inactive_containers", deployment.project_id |
| 437 | ) |
| 438 | logger.info( |
| 439 | f"{log_prefix} Inactive deployments cleanup job queued for project {deployment.project_id}." |
| 440 | ) |
nothing calls this directly
no test coverage detected