From 7b36085b9c7e2d3e4bcae16fe10162b6a66be12e Mon Sep 17 00:00:00 2001 From: JohnDoe6345789 Date: Thu, 25 Dec 2025 22:50:59 +0000 Subject: [PATCH] code: route,nextjs,frontends (1 files) --- .../src/app/api/github/actions/runs/route.ts | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 frontends/nextjs/src/app/api/github/actions/runs/route.ts diff --git a/frontends/nextjs/src/app/api/github/actions/runs/route.ts b/frontends/nextjs/src/app/api/github/actions/runs/route.ts new file mode 100644 index 000000000..9d85af159 --- /dev/null +++ b/frontends/nextjs/src/app/api/github/actions/runs/route.ts @@ -0,0 +1,43 @@ +import { NextResponse } from 'next/server' +import type { NextRequest } from 'next/server' +import { createGitHubClient } from '@/lib/github/create-github-client' +import { resolveGitHubRepo } from '@/lib/github/resolve-github-repo' +import { listWorkflowRuns } from '@/lib/github/list-workflow-runs' + +export async function GET(request: NextRequest) { + try { + const { owner, repo } = resolveGitHubRepo(request.nextUrl.searchParams) + const perPageParam = request.nextUrl.searchParams.get('perPage') + let perPage = 20 + + if (perPageParam) { + const parsed = Number(perPageParam) + if (!Number.isNaN(parsed)) { + perPage = Math.max(1, Math.min(100, Math.floor(parsed))) + } + } + + const client = createGitHubClient() + const runs = await listWorkflowRuns({ client, owner, repo, perPage }) + + return NextResponse.json({ + owner, + repo, + runs, + fetchedAt: new Date().toISOString(), + hasToken: Boolean(process.env.GITHUB_TOKEN), + }) + } catch (error) { + const status = typeof error === 'object' && error && 'status' in error + ? Number((error as { status?: number }).status) + : 500 + const message = error instanceof Error ? error.message : 'Unknown error' + const requiresAuth = status === 401 || status === 403 + const safeStatus = Number.isFinite(status) && status >= 400 ? status : 500 + + return NextResponse.json( + { error: message, requiresAuth }, + { status: safeStatus } + ) + } +}