diff --git a/reports/4.2.12/perf.json b/reports/4.2.12/perf.json new file mode 100644 index 0000000..34d95af --- /dev/null +++ b/reports/4.2.12/perf.json @@ -0,0 +1,407 @@ +{ + "tag": "4.2.12", + "generated_at": "2026-01-23T13:30:32Z", + "parent_pipeline_id": 12115, + "child_pipeline_id": 12117, + "summary": { + "total_tests": 665, + "passed_tests": 665, + "failed_tests": 0, + "total_languages": 43, + "passed_languages": 43, + "avg_duration_seconds": 142, + "max_duration_seconds": 406, + "min_duration_seconds": 21, + "slowest_language": "go", + "fastest_language": "erlang" + }, + "languages": [ + { + "language": "go", + "status": "Passed", + "queued_duration": 41.583969, + "started_at": "2026-01-23T13:22:14Z", + "updated_at": "2026-01-23T13:29:00Z", + "job_id": 29410, + "duration_seconds": 406 + }, + { + "language": "crystal", + "status": "Passed", + "queued_duration": 36.366243, + "started_at": "2026-01-23T13:22:08Z", + "updated_at": "2026-01-23T13:28:45Z", + "job_id": 29403, + "duration_seconds": 397 + }, + { + "language": "groovy", + "status": "Passed", + "queued_duration": 38.523149, + "started_at": "2026-01-23T13:22:10Z", + "updated_at": "2026-01-23T13:28:43Z", + "job_id": 29404, + "duration_seconds": 393 + }, + { + "language": "deno", + "status": "Passed", + "queued_duration": 40.727393, + "started_at": "2026-01-23T13:22:11Z", + "updated_at": "2026-01-23T13:27:21Z", + "job_id": 29405, + "duration_seconds": 310 + }, + { + "language": "awk", + "status": "Passed", + "queued_duration": 41.223654, + "started_at": "2026-01-23T13:22:11Z", + "updated_at": "2026-01-23T13:27:17Z", + "job_id": 29406, + "duration_seconds": 306 + }, + { + "language": "cobol", + "status": "Passed", + "queued_duration": 139.467006, + "started_at": "2026-01-23T13:23:52Z", + "updated_at": "2026-01-23T13:28:42Z", + "job_id": 29414, + "duration_seconds": 290 + }, + { + "language": "clojure", + "status": "Passed", + "queued_duration": 25.666374, + "started_at": "2026-01-23T13:21:57Z", + "updated_at": "2026-01-23T13:26:11Z", + "job_id": 29401, + "duration_seconds": 254 + }, + { + "language": "rust", + "status": "Passed", + "queued_duration": 65.344725, + "started_at": "2026-01-23T13:22:38Z", + "updated_at": "2026-01-23T13:26:25Z", + "job_id": 29411, + "duration_seconds": 227 + }, + { + "language": "scheme", + "status": "Passed", + "queued_duration": 19.277813, + "started_at": "2026-01-23T13:21:50Z", + "updated_at": "2026-01-23T13:25:15Z", + "job_id": 29399, + "duration_seconds": 205 + }, + { + "language": "zig", + "status": "Passed", + "queued_duration": 143.055169, + "started_at": "2026-01-23T13:23:57Z", + "updated_at": "2026-01-23T13:27:16Z", + "job_id": 29417, + "duration_seconds": 199 + }, + { + "language": "forth", + "status": "Passed", + "queued_duration": 218.730592, + "started_at": "2026-01-23T13:25:15Z", + "updated_at": "2026-01-23T13:28:13Z", + "job_id": 29429, + "duration_seconds": 178 + }, + { + "language": "r", + "status": "Passed", + "queued_duration": 17.546631, + "started_at": "2026-01-23T13:21:47Z", + "updated_at": "2026-01-23T13:24:36Z", + "job_id": 29395, + "duration_seconds": 169 + }, + { + "language": "bash", + "status": "Passed", + "queued_duration": 16.509548, + "started_at": "2026-01-23T13:21:46Z", + "updated_at": "2026-01-23T13:24:35Z", + "job_id": 29394, + "duration_seconds": 169 + }, + { + "language": "csharp", + "status": "Passed", + "queued_duration": 187.021072, + "started_at": "2026-01-23T13:24:39Z", + "updated_at": "2026-01-23T13:27:16Z", + "job_id": 29426, + "duration_seconds": 157 + }, + { + "language": "fsharp", + "status": "Passed", + "queued_duration": 186.563422, + "started_at": "2026-01-23T13:24:39Z", + "updated_at": "2026-01-23T13:27:15Z", + "job_id": 29425, + "duration_seconds": 156 + }, + { + "language": "c", + "status": "Passed", + "queued_duration": 40.971826, + "started_at": "2026-01-23T13:22:13Z", + "updated_at": "2026-01-23T13:24:36Z", + "job_id": 29408, + "duration_seconds": 143 + }, + { + "language": "ruby", + "status": "Passed", + "queued_duration": 12.231573, + "started_at": "2026-01-23T13:21:41Z", + "updated_at": "2026-01-23T13:23:57Z", + "job_id": 29390, + "duration_seconds": 136 + }, + { + "language": "typescript", + "status": "Passed", + "queued_duration": 11.043946, + "started_at": "2026-01-23T13:21:40Z", + "updated_at": "2026-01-23T13:23:52Z", + "job_id": 29389, + "duration_seconds": 132 + }, + { + "language": "dotnet", + "status": "Passed", + "queued_duration": 212.783708, + "started_at": "2026-01-23T13:25:09Z", + "updated_at": "2026-01-23T13:27:14Z", + "job_id": 29427, + "duration_seconds": 125 + }, + { + "language": "prolog", + "status": "Passed", + "queued_duration": 215.909256, + "started_at": "2026-01-23T13:25:12Z", + "updated_at": "2026-01-23T13:27:16Z", + "job_id": 29428, + "duration_seconds": 124 + }, + { + "language": "elixir", + "status": "Passed", + "queued_duration": 17.989889, + "started_at": "2026-01-23T13:21:48Z", + "updated_at": "2026-01-23T13:23:52Z", + "job_id": 29396, + "duration_seconds": 124 + }, + { + "language": "tcl", + "status": "Passed", + "queued_duration": 18.745656, + "started_at": "2026-01-23T13:21:49Z", + "updated_at": "2026-01-23T13:23:52Z", + "job_id": 29398, + "duration_seconds": 123 + }, + { + "language": "java", + "status": "Passed", + "queued_duration": 65.908662, + "started_at": "2026-01-23T13:22:39Z", + "updated_at": "2026-01-23T13:24:35Z", + "job_id": 29412, + "duration_seconds": 116 + }, + { + "language": "kotlin", + "status": "Passed", + "queued_duration": 66.343916, + "started_at": "2026-01-23T13:22:39Z", + "updated_at": "2026-01-23T13:24:34Z", + "job_id": 29413, + "duration_seconds": 115 + }, + { + "language": "julia", + "status": "Passed", + "queued_duration": 181.477057, + "started_at": "2026-01-23T13:24:37Z", + "updated_at": "2026-01-23T13:26:24Z", + "job_id": 29422, + "duration_seconds": 107 + }, + { + "language": "cpp", + "status": "Passed", + "queued_duration": 41.136394, + "started_at": "2026-01-23T13:22:13Z", + "updated_at": "2026-01-23T13:23:59Z", + "job_id": 29409, + "duration_seconds": 106 + }, + { + "language": "raku", + "status": "Passed", + "queued_duration": 40.504061, + "started_at": "2026-01-23T13:22:12Z", + "updated_at": "2026-01-23T13:23:53Z", + "job_id": 29407, + "duration_seconds": 101 + }, + { + "language": "dart", + "status": "Passed", + "queued_duration": 181.285552, + "started_at": "2026-01-23T13:24:36Z", + "updated_at": "2026-01-23T13:26:17Z", + "job_id": 29421, + "duration_seconds": 101 + }, + { + "language": "v", + "status": "Passed", + "queued_duration": 179.048397, + "started_at": "2026-01-23T13:24:34Z", + "updated_at": "2026-01-23T13:26:14Z", + "job_id": 29419, + "duration_seconds": 100 + }, + { + "language": "objc", + "status": "Passed", + "queued_duration": 180.329094, + "started_at": "2026-01-23T13:24:35Z", + "updated_at": "2026-01-23T13:26:14Z", + "job_id": 29420, + "duration_seconds": 99 + }, + { + "language": "ocaml", + "status": "Passed", + "queued_duration": 182.274986, + "started_at": "2026-01-23T13:24:38Z", + "updated_at": "2026-01-23T13:26:16Z", + "job_id": 29424, + "duration_seconds": 98 + }, + { + "language": "powershell", + "status": "Passed", + "queued_duration": 0.907876, + "started_at": "2026-01-23T13:26:16Z", + "updated_at": "2026-01-23T13:27:14Z", + "job_id": 29443, + "duration_seconds": 58 + }, + { + "language": "perl", + "status": "Passed", + "queued_duration": 13.41398, + "started_at": "2026-01-23T13:21:43Z", + "updated_at": "2026-01-23T13:22:38Z", + "job_id": 29391, + "duration_seconds": 55 + }, + { + "language": "lua", + "status": "Passed", + "queued_duration": 15.326562, + "started_at": "2026-01-23T13:21:45Z", + "updated_at": "2026-01-23T13:22:38Z", + "job_id": 29393, + "duration_seconds": 53 + }, + { + "language": "fortran", + "status": "Passed", + "queued_duration": 139.486042, + "started_at": "2026-01-23T13:23:53Z", + "updated_at": "2026-01-23T13:24:36Z", + "job_id": 29415, + "duration_seconds": 43 + }, + { + "language": "d", + "status": "Passed", + "queued_duration": 139.481933, + "started_at": "2026-01-23T13:23:54Z", + "updated_at": "2026-01-23T13:24:34Z", + "job_id": 29416, + "duration_seconds": 40 + }, + { + "language": "commonlisp", + "status": "Passed", + "queued_duration": 27.617889, + "started_at": "2026-01-23T13:21:59Z", + "updated_at": "2026-01-23T13:22:38Z", + "job_id": 29402, + "duration_seconds": 39 + }, + { + "language": "nim", + "status": "Passed", + "queued_duration": 145.858834, + "started_at": "2026-01-23T13:24:00Z", + "updated_at": "2026-01-23T13:24:36Z", + "job_id": 29418, + "duration_seconds": 36 + }, + { + "language": "javascript", + "status": "Passed", + "queued_duration": 10.234596, + "started_at": "2026-01-23T13:21:39Z", + "updated_at": "2026-01-23T13:22:11Z", + "job_id": 29388, + "duration_seconds": 32 + }, + { + "language": "haskell", + "status": "Passed", + "queued_duration": 181.904614, + "started_at": "2026-01-23T13:24:37Z", + "updated_at": "2026-01-23T13:25:09Z", + "job_id": 29423, + "duration_seconds": 32 + }, + { + "language": "python", + "status": "Passed", + "queued_duration": 9.866286, + "started_at": "2026-01-23T13:21:39Z", + "updated_at": "2026-01-23T13:22:08Z", + "job_id": 29387, + "duration_seconds": 29 + }, + { + "language": "php", + "status": "Passed", + "queued_duration": 14.704303, + "started_at": "2026-01-23T13:21:44Z", + "updated_at": "2026-01-23T13:22:10Z", + "job_id": 29392, + "duration_seconds": 26 + }, + { + "language": "erlang", + "status": "Passed", + "queued_duration": 18.286508, + "started_at": "2026-01-23T13:21:49Z", + "updated_at": "2026-01-23T13:22:10Z", + "job_id": 29397, + "duration_seconds": 21 + } +] +} diff --git a/reports/4.2.12/perf.md b/reports/4.2.12/perf.md new file mode 100644 index 0000000..97d1529 --- /dev/null +++ b/reports/4.2.12/perf.md @@ -0,0 +1,146 @@ +# Performance Report: 4.2.12 + +**Generated:** 2026-01-23T13:30:32Z +**Pipeline:** [#12117](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/12117) + +## Summary + +| Metric | Value | +|--------|-------| +| Total Tests | 665 | +| Passed | 665 | +| Failed | 0 | +| Pass Rate | 100.0% | +| Languages | 43 | +| Avg Duration | 142s | +| Slowest | go (406s) | +| Fastest | erlang (21s) | + +--- + +## Test Duration by Language + +The primary performance metric - how long each language takes to run its full test suite (15 tests per language). + +![Duration by Language](chart-duration-by-language.png) + +**Key observations:** +- **GO** and **CRYSTAL** are outliers at 90+ seconds +- Most languages cluster between 20-40 seconds +- Compiled languages (red) tend to be faster than interpreted (blue) +- **ERLANG** is the fastest at 21 seconds + +--- + +## 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 43 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 (go, crystal) + +--- + +## Speed Leaders + +Side-by-side comparison of the 10 slowest and 10 fastest languages. + +![Speed Leaders](chart-speed-leaders.png) + +**Slowest (left):** GO, CRYSTAL, GROOVY, DENO, AWK +**Fastest (right):** ERLANG, PHP, PYTHON, HASKELL, JAVASCRIPT + +--- + +## 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 - go and crystal 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 | +|----------|--------|----------| +| go | Passed | 406s | +| crystal | Passed | 397s | +| groovy | Passed | 393s | +| deno | Passed | 310s | +| awk | Passed | 306s | +| cobol | Passed | 290s | +| clojure | Passed | 254s | +| rust | Passed | 227s | +| scheme | Passed | 205s | +| zig | Passed | 199s | +| forth | Passed | 178s | +| r | Passed | 169s | +| bash | Passed | 169s | +| csharp | Passed | 157s | +| fsharp | Passed | 156s | +| c | Passed | 143s | +| ruby | Passed | 136s | +| typescript | Passed | 132s | +| dotnet | Passed | 125s | +| prolog | Passed | 124s | +| elixir | Passed | 124s | +| tcl | Passed | 123s | +| java | Passed | 116s | +| kotlin | Passed | 115s | +| julia | Passed | 107s | +| cpp | Passed | 106s | +| raku | Passed | 101s | +| dart | Passed | 101s | +| v | Passed | 100s | +| objc | Passed | 99s | +| ocaml | Passed | 98s | +| powershell | Passed | 58s | +| perl | Passed | 55s | +| lua | Passed | 53s | +| fortran | Passed | 43s | +| d | Passed | 40s | +| commonlisp | Passed | 39s | +| nim | Passed | 36s | +| javascript | Passed | 32s | +| haskell | Passed | 32s | +| python | Passed | 29s | +| php | Passed | 26s | +| erlang | Passed | 21s | + +--- + +*Report generated by UN Inception CI pipeline* diff --git a/reports/PERFORMANCE-HISTORY.md b/reports/PERFORMANCE-HISTORY.md index 6e6d8f4..3a4f62d 100644 --- a/reports/PERFORMANCE-HISTORY.md +++ b/reports/PERFORMANCE-HISTORY.md @@ -16,3 +16,4 @@ Tracking compile and test execution times across releases. | 4.2.9 | 2026-01-23 | 645 | 100.0% | 107s | ruby | d | | 4.2.10 | 2026-01-23 | 673 | 99.7% | 153s | scheme | bash | | 4.2.11 | 2026-01-23 | 669 | 100.0% | 103s | deno | cpp | +| 4.2.12 | 2026-01-23 | 665 | 100.0% | 142s | go | erlang |