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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 581c331152e89c99f638efa981ae50ae12d3a283317fe7e4e7613a2bb4910dd0
4
- data.tar.gz: e622c9f34c00629169508f5e92a4841bbf49cf802a736116d6a77752d82bd001
3
+ metadata.gz: 4bd127a1fb810ad2b4a95377dd7bf7e75297ec4b989b44844131b5ac01b0ab83
4
+ data.tar.gz: f594315660bf94c7c97d8a0b0f9d9aadf6b756f675cc8e1671535840840c26bd
5
5
  SHA512:
6
- metadata.gz: ec2cdc63a2917c724cccc1cda6c6a885822ccf62d8d129a17c64d49ec9b06952ad26eeda30edeb75f20b59b3373004c97cd647c186ed93334f028804b220383e
7
- data.tar.gz: 2c1243b837f25723bee4f971ceaff58e85e36264c114bc0a7d201769bda93c744a7a9169d957578128e30b700467b849b405a6609c397d4f0d9eafa0a782f1cd
6
+ metadata.gz: 607d47dee25a4815518e7246b44830cc78d08e9852c79f06803ba073a0af71946066f287ce174f130ce5553bbe3707e76d12c5318eb5db9966a97cb69de976e2
7
+ data.tar.gz: 808cc1fdd677a2b6ee5603305fa9a2da913ee2c2feae3b6ea0e648b39c99c15a01a3f89b067be9ac45b634ab330f3fb1dc2f1e02606482af2faef3118c04a484
@@ -77,12 +77,20 @@ jobs:
77
77
  - name: List available serializers
78
78
  run: bundle exec serialbench list
79
79
 
80
- - name: Run comprehensive benchmarks
80
+ - name: Run benchmarks
81
81
  run: |
82
- bundle exec serialbench benchmark \
83
- --formats xml json yaml toml \
84
- --iterations 5 \
85
- --warmup 2
82
+ if [ "${{ matrix.platform }}" = "macos-latest" ]; then
83
+ # macOS can handle full benchmarks
84
+ bundle exec serialbench benchmark \
85
+ --formats xml json yaml toml \
86
+ --iterations 5 \
87
+ --warmup 2
88
+ else
89
+ # Windows and Ubuntu use short configuration for memory efficiency
90
+ bundle exec serialbench benchmark \
91
+ --config config/short.yml
92
+ fi
93
+ shell: bash
86
94
 
87
95
  - name: Run tests to verify functionality
88
96
  run: bundle exec rspec --format documentation
@@ -85,7 +85,7 @@ jobs:
85
85
  images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
86
86
  tags: |
87
87
  type=ref,event=branch,suffix=-ruby-${{ matrix.ruby-version }}
88
- type=ref,event=pr,suffix=-ruby-${{ matrix.ruby-version }}
88
+ type=ref,event=pr,prefix=pr-,suffix=-ruby-${{ matrix.ruby-version }}
89
89
  type=sha,suffix=-ruby-${{ matrix.ruby-version }}
90
90
  type=raw,value=latest,suffix=-ruby-${{ matrix.ruby-version }},enable={{is_default_branch}}
91
91
 
@@ -93,7 +93,7 @@ jobs:
93
93
  uses: docker/build-push-action@v5
94
94
  with:
95
95
  context: .
96
- file: docker/Dockerfile.benchmark
96
+ file: docker/Dockerfile.ubuntu
97
97
  build-args: |
98
98
  RUBY_VERSION=${{ matrix.ruby-version }}
99
99
  push: true
@@ -105,19 +105,27 @@ jobs:
105
105
 
106
106
  - name: Test Docker image
107
107
  run: |
108
+ # Get the first tag from the metadata output
109
+ IMAGE_TAG=$(echo "${{ steps.meta.outputs.tags }}" | head -n1)
110
+ echo "Testing image: $IMAGE_TAG"
111
+
108
112
  # Test that the image works correctly
109
- docker run --rm ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}-ruby-${{ matrix.ruby-version }} \
113
+ docker run --rm "$IMAGE_TAG" \
110
114
  bundle exec serialbench list
111
115
 
112
116
  - name: Run basic functionality test
113
117
  run: |
118
+ # Get the first tag from the metadata output
119
+ IMAGE_TAG=$(echo "${{ steps.meta.outputs.tags }}" | head -n1)
120
+ echo "Testing functionality with image: $IMAGE_TAG"
121
+
114
122
  # Create a temporary results directory
