feat(backend): dosya sistemi tabanlı veri kalıcılığı ekle

Deployment ve job verilerinin dosya sisteminde JSON formatında saklanması
ve uygulama başladığında bu verilerin otomatik olarak yüklenmesi özelliği
eklendi.

- Deployment ve job metadata'ları dosya sisteminde saklanır
- Run geçmişi dosya sisteminde JSON olarak tutulur
- Uygulama başlangıcında dosya sistemi taranır ve eksik veriler yüklenir
- Git'ten repo URL ve branch bilgileri çıkarılabilir
- Commit mesajları normalize edilir
- Ayarlar (webhook token/secret) dosya sisteminde saklanır
This commit is contained in:
2026-01-31 07:17:27 +00:00
parent 535b5cbdc2
commit 003ddfcbd1
9 changed files with 622 additions and 22 deletions

View File

@@ -292,7 +292,7 @@ export function DeploymentDetailPage() {
const updated = await updateDeployment(form._id, payload);
setProject(updated);
try {
await runDeployment(updated._id, "Update deploy");
await runDeployment(updated._id, "update deploy");
} catch {
toast.error("Deploy tetiklenemedi");
}
@@ -435,7 +435,7 @@ export function DeploymentDetailPage() {
<CardContent>
<div className="max-h-72 overflow-auto rounded-md border border-border bg-black px-3 py-2 font-mono text-xs text-green-100">
{currentLogs.length ? (
currentLogs.map((line, idx) => (
[...currentLogs].reverse().map((line, idx) => (
<div key={idx} className="whitespace-pre-wrap">
{decorateLogLine(line)}
</div>

View File

@@ -265,7 +265,7 @@ export function DeploymentsPage() {
});
setDeployments((prev) => prev.map((d) => (d._id === updated._id ? updated : d)));
try {
await runDeployment(updated._id, "Update deploy");
await runDeployment(updated._id, "update deploy");
} catch {
toast.error("Deploy tetiklenemedi");
}

View File

@@ -273,6 +273,7 @@ export function HomePage() {
<RepoIcon repoUrl={run.repoUrl} />
<div>
<div className="flex flex-wrap items-center gap-2 text-sm font-semibold text-foreground">
<span>{run.title}</span>
<span
className={`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] font-semibold ${
run.type === "test"
@@ -286,7 +287,6 @@ export function HomePage() {
/>
{run.type === "test" ? "Test" : "Deploy"}
</span>
<span>{run.title}</span>
</div>
<div className="text-xs text-muted-foreground">
{new Date(run.startedAt).toLocaleString()} · Süre:{" "}