revert(build): remove app build pipeline revamp (Nixpacks/MinIO/Trivy/registry GC)

Reverts commits 3eff38f and c379a23 and restores the previous Kaniko-only
build pipeline (runtime detection + per-runtime Dockerfile generation,
disk-based source upload).

Removed: Nixpacks Dockerfile generation, MinIO source storage (common/storage),
Bull build queue + Redis build state (common/redis, deployment.processor),
Trivy image scan (scan.service, deployment.vulnerabilitySummary), and daily
registry garbage collection (registry-gc). Nothing outside the build/deploy
path depended on these. Backend tsc + 105/106 tests green (the pre-existing
helm.service chartPath failure is unrelated); frontend tsc green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
keyhan
2026-06-23 19:21:30 +03:30
parent bd14eb2daa
commit 9c16b462f4
27 changed files with 1297 additions and 1951 deletions
@@ -12,7 +12,6 @@ import { useLocalizedRouter } from '@/i18n/navigation';
import { Hexagon, Rocket, Play, Square, RotateCw, Globe, Package, Server, Scale, CheckCircle, Clock, XCircle, AlertCircle, Link, GitBranch, KeyRound, FolderUp, BarChart3, ChevronDown, FileText, Monitor, Hammer, Settings, RefreshCw, Upload, Circle, Pin, Database, Eye, EyeOff, Copy, Check, History, Download, RotateCcw, Camera, Trash2, Archive, Zap, Wallet, CreditCard, AlertTriangle, ScrollText } from 'lucide-react';
import { ServiceExternalAccessPanel } from '@/components/service-external-access-panel';
import { WorkloadLogsPanel } from '@/components/workload-logs-panel';
import { VulnerabilityBadge } from '@/components/vulnerability-badge';
import { DeletingModal } from '@/components/deleting-modal';
import { useApplicationDelete } from '@/lib/use-application-delete';
import { isApplicationProduct, isManagedProduct } from '@/lib/product-type';
@@ -1511,10 +1510,7 @@ export default function AppDetailPage() {
{deployments.slice(0, 10).map((d) => (
<div key={d.id} className="flex items-center justify-between p-3 bg-gray-50/80 rounded-xl">
<div className="min-w-0 flex-1">
<div className="flex items-center gap-2">
<p className="text-sm font-medium text-gray-900 truncate">{d.version || d.imageTag}</p>
<VulnerabilityBadge summary={d.vulnerabilitySummary} />
</div>
<p className="text-sm font-medium text-gray-900 truncate">{d.version || d.imageTag}</p>
<p className="text-xs text-gray-500">
{new Date(d.createdAt).toLocaleString(locale)}
</p>
@@ -1,40 +0,0 @@
import { ShieldCheck, ShieldAlert } from 'lucide-react';
import type { VulnerabilitySummary } from '@/types';
/**
* Compact, report-only image-scan badge (Trivy). Renders nothing when there is
* no scan data yet. Shows a green "clean" pill, or the count of the highest
* severities found. Title carries the full per-severity breakdown.
*/
export function VulnerabilityBadge({ summary }: { summary?: VulnerabilitySummary | null }) {
if (!summary) return null;
const { critical, high, medium, low, total } = summary;
const breakdown = `Critical ${critical} · High ${high} · Medium ${medium} · Low ${low}`;
if (total === 0) {
return (
<span
className="inline-flex items-center gap-1 text-[11px] font-medium text-green-700 bg-green-50 border border-green-200 rounded-full px-2 py-0.5"
title={breakdown}
>
<ShieldCheck className="w-3 h-3" /> 0 CVE
</span>
);
}
const severe = critical > 0 || high > 0;
const cls = severe
? 'text-red-700 bg-red-50 border-red-200'
: 'text-amber-700 bg-amber-50 border-amber-200';
const label = severe ? `${critical}C / ${high}H` : `${medium}M / ${low}L`;
return (
<span
className={`inline-flex items-center gap-1 text-[11px] font-medium border rounded-full px-2 py-0.5 ${cls}`}
title={breakdown}
>
<ShieldAlert className="w-3 h-3" /> {label}
</span>
);
}
-11
View File
@@ -159,17 +159,6 @@ export interface Deployment {
triggeredBy: string;
createdAt: string;
finishedAt?: string;
vulnerabilitySummary?: VulnerabilitySummary | null;
}
export interface VulnerabilitySummary {
critical: number;
high: number;
medium: number;
low: number;
unknown: number;
total: number;
scannedAt: string;
}
export type DeploymentStatus =