Repository navigation
ci: skip the daily performance run when nothing it measures changed - #796
Conversation
3a3ab7d to
a6312cd
Compare
… ratchet (#798) The daily run only recorded numbers, so a result that started differing from Loki or a query that started failing waited for someone to read the trend. `history.py alerts` compares each set's newest history line with the previous valid one and reports transitions, not the state many rows are already in: - regression: result same -> differs; status 200 -> an error Loki does not give; warm p50 slower beyond the 25% / 50 ms noise rule that held for two runs (both worse than the run before them, range starting at that run) or that the same run's verdict against the release also calls slower - improvement: the reverse of the first two, or faster beyond the noise rule - every alert names its commit range A new history column, loki_cold_computed, records from Loki's cache counters whether Loki computed its cold run (true), its results cache answered it (false) or nothing is known (null, on every older line, which carry their own cols). bench/ab/history/ratchet.json lists rows with the same result as Loki, status 200 and a cold run no slower than a computed Loki cold run; the run only adds to it, rows leave by hand, and a ratcheted row that differs or fails, or is slower than Loki's computed cold in two runs in a row, is a loss. daily.py writes alerts.md and alerts.json next to the run's files (not committed: they describe one run), only for the sets it just wrote. The workflow puts them at the top of the daily pull request and in the job summary, and a final step fails the job on a regression or a ratchet loss. The pull request validation shows them and does not fail on them. Co-authored-by: szibis <szibis@users.noreply.github.com>
⚪ Performance A/B: no change beyond noise8 shape×range — 8 ⚪ same · results vs Loki: 7 same, 0 new difference(s), 1 pre-existing Every shape is within noise of the base build (±30% and 100 ms). 8 unchanged shape×range (within noise)
Cold (first-run) timings — what a user opening a panel sees
Why these shapes
base |
PR Quality ReportCompared against base branch Coverage and tests
Compatibility
Performance smokePerformance smoke was skipped for this PR because no perf-sensitive paths changed. State
|
✅ Visual smoke: passedBase
Gate: a base-vs-PR data difference passes when the PR is closer to Loki, and fails when the PR diverges from Loki or Loki cannot decide it (at a range Loki does not hold, a difference passes when the same page proved it closer to Loki at a shorter range; otherwise label the pull request Core set montages (5): base | PR | Lokidd-fields-1h dd-landing-1h dd-service-logs-1h explore-logs-plain-1h explore-metric-plain-1h All montages of this run: |
The release workflow could not create the metadata branch for v2.24.1 (it was cut from #794 while main had already moved on). Materialize the published 2.24.1 notes as the [2.24.1] section (#792's CI entry and #794's Security entry, exactly as released) and set the chart to 2.24.1; [Unreleased] keeps the entries merged since (#795, #796, #797). Co-authored-by: szibis <szibis@users.noreply.github.com>





Summary
The scheduled daily performance run (
perf-daily.yaml) measuredmainevery day: a 4-hour A/B that then updated or opened the daily report pull request, even when nothing it measures had changed since the previous day. A scheduled run now skips, with no build, no run, and no new or updated pull request, when nothing it measures has changed onmainsince the commit the last full daily measurement used. While a daily pull request is open, its unmerged days count. A manual dispatch always runs.Changes
bench/ab/history.py last-commitprints the commit that the newest full measurement of every current set used.bench/ab/shapes.jsoncount, so a renamed or removed set's old history file cannot disable the skip.daily.py) and every range of the set up to 24h. A cut-down manual run therefore does not count as a measurement.perf-daily.yaml: after the existing carry-history step, a scheduled run compares that commit withHEADover what a day measures:cmd/,internal/,pkg/,go.mod,go.sum;bench/ab/without its results, history, tests and README;Go test files (
**/*_test.go) are excluded. If nothing changed, the build, run, report and pull-request steps are skipped, and the job summary says why. A history read error falls back to running. Go setup moves after the check (still1.27.3,cache: false), so a skipped day does not install Go.bench/ab/README.md, and a CHANGELOG entry under CI.Proofs
5c6dfed3compared with amainthat has only report and metadata changes since: skip;mainafter a proxy change: run;git diff --quietreturns 0 with the exclude, 1 without);python3 -m unittest discover -s bench/ab/testspasses 100 tests. New cases cover agreeing sets, a stale set file, too few runs, too short a range, a set never fully measured, and lines without a commit.scripts/ci/tests: 77 pass. actionlint (pinned and local), zizmor 1.30.1 (pinned, no findings), and the conformance and changelog gates.Not applicable: no proxy code changes, so e2e vs Loki, the Grafana range matrix, visual proof, A/B, benchstat and the load test do not apply. The workflow's own pull-request validation job runs on this PR.