| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/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)}`)
|