serialbench 0.1.1 → 0.1.2

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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/benchmark.yml +13 -5
  3. data/.github/workflows/docker.yml +35 -9
  4. data/.github/workflows/rake.yml +15 -0
  5. data/Gemfile +2 -1
  6. data/README.adoc +267 -1129
  7. data/Rakefile +0 -55
  8. data/config/benchmarks/full.yml +29 -0
  9. data/config/benchmarks/short.yml +26 -0
  10. data/config/environments/asdf-ruby-3.2.yml +8 -0
  11. data/config/environments/asdf-ruby-3.3.yml +8 -0
  12. data/config/environments/docker-ruby-3.0.yml +9 -0
  13. data/config/environments/docker-ruby-3.1.yml +9 -0
  14. data/config/environments/docker-ruby-3.2.yml +9 -0
  15. data/config/environments/docker-ruby-3.3.yml +9 -0
  16. data/config/environments/docker-ruby-3.4.yml +9 -0
  17. data/docker/Dockerfile.alpine +33 -0
  18. data/docker/{Dockerfile.benchmark → Dockerfile.ubuntu} +4 -3
  19. data/docker/README.md +2 -2
  20. data/exe/serialbench +1 -1
  21. data/lib/serialbench/benchmark_runner.rb +261 -423
  22. data/lib/serialbench/cli/base_cli.rb +51 -0
  23. data/lib/serialbench/cli/benchmark_cli.rb +380 -0
  24. data/lib/serialbench/cli/environment_cli.rb +181 -0
  25. data/lib/serialbench/cli/resultset_cli.rb +215 -0
  26. data/lib/serialbench/cli/ruby_build_cli.rb +238 -0
  27. data/lib/serialbench/cli.rb +58 -601
  28. data/lib/serialbench/config_manager.rb +140 -0
  29. data/lib/serialbench/models/benchmark_config.rb +63 -0
  30. data/lib/serialbench/models/benchmark_result.rb +45 -0
  31. data/lib/serialbench/models/environment_config.rb +71 -0
  32. data/lib/serialbench/models/platform.rb +59 -0
  33. data/lib/serialbench/models/result.rb +53 -0
  34. data/lib/serialbench/models/result_set.rb +71 -0
  35. data/lib/serialbench/models/result_store.rb +108 -0
  36. data/lib/serialbench/models.rb +54 -0
  37. data/lib/serialbench/ruby_build_manager.rb +153 -0
  38. data/lib/serialbench/runners/asdf_runner.rb +296 -0
  39. data/lib/serialbench/runners/base.rb +32 -0
  40. data/lib/serialbench/runners/docker_runner.rb +142 -0
  41. data/lib/serialbench/serializers/base_serializer.rb +8 -16
  42. data/lib/serialbench/serializers/json/base_json_serializer.rb +4 -4
  43. data/lib/serialbench/serializers/json/json_serializer.rb +0 -2
  44. data/lib/serialbench/serializers/json/oj_serializer.rb +0 -2
  45. data/lib/serialbench/serializers/json/yajl_serializer.rb +0 -2
  46. data/lib/serialbench/serializers/toml/base_toml_serializer.rb +5 -3
  47. data/lib/serialbench/serializers/toml/toml_rb_serializer.rb +0 -2
  48. data/lib/serialbench/serializers/toml/tomlib_serializer.rb +0 -2
  49. data/lib/serialbench/serializers/toml/tomlrb_serializer.rb +56 -0
  50. data/lib/serialbench/serializers/xml/base_xml_serializer.rb +4 -9
  51. data/lib/serialbench/serializers/xml/libxml_serializer.rb +0 -2
  52. data/lib/serialbench/serializers/xml/nokogiri_serializer.rb +0 -2
  53. data/lib/serialbench/serializers/xml/oga_serializer.rb +0 -2
  54. data/lib/serialbench/serializers/xml/ox_serializer.rb +0 -2
  55. data/lib/serialbench/serializers/xml/rexml_serializer.rb +0 -2
  56. data/lib/serialbench/serializers/yaml/base_yaml_serializer.rb +5 -1
  57. data/lib/serialbench/serializers/yaml/syck_serializer.rb +59 -22
  58. data/lib/serialbench/serializers.rb +23 -6
  59. data/lib/serialbench/site_generator.rb +105 -0
  60. data/lib/serialbench/templates/assets/css/benchmark_report.css +535 -0
  61. data/lib/serialbench/templates/assets/css/format_based.css +526 -0
  62. data/lib/serialbench/templates/assets/css/themes.css +588 -0
  63. data/lib/serialbench/templates/assets/js/chart_helpers.js +381 -0
  64. data/lib/serialbench/templates/assets/js/dashboard.js +796 -0
  65. data/lib/serialbench/templates/assets/js/navigation.js +142 -0
  66. data/lib/serialbench/templates/base.liquid +49 -0
  67. data/lib/serialbench/templates/format_based.liquid +279 -0
  68. data/lib/serialbench/templates/partials/chart_section.liquid +4 -0
  69. data/lib/serialbench/version.rb +1 -1
  70. data/lib/serialbench.rb +2 -31
  71. data/serialbench.gemspec +4 -1
  72. metadata +86 -16
  73. data/config/ci.yml +0 -22
  74. data/config/full.yml +0 -30
  75. data/docker/run-benchmarks.sh +0 -356
  76. data/lib/serialbench/chart_generator.rb +0 -821
  77. data/lib/serialbench/result_formatter.rb +0 -182
  78. data/lib/serialbench/result_merger.rb +0 -1201
  79. data/lib/serialbench/serializers/xml/base_parser.rb +0 -69
  80. data/lib/serialbench/serializers/xml/libxml_parser.rb +0 -98
  81. data/lib/serialbench/serializers/xml/nokogiri_parser.rb +0 -111
  82. data/lib/serialbench/serializers/xml/oga_parser.rb +0 -85
  83. data/lib/serialbench/serializers/xml/ox_parser.rb +0 -64
  84. data/lib/serialbench/serializers/xml/rexml_parser.rb +0 -129
