feat(deployments): anlık durum ve log izleme özelliği ekle
- Socket.IO tabanlı gerçek zamanlı deployment log ve durum bildirimleri ekle - deployment:subscribe ve deployment:unsubscribe soket olaylarını destekle - DeploymentService'e anlık durum ve log yayınlama özelliği ekle - Deployment silinirken docker kaynaklarını temizle - Ortam değişkenlerini tek bir .env.example dosyasında birleştir - Docker compose yapılandırmasını güncelle (PWD ve DEPLOYMENTS_ROOT kullan) - Repo URL'sinden proje adını otomatik öner - Güvensiz bağlamlar için clipboard kopya fallback mekanizması ekle - Socket.IO path'ini /api/socket.io olarak ayarla
This commit is contained in:
@@ -25,6 +25,7 @@ import {
|
||||
updateDeployment
|
||||
} from "../api/deployments";
|
||||
import { JobStatusBadge } from "../components/JobStatusBadge";
|
||||
import { useLiveData } from "../providers/live-provider";
|
||||
|
||||
type FormState = {
|
||||
_id?: string;
|
||||
@@ -46,6 +47,7 @@ const defaultForm: FormState = {
|
||||
export function DeploymentsPage() {
|
||||
const navigate = useNavigate();
|
||||
const location = useLocation();
|
||||
const { deploymentStreams } = useLiveData();
|
||||
const apiBase = (import.meta.env.VITE_API_URL || "").replace(/\/$/, "");
|
||||
const [deployments, setDeployments] = useState<DeploymentProject[]>([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
@@ -84,6 +86,14 @@ export function DeploymentsPage() {
|
||||
setComposeOptions([]);
|
||||
return;
|
||||
}
|
||||
if (!form._id && !form.name) {
|
||||
const normalized = repoUrl.replace(/\/+$/, "");
|
||||
const lastPart = normalized.split("/").pop() || "";
|
||||
const name = lastPart.replace(/\.git$/i, "");
|
||||
if (name) {
|
||||
setForm((prev) => ({ ...prev, name }));
|
||||
}
|
||||
}
|
||||
const timer = setTimeout(async () => {
|
||||
setBranchLoading(true);
|
||||
try {
|
||||
@@ -292,7 +302,9 @@ export function DeploymentsPage() {
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-wrap items-center gap-3 text-sm text-muted-foreground">
|
||||
<JobStatusBadge status={deployment.lastStatus} />
|
||||
<JobStatusBadge
|
||||
status={deploymentStreams[deployment._id]?.status || deployment.lastStatus}
|
||||
/>
|
||||
<span className="rounded-md bg-muted px-2 py-1 text-xs font-semibold text-foreground/80">
|
||||
{deployment.env.toUpperCase()}
|
||||
</span>
|
||||
|
||||
Reference in New Issue
Block a user