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/PERFORMANCE-HISTORY.md b/reports/PERFORMANCE-HISTORY.md index 8b42705..e2f48a6 100644 --- a/reports/PERFORMANCE-HISTORY.md +++ b/reports/PERFORMANCE-HISTORY.md @@ -9,3 +9,4 @@ Tracking compile and test execution times across releases. | 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 |