serialbench 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/benchmark.yml +294 -229
- data/.github/workflows/rake.yml +11 -0
- data/.github/workflows/windows-debug.yml +171 -0
- data/.gitignore +32 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +274 -0
- data/Gemfile +15 -1
- data/README.adoc +41 -0
- data/data/schemas/result.yml +29 -0
- data/docs/PLATFORM_VALIDATION_FIX.md +79 -0
- data/docs/SYCK_YAML_FIX.md +91 -0
- data/docs/WEBSITE_COMPLETION_PLAN.md +440 -0
- data/docs/WINDOWS_LIBXML_FIX.md +136 -0
- data/docs/WINDOWS_SETUP.md +122 -0
- data/lib/serialbench/benchmark_runner.rb +3 -3
- data/lib/serialbench/cli/benchmark_cli.rb +74 -1
- data/lib/serialbench/cli/environment_cli.rb +3 -3
- data/lib/serialbench/cli/resultset_cli.rb +112 -26
- data/lib/serialbench/cli/ruby_build_cli.rb +75 -88
- data/lib/serialbench/cli/validate_cli.rb +88 -0
- data/lib/serialbench/cli.rb +6 -2
- data/lib/serialbench/config_manager.rb +15 -26
- data/lib/serialbench/models/benchmark_config.rb +12 -0
- data/lib/serialbench/models/benchmark_result.rb +39 -3
- data/lib/serialbench/models/environment_config.rb +3 -2
- data/lib/serialbench/models/platform.rb +61 -6
- data/lib/serialbench/models/result.rb +28 -1
- data/lib/serialbench/models/result_set.rb +8 -0
- data/lib/serialbench/ruby_build_manager.rb +19 -23
- data/lib/serialbench/runners/asdf_runner.rb +1 -1
- data/lib/serialbench/runners/docker_runner.rb +2 -4
- data/lib/serialbench/runners/local_runner.rb +71 -0
- data/lib/serialbench/serializers/base_serializer.rb +1 -1
- data/lib/serialbench/serializers/json/rapidjson_serializer.rb +1 -5
- data/lib/serialbench/serializers/toml/base_toml_serializer.rb +0 -2
- data/lib/serialbench/serializers/toml/toml_rb_serializer.rb +1 -1
- data/lib/serialbench/serializers/toml/tomlib_serializer.rb +1 -1
- data/lib/serialbench/serializers/xml/base_xml_serializer.rb +6 -1
- data/lib/serialbench/serializers/xml/leptris_serializer.rb +167 -0
- data/lib/serialbench/serializers/xml/libxml_serializer.rb +13 -8
- data/lib/serialbench/serializers/xml/nokogiri_serializer.rb +11 -2
- data/lib/serialbench/serializers/xml/oga_serializer.rb +8 -8
- data/lib/serialbench/serializers/xml/ox_serializer.rb +2 -2
- data/lib/serialbench/serializers/xml/rexml_serializer.rb +3 -3
- data/lib/serialbench/serializers/yaml/base_yaml_serializer.rb +1 -3
- data/lib/serialbench/serializers/yaml/psych_serializer.rb +1 -5
- data/lib/serialbench/serializers/yaml/syck_serializer.rb +1 -1
- data/lib/serialbench/serializers.rb +5 -3
- data/lib/serialbench/site_generator.rb +234 -2
- data/lib/serialbench/templates/assets/css/format_based.css +1 -53
- data/lib/serialbench/templates/assets/css/themes.css +5 -4
- data/lib/serialbench/templates/assets/js/chart_helpers.js +44 -14
- data/lib/serialbench/templates/assets/js/dashboard.js +14 -15
- data/lib/serialbench/templates/format_based.liquid +480 -252
- data/lib/serialbench/version.rb +1 -1
- data/lib/serialbench/yaml_validator.rb +36 -0
- data/serialbench.gemspec +11 -2
- data/site/.gitignore +5 -0
- data/site/README.md +32 -0
- data/site/astro.config.mjs +12 -0
- data/site/package-lock.json +6160 -0
- data/site/package.json +22 -0
- data/site/public/favicon.svg +4 -0
- data/site/scripts/gen-sample-data.mjs +154 -0
- data/site/src/components/AvailabilityMatrix.astro +61 -0
- data/site/src/components/CalibratedLeaderboard.vue +134 -0
- data/site/src/components/CitationBox.vue +50 -0
- data/site/src/components/DashboardConsole.vue +193 -0
- data/site/src/components/FeaturesTable.astro +97 -0
- data/site/src/components/MemoryPanel.vue +44 -0
- data/site/src/components/OpsChart.vue +135 -0
- data/site/src/config.ts +18 -0
- data/site/src/layouts/Layout.astro +85 -0
- data/site/src/lib/channels.ts +24 -0
- data/site/src/lib/dashboard.ts +269 -0
- data/site/src/pages/index.astro +44 -0
- data/site/src/pages/library/[slug].astro +128 -0
- data/site/src/pages/methodology.astro +55 -0
- data/site/src/styles/global.css +103 -0
- data/site/tsconfig.json +5 -0
- metadata +58 -23
- data/.github/workflows/ci.yml +0 -74
- data/.github/workflows/docker.yml +0 -272
data/lib/serialbench/version.rb
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json-schema'
|
|
4
|
+
require 'yaml'
|
|
5
|
+
|
|
6
|
+
module Serialbench
|
|
7
|
+
# Validates YAML files against YAML Schema definitions
|
|
8
|
+
class YamlValidator
|
|
9
|
+
SCHEMA_DIR = File.join(__dir__, '..', '..', 'data', 'schemas')
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
def validate(file_path, schema_name)
|
|
13
|
+
unless File.exist?(file_path)
|
|
14
|
+
raise ArgumentError, "File not found: #{file_path}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
data = YAML.load_file(file_path)
|
|
18
|
+
schema_path = File.join(SCHEMA_DIR, "#{schema_name}.yml")
|
|
19
|
+
|
|
20
|
+
unless File.exist?(schema_path)
|
|
21
|
+
raise ArgumentError, "Schema not found: #{schema_path}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
schema = YAML.load_file(schema_path)
|
|
25
|
+
|
|
26
|
+
# Validate without strict schema checking (allow additional properties)
|
|
27
|
+
JSON::Validator.validate!(schema, data, strict: false)
|
|
28
|
+
|
|
29
|
+
true
|
|
30
|
+
rescue JSON::Schema::ValidationError => e
|
|
31
|
+
puts "❌ Validation failed: #{e.message}"
|
|
32
|
+
false
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
data/serialbench.gemspec
CHANGED
|
@@ -26,6 +26,9 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.files = all_files_in_git
|
|
27
27
|
.reject { |f| f.match(%r{\A(?:spec|features|bin|\.)/}) }
|
|
28
28
|
|
|
29
|
+
# Ensure data directory is included
|
|
30
|
+
spec.files += Dir['data/**/*'].select { |f| File.file?(f) }
|
|
31
|
+
|
|
29
32
|
spec.bindir = 'exe'
|
|
30
33
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
31
34
|
spec.require_paths = ['lib']
|
|
@@ -34,6 +37,7 @@ Gem::Specification.new do |spec|
|
|
|
34
37
|
spec.add_dependency 'benchmark-ips'
|
|
35
38
|
spec.add_dependency 'lutaml-model'
|
|
36
39
|
spec.add_dependency 'memory_profiler'
|
|
40
|
+
spec.add_dependency 'octokit', '~> 8.0'
|
|
37
41
|
spec.add_dependency 'thor'
|
|
38
42
|
|
|
39
43
|
# Reporting dependencies
|
|
@@ -41,12 +45,14 @@ Gem::Specification.new do |spec|
|
|
|
41
45
|
spec.add_dependency 'liquid' # Template engine for HTML reports
|
|
42
46
|
|
|
43
47
|
# XML serializers
|
|
44
|
-
spec.add_dependency 'libxml-ruby'
|
|
45
|
-
spec.add_dependency 'nokogiri'
|
|
46
48
|
spec.add_dependency 'oga'
|
|
47
49
|
spec.add_dependency 'ox'
|
|
48
50
|
spec.add_dependency 'rexml' # needed for Ruby 3.4+
|
|
49
51
|
|
|
52
|
+
# Note: nokogiri and libxml-ruby are defined in Gemfile with platform
|
|
53
|
+
# conditionals to properly exclude them on Windows ARM where libxml2
|
|
54
|
+
# compilation fails
|
|
55
|
+
|
|
50
56
|
# JSON serializers
|
|
51
57
|
spec.add_dependency 'oj'
|
|
52
58
|
spec.add_dependency 'rapidjson'
|
|
@@ -59,4 +65,7 @@ Gem::Specification.new do |spec|
|
|
|
59
65
|
spec.add_dependency 'tomlib'
|
|
60
66
|
spec.add_dependency 'toml-rb'
|
|
61
67
|
spec.add_dependency 'tomlrb'
|
|
68
|
+
|
|
69
|
+
# YAML validation
|
|
70
|
+
spec.add_dependency 'json-schema'
|
|
62
71
|
end
|
data/site/.gitignore
ADDED
data/site/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# serialbench site
|
|
2
|
+
|
|
3
|
+
The benchmark console at https://metanorma.github.io/serialbench/.
|
|
4
|
+
|
|
5
|
+
Astro 7 (Vite 8) with Vue islands and Tailwind 4. Charts are Chart.js 4,
|
|
6
|
+
bundled — no CDN.
|
|
7
|
+
|
|
8
|
+
## Develop
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
npm install
|
|
12
|
+
npm run generate:sample-data # writes src/data/sample.json (gitignored)
|
|
13
|
+
npm run dev # http://localhost:4321/serialbench/
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`src/data/sample.json` is generated from the race numbers in
|
|
17
|
+
`scripts/gen-sample-data.mjs` and is ignored by git. In CI the real payload
|
|
18
|
+
(written by `serialbench resultset export-data`) replaces it before
|
|
19
|
+
`astro build`; the shape is identical — see `src/lib/dashboard.ts`.
|
|
20
|
+
|
|
21
|
+
## Data contract
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
combined_results[op][size][format][serializer][envKey] = {
|
|
25
|
+
iterations_per_second, time_per_iteration # perf ops
|
|
26
|
+
allocated_memory, retained_memory # op == "memory"
|
|
27
|
+
}
|
|
28
|
+
environments[envKey] = { ruby_version, os, arch, timestamp, ... }
|
|
29
|
+
metadata = { resultset_name, total_runs, generated_at }
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Missing entries mean "not measured on that leg" — never zero.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { defineConfig } from 'astro/config';
|
|
2
|
+
import vue from '@astrojs/vue';
|
|
3
|
+
import tailwindcss from '@tailwindcss/vite';
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
site: 'https://metanorma.github.io',
|
|
7
|
+
base: '/serialbench/',
|
|
8
|
+
integrations: [vue()],
|
|
9
|
+
vite: {
|
|
10
|
+
plugins: [tailwindcss()],
|
|
11
|
+
},
|
|
12
|
+
});
|