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