diff --git a/reports/4.2.0/chart-category-comparison.png b/reports/4.2.0/chart-category-comparison.png new file mode 100644 index 0000000..8ba643e Binary files /dev/null and b/reports/4.2.0/chart-category-comparison.png differ diff --git a/reports/4.2.0/chart-dashboard.png b/reports/4.2.0/chart-dashboard.png new file mode 100644 index 0000000..68f407c Binary files /dev/null and b/reports/4.2.0/chart-dashboard.png differ diff --git a/reports/4.2.0/chart-duration-by-language.png b/reports/4.2.0/chart-duration-by-language.png new file mode 100644 index 0000000..b7b1e4b Binary files /dev/null and b/reports/4.2.0/chart-duration-by-language.png differ diff --git a/reports/4.2.0/chart-duration-histogram.png b/reports/4.2.0/chart-duration-histogram.png new file mode 100644 index 0000000..a64cad2 Binary files /dev/null and b/reports/4.2.0/chart-duration-histogram.png differ diff --git a/reports/4.2.0/chart-queue-vs-execution.png b/reports/4.2.0/chart-queue-vs-execution.png new file mode 100644 index 0000000..64b3874 Binary files /dev/null and b/reports/4.2.0/chart-queue-vs-execution.png differ diff --git a/reports/4.2.0/chart-speed-leaders.png b/reports/4.2.0/chart-speed-leaders.png new file mode 100644 index 0000000..d32e8f4 Binary files /dev/null and b/reports/4.2.0/chart-speed-leaders.png differ diff --git a/reports/4.2.0/perf.json b/reports/4.2.0/perf.json new file mode 100644 index 0000000..d466bc3 --- /dev/null +++ b/reports/4.2.0/perf.json @@ -0,0 +1,398 @@ +{ + "tag": "4.2.0", + "generated_at": "2026-01-18T23:20:51Z", + "parent_pipeline_id": 11103, + "child_pipeline_id": 11105, + "summary": { + "total_tests": 642, + "passed_tests": 642, + "failed_tests": 0, + "total_languages": 42, + "passed_languages": 42, + "avg_duration_seconds": 33, + "max_duration_seconds": 93, + "min_duration_seconds": 19, + "slowest_language": "raku", + "fastest_language": "ocaml" + }, + "languages": [ + { + "language": "raku", + "status": "Passed", + "queued_duration": 45.874547, + "started_at": "2026-01-18T23:19:08Z", + "updated_at": "2026-01-18T23:20:41Z", + "job_id": 25987, + "duration_seconds": 93 + }, + { + "language": "javascript", + "status": "Passed", + "queued_duration": 45.713228, + "started_at": "2026-01-18T23:19:09Z", + "updated_at": "2026-01-18T23:20:39Z", + "job_id": 25988, + "duration_seconds": 90 + }, + { + "language": "cpp", + "status": "Passed", + "queued_duration": 47.639099, + "started_at": "2026-01-18T23:19:11Z", + "updated_at": "2026-01-18T23:20:17Z", + "job_id": 25989, + "duration_seconds": 66 + }, + { + "language": "rust", + "status": "Passed", + "queued_duration": 68.252862, + "started_at": "2026-01-18T23:18:14Z", + "updated_at": "2026-01-18T23:19:18Z", + "job_id": 25949, + "duration_seconds": 64 + }, + { + "language": "go", + "status": "Passed", + "queued_duration": 63.143834, + "started_at": "2026-01-18T23:18:09Z", + "updated_at": "2026-01-18T23:19:02Z", + "job_id": 25948, + "duration_seconds": 53 + }, + { + "language": "prolog", + "status": "Passed", + "queued_duration": 78.429367, + "started_at": "2026-01-18T23:18:28Z", + "updated_at": "2026-01-18T23:19:18Z", + "job_id": 25965, + "duration_seconds": 50 + }, + { + "language": "bash", + "status": "Passed", + "queued_duration": 21.829044, + "started_at": "2026-01-18T23:18:29Z", + "updated_at": "2026-01-18T23:19:12Z", + "job_id": 25969, + "duration_seconds": 43 + }, + { + "language": "forth", + "status": "Passed", + "queued_duration": 79.501956, + "started_at": "2026-01-18T23:18:28Z", + "updated_at": "2026-01-18T23:19:10Z", + "job_id": 25966, + "duration_seconds": 42 + }, + { + "language": "python", + "status": "Passed", + "queued_duration": 3.233989, + "started_at": "2026-01-18T23:17:03Z", + "updated_at": "2026-01-18T23:17:43Z", + "job_id": 25925, + "duration_seconds": 40 + }, + { + "language": "powershell", + "status": "Passed", + "queued_duration": 20.769991, + "started_at": "2026-01-18T23:18:29Z", + "updated_at": "2026-01-18T23:19:08Z", + "job_id": 25970, + "duration_seconds": 39 + }, + { + "language": "java", + "status": "Passed", + "queued_duration": 69.848299, + "started_at": "2026-01-18T23:18:16Z", + "updated_at": "2026-01-18T23:18:52Z", + "job_id": 25950, + "duration_seconds": 36 + }, + { + "language": "ruby", + "status": "Passed", + "queued_duration": 7.238856, + "started_at": "2026-01-18T23:17:07Z", + "updated_at": "2026-01-18T23:17:42Z", + "job_id": 25928, + "duration_seconds": 35 + }, + { + "language": "d", + "status": "Passed", + "queued_duration": 72.304204, + "started_at": "2026-01-18T23:18:19Z", + "updated_at": "2026-01-18T23:18:52Z", + "job_id": 25954, + "duration_seconds": 33 + }, + { + "language": "zig", + "status": "Passed", + "queued_duration": 72.953565, + "started_at": "2026-01-18T23:18:20Z", + "updated_at": "2026-01-18T23:18:52Z", + "job_id": 25955, + "duration_seconds": 32 + }, + { + "language": "lua", + "status": "Passed", + "queued_duration": 29.233779, + "started_at": "2026-01-18T23:18:38Z", + "updated_at": "2026-01-18T23:19:10Z", + "job_id": 25971, + "duration_seconds": 32 + }, + { + "language": "julia", + "status": "Passed", + "queued_duration": 76.620144, + "started_at": "2026-01-18T23:18:24Z", + "updated_at": "2026-01-18T23:18:56Z", + "job_id": 25960, + "duration_seconds": 32 + }, + { + "language": "nim", + "status": "Passed", + "queued_duration": 73.5841, + "started_at": "2026-01-18T23:18:21Z", + "updated_at": "2026-01-18T23:18:52Z", + "job_id": 25956, + "duration_seconds": 31 + }, + { + "language": "commonlisp", + "status": "Passed", + "queued_duration": 45.039873, + "started_at": "2026-01-18T23:19:02Z", + "updated_at": "2026-01-18T23:19:32Z", + "job_id": 25986, + "duration_seconds": 30 + }, + { + "language": "typescript", + "status": "Passed", + "queued_duration": 32.115787, + "started_at": "2026-01-18T23:18:44Z", + "updated_at": "2026-01-18T23:19:13Z", + "job_id": 25973, + "duration_seconds": 29 + }, + { + "language": "objc", + "status": "Passed", + "queued_duration": 75.636115, + "started_at": "2026-01-18T23:18:23Z", + "updated_at": "2026-01-18T23:18:52Z", + "job_id": 25958, + "duration_seconds": 29 + }, + { + "language": "erlang", + "status": "Passed", + "queued_duration": 32.710848, + "started_at": "2026-01-18T23:18:45Z", + "updated_at": "2026-01-18T23:19:14Z", + "job_id": 25974, + "duration_seconds": 29 + }, + { + "language": "dart", + "status": "Passed", + "queued_duration": 76.000909, + "started_at": "2026-01-18T23:18:24Z", + "updated_at": "2026-01-18T23:18:52Z", + "job_id": 25959, + "duration_seconds": 28 + }, + { + "language": "kotlin", + "status": "Passed", + "queued_duration": 71.065836, + "started_at": "2026-01-18T23:18:17Z", + "updated_at": "2026-01-18T23:18:44Z", + "job_id": 25951, + "duration_seconds": 27 + }, + { + "language": "perl", + "status": "Passed", + "queued_duration": 34.240776, + "started_at": "2026-01-18T23:18:46Z", + "updated_at": "2026-01-18T23:19:12Z", + "job_id": 25975, + "duration_seconds": 26 + }, + { + "language": "fsharp", + "status": "Passed", + "queued_duration": 77.832273, + "started_at": "2026-01-18T23:18:26Z", + "updated_at": "2026-01-18T23:18:52Z", + "job_id": 25963, + "duration_seconds": 26 + }, + { + "language": "r", + "status": "Passed", + "queued_duration": 33.605649, + "started_at": "2026-01-18T23:18:47Z", + "updated_at": "2026-01-18T23:19:12Z", + "job_id": 25976, + "duration_seconds": 25 + }, + { + "language": "fortran", + "status": "Passed", + "queued_duration": 71.844626, + "started_at": "2026-01-18T23:18:18Z", + "updated_at": "2026-01-18T23:18:43Z", + "job_id": 25953, + "duration_seconds": 25 + }, + { + "language": "deno", + "status": "Passed", + "queued_duration": 38.323477, + "started_at": "2026-01-18T23:18:53Z", + "updated_at": "2026-01-18T23:19:18Z", + "job_id": 25980, + "duration_seconds": 25 + }, + { + "language": "awk", + "status": "Passed", + "queued_duration": 32.582507, + "started_at": "2026-01-18T23:18:43Z", + "updated_at": "2026-01-18T23:19:08Z", + "job_id": 25972, + "duration_seconds": 25 + }, + { + "language": "scheme", + "status": "Passed", + "queued_duration": 34.230634, + "started_at": "2026-01-18T23:18:48Z", + "updated_at": "2026-01-18T23:19:12Z", + "job_id": 25977, + "duration_seconds": 24 + }, + { + "language": "crystal", + "status": "Passed", + "queued_duration": 37.272444, + "started_at": "2026-01-18T23:18:52Z", + "updated_at": "2026-01-18T23:19:16Z", + "job_id": 25978, + "duration_seconds": 24 + }, + { + "language": "php", + "status": "Passed", + "queued_duration": 38.391039, + "started_at": "2026-01-18T23:18:54Z", + "updated_at": "2026-01-18T23:19:17Z", + "job_id": 25982, + "duration_seconds": 23 + }, + { + "language": "groovy", + "status": "Passed", + "queued_duration": 37.701182, + "started_at": "2026-01-18T23:18:54Z", + "updated_at": "2026-01-18T23:19:17Z", + "job_id": 25981, + "duration_seconds": 23 + }, + { + "language": "c", + "status": "Passed", + "queued_duration": 38.530095, + "started_at": "2026-01-18T23:18:55Z", + "updated_at": "2026-01-18T23:19:18Z", + "job_id": 25983, + "duration_seconds": 23 + }, + { + "language": "v", + "status": "Passed", + "queued_duration": 74.589707, + "started_at": "2026-01-18T23:18:22Z", + "updated_at": "2026-01-18T23:18:44Z", + "job_id": 25957, + "duration_seconds": 22 + }, + { + "language": "haskell", + "status": "Passed", + "queued_duration": 76.893928, + "started_at": "2026-01-18T23:18:25Z", + "updated_at": "2026-01-18T23:18:46Z", + "job_id": 25961, + "duration_seconds": 21 + }, + { + "language": "clojure", + "status": "Passed", + "queued_duration": 40.587515, + "started_at": "2026-01-18T23:18:57Z", + "updated_at": "2026-01-18T23:19:18Z", + "job_id": 25985, + "duration_seconds": 21 + }, + { + "language": "tcl", + "status": "Passed", + "queued_duration": 38.346762, + "started_at": "2026-01-18T23:18:53Z", + "updated_at": "2026-01-18T23:19:13Z", + "job_id": 25979, + "duration_seconds": 20 + }, + { + "language": "elixir", + "status": "Passed", + "queued_duration": 39.917498, + "started_at": "2026-01-18T23:18:56Z", + "updated_at": "2026-01-18T23:19:16Z", + "job_id": 25984, + "duration_seconds": 20 + }, + { + "language": "csharp", + "status": "Passed", + "queued_duration": 82.081382, + "started_at": "2026-01-18T23:18:27Z", + "updated_at": "2026-01-18T23:18:47Z", + "job_id": 25964, + "duration_seconds": 20 + }, + { + "language": "cobol", + "status": "Passed", + "queued_duration": 71.526724, + "started_at": "2026-01-18T23:18:18Z", + "updated_at": "2026-01-18T23:18:38Z", + "job_id": 25952, + "duration_seconds": 20 + }, + { + "language": "ocaml", + "status": "Passed", + "queued_duration": 77.121164, + "started_at": "2026-01-18T23:18:26Z", + "updated_at": "2026-01-18T23:18:45Z", + "job_id": 25962, + "duration_seconds": 19 + } +] +} diff --git a/reports/4.2.0/perf.md b/reports/4.2.0/perf.md new file mode 100644 index 0000000..fb15eae --- /dev/null +++ b/reports/4.2.0/perf.md @@ -0,0 +1,145 @@ +# Performance Report: 4.2.0 + +**Generated:** 2026-01-19T01:08:20Z +**Pipeline:** [#11105](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/11105) + +## Summary + +| Metric | Value | +|--------|-------| +| Total Tests | 642 | +| Passed | 642 | +| Failed | 0 | +| Pass Rate | 100.0% | +| Languages | 42 | +| Avg Duration | 33s | +| Slowest | raku (93s) | +| Fastest | ocaml (19s) | + +--- + +## 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:** +- **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 + +--- + +## 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* diff --git a/reports/4.2.3/perf.json b/reports/4.2.3/perf.json new file mode 100644 index 0000000..87e9bf2 --- /dev/null +++ b/reports/4.2.3/perf.json @@ -0,0 +1,398 @@ +{ + "tag": "4.2.3", + "generated_at": "2026-01-19T11:58:45Z", + "parent_pipeline_id": 11250, + "child_pipeline_id": 11252, + "summary": { + "total_tests": 642, + "passed_tests": 642, + "failed_tests": 0, + "total_languages": 42, + "passed_languages": 42, + "avg_duration_seconds": 63, + "max_duration_seconds": 142, + "min_duration_seconds": 40, + "slowest_language": "rust", + "fastest_language": "v" + }, + "languages": [ + { + "language": "rust", + "status": "Passed", + "queued_duration": 71.959997, + "started_at": "2026-01-19T11:55:11Z", + "updated_at": "2026-01-19T11:57:33Z", + "job_id": 26613, + "duration_seconds": 142 + }, + { + "language": "c", + "status": "Passed", + "queued_duration": 63.135606, + "started_at": "2026-01-19T11:55:02Z", + "updated_at": "2026-01-19T11:56:49Z", + "job_id": 26610, + "duration_seconds": 107 + }, + { + "language": "python", + "status": "Passed", + "queued_duration": 2.62747, + "started_at": "2026-01-19T11:53:59Z", + "updated_at": "2026-01-19T11:55:17Z", + "job_id": 26589, + "duration_seconds": 78 + }, + { + "language": "typescript", + "status": "Passed", + "queued_duration": 4.499905, + "started_at": "2026-01-19T11:54:01Z", + "updated_at": "2026-01-19T11:55:16Z", + "job_id": 26591, + "duration_seconds": 75 + }, + { + "language": "javascript", + "status": "Passed", + "queued_duration": 3.602933, + "started_at": "2026-01-19T11:54:00Z", + "updated_at": "2026-01-19T11:55:15Z", + "job_id": 26590, + "duration_seconds": 75 + }, + { + "language": "ruby", + "status": "Passed", + "queued_duration": 5.394929, + "started_at": "2026-01-19T11:54:02Z", + "updated_at": "2026-01-19T11:55:16Z", + "job_id": 26592, + "duration_seconds": 74 + }, + { + "language": "go", + "status": "Passed", + "queued_duration": 68.583599, + "started_at": "2026-01-19T11:55:07Z", + "updated_at": "2026-01-19T11:56:21Z", + "job_id": 26612, + "duration_seconds": 74 + }, + { + "language": "php", + "status": "Passed", + "queued_duration": 8.408504, + "started_at": "2026-01-19T11:54:05Z", + "updated_at": "2026-01-19T11:55:15Z", + "job_id": 26594, + "duration_seconds": 70 + }, + { + "language": "cpp", + "status": "Passed", + "queued_duration": 64.466934, + "started_at": "2026-01-19T11:55:03Z", + "updated_at": "2026-01-19T11:56:13Z", + "job_id": 26611, + "duration_seconds": 70 + }, + { + "language": "elixir", + "status": "Passed", + "queued_duration": 10.81407, + "started_at": "2026-01-19T11:54:08Z", + "updated_at": "2026-01-19T11:55:17Z", + "job_id": 26598, + "duration_seconds": 69 + }, + { + "language": "erlang", + "status": "Passed", + "queued_duration": 12.839351, + "started_at": "2026-01-19T11:54:09Z", + "updated_at": "2026-01-19T11:55:17Z", + "job_id": 26599, + "duration_seconds": 68 + }, + { + "language": "java", + "status": "Passed", + "queued_duration": 74.929525, + "started_at": "2026-01-19T11:55:14Z", + "updated_at": "2026-01-19T11:56:21Z", + "job_id": 26614, + "duration_seconds": 67 + }, + { + "language": "perl", + "status": "Passed", + "queued_duration": 7.241158, + "started_at": "2026-01-19T11:54:04Z", + "updated_at": "2026-01-19T11:55:10Z", + "job_id": 26593, + "duration_seconds": 66 + }, + { + "language": "scheme", + "status": "Passed", + "queued_duration": 12.492717, + "started_at": "2026-01-19T11:54:10Z", + "updated_at": "2026-01-19T11:55:15Z", + "job_id": 26601, + "duration_seconds": 65 + }, + { + "language": "r", + "status": "Passed", + "queued_duration": 10.305897, + "started_at": "2026-01-19T11:54:07Z", + "updated_at": "2026-01-19T11:55:11Z", + "job_id": 26597, + "duration_seconds": 64 + }, + { + "language": "clojure", + "status": "Passed", + "queued_duration": 13.554132, + "started_at": "2026-01-19T11:54:11Z", + "updated_at": "2026-01-19T11:55:15Z", + "job_id": 26603, + "duration_seconds": 64 + }, + { + "language": "lua", + "status": "Passed", + "queued_duration": 9.164784, + "started_at": "2026-01-19T11:54:06Z", + "updated_at": "2026-01-19T11:55:09Z", + "job_id": 26595, + "duration_seconds": 63 + }, + { + "language": "fortran", + "status": "Passed", + "queued_duration": 78.696102, + "started_at": "2026-01-19T11:55:18Z", + "updated_at": "2026-01-19T11:56:21Z", + "job_id": 26617, + "duration_seconds": 63 + }, + { + "language": "deno", + "status": "Passed", + "queued_duration": 17.233968, + "started_at": "2026-01-19T11:54:14Z", + "updated_at": "2026-01-19T11:55:16Z", + "job_id": 26607, + "duration_seconds": 62 + }, + { + "language": "zig", + "status": "Passed", + "queued_duration": 79.584999, + "started_at": "2026-01-19T11:55:19Z", + "updated_at": "2026-01-19T11:56:20Z", + "job_id": 26619, + "duration_seconds": 61 + }, + { + "language": "tcl", + "status": "Passed", + "queued_duration": 11.908211, + "started_at": "2026-01-19T11:54:09Z", + "updated_at": "2026-01-19T11:55:10Z", + "job_id": 26600, + "duration_seconds": 61 + }, + { + "language": "crystal", + "status": "Passed", + "queued_duration": 14.494458, + "started_at": "2026-01-19T11:54:12Z", + "updated_at": "2026-01-19T11:55:13Z", + "job_id": 26605, + "duration_seconds": 61 + }, + { + "language": "cobol", + "status": "Passed", + "queued_duration": 78.300729, + "started_at": "2026-01-19T11:55:18Z", + "updated_at": "2026-01-19T11:56:19Z", + "job_id": 26616, + "duration_seconds": 61 + }, + { + "language": "groovy", + "status": "Passed", + "queued_duration": 15.033222, + "started_at": "2026-01-19T11:54:13Z", + "updated_at": "2026-01-19T11:55:13Z", + "job_id": 26606, + "duration_seconds": 60 + }, + { + "language": "commonlisp", + "status": "Passed", + "queued_duration": 14.101414, + "started_at": "2026-01-19T11:54:12Z", + "updated_at": "2026-01-19T11:55:12Z", + "job_id": 26604, + "duration_seconds": 60 + }, + { + "language": "bash", + "status": "Passed", + "queued_duration": 9.608039, + "started_at": "2026-01-19T11:54:07Z", + "updated_at": "2026-01-19T11:55:07Z", + "job_id": 26596, + "duration_seconds": 60 + }, + { + "language": "objc", + "status": "Passed", + "queued_duration": 81.357562, + "started_at": "2026-01-19T11:55:21Z", + "updated_at": "2026-01-19T11:56:19Z", + "job_id": 26622, + "duration_seconds": 58 + }, + { + "language": "julia", + "status": "Passed", + "queued_duration": 82.451682, + "started_at": "2026-01-19T11:55:23Z", + "updated_at": "2026-01-19T11:56:21Z", + "job_id": 26624, + "duration_seconds": 58 + }, + { + "language": "haskell", + "status": "Passed", + "queued_duration": 82.941396, + "started_at": "2026-01-19T11:55:23Z", + "updated_at": "2026-01-19T11:56:21Z", + "job_id": 26625, + "duration_seconds": 58 + }, + { + "language": "dart", + "status": "Passed", + "queued_duration": 81.955653, + "started_at": "2026-01-19T11:55:22Z", + "updated_at": "2026-01-19T11:56:20Z", + "job_id": 26623, + "duration_seconds": 58 + }, + { + "language": "fsharp", + "status": "Passed", + "queued_duration": 86.115785, + "started_at": "2026-01-19T11:55:24Z", + "updated_at": "2026-01-19T11:56:20Z", + "job_id": 26627, + "duration_seconds": 56 + }, + { + "language": "csharp", + "status": "Passed", + "queued_duration": 86.665718, + "started_at": "2026-01-19T11:55:25Z", + "updated_at": "2026-01-19T11:56:21Z", + "job_id": 26628, + "duration_seconds": 56 + }, + { + "language": "ocaml", + "status": "Passed", + "queued_duration": 83.294764, + "started_at": "2026-01-19T11:55:24Z", + "updated_at": "2026-01-19T11:56:19Z", + "job_id": 26626, + "duration_seconds": 55 + }, + { + "language": "forth", + "status": "Passed", + "queued_duration": 84.695683, + "started_at": "2026-01-19T11:55:26Z", + "updated_at": "2026-01-19T11:56:21Z", + "job_id": 26630, + "duration_seconds": 55 + }, + { + "language": "prolog", + "status": "Passed", + "queued_duration": 85.102583, + "started_at": "2026-01-19T11:55:26Z", + "updated_at": "2026-01-19T11:56:20Z", + "job_id": 26629, + "duration_seconds": 54 + }, + { + "language": "nim", + "status": "Passed", + "queued_duration": 80.282391, + "started_at": "2026-01-19T11:55:20Z", + "updated_at": "2026-01-19T11:56:12Z", + "job_id": 26620, + "duration_seconds": 52 + }, + { + "language": "powershell", + "status": "Passed", + "queued_duration": 13.072477, + "started_at": "2026-01-19T11:54:11Z", + "updated_at": "2026-01-19T11:55:02Z", + "job_id": 26602, + "duration_seconds": 51 + }, + { + "language": "raku", + "status": "Passed", + "queued_duration": 27.540482, + "started_at": "2026-01-19T11:54:26Z", + "updated_at": "2026-01-19T11:55:16Z", + "job_id": 26609, + "duration_seconds": 50 + }, + { + "language": "awk", + "status": "Passed", + "queued_duration": 18.332367, + "started_at": "2026-01-19T11:54:15Z", + "updated_at": "2026-01-19T11:55:03Z", + "job_id": 26608, + "duration_seconds": 48 + }, + { + "language": "kotlin", + "status": "Passed", + "queued_duration": 77.794386, + "started_at": "2026-01-19T11:55:17Z", + "updated_at": "2026-01-19T11:56:02Z", + "job_id": 26615, + "duration_seconds": 45 + }, + { + "language": "d", + "status": "Passed", + "queued_duration": 79.191204, + "started_at": "2026-01-19T11:55:19Z", + "updated_at": "2026-01-19T11:56:01Z", + "job_id": 26618, + "duration_seconds": 42 + }, + { + "language": "v", + "status": "Passed", + "queued_duration": 80.842087, + "started_at": "2026-01-19T11:55:21Z", + "updated_at": "2026-01-19T11:56:01Z", + "job_id": 26621, + "duration_seconds": 40 + } +] +} diff --git a/reports/4.2.3/perf.md b/reports/4.2.3/perf.md new file mode 100644 index 0000000..d61ec0c --- /dev/null +++ b/reports/4.2.3/perf.md @@ -0,0 +1,145 @@ +# Performance Report: 4.2.3 + +**Generated:** 2026-01-19T11:58:45Z +**Pipeline:** [#11252](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/11252) + +## Summary + +| Metric | Value | +|--------|-------| +| Total Tests | 642 | +| Passed | 642 | +| Failed | 0 | +| Pass Rate | 100.0% | +| Languages | 42 | +| Avg Duration | 63s | +| Slowest | rust (142s) | +| Fastest | v (40s) | + +--- + +## 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:** +- **RUST** and **C** are outliers at 90+ seconds +- Most languages cluster between 20-40 seconds +- Compiled languages (red) tend to be faster than interpreted (blue) +- **V** is the fastest at 40 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 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 (rust, c) + +--- + +## Speed Leaders + +Side-by-side comparison of the 10 slowest and 10 fastest languages. + +![Speed Leaders](chart-speed-leaders.png) + +**Slowest (left):** RUST, C, PYTHON, TYPESCRIPT, JAVASCRIPT +**Fastest (right):** V, D, KOTLIN, AWK, RAKU + +--- + +## 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 - rust and c 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 | +|----------|--------|----------| +| rust | Passed | 142s | +| c | Passed | 107s | +| python | Passed | 78s | +| typescript | Passed | 75s | +| javascript | Passed | 75s | +| ruby | Passed | 74s | +| go | Passed | 74s | +| php | Passed | 70s | +| cpp | Passed | 70s | +| elixir | Passed | 69s | +| erlang | Passed | 68s | +| java | Passed | 67s | +| perl | Passed | 66s | +| scheme | Passed | 65s | +| r | Passed | 64s | +| clojure | Passed | 64s | +| lua | Passed | 63s | +| fortran | Passed | 63s | +| deno | Passed | 62s | +| zig | Passed | 61s | +| tcl | Passed | 61s | +| crystal | Passed | 61s | +| cobol | Passed | 61s | +| groovy | Passed | 60s | +| commonlisp | Passed | 60s | +| bash | Passed | 60s | +| objc | Passed | 58s | +| julia | Passed | 58s | +| haskell | Passed | 58s | +| dart | Passed | 58s | +| fsharp | Passed | 56s | +| csharp | Passed | 56s | +| ocaml | Passed | 55s | +| forth | Passed | 55s | +| prolog | Passed | 54s | +| nim | Passed | 52s | +| powershell | Passed | 51s | +| raku | Passed | 50s | +| awk | Passed | 48s | +| kotlin | Passed | 45s | +| d | Passed | 42s | +| v | Passed | 40s | + +--- + +*Report generated by UN Inception CI pipeline* diff --git a/reports/4.2.4/chart-category-comparison.png b/reports/4.2.4/chart-category-comparison.png new file mode 100644 index 0000000..9efd7d1 Binary files /dev/null and b/reports/4.2.4/chart-category-comparison.png differ diff --git a/reports/4.2.4/chart-dashboard.png b/reports/4.2.4/chart-dashboard.png new file mode 100644 index 0000000..3cf2fd7 Binary files /dev/null and b/reports/4.2.4/chart-dashboard.png differ diff --git a/reports/4.2.4/chart-duration-by-language.png b/reports/4.2.4/chart-duration-by-language.png new file mode 100644 index 0000000..fafeb16 Binary files /dev/null and b/reports/4.2.4/chart-duration-by-language.png differ diff --git a/reports/4.2.4/chart-duration-histogram.png b/reports/4.2.4/chart-duration-histogram.png new file mode 100644 index 0000000..ea261cf Binary files /dev/null and b/reports/4.2.4/chart-duration-histogram.png differ diff --git a/reports/4.2.4/chart-queue-vs-execution.png b/reports/4.2.4/chart-queue-vs-execution.png new file mode 100644 index 0000000..b7dc02e Binary files /dev/null and b/reports/4.2.4/chart-queue-vs-execution.png differ diff --git a/reports/4.2.4/chart-speed-leaders.png b/reports/4.2.4/chart-speed-leaders.png new file mode 100644 index 0000000..d7dfb36 Binary files /dev/null and b/reports/4.2.4/chart-speed-leaders.png differ diff --git a/reports/4.2.4/perf.json b/reports/4.2.4/perf.json new file mode 100644 index 0000000..740b2c1 --- /dev/null +++ b/reports/4.2.4/perf.json @@ -0,0 +1,398 @@ +{ + "tag": "4.2.4", + "generated_at": "2026-01-19T12:02:14Z", + "parent_pipeline_id": 11254, + "child_pipeline_id": 11256, + "summary": { + "total_tests": 682, + "passed_tests": 682, + "failed_tests": 0, + "total_languages": 42, + "passed_languages": 42, + "avg_duration_seconds": 70, + "max_duration_seconds": 110, + "min_duration_seconds": 23, + "slowest_language": "python", + "fastest_language": "c" + }, + "languages": [ + { + "language": "python", + "status": "Passed", + "queued_duration": 1.066003, + "started_at": "2026-01-19T11:57:12Z", + "updated_at": "2026-01-19T11:59:02Z", + "job_id": 26655, + "duration_seconds": 110 + }, + { + "language": "javascript", + "status": "Passed", + "queued_duration": 1.983533, + "started_at": "2026-01-19T11:57:13Z", + "updated_at": "2026-01-19T11:59:02Z", + "job_id": 26656, + "duration_seconds": 109 + }, + { + "language": "elixir", + "status": "Passed", + "queued_duration": 10.932191, + "started_at": "2026-01-19T11:57:24Z", + "updated_at": "2026-01-19T11:59:09Z", + "job_id": 26664, + "duration_seconds": 105 + }, + { + "language": "scheme", + "status": "Passed", + "queued_duration": 15.643189, + "started_at": "2026-01-19T11:57:29Z", + "updated_at": "2026-01-19T11:59:09Z", + "job_id": 26667, + "duration_seconds": 100 + }, + { + "language": "bash", + "status": "Passed", + "queued_duration": 10.653588, + "started_at": "2026-01-19T11:57:22Z", + "updated_at": "2026-01-19T11:59:02Z", + "job_id": 26662, + "duration_seconds": 100 + }, + { + "language": "erlang", + "status": "Passed", + "queued_duration": 11.875167, + "started_at": "2026-01-19T11:57:25Z", + "updated_at": "2026-01-19T11:59:02Z", + "job_id": 26665, + "duration_seconds": 97 + }, + { + "language": "clojure", + "status": "Passed", + "queued_duration": 18.876164, + "started_at": "2026-01-19T11:57:32Z", + "updated_at": "2026-01-19T11:59:09Z", + "job_id": 26669, + "duration_seconds": 97 + }, + { + "language": "tcl", + "status": "Passed", + "queued_duration": 13.286957, + "started_at": "2026-01-19T11:57:26Z", + "updated_at": "2026-01-19T11:59:02Z", + "job_id": 26666, + "duration_seconds": 96 + }, + { + "language": "powershell", + "status": "Passed", + "queued_duration": 17.835934, + "started_at": "2026-01-19T11:57:31Z", + "updated_at": "2026-01-19T11:59:07Z", + "job_id": 26668, + "duration_seconds": 96 + }, + { + "language": "rust", + "status": "Passed", + "queued_duration": 83.780984, + "started_at": "2026-01-19T11:58:38Z", + "updated_at": "2026-01-19T12:00:12Z", + "job_id": 26679, + "duration_seconds": 94 + }, + { + "language": "go", + "status": "Passed", + "queued_duration": 83.420239, + "started_at": "2026-01-19T11:58:38Z", + "updated_at": "2026-01-19T12:00:12Z", + "job_id": 26678, + "duration_seconds": 94 + }, + { + "language": "typescript", + "status": "Passed", + "queued_duration": 3.081411, + "started_at": "2026-01-19T11:57:14Z", + "updated_at": "2026-01-19T11:58:34Z", + "job_id": 26657, + "duration_seconds": 80 + }, + { + "language": "ruby", + "status": "Passed", + "queued_duration": 4.280641, + "started_at": "2026-01-19T11:57:15Z", + "updated_at": "2026-01-19T11:58:34Z", + "job_id": 26658, + "duration_seconds": 79 + }, + { + "language": "perl", + "status": "Passed", + "queued_duration": 5.752368, + "started_at": "2026-01-19T11:57:17Z", + "updated_at": "2026-01-19T11:58:34Z", + "job_id": 26659, + "duration_seconds": 77 + }, + { + "language": "nim", + "status": "Passed", + "queued_duration": 105.163876, + "started_at": "2026-01-19T11:59:01Z", + "updated_at": "2026-01-19T12:00:17Z", + "job_id": 26686, + "duration_seconds": 76 + }, + { + "language": "r", + "status": "Passed", + "queued_duration": 10.590608, + "started_at": "2026-01-19T11:57:23Z", + "updated_at": "2026-01-19T11:58:37Z", + "job_id": 26663, + "duration_seconds": 74 + }, + { + "language": "php", + "status": "Passed", + "queued_duration": 9.758401, + "started_at": "2026-01-19T11:57:21Z", + "updated_at": "2026-01-19T11:58:35Z", + "job_id": 26660, + "duration_seconds": 74 + }, + { + "language": "lua", + "status": "Passed", + "queued_duration": 10.299768, + "started_at": "2026-01-19T11:57:22Z", + "updated_at": "2026-01-19T11:58:33Z", + "job_id": 26661, + "duration_seconds": 71 + }, + { + "language": "objc", + "status": "Passed", + "queued_duration": 106.687178, + "started_at": "2026-01-19T11:59:03Z", + "updated_at": "2026-01-19T12:00:13Z", + "job_id": 26688, + "duration_seconds": 70 + }, + { + "language": "julia", + "status": "Passed", + "queued_duration": 108.45782, + "started_at": "2026-01-19T11:59:05Z", + "updated_at": "2026-01-19T12:00:13Z", + "job_id": 26690, + "duration_seconds": 68 + }, + { + "language": "haskell", + "status": "Passed", + "queued_duration": 108.729615, + "started_at": "2026-01-19T11:59:06Z", + "updated_at": "2026-01-19T12:00:12Z", + "job_id": 26691, + "duration_seconds": 66 + }, + { + "language": "ocaml", + "status": "Passed", + "queued_duration": 109.391015, + "started_at": "2026-01-19T11:59:07Z", + "updated_at": "2026-01-19T12:00:11Z", + "job_id": 26692, + "duration_seconds": 64 + }, + { + "language": "csharp", + "status": "Passed", + "queued_duration": 112.051991, + "started_at": "2026-01-19T11:59:10Z", + "updated_at": "2026-01-19T12:00:13Z", + "job_id": 26694, + "duration_seconds": 63 + }, + { + "language": "fsharp", + "status": "Passed", + "queued_duration": 111.929733, + "started_at": "2026-01-19T11:59:10Z", + "updated_at": "2026-01-19T12:00:12Z", + "job_id": 26693, + "duration_seconds": 62 + }, + { + "language": "prolog", + "status": "Passed", + "queued_duration": 112.203692, + "started_at": "2026-01-19T11:59:11Z", + "updated_at": "2026-01-19T12:00:12Z", + "job_id": 26695, + "duration_seconds": 61 + }, + { + "language": "zig", + "status": "Passed", + "queued_duration": 87.14355, + "started_at": "2026-01-19T11:58:43Z", + "updated_at": "2026-01-19T11:59:43Z", + "job_id": 26685, + "duration_seconds": 60 + }, + { + "language": "crystal", + "status": "Passed", + "queued_duration": 24.211899, + "started_at": "2026-01-19T11:57:38Z", + "updated_at": "2026-01-19T11:58:38Z", + "job_id": 26671, + "duration_seconds": 60 + }, + { + "language": "commonlisp", + "status": "Passed", + "queued_duration": 23.557732, + "started_at": "2026-01-19T11:57:37Z", + "updated_at": "2026-01-19T11:58:37Z", + "job_id": 26670, + "duration_seconds": 60 + }, + { + "language": "groovy", + "status": "Passed", + "queued_duration": 25.052612, + "started_at": "2026-01-19T11:57:39Z", + "updated_at": "2026-01-19T11:58:38Z", + "job_id": 26672, + "duration_seconds": 59 + }, + { + "language": "dart", + "status": "Passed", + "queued_duration": 107.61224, + "started_at": "2026-01-19T11:59:04Z", + "updated_at": "2026-01-19T12:00:02Z", + "job_id": 26689, + "duration_seconds": 58 + }, + { + "language": "java", + "status": "Passed", + "queued_duration": 84.459906, + "started_at": "2026-01-19T11:58:39Z", + "updated_at": "2026-01-19T11:59:36Z", + "job_id": 26680, + "duration_seconds": 57 + }, + { + "language": "deno", + "status": "Passed", + "queued_duration": 30.939493, + "started_at": "2026-01-19T11:57:41Z", + "updated_at": "2026-01-19T11:58:37Z", + "job_id": 26673, + "duration_seconds": 56 + }, + { + "language": "kotlin", + "status": "Passed", + "queued_duration": 85.025138, + "started_at": "2026-01-19T11:58:40Z", + "updated_at": "2026-01-19T11:59:34Z", + "job_id": 26681, + "duration_seconds": 54 + }, + { + "language": "fortran", + "status": "Passed", + "queued_duration": 86.29317, + "started_at": "2026-01-19T11:58:41Z", + "updated_at": "2026-01-19T11:59:32Z", + "job_id": 26683, + "duration_seconds": 51 + }, + { + "language": "awk", + "status": "Passed", + "queued_duration": 30.55611, + "started_at": "2026-01-19T11:57:45Z", + "updated_at": "2026-01-19T11:58:36Z", + "job_id": 26674, + "duration_seconds": 51 + }, + { + "language": "v", + "status": "Passed", + "queued_duration": 106.008484, + "started_at": "2026-01-19T11:59:02Z", + "updated_at": "2026-01-19T11:59:51Z", + "job_id": 26687, + "duration_seconds": 49 + }, + { + "language": "forth", + "status": "Passed", + "queued_duration": 123.191673, + "started_at": "2026-01-19T11:59:22Z", + "updated_at": "2026-01-19T12:00:11Z", + "job_id": 26696, + "duration_seconds": 49 + }, + { + "language": "cpp", + "status": "Passed", + "queued_duration": 4.043448, + "started_at": "2026-01-19T12:00:14Z", + "updated_at": "2026-01-19T12:01:03Z", + "job_id": 26699, + "duration_seconds": 49 + }, + { + "language": "raku", + "status": "Passed", + "queued_duration": 1.095893, + "started_at": "2026-01-19T11:59:43Z", + "updated_at": "2026-01-19T12:00:28Z", + "job_id": 26697, + "duration_seconds": 45 + }, + { + "language": "cobol", + "status": "Passed", + "queued_duration": 85.56591, + "started_at": "2026-01-19T11:58:41Z", + "updated_at": "2026-01-19T11:59:24Z", + "job_id": 26682, + "duration_seconds": 43 + }, + { + "language": "d", + "status": "Passed", + "queued_duration": 86.577891, + "started_at": "2026-01-19T11:58:42Z", + "updated_at": "2026-01-19T11:59:22Z", + "job_id": 26684, + "duration_seconds": 40 + }, + { + "language": "c", + "status": "Passed", + "queued_duration": 3.106438, + "started_at": "2026-01-19T12:00:02Z", + "updated_at": "2026-01-19T12:00:25Z", + "job_id": 26698, + "duration_seconds": 23 + } +] +} diff --git a/reports/4.2.4/perf.md b/reports/4.2.4/perf.md new file mode 100644 index 0000000..91c3945 --- /dev/null +++ b/reports/4.2.4/perf.md @@ -0,0 +1,145 @@ +# Performance Report: 4.2.4 + +**Generated:** 2026-01-19T12:02:14Z +**Pipeline:** [#11256](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/11256) + +## Summary + +| Metric | Value | +|--------|-------| +| Total Tests | 682 | +| Passed | 682 | +| Failed | 0 | +| Pass Rate | 100.0% | +| Languages | 42 | +| Avg Duration | 70s | +| Slowest | python (110s) | +| Fastest | c (23s) | + +--- + +## 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:** +- **PYTHON** and **JAVASCRIPT** are outliers at 90+ seconds +- Most languages cluster between 20-40 seconds +- Compiled languages (red) tend to be faster than interpreted (blue) +- **C** is the fastest at 23 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 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 (python, javascript) + +--- + +## Speed Leaders + +Side-by-side comparison of the 10 slowest and 10 fastest languages. + +![Speed Leaders](chart-speed-leaders.png) + +**Slowest (left):** PYTHON, JAVASCRIPT, ELIXIR, SCHEME, BASH +**Fastest (right):** C, D, COBOL, RAKU, CPP + +--- + +## 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 - python 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 | +|----------|--------|----------| +| python | Passed | 110s | +| javascript | Passed | 109s | +| elixir | Passed | 105s | +| scheme | Passed | 100s | +| bash | Passed | 100s | +| erlang | Passed | 97s | +| clojure | Passed | 97s | +| tcl | Passed | 96s | +| powershell | Passed | 96s | +| rust | Passed | 94s | +| go | Passed | 94s | +| typescript | Passed | 80s | +| ruby | Passed | 79s | +| perl | Passed | 77s | +| nim | Passed | 76s | +| r | Passed | 74s | +| php | Passed | 74s | +| lua | Passed | 71s | +| objc | Passed | 70s | +| julia | Passed | 68s | +| haskell | Passed | 66s | +| ocaml | Passed | 64s | +| csharp | Passed | 63s | +| fsharp | Passed | 62s | +| prolog | Passed | 61s | +| zig | Passed | 60s | +| crystal | Passed | 60s | +| commonlisp | Passed | 60s | +| groovy | Passed | 59s | +| dart | Passed | 58s | +| java | Passed | 57s | +| deno | Passed | 56s | +| kotlin | Passed | 54s | +| fortran | Passed | 51s | +| awk | Passed | 51s | +| v | Passed | 49s | +| forth | Passed | 49s | +| cpp | Passed | 49s | +| raku | Passed | 45s | +| cobol | Passed | 43s | +| d | Passed | 40s | +| c | Passed | 23s | + +--- + +*Report generated by UN Inception CI pipeline* diff --git a/reports/4.2.5/chart-category-comparison.png b/reports/4.2.5/chart-category-comparison.png new file mode 100644 index 0000000..13718f3 Binary files /dev/null and b/reports/4.2.5/chart-category-comparison.png differ diff --git a/reports/4.2.5/chart-dashboard.png b/reports/4.2.5/chart-dashboard.png new file mode 100644 index 0000000..65377e2 Binary files /dev/null and b/reports/4.2.5/chart-dashboard.png differ diff --git a/reports/4.2.5/chart-duration-by-language.png b/reports/4.2.5/chart-duration-by-language.png new file mode 100644 index 0000000..38510dc Binary files /dev/null and b/reports/4.2.5/chart-duration-by-language.png differ diff --git a/reports/4.2.5/chart-duration-histogram.png b/reports/4.2.5/chart-duration-histogram.png new file mode 100644 index 0000000..a9e32b8 Binary files /dev/null and b/reports/4.2.5/chart-duration-histogram.png differ diff --git a/reports/4.2.5/chart-queue-vs-execution.png b/reports/4.2.5/chart-queue-vs-execution.png new file mode 100644 index 0000000..cb36e9d Binary files /dev/null and b/reports/4.2.5/chart-queue-vs-execution.png differ diff --git a/reports/4.2.5/chart-speed-leaders.png b/reports/4.2.5/chart-speed-leaders.png new file mode 100644 index 0000000..f87d958 Binary files /dev/null and b/reports/4.2.5/chart-speed-leaders.png differ diff --git a/reports/4.2.5/perf.json b/reports/4.2.5/perf.json new file mode 100644 index 0000000..93d1d43 --- /dev/null +++ b/reports/4.2.5/perf.json @@ -0,0 +1,398 @@ +{ + "tag": "4.2.5", + "generated_at": "2026-01-19T19:10:23Z", + "parent_pipeline_id": 11331, + "child_pipeline_id": 11336, + "summary": { + "total_tests": 658, + "passed_tests": 658, + "failed_tests": 0, + "total_languages": 42, + "passed_languages": 42, + "avg_duration_seconds": 67, + "max_duration_seconds": 114, + "min_duration_seconds": 44, + "slowest_language": "v", + "fastest_language": "erlang" + }, + "languages": [ + { + "language": "v", + "status": "Passed", + "queued_duration": 112.851707, + "started_at": "2026-01-19T19:07:04Z", + "updated_at": "2026-01-19T19:08:58Z", + "job_id": 26979, + "duration_seconds": 114 + }, + { + "language": "haskell", + "status": "Passed", + "queued_duration": 134.561469, + "started_at": "2026-01-19T19:07:26Z", + "updated_at": "2026-01-19T19:09:12Z", + "job_id": 26983, + "duration_seconds": 106 + }, + { + "language": "scheme", + "status": "Passed", + "queued_duration": 43.239826, + "started_at": "2026-01-19T19:05:52Z", + "updated_at": "2026-01-19T19:07:34Z", + "job_id": 26959, + "duration_seconds": 102 + }, + { + "language": "ocaml", + "status": "Passed", + "queued_duration": 135.652973, + "started_at": "2026-01-19T19:07:28Z", + "updated_at": "2026-01-19T19:09:02Z", + "job_id": 26984, + "duration_seconds": 94 + }, + { + "language": "powershell", + "status": "Passed", + "queued_duration": 58.688364, + "started_at": "2026-01-19T19:06:08Z", + "updated_at": "2026-01-19T19:07:39Z", + "job_id": 26960, + "duration_seconds": 91 + }, + { + "language": "julia", + "status": "Passed", + "queued_duration": 130.883769, + "started_at": "2026-01-19T19:07:23Z", + "updated_at": "2026-01-19T19:08:51Z", + "job_id": 26982, + "duration_seconds": 88 + }, + { + "language": "crystal", + "status": "Passed", + "queued_duration": 65.688192, + "started_at": "2026-01-19T19:06:15Z", + "updated_at": "2026-01-19T19:07:43Z", + "job_id": 26963, + "duration_seconds": 88 + }, + { + "language": "fsharp", + "status": "Passed", + "queued_duration": 136.243719, + "started_at": "2026-01-19T19:07:28Z", + "updated_at": "2026-01-19T19:08:53Z", + "job_id": 26985, + "duration_seconds": 85 + }, + { + "language": "forth", + "status": "Passed", + "queued_duration": 138.21351, + "started_at": "2026-01-19T19:07:32Z", + "updated_at": "2026-01-19T19:08:52Z", + "job_id": 26988, + "duration_seconds": 80 + }, + { + "language": "objc", + "status": "Passed", + "queued_duration": 116.853074, + "started_at": "2026-01-19T19:07:08Z", + "updated_at": "2026-01-19T19:08:27Z", + "job_id": 26980, + "duration_seconds": 79 + }, + { + "language": "clojure", + "status": "Passed", + "queued_duration": 60.216959, + "started_at": "2026-01-19T19:06:10Z", + "updated_at": "2026-01-19T19:07:25Z", + "job_id": 26961, + "duration_seconds": 75 + }, + { + "language": "prolog", + "status": "Passed", + "queued_duration": 137.68259, + "started_at": "2026-01-19T19:07:31Z", + "updated_at": "2026-01-19T19:08:45Z", + "job_id": 26987, + "duration_seconds": 74 + }, + { + "language": "groovy", + "status": "Passed", + "queued_duration": 67.476035, + "started_at": "2026-01-19T19:06:17Z", + "updated_at": "2026-01-19T19:07:27Z", + "job_id": 26964, + "duration_seconds": 70 + }, + { + "language": "commonlisp", + "status": "Passed", + "queued_duration": 63.159744, + "started_at": "2026-01-19T19:06:13Z", + "updated_at": "2026-01-19T19:07:23Z", + "job_id": 26962, + "duration_seconds": 70 + }, + { + "language": "dart", + "status": "Passed", + "queued_duration": 122.607947, + "started_at": "2026-01-19T19:07:14Z", + "updated_at": "2026-01-19T19:08:22Z", + "job_id": 26981, + "duration_seconds": 68 + }, + { + "language": "c", + "status": "Passed", + "queued_duration": 68.009358, + "started_at": "2026-01-19T19:06:20Z", + "updated_at": "2026-01-19T19:07:28Z", + "job_id": 26968, + "duration_seconds": 68 + }, + { + "language": "go", + "status": "Passed", + "queued_duration": 69.591526, + "started_at": "2026-01-19T19:06:22Z", + "updated_at": "2026-01-19T19:07:27Z", + "job_id": 26970, + "duration_seconds": 65 + }, + { + "language": "cpp", + "status": "Passed", + "queued_duration": 68.728312, + "started_at": "2026-01-19T19:06:21Z", + "updated_at": "2026-01-19T19:07:26Z", + "job_id": 26969, + "duration_seconds": 65 + }, + { + "language": "rust", + "status": "Passed", + "queued_duration": 70.138932, + "started_at": "2026-01-19T19:06:23Z", + "updated_at": "2026-01-19T19:07:27Z", + "job_id": 26971, + "duration_seconds": 64 + }, + { + "language": "csharp", + "status": "Passed", + "queued_duration": 138.075521, + "started_at": "2026-01-19T19:07:30Z", + "updated_at": "2026-01-19T19:08:33Z", + "job_id": 26986, + "duration_seconds": 63 + }, + { + "language": "java", + "status": "Passed", + "queued_duration": 70.974228, + "started_at": "2026-01-19T19:06:24Z", + "updated_at": "2026-01-19T19:07:26Z", + "job_id": 26972, + "duration_seconds": 62 + }, + { + "language": "python", + "status": "Passed", + "queued_duration": 13.209672, + "started_at": "2026-01-19T19:05:16Z", + "updated_at": "2026-01-19T19:06:17Z", + "job_id": 26947, + "duration_seconds": 61 + }, + { + "language": "kotlin", + "status": "Passed", + "queued_duration": 74.536639, + "started_at": "2026-01-19T19:06:25Z", + "updated_at": "2026-01-19T19:07:26Z", + "job_id": 26973, + "duration_seconds": 61 + }, + { + "language": "cobol", + "status": "Passed", + "queued_duration": 75.13891, + "started_at": "2026-01-19T19:06:26Z", + "updated_at": "2026-01-19T19:07:27Z", + "job_id": 26974, + "duration_seconds": 61 + }, + { + "language": "ruby", + "status": "Passed", + "queued_duration": 13.364693, + "started_at": "2026-01-19T19:05:18Z", + "updated_at": "2026-01-19T19:06:18Z", + "job_id": 26950, + "duration_seconds": 60 + }, + { + "language": "javascript", + "status": "Passed", + "queued_duration": 12.896362, + "started_at": "2026-01-19T19:05:17Z", + "updated_at": "2026-01-19T19:06:17Z", + "job_id": 26948, + "duration_seconds": 60 + }, + { + "language": "zig", + "status": "Passed", + "queued_duration": 76.512895, + "started_at": "2026-01-19T19:06:27Z", + "updated_at": "2026-01-19T19:07:26Z", + "job_id": 26977, + "duration_seconds": 59 + }, + { + "language": "typescript", + "status": "Passed", + "queued_duration": 13.163517, + "started_at": "2026-01-19T19:05:17Z", + "updated_at": "2026-01-19T19:06:16Z", + "job_id": 26949, + "duration_seconds": 59 + }, + { + "language": "nim", + "status": "Passed", + "queued_duration": 77.03571, + "started_at": "2026-01-19T19:06:28Z", + "updated_at": "2026-01-19T19:07:26Z", + "job_id": 26978, + "duration_seconds": 58 + }, + { + "language": "fortran", + "status": "Passed", + "queued_duration": 75.673614, + "started_at": "2026-01-19T19:06:26Z", + "updated_at": "2026-01-19T19:07:23Z", + "job_id": 26975, + "duration_seconds": 57 + }, + { + "language": "php", + "status": "Passed", + "queued_duration": 14.189554, + "started_at": "2026-01-19T19:05:19Z", + "updated_at": "2026-01-19T19:06:14Z", + "job_id": 26952, + "duration_seconds": 55 + }, + { + "language": "elixir", + "status": "Passed", + "queued_duration": 15.896723, + "started_at": "2026-01-19T19:05:23Z", + "updated_at": "2026-01-19T19:06:18Z", + "job_id": 26956, + "duration_seconds": 55 + }, + { + "language": "d", + "status": "Passed", + "queued_duration": 76.132485, + "started_at": "2026-01-19T19:06:27Z", + "updated_at": "2026-01-19T19:07:22Z", + "job_id": 26976, + "duration_seconds": 55 + }, + { + "language": "raku", + "status": "Passed", + "queued_duration": 67.385131, + "started_at": "2026-01-19T19:06:20Z", + "updated_at": "2026-01-19T19:07:14Z", + "job_id": 26967, + "duration_seconds": 54 + }, + { + "language": "perl", + "status": "Passed", + "queued_duration": 13.887735, + "started_at": "2026-01-19T19:05:19Z", + "updated_at": "2026-01-19T19:06:12Z", + "job_id": 26951, + "duration_seconds": 53 + }, + { + "language": "r", + "status": "Passed", + "queued_duration": 15.845666, + "started_at": "2026-01-19T19:05:23Z", + "updated_at": "2026-01-19T19:06:15Z", + "job_id": 26955, + "duration_seconds": 52 + }, + { + "language": "lua", + "status": "Passed", + "queued_duration": 14.579995, + "started_at": "2026-01-19T19:05:20Z", + "updated_at": "2026-01-19T19:06:12Z", + "job_id": 26953, + "duration_seconds": 52 + }, + { + "language": "tcl", + "status": "Passed", + "queued_duration": 16.026982, + "started_at": "2026-01-19T19:05:24Z", + "updated_at": "2026-01-19T19:06:15Z", + "job_id": 26958, + "duration_seconds": 51 + }, + { + "language": "deno", + "status": "Passed", + "queued_duration": 68.534767, + "started_at": "2026-01-19T19:06:18Z", + "updated_at": "2026-01-19T19:07:08Z", + "job_id": 26965, + "duration_seconds": 50 + }, + { + "language": "bash", + "status": "Passed", + "queued_duration": 15.187889, + "started_at": "2026-01-19T19:05:21Z", + "updated_at": "2026-01-19T19:06:08Z", + "job_id": 26954, + "duration_seconds": 47 + }, + { + "language": "awk", + "status": "Passed", + "queued_duration": 69.048071, + "started_at": "2026-01-19T19:06:19Z", + "updated_at": "2026-01-19T19:07:05Z", + "job_id": 26966, + "duration_seconds": 46 + }, + { + "language": "erlang", + "status": "Passed", + "queued_duration": 15.825814, + "started_at": "2026-01-19T19:05:24Z", + "updated_at": "2026-01-19T19:06:08Z", + "job_id": 26957, + "duration_seconds": 44 + } +] +} diff --git a/reports/4.2.5/perf.md b/reports/4.2.5/perf.md new file mode 100644 index 0000000..c4679d2 --- /dev/null +++ b/reports/4.2.5/perf.md @@ -0,0 +1,145 @@ +# Performance Report: 4.2.5 + +**Generated:** 2026-01-19T19:10:23Z +**Pipeline:** [#11336](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/11336) + +## Summary + +| Metric | Value | +|--------|-------| +| Total Tests | 658 | +| Passed | 658 | +| Failed | 0 | +| Pass Rate | 100.0% | +| Languages | 42 | +| Avg Duration | 67s | +| Slowest | v (114s) | +| Fastest | erlang (44s) | + +--- + +## 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:** +- **V** and **HASKELL** 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 44 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 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 (v, haskell) + +--- + +## Speed Leaders + +Side-by-side comparison of the 10 slowest and 10 fastest languages. + +![Speed Leaders](chart-speed-leaders.png) + +**Slowest (left):** V, HASKELL, SCHEME, OCAML, POWERSHELL +**Fastest (right):** ERLANG, AWK, BASH, DENO, 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 - v and haskell 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 | +|----------|--------|----------| +| v | Passed | 114s | +| haskell | Passed | 106s | +| scheme | Passed | 102s | +| ocaml | Passed | 94s | +| powershell | Passed | 91s | +| julia | Passed | 88s | +| crystal | Passed | 88s | +| fsharp | Passed | 85s | +| forth | Passed | 80s | +| objc | Passed | 79s | +| clojure | Passed | 75s | +| prolog | Passed | 74s | +| groovy | Passed | 70s | +| commonlisp | Passed | 70s | +| dart | Passed | 68s | +| c | Passed | 68s | +| go | Passed | 65s | +| cpp | Passed | 65s | +| rust | Passed | 64s | +| csharp | Passed | 63s | +| java | Passed | 62s | +| python | Passed | 61s | +| kotlin | Passed | 61s | +| cobol | Passed | 61s | +| ruby | Passed | 60s | +| javascript | Passed | 60s | +| zig | Passed | 59s | +| typescript | Passed | 59s | +| nim | Passed | 58s | +| fortran | Passed | 57s | +| php | Passed | 55s | +| elixir | Passed | 55s | +| d | Passed | 55s | +| raku | Passed | 54s | +| perl | Passed | 53s | +| r | Passed | 52s | +| lua | Passed | 52s | +| tcl | Passed | 51s | +| deno | Passed | 50s | +| bash | Passed | 47s | +| awk | Passed | 46s | +| erlang | Passed | 44s | + +--- + +*Report generated by UN Inception CI pipeline* diff --git a/reports/4.2.6/chart-category-comparison.png b/reports/4.2.6/chart-category-comparison.png new file mode 100644 index 0000000..85c2cda Binary files /dev/null and b/reports/4.2.6/chart-category-comparison.png differ diff --git a/reports/4.2.6/chart-dashboard.png b/reports/4.2.6/chart-dashboard.png new file mode 100644 index 0000000..836e6c4 Binary files /dev/null and b/reports/4.2.6/chart-dashboard.png differ diff --git a/reports/4.2.6/chart-duration-by-language.png b/reports/4.2.6/chart-duration-by-language.png new file mode 100644 index 0000000..7439b70 Binary files /dev/null and b/reports/4.2.6/chart-duration-by-language.png differ diff --git a/reports/4.2.6/chart-duration-histogram.png b/reports/4.2.6/chart-duration-histogram.png new file mode 100644 index 0000000..c49c3d4 Binary files /dev/null and b/reports/4.2.6/chart-duration-histogram.png differ diff --git a/reports/4.2.6/chart-queue-vs-execution.png b/reports/4.2.6/chart-queue-vs-execution.png new file mode 100644 index 0000000..ab60ccf Binary files /dev/null and b/reports/4.2.6/chart-queue-vs-execution.png differ diff --git a/reports/4.2.6/chart-speed-leaders.png b/reports/4.2.6/chart-speed-leaders.png new file mode 100644 index 0000000..dc307ba Binary files /dev/null and b/reports/4.2.6/chart-speed-leaders.png differ diff --git a/reports/4.2.6/perf.json b/reports/4.2.6/perf.json new file mode 100644 index 0000000..6985290 --- /dev/null +++ b/reports/4.2.6/perf.json @@ -0,0 +1,398 @@ +{ + "tag": "4.2.6", + "generated_at": "2026-01-19T20:22:16Z", + "parent_pipeline_id": 11361, + "child_pipeline_id": 11363, + "summary": { + "total_tests": 642, + "passed_tests": 642, + "failed_tests": 0, + "total_languages": 42, + "passed_languages": 42, + "avg_duration_seconds": 54, + "max_duration_seconds": 128, + "min_duration_seconds": 23, + "slowest_language": "haskell", + "fastest_language": "awk" + }, + "languages": [ + { + "language": "haskell", + "status": "Passed", + "queued_duration": 57.927747, + "started_at": "2026-01-19T20:18:56Z", + "updated_at": "2026-01-19T20:21:04Z", + "job_id": 27246, + "duration_seconds": 128 + }, + { + "language": "go", + "status": "Passed", + "queued_duration": 42.595107, + "started_at": "2026-01-19T20:18:39Z", + "updated_at": "2026-01-19T20:20:26Z", + "job_id": 27233, + "duration_seconds": 107 + }, + { + "language": "cpp", + "status": "Passed", + "queued_duration": 41.801062, + "started_at": "2026-01-19T20:18:38Z", + "updated_at": "2026-01-19T20:20:11Z", + "job_id": 27232, + "duration_seconds": 93 + }, + { + "language": "rust", + "status": "Passed", + "queued_duration": 43.071671, + "started_at": "2026-01-19T20:18:40Z", + "updated_at": "2026-01-19T20:20:11Z", + "job_id": 27234, + "duration_seconds": 91 + }, + { + "language": "forth", + "status": "Passed", + "queued_duration": 110.897751, + "started_at": "2026-01-19T20:19:49Z", + "updated_at": "2026-01-19T20:21:04Z", + "job_id": 27251, + "duration_seconds": 75 + }, + { + "language": "c", + "status": "Passed", + "queued_duration": 38.945258, + "started_at": "2026-01-19T20:18:35Z", + "updated_at": "2026-01-19T20:19:49Z", + "job_id": 27231, + "duration_seconds": 74 + }, + { + "language": "java", + "status": "Passed", + "queued_duration": 43.553539, + "started_at": "2026-01-19T20:18:40Z", + "updated_at": "2026-01-19T20:19:50Z", + "job_id": 27235, + "duration_seconds": 70 + }, + { + "language": "kotlin", + "status": "Passed", + "queued_duration": 44.384108, + "started_at": "2026-01-19T20:18:41Z", + "updated_at": "2026-01-19T20:19:50Z", + "job_id": 27236, + "duration_seconds": 69 + }, + { + "language": "cobol", + "status": "Passed", + "queued_duration": 48.393788, + "started_at": "2026-01-19T20:18:45Z", + "updated_at": "2026-01-19T20:19:51Z", + "job_id": 27237, + "duration_seconds": 66 + }, + { + "language": "fortran", + "status": "Passed", + "queued_duration": 50.644676, + "started_at": "2026-01-19T20:18:48Z", + "updated_at": "2026-01-19T20:19:50Z", + "job_id": 27238, + "duration_seconds": 62 + }, + { + "language": "csharp", + "status": "Passed", + "queued_duration": 59.39955, + "started_at": "2026-01-19T20:18:58Z", + "updated_at": "2026-01-19T20:19:59Z", + "job_id": 27249, + "duration_seconds": 61 + }, + { + "language": "zig", + "status": "Passed", + "queued_duration": 54.806684, + "started_at": "2026-01-19T20:18:52Z", + "updated_at": "2026-01-19T20:19:51Z", + "job_id": 27240, + "duration_seconds": 59 + }, + { + "language": "prolog", + "status": "Passed", + "queued_duration": 59.831917, + "started_at": "2026-01-19T20:18:58Z", + "updated_at": "2026-01-19T20:19:57Z", + "job_id": 27250, + "duration_seconds": 59 + }, + { + "language": "v", + "status": "Passed", + "queued_duration": 55.777392, + "started_at": "2026-01-19T20:18:53Z", + "updated_at": "2026-01-19T20:19:51Z", + "job_id": 27242, + "duration_seconds": 58 + }, + { + "language": "nim", + "status": "Passed", + "queued_duration": 55.314905, + "started_at": "2026-01-19T20:18:53Z", + "updated_at": "2026-01-19T20:19:51Z", + "job_id": 27241, + "duration_seconds": 58 + }, + { + "language": "d", + "status": "Passed", + "queued_duration": 54.185143, + "started_at": "2026-01-19T20:18:51Z", + "updated_at": "2026-01-19T20:19:49Z", + "job_id": 27239, + "duration_seconds": 58 + }, + { + "language": "objc", + "status": "Passed", + "queued_duration": 56.190438, + "started_at": "2026-01-19T20:18:54Z", + "updated_at": "2026-01-19T20:19:50Z", + "job_id": 27243, + "duration_seconds": 56 + }, + { + "language": "dart", + "status": "Passed", + "queued_duration": 56.747277, + "started_at": "2026-01-19T20:18:54Z", + "updated_at": "2026-01-19T20:19:50Z", + "job_id": 27244, + "duration_seconds": 56 + }, + { + "language": "julia", + "status": "Passed", + "queued_duration": 57.479759, + "started_at": "2026-01-19T20:18:55Z", + "updated_at": "2026-01-19T20:19:49Z", + "job_id": 27245, + "duration_seconds": 54 + }, + { + "language": "typescript", + "status": "Passed", + "queued_duration": 3.646439, + "started_at": "2026-01-19T20:17:58Z", + "updated_at": "2026-01-19T20:18:51Z", + "job_id": 27212, + "duration_seconds": 53 + }, + { + "language": "ocaml", + "status": "Passed", + "queued_duration": 58.422061, + "started_at": "2026-01-19T20:18:56Z", + "updated_at": "2026-01-19T20:19:49Z", + "job_id": 27247, + "duration_seconds": 53 + }, + { + "language": "python", + "status": "Passed", + "queued_duration": 2.222805, + "started_at": "2026-01-19T20:17:56Z", + "updated_at": "2026-01-19T20:18:48Z", + "job_id": 27210, + "duration_seconds": 52 + }, + { + "language": "fsharp", + "status": "Passed", + "queued_duration": 58.949975, + "started_at": "2026-01-19T20:18:57Z", + "updated_at": "2026-01-19T20:19:49Z", + "job_id": 27248, + "duration_seconds": 52 + }, + { + "language": "javascript", + "status": "Passed", + "queued_duration": 2.898278, + "started_at": "2026-01-19T20:17:57Z", + "updated_at": "2026-01-19T20:18:47Z", + "job_id": 27211, + "duration_seconds": 50 + }, + { + "language": "ruby", + "status": "Passed", + "queued_duration": 4.776109, + "started_at": "2026-01-19T20:17:59Z", + "updated_at": "2026-01-19T20:18:47Z", + "job_id": 27213, + "duration_seconds": 48 + }, + { + "language": "php", + "status": "Passed", + "queued_duration": 7.186457, + "started_at": "2026-01-19T20:18:02Z", + "updated_at": "2026-01-19T20:18:50Z", + "job_id": 27215, + "duration_seconds": 48 + }, + { + "language": "r", + "status": "Passed", + "queued_duration": 10.194032, + "started_at": "2026-01-19T20:18:05Z", + "updated_at": "2026-01-19T20:18:52Z", + "job_id": 27218, + "duration_seconds": 47 + }, + { + "language": "perl", + "status": "Passed", + "queued_duration": 6.159775, + "started_at": "2026-01-19T20:18:01Z", + "updated_at": "2026-01-19T20:18:45Z", + "job_id": 27214, + "duration_seconds": 44 + }, + { + "language": "tcl", + "status": "Passed", + "queued_duration": 12.293658, + "started_at": "2026-01-19T20:18:08Z", + "updated_at": "2026-01-19T20:18:50Z", + "job_id": 27221, + "duration_seconds": 42 + }, + { + "language": "scheme", + "status": "Passed", + "queued_duration": 12.818309, + "started_at": "2026-01-19T20:18:08Z", + "updated_at": "2026-01-19T20:18:50Z", + "job_id": 27222, + "duration_seconds": 42 + }, + { + "language": "elixir", + "status": "Passed", + "queued_duration": 11.287902, + "started_at": "2026-01-19T20:18:06Z", + "updated_at": "2026-01-19T20:18:47Z", + "job_id": 27219, + "duration_seconds": 41 + }, + { + "language": "groovy", + "status": "Passed", + "queued_duration": 15.729057, + "started_at": "2026-01-19T20:18:12Z", + "updated_at": "2026-01-19T20:18:52Z", + "job_id": 27227, + "duration_seconds": 40 + }, + { + "language": "clojure", + "status": "Passed", + "queued_duration": 14.149206, + "started_at": "2026-01-19T20:18:10Z", + "updated_at": "2026-01-19T20:18:50Z", + "job_id": 27224, + "duration_seconds": 40 + }, + { + "language": "lua", + "status": "Passed", + "queued_duration": 7.964979, + "started_at": "2026-01-19T20:18:03Z", + "updated_at": "2026-01-19T20:18:39Z", + "job_id": 27216, + "duration_seconds": 36 + }, + { + "language": "commonlisp", + "status": "Passed", + "queued_duration": 14.698995, + "started_at": "2026-01-19T20:18:10Z", + "updated_at": "2026-01-19T20:18:45Z", + "job_id": 27225, + "duration_seconds": 35 + }, + { + "language": "bash", + "status": "Passed", + "queued_duration": 9.03205, + "started_at": "2026-01-19T20:18:04Z", + "updated_at": "2026-01-19T20:18:39Z", + "job_id": 27217, + "duration_seconds": 35 + }, + { + "language": "erlang", + "status": "Passed", + "queued_duration": 11.926415, + "started_at": "2026-01-19T20:18:07Z", + "updated_at": "2026-01-19T20:18:41Z", + "job_id": 27220, + "duration_seconds": 34 + }, + { + "language": "deno", + "status": "Passed", + "queued_duration": 16.358662, + "started_at": "2026-01-19T20:18:13Z", + "updated_at": "2026-01-19T20:18:47Z", + "job_id": 27228, + "duration_seconds": 34 + }, + { + "language": "raku", + "status": "Passed", + "queued_duration": 17.546453, + "started_at": "2026-01-19T20:18:14Z", + "updated_at": "2026-01-19T20:18:47Z", + "job_id": 27230, + "duration_seconds": 33 + }, + { + "language": "crystal", + "status": "Passed", + "queued_duration": 15.276626, + "started_at": "2026-01-19T20:18:11Z", + "updated_at": "2026-01-19T20:18:39Z", + "job_id": 27226, + "duration_seconds": 28 + }, + { + "language": "powershell", + "status": "Passed", + "queued_duration": 13.352018, + "started_at": "2026-01-19T20:18:09Z", + "updated_at": "2026-01-19T20:18:35Z", + "job_id": 27223, + "duration_seconds": 26 + }, + { + "language": "awk", + "status": "Passed", + "queued_duration": 17.13305, + "started_at": "2026-01-19T20:18:13Z", + "updated_at": "2026-01-19T20:18:36Z", + "job_id": 27229, + "duration_seconds": 23 + } +] +} diff --git a/reports/4.2.6/perf.md b/reports/4.2.6/perf.md new file mode 100644 index 0000000..7aab6ca --- /dev/null +++ b/reports/4.2.6/perf.md @@ -0,0 +1,145 @@ +# Performance Report: 4.2.6 + +**Generated:** 2026-01-19T20:22:16Z +**Pipeline:** [#11363](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/11363) + +## Summary + +| Metric | Value | +|--------|-------| +| Total Tests | 642 | +| Passed | 642 | +| Failed | 0 | +| Pass Rate | 100.0% | +| Languages | 42 | +| Avg Duration | 54s | +| Slowest | haskell (128s) | +| Fastest | awk (23s) | + +--- + +## 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:** +- **HASKELL** and **GO** are outliers at 90+ seconds +- Most languages cluster between 20-40 seconds +- Compiled languages (red) tend to be faster than interpreted (blue) +- **AWK** is the fastest at 23 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 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 (haskell, go) + +--- + +## Speed Leaders + +Side-by-side comparison of the 10 slowest and 10 fastest languages. + +![Speed Leaders](chart-speed-leaders.png) + +**Slowest (left):** HASKELL, GO, CPP, RUST, FORTH +**Fastest (right):** AWK, POWERSHELL, CRYSTAL, RAKU, DENO + +--- + +## 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 - haskell and go 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 | +|----------|--------|----------| +| haskell | Passed | 128s | +| go | Passed | 107s | +| cpp | Passed | 93s | +| rust | Passed | 91s | +| forth | Passed | 75s | +| c | Passed | 74s | +| java | Passed | 70s | +| kotlin | Passed | 69s | +| cobol | Passed | 66s | +| fortran | Passed | 62s | +| csharp | Passed | 61s | +| zig | Passed | 59s | +| prolog | Passed | 59s | +| v | Passed | 58s | +| nim | Passed | 58s | +| d | Passed | 58s | +| objc | Passed | 56s | +| dart | Passed | 56s | +| julia | Passed | 54s | +| typescript | Passed | 53s | +| ocaml | Passed | 53s | +| python | Passed | 52s | +| fsharp | Passed | 52s | +| javascript | Passed | 50s | +| ruby | Passed | 48s | +| php | Passed | 48s | +| r | Passed | 47s | +| perl | Passed | 44s | +| tcl | Passed | 42s | +| scheme | Passed | 42s | +| elixir | Passed | 41s | +| groovy | Passed | 40s | +| clojure | Passed | 40s | +| lua | Passed | 36s | +| commonlisp | Passed | 35s | +| bash | Passed | 35s | +| erlang | Passed | 34s | +| deno | Passed | 34s | +| raku | Passed | 33s | +| crystal | Passed | 28s | +| powershell | Passed | 26s | +| awk | Passed | 23s | + +--- + +*Report generated by UN Inception CI pipeline* diff --git a/reports/PERFORMANCE-HISTORY.md b/reports/PERFORMANCE-HISTORY.md new file mode 100644 index 0000000..55dc8aa --- /dev/null +++ b/reports/PERFORMANCE-HISTORY.md @@ -0,0 +1,13 @@ +# Performance History + +Tracking compile and test execution times across releases. + +## Releases + +| Version | Date | Tests | Pass Rate | Avg Duration | Slowest | Fastest | +|---------|------|-------|-----------|--------------|---------|---------| +| 4.2.0 | 2026-01-18 | 642 | 100.0% | 33s | raku | ocaml | +| 4.2.3 | 2026-01-19 | 642 | 100.0% | 63s | rust | v | +| 4.2.4 | 2026-01-19 | 682 | 100.0% | 70s | python | c | +| 4.2.5 | 2026-01-19 | 658 | 100.0% | 67s | v | erlang | +| 4.2.6 | 2026-01-19 | 642 | 100.0% | 54s | haskell | awk | diff --git a/reports/aggregated-duration-trend.png b/reports/aggregated-duration-trend.png new file mode 100644 index 0000000..7588f17 Binary files /dev/null and b/reports/aggregated-duration-trend.png differ diff --git a/reports/aggregated-language-variance.png b/reports/aggregated-language-variance.png new file mode 100644 index 0000000..f0d251a Binary files /dev/null and b/reports/aggregated-language-variance.png differ diff --git a/reports/aggregated-ranking-changes.png b/reports/aggregated-ranking-changes.png new file mode 100644 index 0000000..8e0138b Binary files /dev/null and b/reports/aggregated-ranking-changes.png differ