data/Rakefile CHANGED
@@ -5,59 +5,4 @@ require 'rspec/core/rake_task'
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
- desc 'Run benchmarks'
9
- task :benchmark do
10
- require_relative 'lib/serialbench'
11
-
12
- puts 'Running XML benchmarks...'
13
- results = Serialbench.run_benchmarks
14
-
15
- puts "\nGenerating reports..."
16
- report_files = Serialbench.generate_reports(results)
17
-
18
- puts "\nBenchmark complete!"
19
- puts 'Reports generated:'
20
- puts " HTML: #{report_files[:html]}"
21
- puts " AsciiDoc: #{report_files[:asciidoc]}"
22
- puts " Charts: #{report_files[:charts].length} SVG files"
23
- end
24
-
25
- desc 'Install all XML library dependencies'
26
- task :install_deps do
27
- gems = %w[ox nokogiri libxml-ruby oga memory_profiler]
28
-
29
- puts 'Installing XML library dependencies...'
30
- gems.each do |gem_name|
31
- puts "Installing #{gem_name}..."
32
- system("gem install #{gem_name}")
33
- rescue StandardError => e
34
- puts "Warning: Failed to install #{gem_name}: #{e.message}"
35
- end
36
- puts 'Done!'
37
- end
38
-
39
- desc 'Check which XML libraries are available'
40
- task :check_libs do
41
- require_relative 'lib/serialbench'
42
-
43
- runner = Serialbench::BenchmarkRunner.new
44
-
45
- puts 'XML Library Availability Check'
46
- puts '=' * 40
47
-
48
- runner.parsers.each do |parser|
49
- status = parser.available? ? '✓ Available' : '✗ Not available'
50
- version = parser.available? ? " (#{parser.version})" : ''
51
- puts "#{parser.name.ljust(15)} #{status}#{version}"
52
- end
53
-
54
- puts "\nMemory profiler: #{Serialbench::MemoryProfiler.available? ? '✓ Available' : '✗ Not available'}"
55
- end
56
-
57
- desc 'Clean generated files'
58
- task :clean do
59
- FileUtils.rm_rf('results')
60
- puts 'Cleaned generated files'
61
- end
62
-
63
8
  task default: :spec
