taurus 0.1.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.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +8 -0
  4. data/CHANGELOG.md +518 -0
  5. data/CLAUDE.md +104 -0
  6. data/LICENSE.md +33 -0
  7. data/README.adoc +1529 -0
  8. data/Rakefile +7 -0
  9. data/TODO.impl/01-architecture.md +217 -0
  10. data/TODO.impl/02-ffi-declarations.md +236 -0
  11. data/TODO.impl/03-document-node-element-nodeset.md +382 -0
  12. data/TODO.impl/04-sax-parser.md +203 -0
  13. data/TODO.impl/05-serialize-c14n-memory-specs-css.md +276 -0
  14. data/benchmark/README.md +168 -0
  15. data/benchmark/taurus_vs_nokogiri.rb +105 -0
  16. data/docs/ARCHITECTURE.adoc +559 -0
  17. data/docs/BUILD.md +395 -0
  18. data/docs/ERROR_MESSAGES.md +458 -0
  19. data/docs/FFI_ARCHITECTURE.md +439 -0
  20. data/docs/FUTURE_VISION.md +303 -0
  21. data/docs/GITHUB_ACTIONS.md +293 -0
  22. data/docs/OPTIMIZATIONS_IMPLEMENTED.adoc +459 -0
  23. data/docs/PERFORMANCE.adoc +668 -0
  24. data/docs/PERFORMANCE.md +448 -0
  25. data/docs/RELEASE_NOTES_v1.0.0.md +515 -0
  26. data/docs/XPATH_SPEC_COMPLIANCE.md +298 -0
  27. data/docs/completion/taurus.bash +86 -0
  28. data/docs/completion/taurus.zsh +74 -0
  29. data/docs/man/taurus-format.1 +227 -0
  30. data/docs/man/taurus-parse.1 +178 -0
  31. data/docs/man/taurus-xpath.1 +312 -0
  32. data/docs/man/taurus.1 +160 -0
  33. data/docs/v0.9.0_PERFORMANCE_IMPROVEMENTS.md +217 -0
  34. data/docs/v0.9.0_RELEASE_SUMMARY.md +281 -0
  35. data/docs/v1.0.0_CONTINUATION_PLAN.md +172 -0
  36. data/docs/v1.0.0_CONTINUATION_PROMPT.md +382 -0
  37. data/docs/v1.0.0_SESSION_6_CONTINUATION.md +434 -0
  38. data/docs/v1.0.0_SESSION_6_PROMPT.md +231 -0
  39. data/docs/v1.0.0_STATUS_TRACKER.md +224 -0
  40. data/docs/v1.1.0_CONTINUATION_PLAN.md +299 -0
  41. data/docs/v1.1.0_FINAL_CONTINUATION_PLAN.md +201 -0
  42. data/docs/v1.1.0_SESSION_3_PROMPT.md +223 -0
  43. data/docs/v1.1.0_STATUS_TRACKER.md +355 -0
  44. data/docs/xml-performance.adoc +115 -0
  45. data/docs/xpath-performance.adoc +379 -0
  46. data/lib/taurus/version.rb +5 -0
  47. data/lib/taurus/xml/attr.rb +43 -0
  48. data/lib/taurus/xml/c14n.rb +23 -0
  49. data/lib/taurus/xml/cdata.rb +16 -0
  50. data/lib/taurus/xml/comment.rb +16 -0
  51. data/lib/taurus/xml/css_to_xpath.rb +177 -0
  52. data/lib/taurus/xml/doc_type.rb +54 -0
  53. data/lib/taurus/xml/document.rb +202 -0
  54. data/lib/taurus/xml/document_fragment.rb +42 -0
  55. data/lib/taurus/xml/element.rb +278 -0
  56. data/lib/taurus/xml/ffi.rb +420 -0
  57. data/lib/taurus/xml/namespace.rb +43 -0
  58. data/lib/taurus/xml/node.rb +221 -0
  59. data/lib/taurus/xml/node_set.rb +143 -0
  60. data/lib/taurus/xml/parse_options.rb +19 -0
  61. data/lib/taurus/xml/processing_instruction.rb +26 -0
  62. data/lib/taurus/xml/sax/document.rb +45 -0
  63. data/lib/taurus/xml/sax/parser.rb +148 -0
  64. data/lib/taurus/xml/sax.rb +12 -0
  65. data/lib/taurus/xml/searchable.rb +93 -0
  66. data/lib/taurus/xml/text.rb +16 -0
  67. data/lib/taurus/xml.rb +29 -0
  68. data/lib/taurus.rb +7 -0
  69. data/taurus.gemspec +42 -0
  70. metadata +157 -0
