mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-10 03:48:28 +00:00
66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
#!/usr/bin/env bun
|
|
|
|
import path from "path"
|
|
|
|
const root = path.resolve(import.meta.dir, "..")
|
|
const proc = Bun.spawn(
|
|
[
|
|
"bun",
|
|
"turbo",
|
|
"typecheck",
|
|
"--concurrency=1",
|
|
"--force",
|
|
"--continue=always",
|
|
"--summarize",
|
|
"--output-logs=errors-only",
|
|
],
|
|
{
|
|
cwd: root,
|
|
stdout: "pipe",
|
|
stderr: "pipe",
|
|
},
|
|
)
|
|
const [stdout, stderr, exitCode] = await Promise.all([proc.stdout.text(), proc.stderr.text(), proc.exited])
|
|
const output = stdout + stderr
|
|
if (exitCode !== 0) {
|
|
process.stdout.write(stdout)
|
|
process.stderr.write(stderr)
|
|
process.exit(exitCode)
|
|
}
|
|
|
|
const summary = output.match(/Summary:\s+(.+\.json)/)?.[1]?.trim()
|
|
if (!summary) {
|
|
process.stdout.write(stdout)
|
|
process.stderr.write(stderr)
|
|
throw new Error("Turbo did not report a run summary")
|
|
}
|
|
|
|
const report = (await Bun.file(summary).json()) as {
|
|
tasks: Array<{
|
|
taskId: string
|
|
execution: { startTime: number; endTime: number; exitCode: number } | null
|
|
}>
|
|
}
|
|
const tasks = report.tasks
|
|
.flatMap((task) =>
|
|
task.execution
|
|
? [
|
|
{
|
|
task: task.taskId.replace(/#typecheck$/, ""),
|
|
durationMs: task.execution.endTime - task.execution.startTime,
|
|
},
|
|
]
|
|
: [],
|
|
)
|
|
.sort((a, b) => b.durationMs - a.durationMs)
|
|
const total = tasks.reduce((duration, task) => duration + task.durationMs, 0)
|
|
const width = Math.max(...tasks.map((task) => task.task.length), "Package".length)
|
|
|
|
console.log(`Package${" ".repeat(width - "Package".length)} Time Share`)
|
|
tasks.forEach((task) => {
|
|
const duration = `${(task.durationMs / 1000).toFixed(2)}s`.padStart(7)
|
|
const share = `${((task.durationMs / total) * 100).toFixed(1)}%`.padStart(6)
|
|
console.log(`${task.task.padEnd(width)} ${duration} ${share}`)
|
|
})
|
|
console.log(`\nTotal serial task time: ${(total / 1000).toFixed(2)}s`)
|
|
console.log(`Turbo summary: ${path.relative(root, summary)}`)
|