---
name: julialang-ci-timing
description: "Compare a Julia PR's Buildkite job durations against recent CI history (per-job mean/min/max over the last N days). Use when asked whether a PR slows down or speeds up CI, or to check a build's timings against the weekly baseline."
license: "MIT"
metadata:
  decimalai-skill-id: "b107cb1e-19ff-4b85-bca3-f23dae158375"
  decimalai-version-id: "56764f37-2696-40f6-b276-5cc2b054f63d"
  decimalai-version: "1"
  decimalai-body-sha256: "20579c959b6652f2529349a57b84705098c611f07c5622e855951ed81599ed56"
  decimalai-name: "julialang/ci-timing"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "devops"
  decimalai-source: "https://app.decimal.ai/s/julialang-ci-timing@1/SKILL.md"
---
# CI timing analysis

```sh
julia --startup-file=no --project=contrib/ci-timing contrib/ci-timing/ci_timing_compare.jl <PR-number>
```

Prints a markdown table, slowest job first, plus a TOTAL row: each job's duration
in the PR's `julia-pr` build vs. the mean/min/max of the same job name over the
last 7 days of [julia-ci-timing](https://github.com/JuliaCI/julia-ci-timing)
history. `⚠️` = above the weekly max, `✅` = below the weekly min. No Buildkite
token needed; `gh` is only needed to turn a PR number into a build.

Flags: `--build julia-pr/853`, `--days N`, `--include-failed`, `--min-seconds N`
(hides short jobs).

Caveats when reading it:

- One build vs. a week of samples — anything inside the min/max band is agent
  variance, and even ⚠️/✅ rows need a second build to mean anything.
- `juliasyntax`/`Launch *` jobs are seconds long, so their percentages are noise;
  `--min-seconds 120` drops them.
- A fleet-wide shift in one direction skews TOTAL and is not a PR effect.
- Broken (never run), running, and superseded retry jobs are excluded; a failed
  job's time is cut short or stretched by the failure.

For logs behind a slow or failed job, see the `buildkite-logs` skill.
