refine app release and deployment management
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2026-07-06 17:15:22 +09:00
parent 08939bdaaf
commit db33ca9d6a
4 changed files with 88 additions and 38 deletions
@@ -150,6 +150,7 @@ export function ReleaseManagementPage() {
const [version, setVersion] = useState('');
const [releaseModalOpen, setReleaseModalOpen] = useState(false);
const [selectedBuildIds, setSelectedBuildIds] = useState<string[]>([]);
const [openLogReleaseId, setOpenLogReleaseId] = useState('');
const [loading, setLoading] = useState(true);
const [page, setPage] = useState(1);
const loadingVisible = useMinimumLoading(loading);
@@ -260,12 +261,23 @@ export function ReleaseManagementPage() {
) : null}
{pagedReleases.map((release) => {
const artifacts = releaseArtifacts(release);
const isLogOpen = openLogReleaseId === release.id;
return (
<div key={release.id} className="rounded-md border border-border bg-background/70 p-4">
<div className="flex flex-wrap items-center gap-2">
<Badge tone={statusTone(release.status)}>{statusLabel(release.status)}</Badge>
<span className="text-base font-medium">{release.app.name}</span>
<span className="text-base font-medium">{release.version}</span>
<div className="flex flex-wrap items-center justify-between gap-3">
<div className="flex flex-wrap items-center gap-2">
<Badge tone={statusTone(release.status)}>{statusLabel(release.status)}</Badge>
<span className="text-base font-medium">{release.app.name}</span>
<span className="text-base font-medium">{release.version}</span>
</div>
<Button
variant="outline"
className="h-8 px-3 text-[13px]"
disabled={!release.logs}
onClick={() => setOpenLogReleaseId((prev) => prev === release.id ? '' : release.id)}
>
{isLogOpen ? '로그 닫기' : '로그'}
</Button>
</div>
<div className="mt-3 flex flex-wrap gap-x-4 gap-y-1 text-xs">
<span className="text-muted-foreground">Branch <b className="text-foreground">{release.branch}</b></span>
@@ -283,6 +295,11 @@ export function ReleaseManagementPage() {
<p className="mt-1 text-xs text-muted-foreground">-</p>
)}
</div>
{isLogOpen ? (
<pre className="mt-3 max-h-72 overflow-auto rounded-md border border-border bg-black/70 p-3 font-mono text-xs leading-5 text-slate-100">
{release.logs}
</pre>
) : null}
</div>
);
})}