feat(ci): Auto-generate enhanced perf.md with embedded charts

Updates generate-perf-report.sh to produce markdown with:
- Embedded chart images for all 6 visualizations
- Dynamic observations pulled from actual performance data
- Slowest/fastest language names extracted from JSON
- Raw data table at the end

The markdown now matches the manual report format and will be
generated automatically on each tagged release.
This commit is contained in:
russell@unturf.com 2026-01-18 20:08:38 -05:00
parent 1d08dc0de5
commit be38af7ace
2 changed files with 212 additions and 117 deletions

View file

@ -1,7 +1,7 @@
# Performance Report: 4.2.0
**Generated:** 2026-01-18T23:20:51Z
**Pipeline:** [11105](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/11105)
**Generated:** 2026-01-19T01:08:20Z
**Pipeline:** [#11105](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/11105)
## Summary
@ -16,99 +16,130 @@
| Slowest | raku (93s) |
| Fastest | ocaml (19s) |
## Per-Language Performance
---
| Language | Status | Duration | Tests |
|----------|--------|----------|-------|
| raku | Passed | 93s | - |
| javascript | Passed | 90s | - |
| cpp | Passed | 66s | - |
| rust | Passed | 64s | - |
| go | Passed | 53s | - |
| prolog | Passed | 50s | - |
| bash | Passed | 43s | - |
| forth | Passed | 42s | - |
| python | Passed | 40s | - |
| powershell | Passed | 39s | - |
| java | Passed | 36s | - |
| ruby | Passed | 35s | - |
| d | Passed | 33s | - |
| zig | Passed | 32s | - |
| lua | Passed | 32s | - |
| julia | Passed | 32s | - |
| nim | Passed | 31s | - |
| commonlisp | Passed | 30s | - |
| typescript | Passed | 29s | - |
| objc | Passed | 29s | - |
| erlang | Passed | 29s | - |
| dart | Passed | 28s | - |
| kotlin | Passed | 27s | - |
| perl | Passed | 26s | - |
| fsharp | Passed | 26s | - |
| r | Passed | 25s | - |
| fortran | Passed | 25s | - |
| deno | Passed | 25s | - |
| awk | Passed | 25s | - |
| scheme | Passed | 24s | - |
| crystal | Passed | 24s | - |
| php | Passed | 23s | - |
| groovy | Passed | 23s | - |
| c | Passed | 23s | - |
| v | Passed | 22s | - |
| haskell | Passed | 21s | - |
| clojure | Passed | 21s | - |
| tcl | Passed | 20s | - |
| elixir | Passed | 20s | - |
| csharp | Passed | 20s | - |
| cobol | Passed | 20s | - |
| ocaml | Passed | 19s | - |
## Test Duration by Language
## Timing Distribution
The primary performance metric - how long each language takes to run its full test suite (15 tests per language).
```
raku 93s ██████████████████
javascript 90s ██████████████████
cpp 66s █████████████
rust 64s ████████████
go 53s ██████████
prolog 50s ██████████
bash 43s ████████
forth 42s ████████
python 40s ████████
powershell 39s ███████
java 36s ███████
ruby 35s ███████
d 33s ██████
zig 32s ██████
lua 32s ██████
julia 32s ██████
nim 31s ██████
commonlisp 30s ██████
typescript 29s █████
objc 29s █████
erlang 29s █████
dart 28s █████
kotlin 27s █████
perl 26s █████
fsharp 26s █████
r 25s █████
fortran 25s █████
deno 25s █████
awk 25s █████
scheme 24s ████
crystal 24s ████
php 23s ████
groovy 23s ████
c 23s ████
v 22s ████
haskell 21s ████
clojure 21s ████
tcl 20s ████
elixir 20s ████
csharp 20s ████
cobol 20s ████
ocaml 19s ███
```
![Duration by Language](chart-duration-by-language.png)
**Key observations:**
- **RAKU** and **JAVASCRIPT** are outliers at 90+ seconds
- Most languages cluster between 20-40 seconds
- Compiled languages (red) tend to be faster than interpreted (blue)
- **OCAML** is the fastest at 19 seconds
---
*Report generated by `make perf-report`*
## Compiled vs Interpreted
Comparing performance between compiled languages (C, Go, Rust, etc.) and interpreted languages (Python, Ruby, JavaScript, etc.).
![Category Comparison](chart-category-comparison.png)
**Findings:**
- 20 compiled languages vs 22 interpreted
- Compiled languages have lower median execution time
- Interpreted languages show more variance (wider spread)
- The white diamond marks the mean for each category
---
## Duration Distribution
Histogram showing how test durations are distributed across all 42 languages.
![Duration Histogram](chart-duration-histogram.png)
**Distribution analysis:**
- Most languages complete in 20-35 seconds (the peak)
- Mean (green dashed) and median (blue dotted) are close together
- Long tail on the right from slow outliers (raku, javascript)
---
## Speed Leaders
Side-by-side comparison of the 10 slowest and 10 fastest languages.
![Speed Leaders](chart-speed-leaders.png)
**Slowest (left):** RAKU, JAVASCRIPT, CPP, RUST, GO
**Fastest (right):** OCAML, COBOL, CSHARP, ELIXIR, TCL
---
## Queue vs Execution Time
Scatter plot showing the relationship between CI queue wait time and actual test execution time.
![Queue vs Execution](chart-queue-vs-execution.png)
**Notes:**
- Queue time is how long the job waited for a runner
- Most jobs had similar queue times (clustered vertically)
- Outliers labeled - raku and javascript took longest to execute regardless of queue time
---
## Dashboard
Summary dashboard combining key metrics and visualizations.
![Dashboard](chart-dashboard.png)
---
## Raw Data
### Per-Language Performance
| Language | Status | Duration |
|----------|--------|----------|
| raku | Passed | 93s |
| javascript | Passed | 90s |
| cpp | Passed | 66s |
| rust | Passed | 64s |
| go | Passed | 53s |
| prolog | Passed | 50s |
| bash | Passed | 43s |
| forth | Passed | 42s |
| python | Passed | 40s |
| powershell | Passed | 39s |
| java | Passed | 36s |
| ruby | Passed | 35s |
| d | Passed | 33s |
| zig | Passed | 32s |
| lua | Passed | 32s |
| julia | Passed | 32s |
| nim | Passed | 31s |
| commonlisp | Passed | 30s |
| typescript | Passed | 29s |
| objc | Passed | 29s |
| erlang | Passed | 29s |
| dart | Passed | 28s |
| kotlin | Passed | 27s |
| perl | Passed | 26s |
| fsharp | Passed | 26s |
| r | Passed | 25s |
| fortran | Passed | 25s |
| deno | Passed | 25s |
| awk | Passed | 25s |
| scheme | Passed | 24s |
| crystal | Passed | 24s |
| php | Passed | 23s |
| groovy | Passed | 23s |
| c | Passed | 23s |
| v | Passed | 22s |
| haskell | Passed | 21s |
| clojure | Passed | 21s |
| tcl | Passed | 20s |
| elixir | Passed | 20s |
| csharp | Passed | 20s |
| cobol | Passed | 20s |
| ocaml | Passed | 19s |
---
*Report generated by UN Inception CI pipeline*