115
123
  mkdir -p test-results
116
124
 
117
125
  # Run a quick benchmark test
118
126
  docker run --rm \
119
127
  -v $(pwd)/test-results:/app/results \
120
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}-ruby-${{ matrix.ruby-version }} \
128
+ "$IMAGE_TAG" \
121
129
  bundle exec serialbench benchmark \
122
130
  --formats json \
123
131
  --iterations 1 \
@@ -153,14 +161,28 @@ jobs:
153
161
  username: ${{ github.actor }}
154
162
  password: ${{ secrets.GITHUB_TOKEN }}
155
163
 
164
+ - name: Extract metadata for testing
165
+ id: meta
166
+ uses: docker/metadata-action@v5
167
+ with:
168
+ images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
169
+ tags: |
170
+ type=ref,event=branch,suffix=-ruby-${{ matrix.ruby-version }}
171
+ type=ref,event=pr,prefix=pr-,suffix=-ruby-${{ matrix.ruby-version }}
172
+ type=sha,suffix=-ruby-${{ matrix.ruby-version }}
173
+ type=raw,value=latest,suffix=-ruby-${{ matrix.ruby-version }},enable={{is_default_branch}}
174
+
156
175
  - name: Pull Docker image
157
176
  run: |
158
- docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}-ruby-${{ matrix.ruby-version }}
177
+ IMAGE_TAG=$(echo "${{ steps.meta.outputs.tags }}" | head -n1)
178
+ echo "Pulling image: $IMAGE_TAG"
179
+ docker pull "$IMAGE_TAG"
159
180
 
160
181
  - name: Test serializer availability
161
182
  run: |
162
- echo "Testing Ruby ${{ matrix.ruby-version }} container..."
163
- docker run --rm ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}-ruby-${{ matrix.ruby-version }} \
183
+ IMAGE_TAG=$(echo "${{ steps.meta.outputs.tags }}" | head -n1)
184
+ echo "Testing Ruby ${{ matrix.ruby-version }} container: $IMAGE_TAG"
185
+ docker run --rm "$IMAGE_TAG" \
164
186
  bundle exec ruby -e "
165
187
  require 'serialbench'
166
188
  puts 'Available serializers:'
@@ -172,17 +194,21 @@ jobs:
172
194
 
173
195
  - name: Run comprehensive tests
174
196
  run: |
175
- docker run --rm ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}-ruby-${{ matrix.ruby-version }} \
197
+ IMAGE_TAG=$(echo "${{ steps.meta.outputs.tags }}" | head -n1)
198
+ echo "Running tests with image: $IMAGE_TAG"
199
+ docker run --rm "$IMAGE_TAG" \
176
200
  bundle exec rspec --format progress
177
201
 
178
202
  - name: Test benchmark execution
179
203
  run: |
204
+ IMAGE_TAG=$(echo "${{ steps.meta.outputs.tags }}" | head -n1)
205
+ echo "Testing benchmark execution with image: $IMAGE_TAG"
180
206
  mkdir -p docker-test-results
181
207
 
182
208
  # Run a comprehensive but quick benchmark
183
209
  docker run --rm \
184
210
  -v $(pwd)/docker-test-results:/app/results \
185
- ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}-ruby-${{ matrix.ruby-version }} \
211
+ "$IMAGE_TAG" \
186
212
  bundle exec serialbench benchmark \
187
213
  --formats xml json yaml toml \
188
214
  --iterations 2 \
@@ -0,0 +1,15 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ name: rake
4
+
5
+ on:
6
+ push:
7
+ branches: [ master, main ]
8
+ tags: [ v* ]
9
+ pull_request:
10
+
11
+ jobs:
12
+ rake:
13
+ uses: metanorma/ci/.github/workflows/generic-rake.yml@main
14
+ secrets:
15
+ pat_token: ${{ secrets.METANORMA_CI_PAT_TOKEN }}
data/Gemfile CHANGED
@@ -2,8 +2,9 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
+ gem 'lutaml-model', git: 'https://github.com/lutaml/lutaml-model.git'
5
6
  gem 'rake'
6
7
  gem 'rspec'
7
8
  gem 'rubocop'
8
- gem 'rubocop-rspec'
9
9
  gem 'rubocop-performance'
10
+ gem 'rubocop-rspec'