@@ -0,0 +1,29 @@
1
+ # Configuration for comprehensive benchmarks - Full testing with all data sizes
2
+ # Used by Docker script for complete performance analysis
3
+
4
+ # Run name for identification
5
+ name: full-benchmark
6
+
7
+ data_sizes:
8
+ - small
9
+ - medium
10
+ - large
11
+
12
+ formats:
13
+ - xml
14
+ - json
15
+ - yaml
16
+ - toml
17
+
18
+ iterations:
19
+ small: 20
20
+ medium: 5
21
+ large: 2
22
+
23
+ operations:
24
+ - parse
25
+ - generate
26
+ - streaming
27
+ - memory
28
+
29
+ warmup: 3
@@ -0,0 +1,26 @@
1
+ # Configuration for short benchmarks - Minimal memory usage for CI runners
2
+ # Designed for Windows and Ubuntu runners with limited memory
3
+
4
+ # Run name for identification
5
+ name: short-benchmark
6
+
7
+ data_sizes:
8
+ - small
9
+
10
+ formats:
11
+ - xml
12
+ - json
13
+ - yaml
14
+ - toml
15
+
16
+ iterations:
17
+ small: 5
18
+ medium: 2
19
+ large: 1
20
+
21
+ operations:
22
+ - parse
23
+ - generate
24
+ - streaming
25
+
26
+ warmup: 2
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: ruby-324-asdf
3
+ kind: asdf
4
+ created_at: '2025-06-12T22:54:43+08:00'
5
+ ruby_build_tag: 3.2.4
6
+ description: ASDF environment
7
+ asdf:
8
+ auto_install: true
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: ruby-332-asdf
3
+ kind: asdf
4
+ created_at: '2025-06-12T22:53:24+08:00'
5
+ ruby_build_tag: 3.3.2
6
+ description: ASDF environment
7
+ asdf:
8
+ auto_install: true
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: docker-ruby-3.0
3
+ kind: docker
4
+ created_at: '2025-06-13T15:18:43+08:00'
5
+ ruby_build_tag: "3.0.7"
6
+ description: Docker environment for Ruby 3.0 benchmarks
7
+ docker:
8
+ image: 'ruby:3.0-slim'
9
+ dockerfile: '../../docker/Dockerfile.ubuntu'
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: docker-ruby-3.1
3
+ kind: docker
4
+ created_at: '2025-06-13T15:18:43+08:00'
5
+ ruby_build_tag: "3.1.6"
6
+ description: Docker environment for Ruby 3.1 benchmarks
7
+ docker:
8
+ image: 'ruby:3.1-slim'
9
+ dockerfile: '../../docker/Dockerfile.ubuntu'
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: docker-ruby-3.2
3
+ kind: docker
4
+ created_at: '2025-06-13T15:18:43+08:00'
5
+ ruby_build_tag: "3.2.4"
6
+ description: Docker environment for Ruby 3.2 benchmarks
7
+ docker:
8
+ image: 'ruby:3.2-slim'
9
+ dockerfile: '../../docker/Dockerfile.ubuntu'
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: docker-ruby-3.3
3
+ kind: docker
4
+ created_at: '2025-06-13T15:18:43+08:00'
5
+ ruby_build_tag: "3.3.7"
6
+ description: Docker environment for Ruby 3.3 benchmarks
7
+ docker:
8
+ image: 'ruby:3.3-slim'
9
+ dockerfile: '../../docker/Dockerfile.ubuntu'
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: docker-ruby-3.4
3
+ kind: docker
4
+ created_at: '2025-06-13T15:18:43+08:00'
5
+ ruby_build_tag: "3.4.1"
6
+ description: Docker environment for Ruby 3.4 benchmarks
7
+ docker:
8
+ image: 'ruby:3.4-slim'
9
+ dockerfile: '../../docker/Dockerfile.ubuntu'
@@ -0,0 +1,33 @@
1
+ # Alpine-based Ruby benchmark environment using official Ruby Alpine images
2
+ ARG BASE_IMAGE=ruby:3.4-alpine
3
+ FROM ${BASE_IMAGE}
4
+
5
+ # Install system dependencies for XML libraries and build tools
6
+ RUN apk add --no-cache \
7
+ build-base \
8
+ libxml2-dev \
9
+ libxslt-dev \
10
+ yaml-dev \
11
+ zlib-dev \
12
+ openssl-dev \
13
+ linux-headers \
14
+ git
15
+
16
+ # Set working directory
17
+ WORKDIR /app
18
+
19
+ # Copy the entire application (gemspec needs full context)
20
+ COPY . .
21
+
22
+ # Update bundler and configure bundle for cross-platform compatibility
23
+ RUN gem install bundler:2.5.22 && \
24
+ bundle config set --local deployment 'false' && \
25
+ bundle config set --local path '/usr/local/bundle' && \
26
+ bundle config set --local force_ruby_platform true && \
27
+ bundle install --jobs 4 --retry 3
28
+
29
+ # Create results directory
30
+ RUN mkdir -p /app/results
31
+
32
+ # Default command runs benchmarks
33
+ ENTRYPOINT ["bundle", "exec", "serialbench"]
@@ -1,14 +1,15 @@
1
1
  # Multi-stage Dockerfile for Ruby serialization benchmarks