@@ -0,0 +1,303 @@
1
+ # Future Vision: Taurus Beyond v0.4.0
2
+
3
+ **Created**: 2025-01-29
4
+ **Status**: Planning Document
5
+ **Context**: Long-term vision from TODO.libtaurus.md
6
+
7
+ ## Overview
8
+
9
+ This document captures the long-term architectural vision for Taurus, including transformation into libtaurus (a reusable C library) and enhanced features. This represents work beyond v0.4.0 and likely v0.5.0+.
10
+
11
+ ## Vision: libtaurus - Reusable C Library
12
+
13
+ ### Goal
14
+
15
+ Refactor Taurus into **libtaurus**, a standalone C library that can be:
16
+ - Linked into other C/C++ projects
17
+ - Used by the Taurus CLI (written in C)
18
+ - Wrapped by the Ruby gem (taurus)
19
+ - Integrated into any language with C FFI
20
+
21
+ ### Architecture
22
+
23
+ ```
24
+ ┌─────────────────────────────────────────┐
25
+ │ Language Bindings │
26
+ │ ┌──────────┐ ┌──────────┐ ┌────────┐│
27
+ │ │ Ruby │ │ Python │ │ Node ││
28
+ │ │ Gem │ │ Package │ │ Module││
29
+ │ └──────────┘ └──────────┘ └────────┘│
30
+ └─────────────────────────────────────────┘
31
+
32
+
33
+ ┌─────────────────────────────────────────┐
34
+ │ libtaurus.so │
35
+ │ (Core C Library + API) │
36
+ │ ┌─────────────────────────────────────┐│
37
+ │ │ XML Parser (SAX/StAX/DOM) ││
38
+ │ │ XPath 1.0 Engine ││
39
+ │ │ XML Namespaces 1.0 ││
40
+ │ │ Pretty Printing ││
41
+ │ │ Memory Management ││
42
+ │ └─────────────────────────────────────┘│
43
+ └─────────────────────────────────────────┘
44
+
45
+
46
+ ┌─────────────────────────────────────────┐
47
+ │ CLI Applications │
48
+ │ ┌──────────┐ ┌──────────┐ │
49
+ │ │ taurus │ │ Custom │ │
50
+ │ │ CLI │ │ Tools │ │
51
+ │ └──────────┘ └──────────┘ │
52
+ └─────────────────────────────────────────┘
53
+ ```
54
+
55
+ ### Components
56
+
57
+ #### 1. libtaurus (Core C Library)
58
+ - **Pure C implementation** with clean API
59
+ - **Zero dependencies** (no libxml2)
60
+ - **Thread-safe** operations
61
+ - **Memory efficient** with configurable allocators
62
+ - **Cross-platform** (Linux, macOS, Windows, BSD)
63
+ - **CMake build system**
64
+
65
+ **Features**:
66
+ - XML parsing (SAX, StAX, DOM modes)
67
+ - XPath 1.0 evaluation
68
+ - XML Namespaces 1.0
69
+ - XML pretty-printing
70
+ - Error handling with detailed messages
71
+ - Memory management with custom allocators
72
+
73
+ **API Design**:
74
+ ```c
75
+ // Core parsing
76
+ taurus_document_t* taurus_parse_string(const char* xml, size_t len, taurus_options_t* opts);
77
+ taurus_document_t* taurus_parse_file(const char* filename, taurus_options_t* opts);
78
+
79
+ // XPath evaluation
80
+ taurus_nodeset_t* taurus_xpath_eval(taurus_document_t* doc, const char* expr);
81
+
82
+ // Pretty printing
83
+ char* taurus_format_xml(taurus_document_t* doc, taurus_format_options_t* opts);
84
+
85
+ // Memory management
86
+ void taurus_document_free(taurus_document_t* doc);
87
+ void taurus_nodeset_free(taurus_nodeset_t* nodeset);
88
+ ```
89
+
90
+ #### 2. Taurus CLI (C Application)
91
+ - **Standalone binary** linking libtaurus
92
+ - **xmllint-compatible** commands and options
93
+ - **Fast startup** (C binary, no Ruby overhead)
94
+ - **Shell-friendly** with proper exit codes
95
+
96
+ **Commands** (inspired by xmllint):
97
+ ```bash
98
+ # XPath queries
99
+ taurus --xpath "//book[@price > 20]" document.xml
100
+
101
+ # Pretty printing
102
+ taurus --format --indent 2 document.xml
103
+ taurus --format --compact document.xml
104
+
105
+ # Validation
106
+ taurus --validate document.xml
107
+
108
+ # Schema validation (future)
109
+ taurus --schema schema.xsd document.xml
110
+
111
+ # Debugging
112
+ taurus --debug --xpath "//item" document.xml
113
+ taurus --timing document.xml
114
+ ```
115
+
116
+ #### 3. Ruby Gem (High-Level Interface)
117
+ - **Thin wrapper** around libtaurus
118
+ - **Ruby-friendly** API with blocks and iterators
119
+ - **Current API preserved** for backward
120
+
121
+ compatibility
122
+ - **Performance** close to direct C usage
123
+
124
+ **Implementation**:
125
+ ```ruby
126
+ # Current approach (stays the same externally)
127
+ doc = Taurus.parse(xml)
128
+ results = doc.xpath('//book')
129
+
130
+ # Internally backed by libtaurus C library
131
+ ```
132
+
133
+ ### Parsing Modes
134
+
135
+ #### SAX (Event-Driven)
136
+ - **Memory efficient**: Stream processing
137
+ - **Fast**: No DOM construction
138
+ - **Use case**: Large documents, extraction
139
+
140
+ ```c
141
+ taurus_sax_parse(xml, &callbacks, user_data);
142
+ ```
143
+
144
+ #### StAX (Pull Parsing)
145
+ - **Control**: Application pulls events
146
+ - **Flexible**: Skip unwanted sections
147
+ - **Use case**: Selective parsing
148
+
149
+ ```c
150
+ taurus_reader_t* reader = taurus_reader_new(xml);
151
+ while (taurus_reader_read(reader)) {
152
+ // Process events
153
+ }
154
+ ```
155
+
156
+ #### DOM (Tree Construction)
157
+ - **Convenient**: Full tree in memory
158
+ - **XPath**: Enables complex queries
159
+ - **Use case**: Current Taurus behavior
160
+
161
+ ```c
162
+ taurus_document_t* doc = taurus_parse_string(xml, len, NULL);
163
+ ```
164
+
165
+ ### XML Pretty Printing
166
+
167
+ **Features**:
168
+ - Configurable indentation (spaces/tabs)
169
+ - Line wrapping at specified column
170
+ - Attribute formatting (inline/separate lines)
171
+ - Whitespace normalization
172
+ - Compact mode (remove all whitespace)
173
+
174
+ **Options**:
175
+ ```c
176
+ typedef struct {
177
+ int indent_size; // 2, 4, etc.
178
+ bool use_tabs; // tabs vs spaces
179
+ int wrap_column; // 80, 120, etc.
180
+ bool compact; // remove whitespace
181
+ bool sort_attributes; // alphabetical
182
+ } taurus_format_options_t;
183
+ ```
184
+
185
+ ## Implementation Roadmap
186
+
187
+ ### Phase 1: API Stabilization (v0.4.0-v0.5.0)
188
+ - Complete current Ruby API
189
+ - Ensure comprehensive test coverage
190
+ - Document all behaviors
191
+ - Establish API contracts
192
+
193
+ ### Phase 2: C API Design (v0.6.0)
194
+ - Design libtaurus C API
195
+ - Create header files
196
+ - Document API conventions
197
+ - Plan memory management
198
+
199
+ ### Phase 3: Refactoring (v0.7.0)
200
+ - Extract C code into libtaurus
201
+ - Maintain Ruby bindings
202
+ - Separate concerns cleanly
203
+ - Add C unit tests
204
+
205
+ ### Phase 4: Multi-Mode Parsing (v0.8.0)
206
+ - Implement SAX parsing
207
+ - Implement StAX parsing
208
+ - Keep DOM mode (current)
209
+ - Add mode selection API
210
+
211
+ ### Phase 5: CLI Implementation (v0.9.0)
212
+ - Build C CLI using libtaurus
213
+ - Implement xmllint-compatible commands
214
+ - Add taurus-specific features
215
+ - Document CLI usage
216
+
217
+ ### Phase 6: Pretty Printing (v0.9.0)
218
+ - Implement formatting engine
219
+ - Add configuration options
220
+ - Support various styles
221
+ - Integrate with CLI
222
+
223
+ ### Phase 7: CMake Build (v0.10.0)
224
+ - Create CMake build system
225
+ - Support cross-compilation
226
+ - Generate pkg-config files
227
+ - Build shared/static libraries
228
+
229
+ ### Phase 8: Language Bindings (v1.0.0+)
230
+ - Python bindings
231
+ - Node.js bindings
232
+ - Other language bindings
233
+ - Consistent API across languages
234
+
235
+ ## Technical Considerations
236
+
237
+ ### Memory Management
238
+ - **Allocator API**: Allow custom allocators
239
+ - **Reference Counting**: For shared resources
240
+ - **Pool Allocators**: For high-frequency allocations
241
+ - **Leak Detection**: Built-in debugging support
242
+
243
+ ### Thread Safety
244
+ - **Immutable Documents**: Safe to share
245
+ - **Context Isolation**: Per-thread contexts
246
+ - **Lock-Free Reads**: Where possible
247
+ - **Documented Guarantees**: Clear thread-safety docs
248
+
249
+ ### Error Handling
250
+ - **Error Codes**: Standard C approach
251
+ - **Error Context**: Detailed error information
252
+ - **Recovery**: Graceful error handling
253
+ - **Logging**: Configurable logging levels
254
+
255
+ ### Performance
256
+ - **Zero-Copy**: Where possible
257
+ - **SIMD**: Continue optimizations
258
+ - **Memory Pools**: Reduce allocations
259
+ - **Lazy Evaluation**: Defer expensive operations
260
+
261
+ ## Benefits
262
+
263
+ ### For C/C++ Projects
264
+ - **Direct Integration**: No Ruby dependency
265
+ - **Fast Performance**: Native C speed
266
+ - **Small Footprint**: Minimal binary size
267
+ - **Standard API**: Familiar C patterns
268
+
269
+ ### For Other Languages
270
+ - **Easy Bindings**: Standard C FFI
271
+ - **Consistent Behavior**: Same core library
272
+ - **Native Performance**: No interpretation overhead
273
+ - **Wide Compatibility**: Works everywhere
274
+
275
+ ### For Taurus Users
276
+ - **Faster CLI**: C binary startup
277
+ - **More Modes**: SAX/StAX options
278
+ - **Better Tools**: Enhanced CLI features
279
+ - **Same API**: Backward compatible
280
+
281
+ ## Migration Path
282
+
283
+ 1. **v0.4.0**: Complete documentation
284
+ 2. **v0.5.0**: Namespace prefixes, API finalization
285
+ 3. **v0.6.0**: Design and prototype libtaurus API
286
+ 4. **v0.7.0**: Refactor to libtaurus + Ruby bindings
287
+ 5. **v0.8.0**: Add SAX/StAX modes
288
+ 6. **v0.9.0**: C CLI + pretty printing
289
+ 7. **v1.0.0**: Stable libtaurus release
290
+
291
+ ## Timeline
292
+
293
+ - **Near-term (2025)**: v0.4.0-v0.5.0 (Ruby focus)
294
+ - **Mid-term (2026)**: v0.6.0-v0.8.0 (libtaurus extraction)
295
+ - **Long-term (2027+)**: v0.9.0-v1.0.0 (Multi-language, stable)
296
+
297
+ ## Conclusion
298
+
299
+ This vision transforms Taurus from a Ruby gem into a universal XML processing library usable from any language. The core libtaurus library would provide fast, reliable XML processing while maintaining backward compatibility with the current Ruby API.
300
+
301
+ **Key Principle**: Evolution, not revolution. Each step maintains compatibility while adding new capabilities.
302
+
303
+ **Next Review**: After v0.5.0 completion (2025 Q2)
@@ -0,0 +1,293 @@
1
+ # GitHub Actions CI/CD Setup
2
+
3
+ ## Overview
4
+
5
+ Taurus uses GitHub Actions for continuous integration, testing, and automated releases across multiple platforms and Ruby versions.
6
+
7
+ ## Workflows
8
+
9
+ ### 1. CI/CD Workflow (`.github/workflows/main.yml`)
10
+
11
+ **Triggers:**
12
+ - Push to `main` branch
13
+ - Pull requests
14
+ - Manual dispatch
15
+
16
+ **Features:**
17
+ - Multi-platform testing (Ubuntu x64/ARM64, macOS Intel/Apple Silicon)
18
+ - Multiple Ruby versions (3.0, 3.1, 3.2, 3.3, 3.4)
19
+ - Matrix-based configuration from `matrix.json`
20
+ - C extension compilation
21
+ - Ruby (RSpec) and C (Google Test) unit tests
22
+ - Performance benchmarks
23
+ - RuboCop linting
24
+ - Artifact collection
25
+
26
+ **Jobs:**
27
+ 1. `load-matrix` - Loads platform/Ruby combinations from matrix.json
28
+ 2. `test` - Runs full test suite on all matrix configurations
29
+ 3. `benchmark` - Performance benchmarks on Ubuntu and macOS
30
+ 4. `lint` - Code quality checks with RuboCop
31
+ 5. `all-checks` - Verifies all tests passed
32
+
33
+ ### 2. Release Workflow (`.github/workflows/release.yml`)
34
+
35
+ **Triggers:**
36
+ - Push of version tags (`v*`)
37
+ - Manual dispatch with version input
38
+
39
+ **Features:**
40
+ - Cross-platform native gem building
41
+ - Automated GitHub releases
42
+ - RubyGems.org publication
43
+ - Installation verification
44
+
45
+ **Jobs:**
46
+ 1. `build-native-gems` - Builds native gems for:
47
+ - x86_64-linux (Ubuntu 20.04+)
48
+ - x86_64-darwin (Intel Macs)
49
+ - arm64-darwin (Apple Silicon)
50
+
51
+ 2. `build-source-gem` - Builds source gem for other platforms
52
+
53
+ 3. `create-release` - Creates GitHub release with:
54
+ - All gem files
55
+ - SHA256 checksums
56
+ - Release notes
57
+
58
+ 4. `publish-rubygems` - Publishes to RubyGems.org
59
+
60
+ 5. `verify-release` - Tests installation from RubyGems on multiple platforms
61
+
62
+ ## Matrix Configuration
63
+
64
+ The `matrix.json` file defines all platform/Ruby combinations for testing:
65
+
66
+ ```json
67
+ [
68
+ {
69
+ "runner": "ubuntu-22.04",
70
+ "os": "ubuntu",
71
+ "arch": "x64",
72
+ "ruby": "3.3",
73
+ "name": "ubuntu-22-ruby-3.3"
74
+ },
75
+ ...
76
+ ]
77
+ ```
78
+
79
+ **Supported Platforms:**
80
+ - Ubuntu 22.04 (x64, ARM64)
81
+ - macOS 13 (Intel)
82
+ - macOS latest (Apple Silicon)
83
+
84
+ **Ruby Versions:**
85
+ - 3.0, 3.1, 3.2, 3.3, 3.4
86
+
87
+ ## Setup Requirements
88
+
89
+ ### For CI/CD
90
+
91
+ No additional setup required - workflows run automatically on push/PR.
92
+
93
+ ### For Releases
94
+
95
+ Required GitHub secrets:
96
+ - `RUBYGEMS_API_KEY` - API key for publishing to RubyGems.org
97
+
98
+ **To set up:**
99
+ 1. Get API key from https://rubygems.org/profile/edit
100
+ 2. Go to repository Settings → Secrets and variables → Actions
101
+ 3. Add new secret named `RUBYGEMS_API_KEY`
102
+
103
+ ## Creating a Release
104
+
105
+ ### Automatic (Recommended)
106
+
107
+ 1. Update version in `lib/taurus/version.rb`
108
+ 2. Update `CHANGELOG.md`
109
+ 3. Commit changes: `git commit -m "chore: bump version to X.Y.Z"`
110
+ 4. Create and push tag:
111
+ ```bash
112
+ git tag v0.1.0
113
+ git push origin v0.1.0
114
+ ```
115
+ 5. GitHub Actions automatically:
116
+ - Builds native gems
117
+ - Creates GitHub release
118
+ - Publishes to RubyGems
119
+ - Verifies installation
120
+
121
+ ### Manual Dispatch
122
+
123
+ 1. Go to Actions → Release workflow
124
+ 2. Click "Run workflow"
125
+ 3. Enter version (e.g., `0.1.0`)
126
+ 4. Click "Run workflow"
127
+
128
+ ## Artifacts
129
+
130
+ ### Test Artifacts
131
+
132
+ Each test run produces:
133
+ - Compiled native extensions (`.so`/`.bundle` files)
134
+ - SHA256 checksums
135
+ - Retention: 30 days
136
+
137
+ ### Release Artifacts
138
+
139
+ Each release includes:
140
+ - Source gem (all platforms)
141
+ - Native gems (Linux x64, macOS x64, macOS ARM64)
142
+ - Combined SHA256 checksums
143
+ - Retention: Permanent (GitHub release)
144
+
145
+ ## Monitoring
146
+
147
+ ### Build Status
148
+
149
+ Check build status:
150
+ - Badge on README.md
151
+ - Actions tab in GitHub repository
152
+ - Email notifications (if configured)
153
+
154
+ ### Performance Tracking
155
+
156
+ Benchmark artifacts available for:
157
+ - Ubuntu latest
158
+ - macOS latest
159
+
160
+ Download from Actions → Workflow run → Artifacts
161
+
162
+ ## Troubleshooting
163
+
164
+ ### Build Failures
165
+
166
+ **C Extension Won't Compile:**
167
+ ```bash
168
+ # Local reproduction:
169
+ bundle exec rake clean
170
+ bundle exec rake compile
171
+ ```
172
+
173
+ **Test Failures:**
174
+ ```bash
175
+ # Run tests locally:
176
+ bundle exec rake spec # Ruby tests
177
+ bundle exec rake test_c # C tests
178
+ ```
179
+
180
+ **Cross-compilation Issues:**
181
+ - Check rake-compiler-dock is latest version
182
+ - Verify extconf.rb lists all source files
183
+ - Check for platform-specific #ifdef code
184
+
185
+ ### Release Failures
186
+
187
+ **Native Gem Build Fails:**
188
+ - Check rake-compiler-dock logs
189
+ - Verify source files compile on target platform
190
+ - Test locally with Docker:
191
+ ```bash
192
+ bundle exec rake-compiler-dock bash
193
+ ```
194
+
195
+ **RubyGems Publication Fails:**
196
+ - Verify `RUBYGEMS_API_KEY` secret is set
197
+ - Check gem name isn't already taken
198
+ - Ensure version number is unique
199
+
200
+ **Verification Fails:**
201
+ - Wait longer (gem indexing lag)
202
+ - Check if gem published successfully
203
+ - Verify gem installs manually:
204
+ ```bash
205
+ gem install taurus -v X.Y.Z
206
+ ```
207
+
208
+ ## Best Practices
209
+
210
+ ### Before Merging PRs
211
+
212
+ - Ensure all tests pass
213
+ - Check benchmark results for regressions
214
+ - Review RuboCop warnings
215
+ - Test on multiple platforms if changing C code
216
+
217
+ ### Before Releasing
218
+
219
+ 1. Run full test suite locally
220
+ 2. Update CHANGELOG.md
221
+ 3. Bump version number
222
+ 4. Test installation from local gem:
223
+ ```bash
224
+ gem build taurus.gemspec
225
+ gem install taurus-X.Y.Z.gem
226
+ ```
227
+ 5. Create tag and push
228
+
229
+ ### Maintaining Matrix
230
+
231
+ When adding platforms:
232
+ 1. Add to `matrix.json`
233
+ 2. Test locally if possible
234
+ 3. Monitor first CI run
235
+ 4. Update documentation
236
+
237
+ When deprecating Ruby:
238
+ 1. Remove from `matrix.json`
239
+ 2. Update README.md
240
+ 3. Update gemspec `required_ruby_version`
241
+
242
+ ## Performance Considerations
243
+
244
+ ### CI Speed
245
+
246
+ Average runtime:
247
+ - Test job: 5-10 minutes per platform
248
+ - Benchmark: 10-15 minutes per platform
249
+ - Total (parallel): ~15-20 minutes
250
+
251
+ ### Release Speed
252
+
253
+ Average runtime:
254
+ - Build gems: ~10 minutes (parallel)
255
+ - Create release: ~2 minutes
256
+ - Publish: ~5 minutes
257
+ - Verify: ~10 minutes
258
+ - Total: ~30 minutes
259
+
260
+ ## Future Enhancements
261
+
262
+ ### Planned
263
+
264
+ - Windows support (MSYS2/MinGW)
265
+ - Additional ARM64 platforms
266
+ - Performance trend tracking
267
+ - Code coverage reporting
268
+ - Security scanning (Dependabot, CodeQL)
269
+
270
+ ### Under Consideration
271
+
272
+ - Nightly builds with latest Ruby
273
+ - Cross-Ruby compatibility matrix
274
+ - Memory profiling in CI
275
+ - Benchmark comparison vs. Nokogiri/Ox
276
+
277
+ ## Resources
278
+
279
+ - [GitHub Actions Documentation](https://docs.github.com/en/actions)
280
+ - [ruby/setup-ruby Action](https://github.com/ruby/setup-ruby)
281
+ - [rake-compiler Documentation](https://github.com/rake-compiler/rake-compiler)
282
+ - [RubyGems API Documentation](https://guides.rubygems.org/rubygems-org-api/)
283
+
284
+ ## Support
285
+
286
+ For CI/CD issues:
287
+ 1. Check Actions logs
288
+ 2. Search existing GitHub issues
289
+ 3. Create new issue with:
290
+ - Workflow run URL
291
+ - Platform/Ruby version
292
+ - Error messages
293
+ - Steps to reproduce