diff --git a/reports/4.2.10/chart-category-comparison.png b/reports/4.2.10/chart-category-comparison.png new file mode 100644 index 0000000..8ab7311 Binary files /dev/null and b/reports/4.2.10/chart-category-comparison.png differ diff --git a/reports/4.2.10/chart-dashboard.png b/reports/4.2.10/chart-dashboard.png new file mode 100644 index 0000000..f6caae6 Binary files /dev/null and b/reports/4.2.10/chart-dashboard.png differ diff --git a/reports/4.2.10/chart-duration-by-language.png b/reports/4.2.10/chart-duration-by-language.png new file mode 100644 index 0000000..a5c8d59 Binary files /dev/null and b/reports/4.2.10/chart-duration-by-language.png differ diff --git a/reports/4.2.10/chart-duration-histogram.png b/reports/4.2.10/chart-duration-histogram.png new file mode 100644 index 0000000..eb1cc43 Binary files /dev/null and b/reports/4.2.10/chart-duration-histogram.png differ diff --git a/reports/4.2.10/chart-queue-vs-execution.png b/reports/4.2.10/chart-queue-vs-execution.png new file mode 100644 index 0000000..f65b0ac Binary files /dev/null and b/reports/4.2.10/chart-queue-vs-execution.png differ diff --git a/reports/4.2.10/chart-speed-leaders.png b/reports/4.2.10/chart-speed-leaders.png new file mode 100644 index 0000000..e82f5fc Binary files /dev/null and b/reports/4.2.10/chart-speed-leaders.png differ diff --git a/reports/4.2.10/perf.json b/reports/4.2.10/perf.json new file mode 100644 index 0000000..538e5e8 --- /dev/null +++ b/reports/4.2.10/perf.json @@ -0,0 +1,407 @@ +{ + "tag": "4.2.10", + "generated_at": "2026-01-23T11:46:18Z", + "parent_pipeline_id": 12087, + "child_pipeline_id": 12089, + "summary": { + "total_tests": 673, + "passed_tests": 671, + "failed_tests": 2, + "total_languages": 43, + "passed_languages": 41, + "avg_duration_seconds": 153, + "max_duration_seconds": 320, + "min_duration_seconds": 29, + "slowest_language": "scheme", + "fastest_language": "bash" + }, + "languages": [ + { + "language": "scheme", + "status": "Passed", + "queued_duration": 28.58417, + "started_at": "2026-01-23T11:37:08Z", + "updated_at": "2026-01-23T11:42:28Z", + "job_id": 29224, + "duration_seconds": 320 + }, + { + "language": "clojure", + "status": "Passed", + "queued_duration": 34.414171, + "started_at": "2026-01-23T11:37:18Z", + "updated_at": "2026-01-23T11:42:28Z", + "job_id": 29226, + "duration_seconds": 310 + }, + { + "language": "deno", + "status": "Passed", + "queued_duration": 66.958449, + "started_at": "2026-01-23T11:37:46Z", + "updated_at": "2026-01-23T11:42:27Z", + "job_id": 29230, + "duration_seconds": 281 + }, + { + "language": "c", + "status": "Passed", + "queued_duration": 68.027219, + "started_at": "2026-01-23T11:37:52Z", + "updated_at": "2026-01-23T11:42:28Z", + "job_id": 29233, + "duration_seconds": 276 + }, + { + "language": "julia", + "status": "Passed", + "queued_duration": 190.117564, + "started_at": "2026-01-23T11:39:59Z", + "updated_at": "2026-01-23T11:44:30Z", + "job_id": 29247, + "duration_seconds": 271 + }, + { + "language": "prolog", + "status": "Passed", + "queued_duration": 197.409533, + "started_at": "2026-01-23T11:40:07Z", + "updated_at": "2026-01-23T11:44:29Z", + "job_id": 29253, + "duration_seconds": 262 + }, + { + "language": "raku", + "status": "Passed", + "queued_duration": 63.340398, + "started_at": "2026-01-23T11:37:47Z", + "updated_at": "2026-01-23T11:41:56Z", + "job_id": 29232, + "duration_seconds": 249 + }, + { + "language": "awk", + "status": "Passed", + "queued_duration": 67.324427, + "started_at": "2026-01-23T11:37:47Z", + "updated_at": "2026-01-23T11:41:54Z", + "job_id": 29231, + "duration_seconds": 247 + }, + { + "language": "cpp", + "status": "Passed", + "queued_duration": 68.740442, + "started_at": "2026-01-23T11:37:53Z", + "updated_at": "2026-01-23T11:41:55Z", + "job_id": 29234, + "duration_seconds": 242 + }, + { + "language": "ocaml", + "status": "Passed", + "queued_duration": 191.187496, + "started_at": "2026-01-23T11:40:00Z", + "updated_at": "2026-01-23T11:44:00Z", + "job_id": 29249, + "duration_seconds": 240 + }, + { + "language": "kotlin", + "status": "Passed", + "queued_duration": 72.988731, + "started_at": "2026-01-23T11:37:58Z", + "updated_at": "2026-01-23T11:41:58Z", + "job_id": 29238, + "duration_seconds": 240 + }, + { + "language": "csharp", + "status": "Passed", + "queued_duration": 195.576495, + "started_at": "2026-01-23T11:40:05Z", + "updated_at": "2026-01-23T11:44:00Z", + "job_id": 29251, + "duration_seconds": 235 + }, + { + "language": "haskell", + "status": "Passed", + "queued_duration": 190.562352, + "started_at": "2026-01-23T11:40:00Z", + "updated_at": "2026-01-23T11:43:34Z", + "job_id": 29248, + "duration_seconds": 214 + }, + { + "language": "forth", + "status": "Passed", + "queued_duration": 198.559254, + "started_at": "2026-01-23T11:40:08Z", + "updated_at": "2026-01-23T11:43:35Z", + "job_id": 29254, + "duration_seconds": 207 + }, + { + "language": "tcl", + "status": "Failed", + "queued_duration": 178.780298, + "started_at": "2026-01-23T11:40:50Z", + "updated_at": "2026-01-23T11:44:08Z", + "job_id": 29257, + "duration_seconds": 198 + }, + { + "language": "zig", + "status": "Passed", + "queued_duration": 118.38835, + "started_at": "2026-01-23T11:38:46Z", + "updated_at": "2026-01-23T11:41:51Z", + "job_id": 29242, + "duration_seconds": 185 + }, + { + "language": "r", + "status": "Passed", + "queued_duration": 15.31373, + "started_at": "2026-01-23T11:36:57Z", + "updated_at": "2026-01-23T11:39:58Z", + "job_id": 29220, + "duration_seconds": 181 + }, + { + "language": "rust", + "status": "Passed", + "queued_duration": 70.017294, + "started_at": "2026-01-23T11:37:54Z", + "updated_at": "2026-01-23T11:40:50Z", + "job_id": 29236, + "duration_seconds": 176 + }, + { + "language": "commonlisp", + "status": "Passed", + "queued_duration": 34.946612, + "started_at": "2026-01-23T11:37:18Z", + "updated_at": "2026-01-23T11:40:07Z", + "job_id": 29227, + "duration_seconds": 169 + }, + { + "language": "go", + "status": "Passed", + "queued_duration": 142.012079, + "started_at": "2026-01-23T11:42:26Z", + "updated_at": "2026-01-23T11:45:07Z", + "job_id": 29266, + "duration_seconds": 161 + }, + { + "language": "groovy", + "status": "Failed", + "queued_duration": 142.680835, + "started_at": "2026-01-23T11:42:29Z", + "updated_at": "2026-01-23T11:45:00Z", + "job_id": 29267, + "duration_seconds": 151 + }, + { + "language": "dart", + "status": "Passed", + "queued_duration": 188.766843, + "started_at": "2026-01-23T11:39:58Z", + "updated_at": "2026-01-23T11:42:27Z", + "job_id": 29246, + "duration_seconds": 149 + }, + { + "language": "fsharp", + "status": "Passed", + "queued_duration": 191.722636, + "started_at": "2026-01-23T11:40:01Z", + "updated_at": "2026-01-23T11:42:29Z", + "job_id": 29250, + "duration_seconds": 148 + }, + { + "language": "java", + "status": "Passed", + "queued_duration": 70.455059, + "started_at": "2026-01-23T11:37:55Z", + "updated_at": "2026-01-23T11:39:57Z", + "job_id": 29237, + "duration_seconds": 122 + }, + { + "language": "php", + "status": "Passed", + "queued_duration": 12.837967, + "started_at": "2026-01-23T11:36:54Z", + "updated_at": "2026-01-23T11:38:51Z", + "job_id": 29217, + "duration_seconds": 117 + }, + { + "language": "dotnet", + "status": "Passed", + "queued_duration": 196.557205, + "started_at": "2026-01-23T11:40:06Z", + "updated_at": "2026-01-23T11:41:58Z", + "job_id": 29252, + "duration_seconds": 112 + }, + { + "language": "javascript", + "status": "Passed", + "queued_duration": 10.74858, + "started_at": "2026-01-23T11:36:51Z", + "updated_at": "2026-01-23T11:38:38Z", + "job_id": 29213, + "duration_seconds": 107 + }, + { + "language": "perl", + "status": "Passed", + "queued_duration": 200.97553, + "started_at": "2026-01-23T11:41:59Z", + "updated_at": "2026-01-23T11:43:44Z", + "job_id": 29263, + "duration_seconds": 105 + }, + { + "language": "elixir", + "status": "Passed", + "queued_duration": 16.128221, + "started_at": "2026-01-23T11:36:59Z", + "updated_at": "2026-01-23T11:38:37Z", + "job_id": 29221, + "duration_seconds": 98 + }, + { + "language": "crystal", + "status": "Passed", + "queued_duration": 35.373324, + "started_at": "2026-01-23T11:37:19Z", + "updated_at": "2026-01-23T11:38:48Z", + "job_id": 29228, + "duration_seconds": 89 + }, + { + "language": "objc", + "status": "Passed", + "queued_duration": 126.054011, + "started_at": "2026-01-23T11:38:55Z", + "updated_at": "2026-01-23T11:40:18Z", + "job_id": 29245, + "duration_seconds": 83 + }, + { + "language": "cobol", + "status": "Passed", + "queued_duration": 111.662513, + "started_at": "2026-01-23T11:38:37Z", + "updated_at": "2026-01-23T11:39:59Z", + "job_id": 29239, + "duration_seconds": 82 + }, + { + "language": "fortran", + "status": "Passed", + "queued_duration": 114.265316, + "started_at": "2026-01-23T11:38:39Z", + "updated_at": "2026-01-23T11:39:58Z", + "job_id": 29240, + "duration_seconds": 79 + }, + { + "language": "v", + "status": "Passed", + "queued_duration": 123.287121, + "started_at": "2026-01-23T11:38:52Z", + "updated_at": "2026-01-23T11:40:10Z", + "job_id": 29244, + "duration_seconds": 78 + }, + { + "language": "nim", + "status": "Passed", + "queued_duration": 120.712278, + "started_at": "2026-01-23T11:38:49Z", + "updated_at": "2026-01-23T11:40:07Z", + "job_id": 29243, + "duration_seconds": 78 + }, + { + "language": "d", + "status": "Passed", + "queued_duration": 113.610461, + "started_at": "2026-01-23T11:38:40Z", + "updated_at": "2026-01-23T11:39:58Z", + "job_id": 29241, + "duration_seconds": 78 + }, + { + "language": "python", + "status": "Passed", + "queued_duration": 9.830818, + "started_at": "2026-01-23T11:36:50Z", + "updated_at": "2026-01-23T11:37:46Z", + "job_id": 29212, + "duration_seconds": 56 + }, + { + "language": "lua", + "status": "Passed", + "queued_duration": 13.145293, + "started_at": "2026-01-23T11:36:55Z", + "updated_at": "2026-01-23T11:37:46Z", + "job_id": 29218, + "duration_seconds": 51 + }, + { + "language": "typescript", + "status": "Passed", + "queued_duration": 242.356547, + "started_at": "2026-01-23T11:41:54Z", + "updated_at": "2026-01-23T11:42:29Z", + "job_id": 29259, + "duration_seconds": 35 + }, + { + "language": "ruby", + "status": "Passed", + "queued_duration": 242.580658, + "started_at": "2026-01-23T11:41:56Z", + "updated_at": "2026-01-23T11:42:29Z", + "job_id": 29260, + "duration_seconds": 33 + }, + { + "language": "powershell", + "status": "Passed", + "queued_duration": 242.868492, + "started_at": "2026-01-23T11:41:57Z", + "updated_at": "2026-01-23T11:42:27Z", + "job_id": 29261, + "duration_seconds": 30 + }, + { + "language": "erlang", + "status": "Passed", + "queued_duration": 193.375115, + "started_at": "2026-01-23T11:41:59Z", + "updated_at": "2026-01-23T11:42:29Z", + "job_id": 29264, + "duration_seconds": 30 + }, + { + "language": "bash", + "status": "Passed", + "queued_duration": 240.948353, + "started_at": "2026-01-23T11:41:58Z", + "updated_at": "2026-01-23T11:42:27Z", + "job_id": 29262, + "duration_seconds": 29 + } +] +} diff --git a/reports/4.2.10/perf.md b/reports/4.2.10/perf.md new file mode 100644 index 0000000..becbd6f --- /dev/null +++ b/reports/4.2.10/perf.md @@ -0,0 +1,146 @@ +# Performance Report: 4.2.10 + +**Generated:** 2026-01-23T11:46:18Z +**Pipeline:** [#12089](https://git.unturf.com/engineering/unturf/un-inception/-/pipelines/12089) + +## Summary + +| Metric | Value | +|--------|-------| +| Total Tests | 673 | +| Passed | 671 | +| Failed | 2 | +| Pass Rate | 99.7% | +| Languages | 43 | +| Avg Duration | 153s | +| Slowest | scheme (320s) | +| Fastest | bash (29s) | + +--- + +## 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:** +- **SCHEME** and **CLOJURE** are outliers at 90+ seconds +- Most languages cluster between 20-40 seconds +- Compiled languages (red) tend to be faster than interpreted (blue) +- **BASH** is the fastest at 29 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 (scheme, clojure) + +--- + +## Speed Leaders + +Side-by-side comparison of the 10 slowest and 10 fastest languages. + +![Speed Leaders](chart-speed-leaders.png) + +**Slowest (left):** SCHEME, CLOJURE, DENO, C, JULIA +**Fastest (right):** BASH, ERLANG, POWERSHELL, RUBY, TYPESCRIPT + +--- + +## 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 - scheme and clojure 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 | +|----------|--------|----------| +| scheme | Passed | 320s | +| clojure | Passed | 310s | +| deno | Passed | 281s | +| c | Passed | 276s | +| julia | Passed | 271s | +| prolog | Passed | 262s | +| raku | Passed | 249s | +| awk | Passed | 247s | +| cpp | Passed | 242s | +| ocaml | Passed | 240s | +| kotlin | Passed | 240s | +| csharp | Passed | 235s | +| haskell | Passed | 214s | +| forth | Passed | 207s | +| tcl | Failed | 198s | +| zig | Passed | 185s | +| r | Passed | 181s | +| rust | Passed | 176s | +| commonlisp | Passed | 169s | +| go | Passed | 161s | +| groovy | Failed | 151s | +| dart | Passed | 149s | +| fsharp | Passed | 148s | +| java | Passed | 122s | +| php | Passed | 117s | +| dotnet | Passed | 112s | +| javascript | Passed | 107s | +| perl | Passed | 105s | +| elixir | Passed | 98s | +| crystal | Passed | 89s | +| objc | Passed | 83s | +| cobol | Passed | 82s | +| fortran | Passed | 79s | +| v | Passed | 78s | +| nim | Passed | 78s | +| d | Passed | 78s | +| python | Passed | 56s | +| lua | Passed | 51s | +| typescript | Passed | 35s | +| ruby | Passed | 33s | +| powershell | Passed | 30s | +| erlang | Passed | 30s | +| bash | Passed | 29s | + +--- + +*Report generated by UN Inception CI pipeline* diff --git a/reports/PERFORMANCE-HISTORY.md b/reports/PERFORMANCE-HISTORY.md index 0787283..29dc8d8 100644 --- a/reports/PERFORMANCE-HISTORY.md +++ b/reports/PERFORMANCE-HISTORY.md @@ -14,3 +14,4 @@ Tracking compile and test execution times across releases. | 4.2.7 | 2026-01-23 | 631 | 99.8% | 117s | typescript | dotnet | | 4.2.8 | 2026-01-23 | 645 | 99.8% | 111s | kotlin | fortran | | 4.2.9 | 2026-01-23 | 645 | 100.0% | 107s | ruby | d | +| 4.2.10 | 2026-01-23 | 673 | 99.7% | 153s | scheme | bash |