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/PERFORMANCE-HISTORY.md b/reports/PERFORMANCE-HISTORY.md index 629ee4a..8b42705 100644 --- a/reports/PERFORMANCE-HISTORY.md +++ b/reports/PERFORMANCE-HISTORY.md @@ -8,3 +8,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 |