From 44bac0532d10dc549b3c291b7930127f44050243 Mon Sep 17 00:00:00 2001 From: chyoo Date: Thu, 13 Aug 2026 17:48:49 +0900 Subject: [PATCH] fix(admin): filter non-container releases from deployments --- .../applications/DeploymentManagementPage.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/pages/applications/DeploymentManagementPage.tsx b/src/pages/applications/DeploymentManagementPage.tsx index accac08..ab6fdd4 100644 --- a/src/pages/applications/DeploymentManagementPage.tsx +++ b/src/pages/applications/DeploymentManagementPage.tsx @@ -51,6 +51,15 @@ function firstArtifact(release: AppRelease) { return artifacts[0]?.[1] ?? release.artifact ?? '-'; } +function hasDeployableImage(release: AppRelease) { + const imageTags = release.imageTags as ImageTags | null | undefined; + return Object.values(imageTags?.images ?? {}).some((image) => ( + typeof image === 'string' + && image.trim() + && !/^(postgres|mysql|mariadb|mongo)(:|@)/i.test(image.trim()) + )); +} + function deploymentTime(deployment: DeploymentJob) { const value = new Date(deployment.createdAt || deployment.startedAt || deployment.finishedAt || 0).getTime(); return Number.isNaN(value) ? 0 : value; @@ -107,7 +116,9 @@ export function DeploymentManagementPage() { [deployedReleaseIdValues] ); const deployableReleases = useMemo( - () => filteredReleases.filter((release) => !deployedReleaseIds.has(release.id)), + () => filteredReleases.filter((release) => ( + !deployedReleaseIds.has(release.id) && hasDeployableImage(release) + )), [filteredReleases, deployedReleaseIds] ); const filteredDeployments = useMemo( @@ -335,7 +346,7 @@ export function DeploymentManagementPage() { - +
{deployableCards.length === 0 ? (