From a9cc6f47543d73c853aaa79357d3a82e147f6e8c Mon Sep 17 00:00:00 2001 From: JohnDoe6345789 Date: Thu, 25 Dec 2025 22:49:41 +0000 Subject: [PATCH] code: nextjs,frontends,workflow (4 files) --- .../src/components/PackageImportExport.tsx | 3 --- .../src/lib/github/list-workflow-run-jobs.ts | 17 +++++++++++++++++ .../nextjs/src/lib/github/list-workflow-runs.ts | 16 ++++++++++++++++ .../src/lib/github/resolve-github-repo.ts | 15 +++++++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 frontends/nextjs/src/lib/github/list-workflow-run-jobs.ts create mode 100644 frontends/nextjs/src/lib/github/list-workflow-runs.ts create mode 100644 frontends/nextjs/src/lib/github/resolve-github-repo.ts diff --git a/frontends/nextjs/src/components/PackageImportExport.tsx b/frontends/nextjs/src/components/PackageImportExport.tsx index baac31e85..a3dfa8cd7 100644 --- a/frontends/nextjs/src/components/PackageImportExport.tsx +++ b/frontends/nextjs/src/components/PackageImportExport.tsx @@ -25,9 +25,6 @@ import { CheckCircle, Warning, Image as ImageIcon, - FilmStrip, - MusicNote, - FileText } from '@phosphor-icons/react' interface PackageImportExportProps { diff --git a/frontends/nextjs/src/lib/github/list-workflow-run-jobs.ts b/frontends/nextjs/src/lib/github/list-workflow-run-jobs.ts new file mode 100644 index 000000000..b5512aff3 --- /dev/null +++ b/frontends/nextjs/src/lib/github/list-workflow-run-jobs.ts @@ -0,0 +1,17 @@ +import type { Octokit } from 'octokit' + +export async function listWorkflowRunJobs(options: { + client: Octokit + owner: string + repo: string + runId: number +}) { + const { data } = await options.client.rest.actions.listJobsForWorkflowRun({ + owner: options.owner, + repo: options.repo, + run_id: options.runId, + per_page: 100, + }) + + return data.jobs +} diff --git a/frontends/nextjs/src/lib/github/list-workflow-runs.ts b/frontends/nextjs/src/lib/github/list-workflow-runs.ts new file mode 100644 index 000000000..ef4f0e005 --- /dev/null +++ b/frontends/nextjs/src/lib/github/list-workflow-runs.ts @@ -0,0 +1,16 @@ +import type { Octokit } from 'octokit' + +export async function listWorkflowRuns(options: { + client: Octokit + owner: string + repo: string + perPage: number +}) { + const { data } = await options.client.rest.actions.listWorkflowRunsForRepo({ + owner: options.owner, + repo: options.repo, + per_page: options.perPage, + }) + + return data.workflow_runs +} diff --git a/frontends/nextjs/src/lib/github/resolve-github-repo.ts b/frontends/nextjs/src/lib/github/resolve-github-repo.ts new file mode 100644 index 000000000..6a2352157 --- /dev/null +++ b/frontends/nextjs/src/lib/github/resolve-github-repo.ts @@ -0,0 +1,15 @@ +export function resolveGitHubRepo(params: URLSearchParams) { + const ownerParam = params.get('owner') + const repoParam = params.get('repo') + const owner = (ownerParam && ownerParam.trim()) || process.env.GITHUB_OWNER || 'johndoe6345789' + const repo = (repoParam && repoParam.trim()) || process.env.GITHUB_REPO || 'metabuilder' + const slugPattern = /^[A-Za-z0-9_.-]+$/ + + if (!slugPattern.test(owner) || !slugPattern.test(repo)) { + const error = new Error('Invalid GitHub repository owner or repo') + ;(error as Error & { status?: number }).status = 400 + throw error + } + + return { owner, repo } +}