2
2
  # Supports multiple Ruby versions for comprehensive testing
3
3
 
4
- ARG RUBY_VERSION=3.3
5
- FROM ruby:${RUBY_VERSION}
4
+ ARG BASE_IMAGE=ruby:3.4-slim
5
+ FROM ${BASE_IMAGE}
6
6
 
7
7
  # Install system dependencies for XML libraries
8
8
  RUN apt-get update && apt-get install -y \
9
9
  libxml2-dev \
10
10
  libxslt1-dev \
11
11
  build-essential \
12
+ git \
12
13
  && rm -rf /var/lib/apt/lists/*
13
14
 
14
15
  # Set working directory
@@ -28,4 +29,4 @@ RUN gem install bundler:2.5.22 && \
28
29
  RUN mkdir -p /app/results
29
30
 
30
31
  # Default command runs parsing and generation benchmarks (memory benchmarks disabled due to hanging in Docker)
31
- CMD ["bundle", "exec", "ruby", "exe/serialbench", "benchmark", "--formats", "xml", "json", "yaml", "toml", "--iterations", "1", "--warmup", "0", "--parsing_only"]
32
+ ENTRYPOINT ["bundle", "exec", "serialbench"]
data/docker/README.md CHANGED
@@ -4,7 +4,7 @@ This directory contains Docker infrastructure for running Serialbench across mul
4
4
 
5
5
  ## Files
6
6
 
7
- - `Dockerfile.benchmark` - Multi-stage Dockerfile for building benchmark environments
7
+ - `Dockerfile.ubuntu` - Multi-stage Dockerfile for building benchmark environments
8
8
  - `run-benchmarks.sh` - Automated script for running benchmarks across multiple Ruby versions
9
9
 
10
10
  ## Quick Start
@@ -77,7 +77,7 @@ docker-results/
77
77
  docker build \
78
78
  --build-arg RUBY_VERSION=3.3 \
79
79
  -t serialbench:ruby-3.3 \
80
- -f docker/Dockerfile.benchmark \
80
+ -f docker/Dockerfile.ubuntu \
81
81
  .
82
82
  ```
83
83
 
data/exe/serialbench CHANGED
@@ -3,4 +3,4 @@
3
3
 
4
4
  require_relative '../lib/serialbench'
5
5
 
6
- Serialbench::Cli.start(ARGV)
6
+ Serialbench::CLI.start(ARGV)