Fix task creation in the "full" suite case

This commit is contained in:
cte 2025-03-24 08:28:41 -07:00
parent 6e73aaf603
commit e9fadc7cb1
8 changed files with 29 additions and 10 deletions

View file

@ -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))

View file

@ -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",

View file

@ -24,7 +24,7 @@ export default function RootLayout({
<ThemeProvider attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange>
<ReactQueryProvider>
<Header />
<div className="max-w-3xl mx-auto">{children}</div>
<div className="max-w-3xl mx-auto pb-12">{children}</div>
</ReactQueryProvider>
</ThemeProvider>
</body>

View file

@ -12,9 +12,11 @@ export const TaskStatus = ({ task, runningTaskId }: TaskStatusProps) => {
<LoaderCircle className="size-4 animate-spin" />
) : !task.finishedAt ? (
<CircleDashed className="size-4" />
) : !task.passed ? (
) : task.passed === false ? (
<CircleSlash className="size-4 text-destructive" />
) : (
) : task.passed === true ? (
<CircleCheck className="size-4 text-green-500" />
) : (
<LoaderCircle className="size-4 animate-spin" />
)
}

View file

@ -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`

View file

@ -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))

View file

@ -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")

View file

@ -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