--- import { resolveOrgOwners } from "@/lib/repo-owner"; import { getDatabase, schema } from "@/db"; import BaseLayout from "@/layouts/BaseLayout.astro"; import { desc, eq } from "drizzle-orm"; import { Play, CheckCircle2, XCircle, Loader2, Clock, GitBranch, GitCommit, Bot } from "lucide-react"; const db = getDatabase(); // Get filter from query params const filter = Astro.url.searchParams.get("filter") || "all"; // Fetch workflow runs from public repos let workflowRuns: any[] = []; let successCount = 0; let failureCount = 0; let runningCount = 0; try { const rawRuns = await db.query.workflowRuns.findMany({ where: filter === "success" ? eq(schema.workflowRuns.status, "success") : filter === "failure" ? eq(schema.workflowRuns.status, "failure") : filter === "running" ? eq(schema.workflowRuns.status, "running") : undefined, orderBy: [desc(schema.workflowRuns.createdAt)], limit: 50, with: { repository: { with: { owner: true, }, }, triggeredBy: true, }, }); // Filter to only public repos workflowRuns = (await resolveOrgOwners(rawRuns)).filter(run => run.repository?.visibility === "public" ); const allPublicRuns = await db.query.workflowRuns.findMany({ columns: { status: true }, with: { repository: { columns: { visibility: true } } } }); const publicOnly = allPublicRuns.filter(r => r.repository?.visibility === "public"); successCount = publicOnly.filter(r => r.status === "success").length; failureCount = publicOnly.filter(r => r.status === "failure").length; runningCount = publicOnly.filter(r => r.status === "running").length; } catch (e) { console.error("Error fetching workflow runs:", e); } function timeAgo(date: string | number | Date) { if (!date) return ""; const seconds = Math.floor( (new Date().getTime() - new Date(date).getTime()) / 1000 ); if (seconds < 60) return "just now"; if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`; if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`; if (seconds < 604800) return `${Math.floor(seconds / 86400)}d ago`; return new Date(date).toLocaleDateString(); } function formatDuration(start: string, end: string | null) { if (!end) return "running..."; const ms = new Date(end).getTime() - new Date(start).getTime(); const seconds = Math.floor(ms / 1000); if (seconds < 60) return `${seconds}s`; const mins = Math.floor(seconds / 60); const secs = seconds % 60; return `${mins}m ${secs}s`; } ---

Actions & Pipelines

Global CI/CD workflow runs across all public repositories

{workflowRuns.length > 0 ? ( ) : (

No workflow runs found

{filter === "success" ? "No successful workflow runs found." : filter === "failure" ? "No failed workflow runs. Everything is green! 🎉" : filter === "running" ? "No workflows are currently executing." : "No workflows have run yet."}

)}