From e9fadc7cb1e46783214e4d38d4715d7be92395eb Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 24 Mar 2025 08:28:41 -0700 Subject: [PATCH] Fix task creation in the "full" suite case --- benchmark/apps/cli/src/index.ts | 7 +++---- benchmark/apps/web/package.json | 1 + benchmark/apps/web/src/app/layout.tsx | 2 +- benchmark/apps/web/src/app/runs/[id]/task-status.tsx | 6 ++++-- benchmark/apps/web/src/hooks/use-run-status.ts | 1 + benchmark/apps/web/src/lib/server/exercises.ts | 7 +++++-- benchmark/apps/web/src/lib/server/runs.ts | 12 +++++++++++- benchmark/pnpm-lock.yaml | 3 +++ 8 files changed, 29 insertions(+), 10 deletions(-) diff --git a/benchmark/apps/cli/src/index.ts b/benchmark/apps/cli/src/index.ts index 8fafb6b98b..d2b7d463ca 100644 --- a/benchmark/apps/cli/src/index.ts +++ b/benchmark/apps/cli/src/index.ts @@ -52,15 +52,14 @@ const run = async (toolbox: GluegunToolbox) => { if (language === "all") { for (const language of languages) { const exercises = getExercises()[language as Language] - await pMap(exercises, async (exercise) => createTask({ runId: run.id, language, exercise }), { + + await pMap(exercises, (exercise) => createTask({ runId: run.id, language, exercise }), { concurrency: 10, }) } } else if (exercise === "all") { const exercises = getExercises()[language as Language] - await pMap(exercises, async (exercise) => createTask({ runId: run.id, language, exercise }), { - concurrency: 10, - }) + await pMap(exercises, (exercise) => createTask({ runId: run.id, language, exercise }), { concurrency: 10 }) } else { language = language || (await askLanguage(prompt)) exercise = exercise || (await askExercise(prompt, language)) diff --git a/benchmark/apps/web/package.json b/benchmark/apps/web/package.json index c078ac48fb..c405ef41b6 100644 --- a/benchmark/apps/web/package.json +++ b/benchmark/apps/web/package.json @@ -30,6 +30,7 @@ "lucide-react": "^0.479.0", "next": "15.2.2", "next-themes": "^0.4.6", + "p-map": "^7.0.3", "react": "^19.0.0", "react-dom": "^19.0.0", "react-hook-form": "^7.54.2", diff --git a/benchmark/apps/web/src/app/layout.tsx b/benchmark/apps/web/src/app/layout.tsx index 0b13629311..aba40b74db 100644 --- a/benchmark/apps/web/src/app/layout.tsx +++ b/benchmark/apps/web/src/app/layout.tsx @@ -24,7 +24,7 @@ export default function RootLayout({
-
{children}
+
{children}
diff --git a/benchmark/apps/web/src/app/runs/[id]/task-status.tsx b/benchmark/apps/web/src/app/runs/[id]/task-status.tsx index 165bfcc9d1..40dffd7fec 100644 --- a/benchmark/apps/web/src/app/runs/[id]/task-status.tsx +++ b/benchmark/apps/web/src/app/runs/[id]/task-status.tsx @@ -12,9 +12,11 @@ export const TaskStatus = ({ task, runningTaskId }: TaskStatusProps) => { ) : !task.finishedAt ? ( - ) : !task.passed ? ( + ) : task.passed === false ? ( - ) : ( + ) : task.passed === true ? ( + ) : ( + ) } diff --git a/benchmark/apps/web/src/hooks/use-run-status.ts b/benchmark/apps/web/src/hooks/use-run-status.ts index 6d80e86162..1c68fc8373 100644 --- a/benchmark/apps/web/src/hooks/use-run-status.ts +++ b/benchmark/apps/web/src/hooks/use-run-status.ts @@ -15,6 +15,7 @@ export const useRunStatus = (run: Run) => { queryKey: ["run", run.id, runningTaskId], queryFn: async () => getTasks(run.id), placeholderData: keepPreviousData, + refetchInterval: 10_000, }) const url = `/api/runs/${run.id}/stream` diff --git a/benchmark/apps/web/src/lib/server/exercises.ts b/benchmark/apps/web/src/lib/server/exercises.ts index b508de9186..b32cab1d92 100644 --- a/benchmark/apps/web/src/lib/server/exercises.ts +++ b/benchmark/apps/web/src/lib/server/exercises.ts @@ -4,11 +4,11 @@ import * as fs from "fs/promises" import * as path from "path" import { fileURLToPath } from "url" -import { languages } from "@benchmark/types" +import { Language, languages } from "@benchmark/types" const __dirname = path.dirname(fileURLToPath(import.meta.url)) -const listDirectories = async (relativePath: string) => { +export const listDirectories = async (relativePath: string) => { try { const targetPath = path.resolve(__dirname, relativePath) const entries = await fs.readdir(targetPath, { withFileTypes: true }) @@ -33,3 +33,6 @@ export const getExercises = async () => { return result.flat() } + +export const getExercisesForLanguage = async (language: Language) => + listDirectories(path.join(EXERCISES_BASE_PATH, language)) diff --git a/benchmark/apps/web/src/lib/server/runs.ts b/benchmark/apps/web/src/lib/server/runs.ts index 987f7a97a5..aa0bfe832e 100644 --- a/benchmark/apps/web/src/lib/server/runs.ts +++ b/benchmark/apps/web/src/lib/server/runs.ts @@ -5,11 +5,13 @@ import path from "path" import os from "os" import { revalidatePath } from "next/cache" +import pMap from "p-map" -import { Language } from "@benchmark/types" +import { Language, languages } from "@benchmark/types" import * as db from "@benchmark/db" import { CreateRun } from "@/lib/schemas" +import { getExercisesForLanguage } from "./exercises" export async function createRun({ suite, exercises = [], ...values }: CreateRun) { const run = await db.createRun({ @@ -27,6 +29,14 @@ export async function createRun({ suite, exercises = [], ...values }: CreateRun) await db.createTask({ ...values, runId: run.id, language: language as Language, exercise }) } + } else { + for (const language of languages) { + const exercises = await getExercisesForLanguage(language) + + await pMap(exercises, (exercise) => db.createTask({ ...values, runId: run.id, language, exercise }), { + concurrency: 10, + }) + } } revalidatePath("/runs") diff --git a/benchmark/pnpm-lock.yaml b/benchmark/pnpm-lock.yaml index c418caa588..4caf8f481c 100644 --- a/benchmark/pnpm-lock.yaml +++ b/benchmark/pnpm-lock.yaml @@ -129,6 +129,9 @@ importers: next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + p-map: + specifier: ^7.0.3 + version: 7.0.3 react: specifier: ^19.0.0 version: 19.0.0