import { NextRequest, NextResponse } from 'next/server' const FORGEJO_URL = 'https://forgejo.riotpiao.com' const DEFAULT_REPO = 'rock/riotpiao.com' const ALLOWED_REPOS = ['rock/riotpiao.com', 'rock/homelab', 'rock/homelab-frontend', 'rock/poimen', 'rock/poimen-memory', 'rock/poimen-workflows', 'rock/kmsvc-manage'] export async function GET(request: NextRequest) { const repo = request.nextUrl.searchParams.get('repo') || DEFAULT_REPO if (!ALLOWED_REPOS.includes(repo)) { return NextResponse.json({ error: 'Repo not allowed' }, { status: 403 }) } const token = process.env.FORGEJO_TOKEN if (!token) { return NextResponse.json( { error: 'FORGEJO_TOKEN not configured' }, { status: 500 } ) } try { const response = await fetch( `${FORGEJO_URL}/api/v1/repos/${repo}/actions/runs?limit=1`, { headers: { Authorization: `token ${token}`, Accept: 'application/json', }, cache: 'no-store', } ) if (!response.ok) { throw new Error(`Forgejo API error: ${response.status}`) } const data = await response.json() const latestRun = data.workflow_runs?.[0] if (!latestRun) { return NextResponse.json({ status: 'unknown', message: 'No runs found', }) } return NextResponse.json({ status: latestRun.status, conclusion: latestRun.conclusion, sha: latestRun.head_sha, title: latestRun.display_title || latestRun.head_branch, branch: latestRun.head_branch, url: latestRun.html_url, updatedAt: latestRun.completed_at || latestRun.started_at, }) } catch (error) { console.error('CI status fetch error:', error) return NextResponse.json( { error: 'Failed to fetch CI status', status: 'error' }, { status: 500 } ) } }