expressir 1.2.11-aarch64-linux → 2.4.29-aarch64-linux

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 (467) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config.toml +3 -0
  3. data/.github/scripts/test_installed_gem.rb +34 -0
  4. data/.github/workflows/codeql.yml +35 -0
  5. data/.github/workflows/docs.yml +99 -0
  6. data/.github/workflows/links.yml +100 -0
  7. data/.github/workflows/native-gems.yml +201 -0
  8. data/.github/workflows/rake.yml +10 -296
  9. data/.github/workflows/release.yml +26 -114
  10. data/.github/workflows/rust-ext.yml +41 -0
  11. data/.github/workflows/stress.yml +36 -0
  12. data/.github/workflows/validate_schemas.yml +48 -0
  13. data/.github/workflows/verify_remarks.yml +33 -0
  14. data/.gitignore +33 -1
  15. data/.rubocop.yml +11 -11
  16. data/.rubocop_todo.yml +297 -0
  17. data/CHANGELOG.md +159 -0
  18. data/Gemfile +15 -1
  19. data/README.adoc +2675 -47
  20. data/Rakefile +34 -10
  21. data/TODO.bugs/01-stale-transformer-autoload.md +39 -0
  22. data/TODO.bugs/02-parser-class-instance-vars.md +36 -0
  23. data/TODO.bugs/03-builder-mutable-state.md +43 -0
  24. data/TODO.bugs/04-formatter-public-send-dispatch.md +53 -0
  25. data/TODO.bugs/05-anonymous-formatter-subclass.md +45 -0
  26. data/TODO.bugs/06-collection-registry-single-source.md +53 -0
  27. data/TODO.bugs/07-require-relative-cleanup.md +42 -0
  28. data/TODO.bugs/08-require-expressir-in-commands.md +34 -0
  29. data/TODO.bugs/09-parser-split.md +53 -0
  30. data/TODO.bugs/10-to-s-override.md +42 -0
  31. data/TODO.bugs/11-parser-class-variables.md +39 -0
  32. data/TODO.bugs/12-marker-modules-vs-registry.md +64 -0
  33. data/TODO.bugs/13-string-literal-scanner-limitation.md +52 -0
  34. data/TODO.bugs/14-model-formatting-leak.md +30 -0
  35. data/TODO.bugs/15-expression-children-macro.md +27 -0
  36. data/TODO.bugs/16-pretty-formatter-duplication.md +28 -0
  37. data/TODO.bugs/17-snake-case-cache-mutable-constant.md +28 -0
  38. data/TODO.bugs/18-const-get-private-constants.md +30 -0
  39. data/TODO.bugs/19-format-methods-public.md +22 -0
  40. data/TODO.bugs/20-coverage-nested-entities-dedup.md +20 -0
  41. data/TODO.bugs/21-operator-tokens-secondary-dispatch.md +21 -0
  42. data/TODO.bugs/22-builder-fast-path-wrappers.md +32 -0
  43. data/TODO.bugs/23-coverage-inverse-maps.md +21 -0
  44. data/TODO.bugs/24-streaming-builder-complexity.md +19 -0
  45. data/TODO.bugs/25-debug-puts-in-production.md +21 -0
  46. data/TODO.bugs/26-generic-entity-children-misplaced.md +21 -0
  47. data/TODO.bugs/27-package-build-god-method.md +19 -0
  48. data/TODO.bugs/28-package-god-class.md +30 -0
  49. data/TODO.bugs/29-validate-ascii-god-class.md +24 -0
  50. data/TODO.bugs/30-unicode-map-extraction.md +19 -0
  51. data/TODO.bugs/README.md +43 -0
  52. data/TODO.max-perf/01-restore-ci-green.md +36 -0
  53. data/TODO.max-perf/02-streaming-parse-path.md +31 -0
  54. data/TODO.max-perf/03-cli-parallel-opt-in.md +27 -0
  55. data/TODO.max-perf/04-benchmark-harness.md +28 -0
  56. data/TODO.max-perf/05-parallel-fidelity-specs.md +22 -0
  57. data/TODO.max-perf/06-builder-cpu-audit.md +41 -0
  58. data/TODO.max-perf/07-upstream-parsanol-roadmap.md +27 -0
  59. data/TODO.max-perf/08-builder-build-perf.md +45 -0
  60. data/TODO.max-perf/09-grammar-cold-start.md +25 -0
  61. data/TODO.max-perf/10-parser-facade-hygiene.md +23 -0
  62. data/TODO.max-perf/11-ci-green-closeout.md +25 -0
  63. data/TODO.max-perf/12-require-boot-profile.md +25 -0
  64. data/TODO.max-perf/13-key-conversion-specs.md +26 -0
  65. data/TODO.max-perf/14-builder-call-handler-audit.md +28 -0
  66. data/TODO.parity-ee/00-overview.md +76 -0
  67. data/TODO.parity-ee/01-annex-g-rule-extraction.md +41 -0
  68. data/TODO.parity-ee/02-eeng-algorithm-inventory.md +8 -0
  69. data/TODO.parity-ee/03-eeng-oracle-harness.md +33 -0
  70. data/TODO.parity-ee/04-shtolo-concatenate.md +44 -0
  71. data/TODO.parity-ee/05-shtolo-longform-flatten.md +53 -0
  72. data/TODO.parity-ee/06-interface-scheduling-parity.md +47 -0
  73. data/TODO.parity-ee/07-semantic-checks-port.md +35 -0
  74. data/TODO.parity-ee/08-pretty-roundtrip-gate.md +27 -0
  75. data/TODO.parity-ee/09-smrl-index-and-listing.md +22 -0
  76. data/TODO.parity-ee/10-interface-dot-graph.md +21 -0
  77. data/TODO.parity-ee/11-import-eeng-tests.md +79 -0
  78. data/TODO.parity-ee/12-full-check-catalog.md +67 -0
  79. data/TODO.parity-ee/13-population-p21.md +54 -0
  80. data/TODO.parity-ee/14-shtolo-completion.md +44 -0
  81. data/TODO.parity-ee/15-part28-xml.md +51 -0
  82. data/TODO.parity-ee/16-compare-patch.md +48 -0
  83. data/TODO.parity-ee/17-official-tests.md +42 -0
  84. data/TODO.parity-ee/18-mim-mapping.md +47 -0
  85. data/TODO.parity-ee/19-architecture.md +97 -0
  86. data/TODO.parity-ee/parity-matrix.md +108 -0
  87. data/TODO.refpath-v2/00-overview.md +64 -0
  88. data/TODO.suma-improvements/00-overview.md +23 -0
  89. data/TODO.suma-improvements/01-prebuilt-platform-gems.md +33 -0
  90. data/TODO.suma-improvements/02-suma-e2e.md +39 -0
  91. data/TODO.suma-improvements/03-item-graph.md +22 -0
  92. data/TODO.suma-improvements/04-compiled-set-default.md +16 -0
  93. data/TODO.suma-improvements/05-validation-in-docs.md +17 -0
  94. data/TODO.suma-improvements/06-memory-remeasure.md +36 -0
  95. data/TODO.suma-improvements/07-part28-xml.md +15 -0
  96. data/TODO.suma-improvements/08-windows-gnu-toolchain.md +15 -0
  97. data/TODO.suma-improvements/09-checker-tranche3.md +13 -0
  98. data/TODO.suma-improvements/10-expressdoc.md +8 -0
  99. data/benchmark/srl_benchmark.rb +458 -0
  100. data/benchmark/srl_native_benchmark.rb +146 -0
  101. data/benchmark/srl_ruby_benchmark.rb +132 -0
  102. data/bin/rspec +2 -1
  103. data/docs/Gemfile +12 -0
  104. data/docs/_config.yml +141 -0
  105. data/docs/_guides/changes/changes-format.adoc +778 -0
  106. data/docs/_guides/changes/importing-eengine.adoc +898 -0
  107. data/docs/_guides/changes/index.adoc +396 -0
  108. data/docs/_guides/changes/programmatic-usage.adoc +1038 -0
  109. data/docs/_guides/changes/validating-changes.adoc +681 -0
  110. data/docs/_guides/cli/benchmark-performance.adoc +834 -0
  111. data/docs/_guides/cli/coverage-analysis.adoc +921 -0
  112. data/docs/_guides/cli/format-schemas.adoc +547 -0
  113. data/docs/_guides/cli/index.adoc +8 -0
  114. data/docs/_guides/cli/managing-changes.adoc +927 -0
  115. data/docs/_guides/cli/validate-ascii.adoc +645 -0
  116. data/docs/_guides/cli/validate-schemas.adoc +534 -0
  117. data/docs/_guides/formatter/formatter-architecture.adoc +401 -0
  118. data/docs/_guides/index.adoc +165 -0
  119. data/docs/_guides/ler/creating-packages.adoc +664 -0
  120. data/docs/_guides/ler/index.adoc +305 -0
  121. data/docs/_guides/ler/loading-packages.adoc +707 -0
  122. data/docs/_guides/ler/package-formats.adoc +748 -0
  123. data/docs/_guides/ler/querying-packages.adoc +826 -0
  124. data/docs/_guides/ler/step-packages.adoc +385 -0
  125. data/docs/_guides/ler/validating-packages.adoc +750 -0
  126. data/docs/_guides/liquid/basic-templates.adoc +813 -0
  127. data/docs/_guides/liquid/documentation-generation.adoc +1042 -0
  128. data/docs/_guides/liquid/drops-reference.adoc +829 -0
  129. data/docs/_guides/liquid/filters-and-tags.adoc +912 -0
  130. data/docs/_guides/liquid/index.adoc +468 -0
  131. data/docs/_guides/manifests/creating-manifests.adoc +483 -0
  132. data/docs/_guides/manifests/index.adoc +307 -0
  133. data/docs/_guides/manifests/resolving-manifests.adoc +557 -0
  134. data/docs/_guides/manifests/validating-manifests.adoc +713 -0
  135. data/docs/_guides/ruby-api/formatting-schemas.adoc +605 -0
  136. data/docs/_guides/ruby-api/index.adoc +257 -0
  137. data/docs/_guides/ruby-api/parsing-files.adoc +421 -0
  138. data/docs/_guides/ruby-api/search-engine.adoc +609 -0
  139. data/docs/_guides/ruby-api/working-with-repository.adoc +577 -0
  140. data/docs/_pages/data-model.adoc +665 -0
  141. data/docs/_pages/express-language.adoc +506 -0
  142. data/docs/_pages/getting-started.adoc +414 -0
  143. data/docs/_pages/index.adoc +116 -0
  144. data/docs/_pages/introduction.adoc +256 -0
  145. data/docs/_pages/ler-packages.adoc +837 -0
  146. data/docs/_pages/parsers.adoc +709 -0
  147. data/docs/_pages/schema-manifests.adoc +431 -0
  148. data/docs/_references/index.adoc +228 -0
  149. data/docs/_tutorials/creating-ler-package.adoc +735 -0
  150. data/docs/_tutorials/documentation-coverage.adoc +795 -0
  151. data/docs/_tutorials/formatting-schemas.adoc +89 -0
  152. data/docs/_tutorials/index.adoc +231 -0
  153. data/docs/_tutorials/liquid-templates.adoc +806 -0
  154. data/docs/_tutorials/parsing-your-first-schema.adoc +522 -0
  155. data/docs/_tutorials/querying-schemas.adoc +751 -0
  156. data/docs/_tutorials/working-with-multiple-schemas.adoc +676 -0
  157. data/docs/index.adoc +242 -0
  158. data/docs/lychee.toml +90 -0
  159. data/examples/demo_ler_usage.sh +86 -0
  160. data/examples/ler/README.md +111 -0
  161. data/examples/ler/simple_example.ler +0 -0
  162. data/examples/ler/simple_schema.exp +33 -0
  163. data/examples/ler_build.rb +75 -0
  164. data/examples/ler_cli.rb +79 -0
  165. data/examples/ler_demo_complete.rb +276 -0
  166. data/examples/ler_query.rb +91 -0
  167. data/examples/ler_query_examples.rb +305 -0
  168. data/examples/ler_stats.rb +81 -0
  169. data/examples/phase3_demo.rb +159 -0
  170. data/examples/query_demo_simple.rb +131 -0
  171. data/exe/expressir +6 -17
  172. data/exe/expressir-format +14 -0
  173. data/exe/{format-test → expressir-format-test} +8 -7
  174. data/expressir.gemspec +50 -37
  175. data/lib/expressir/3.2/expressir_core.so +0 -0
  176. data/lib/expressir/3.3/expressir_core.so +0 -0
  177. data/lib/expressir/3.4/expressir_core.so +0 -0
  178. data/lib/expressir/4.0/expressir_core.so +0 -0
  179. data/lib/expressir/benchmark.rb +310 -0
  180. data/lib/expressir/changes/item_change.rb +20 -0
  181. data/lib/expressir/changes/mapping_change.rb +16 -0
  182. data/lib/expressir/changes/schema_change.rb +85 -0
  183. data/lib/expressir/changes/version_change.rb +26 -0
  184. data/lib/expressir/changes.rb +9 -0
  185. data/lib/expressir/cli.rb +138 -11
  186. data/lib/expressir/commands/base.rb +25 -0
  187. data/lib/expressir/commands/benchmark.rb +59 -0
  188. data/lib/expressir/commands/benchmark_cache.rb +80 -0
  189. data/lib/expressir/commands/changes.rb +34 -0
  190. data/lib/expressir/commands/changes_import_eengine.rb +146 -0
  191. data/lib/expressir/commands/changes_validate.rb +63 -0
  192. data/lib/expressir/commands/check.rb +56 -0
  193. data/lib/expressir/commands/clean.rb +20 -0
  194. data/lib/expressir/commands/coverage.rb +458 -0
  195. data/lib/expressir/commands/expand.rb +26 -0
  196. data/lib/expressir/commands/file_violations.rb +70 -0
  197. data/lib/expressir/commands/fix.rb +33 -0
  198. data/lib/expressir/commands/flatten.rb +29 -0
  199. data/lib/expressir/commands/format.rb +43 -0
  200. data/lib/expressir/commands/manifest.rb +420 -0
  201. data/lib/expressir/commands/mapping_validate.rb +68 -0
  202. data/lib/expressir/commands/non_ascii_character.rb +49 -0
  203. data/lib/expressir/commands/non_ascii_violation_collection.rb +301 -0
  204. data/lib/expressir/commands/package.rb +1222 -0
  205. data/lib/expressir/commands/parity_inputs.rb +160 -0
  206. data/lib/expressir/commands/validate.rb +106 -0
  207. data/lib/expressir/commands/validate_ascii.rb +94 -0
  208. data/lib/expressir/commands/validate_load.rb +91 -0
  209. data/lib/expressir/commands/version.rb +9 -0
  210. data/lib/expressir/commands/xsd.rb +23 -0
  211. data/lib/expressir/commands.rb +30 -0
  212. data/lib/expressir/config.rb +40 -3
  213. data/lib/expressir/coverage.rb +510 -0
  214. data/lib/expressir/eengine/arm_compare_report.rb +23 -0
  215. data/lib/expressir/eengine/changes_section.rb +16 -0
  216. data/lib/expressir/eengine/compare_report.rb +69 -0
  217. data/lib/expressir/eengine/mim_compare_report.rb +23 -0
  218. data/lib/expressir/eengine/modified_object.rb +21 -0
  219. data/lib/expressir/eengine.rb +9 -0
  220. data/lib/expressir/errors.rb +113 -0
  221. data/lib/expressir/express/adoc_hyperlink_formatter.rb +30 -0
  222. data/lib/expressir/express/adoc_source_formatter.rb +12 -0
  223. data/lib/expressir/express/ast_key_converter.rb +114 -0
  224. data/lib/expressir/express/builder.rb +277 -0
  225. data/lib/expressir/express/builder_context.rb +22 -0
  226. data/lib/expressir/express/builder_registry.rb +397 -0
  227. data/lib/expressir/express/builders/attribute_decl_builder.rb +32 -0
  228. data/lib/expressir/express/builders/built_in_builder.rb +75 -0
  229. data/lib/expressir/express/builders/constant_builder.rb +108 -0
  230. data/lib/expressir/express/builders/declaration_builder.rb +20 -0
  231. data/lib/expressir/express/builders/derive_clause_builder.rb +14 -0
  232. data/lib/expressir/express/builders/derived_attr_builder.rb +28 -0
  233. data/lib/expressir/express/builders/domain_rule_builder.rb +21 -0
  234. data/lib/expressir/express/builders/entity_decl_builder.rb +116 -0
  235. data/lib/expressir/express/builders/explicit_attr_builder.rb +49 -0
  236. data/lib/expressir/express/builders/expression_builder.rb +416 -0
  237. data/lib/expressir/express/builders/function_decl_builder.rb +86 -0
  238. data/lib/expressir/express/builders/helpers.rb +148 -0
  239. data/lib/expressir/express/builders/interface_builder.rb +151 -0
  240. data/lib/expressir/express/builders/inverse_attr_builder.rb +43 -0
  241. data/lib/expressir/express/builders/inverse_attr_type_builder.rb +30 -0
  242. data/lib/expressir/express/builders/inverse_clause_builder.rb +14 -0
  243. data/lib/expressir/express/builders/literal_builder.rb +93 -0
  244. data/lib/expressir/express/builders/procedure_decl_builder.rb +82 -0
  245. data/lib/expressir/express/builders/qualifier_builder.rb +102 -0
  246. data/lib/expressir/express/builders/reference_builder.rb +18 -0
  247. data/lib/expressir/express/builders/rule_decl_builder.rb +97 -0
  248. data/lib/expressir/express/builders/schema_body_decl_builder.rb +18 -0
  249. data/lib/expressir/express/builders/schema_decl_builder.rb +56 -0
  250. data/lib/expressir/express/builders/schema_version_builder.rb +34 -0
  251. data/lib/expressir/express/builders/simple_id_builder.rb +17 -0
  252. data/lib/expressir/express/builders/statement_builder.rb +243 -0
  253. data/lib/expressir/express/builders/subtype_constraint_builder.rb +166 -0
  254. data/lib/expressir/express/builders/syntax_builder.rb +30 -0
  255. data/lib/expressir/express/builders/type_builder.rb +238 -0
  256. data/lib/expressir/express/builders/type_decl_builder.rb +26 -0
  257. data/lib/expressir/express/builders/unique_clause_builder.rb +20 -0
  258. data/lib/expressir/express/builders/unique_rule_builder.rb +41 -0
  259. data/lib/expressir/express/builders/where_clause_builder.rb +20 -0
  260. data/lib/expressir/express/builders.rb +55 -0
  261. data/lib/expressir/express/cache.rb +43 -18
  262. data/lib/expressir/express/checker.rb +812 -0
  263. data/lib/expressir/express/concatenator.rb +79 -0
  264. data/lib/expressir/express/core.rb +95 -0
  265. data/lib/expressir/express/error.rb +124 -0
  266. data/lib/expressir/express/formatter.rb +89 -1548
  267. data/lib/expressir/express/formatters/data_types_formatter.rb +362 -0
  268. data/lib/expressir/express/formatters/declarations_formatter.rb +753 -0
  269. data/lib/expressir/express/formatters/expressions_formatter.rb +180 -0
  270. data/lib/expressir/express/formatters/literals_formatter.rb +55 -0
  271. data/lib/expressir/express/formatters/references_formatter.rb +53 -0
  272. data/lib/expressir/express/formatters/remark_formatter.rb +270 -0
  273. data/lib/expressir/express/formatters/remark_item_formatter.rb +28 -0
  274. data/lib/expressir/express/formatters/statements_formatter.rb +272 -0
  275. data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +54 -0
  276. data/lib/expressir/express/formatters.rb +22 -0
  277. data/lib/expressir/express/grammar/parser.rb +712 -0
  278. data/lib/expressir/express/grammar.rb +11 -0
  279. data/lib/expressir/express/hyperlink_formatter.rb +4 -5
  280. data/lib/expressir/express/interface_dot.rb +105 -0
  281. data/lib/expressir/express/lazy_repository.rb +211 -0
  282. data/lib/expressir/express/line_map.rb +48 -0
  283. data/lib/expressir/express/listing.rb +174 -0
  284. data/lib/expressir/express/model_traversal.rb +42 -0
  285. data/lib/expressir/express/model_visitor.rb +11 -10
  286. data/lib/expressir/express/node_position_index.rb +342 -0
  287. data/lib/expressir/express/parallel_files.rb +229 -0
  288. data/lib/expressir/express/parser.rb +501 -62
  289. data/lib/expressir/express/pretty_formatter.rb +586 -0
  290. data/lib/expressir/express/pretty_gate.rb +61 -0
  291. data/lib/expressir/express/refs_overlay.rb +47 -0
  292. data/lib/expressir/express/remark_attacher.rb +1098 -0
  293. data/lib/expressir/express/remark_overlay.rb +86 -0
  294. data/lib/expressir/express/remark_scanner.rb +245 -0
  295. data/lib/expressir/express/resolve_references_model_visitor.rb +7 -9
  296. data/lib/expressir/express/schema_block_scanner.rb +137 -0
  297. data/lib/expressir/express/schema_head_formatter.rb +4 -5
  298. data/lib/expressir/express/schema_plain_source_formatter.rb +11 -0
  299. data/lib/expressir/express/schema_source_formatter.rb +15 -0
  300. data/lib/expressir/express/scope_resolver.rb +223 -0
  301. data/lib/expressir/express/self_schema_reference.rb +126 -0
  302. data/lib/expressir/express/shtolo.rb +679 -0
  303. data/lib/expressir/express/smrl_xml.rb +125 -0
  304. data/lib/expressir/express/source_formatter.rb +15 -0
  305. data/lib/expressir/express/streaming_builder.rb +435 -0
  306. data/lib/expressir/express/xsd.rb +259 -0
  307. data/lib/expressir/express.rb +53 -0
  308. data/lib/expressir/liquid.rb +1 -0
  309. data/lib/expressir/manifest/resolver.rb +210 -0
  310. data/lib/expressir/manifest/validator.rb +192 -0
  311. data/lib/expressir/manifest.rb +6 -0
  312. data/lib/expressir/mapping/refpath.rb +857 -0
  313. data/lib/expressir/mapping.rb +253 -0
  314. data/lib/expressir/model/cache.rb +10 -9
  315. data/lib/expressir/model/concerns.rb +42 -0
  316. data/lib/expressir/model/data_types/aggregate.rb +8 -13
  317. data/lib/expressir/model/data_types/array.rb +15 -21
  318. data/lib/expressir/model/data_types/bag.rb +11 -15
  319. data/lib/expressir/model/data_types/binary.rb +9 -12
  320. data/lib/expressir/model/data_types/boolean.rb +7 -2
  321. data/lib/expressir/model/data_types/enumeration.rb +11 -15
  322. data/lib/expressir/model/data_types/enumeration_item.rb +5 -7
  323. data/lib/expressir/model/data_types/generic.rb +6 -8
  324. data/lib/expressir/model/data_types/generic_entity.rb +11 -13
  325. data/lib/expressir/model/data_types/integer.rb +7 -2
  326. data/lib/expressir/model/data_types/list.rb +13 -18
  327. data/lib/expressir/model/data_types/logical.rb +7 -2
  328. data/lib/expressir/model/data_types/number.rb +7 -2
  329. data/lib/expressir/model/data_types/real.rb +7 -9
  330. data/lib/expressir/model/data_types/select.rb +13 -18
  331. data/lib/expressir/model/data_types/set.rb +11 -15
  332. data/lib/expressir/model/data_types/string.rb +9 -12
  333. data/lib/expressir/model/data_types.rb +25 -0
  334. data/lib/expressir/model/declarations/attribute.rb +19 -28
  335. data/lib/expressir/model/declarations/constant.rb +10 -16
  336. data/lib/expressir/model/declarations/derived_attribute.rb +25 -0
  337. data/lib/expressir/model/declarations/entity.rb +39 -30
  338. data/lib/expressir/model/declarations/function.rb +32 -40
  339. data/lib/expressir/model/declarations/informal_proposition_rule.rb +25 -0
  340. data/lib/expressir/model/declarations/interface.rb +25 -16
  341. data/lib/expressir/model/declarations/interface_item.rb +9 -11
  342. data/lib/expressir/model/declarations/interfaced_item.rb +15 -19
  343. data/lib/expressir/model/declarations/inverse_attribute.rb +25 -0
  344. data/lib/expressir/model/declarations/parameter.rb +10 -16
  345. data/lib/expressir/model/declarations/procedure.rb +30 -37
  346. data/lib/expressir/model/declarations/remark_item.rb +11 -11
  347. data/lib/expressir/model/declarations/rule.rb +38 -43
  348. data/lib/expressir/model/declarations/schema.rb +162 -64
  349. data/lib/expressir/model/declarations/schema_version.rb +8 -11
  350. data/lib/expressir/model/declarations/schema_version_item.rb +8 -11
  351. data/lib/expressir/model/declarations/subtype_constraint.rb +14 -22
  352. data/lib/expressir/model/declarations/type.rb +18 -18
  353. data/lib/expressir/model/declarations/unique_rule.rb +8 -13
  354. data/lib/expressir/model/declarations/variable.rb +10 -16
  355. data/lib/expressir/model/declarations/where_rule.rb +8 -13
  356. data/lib/expressir/model/declarations.rb +31 -0
  357. data/lib/expressir/model/dependency_resolver.rb +268 -0
  358. data/lib/expressir/model/exp_file.rb +42 -0
  359. data/lib/expressir/model/expressions/aggregate_initializer.rb +8 -9
  360. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +10 -12
  361. data/lib/expressir/model/expressions/binary_expression.rb +42 -36
  362. data/lib/expressir/model/expressions/entity_constructor.rb +10 -12
  363. data/lib/expressir/model/expressions/function_call.rb +10 -12
  364. data/lib/expressir/model/expressions/interval.rb +18 -23
  365. data/lib/expressir/model/expressions/query_expression.rb +11 -15
  366. data/lib/expressir/model/expressions/unary_expression.rb +13 -15
  367. data/lib/expressir/model/expressions.rb +18 -0
  368. data/lib/expressir/model/identifier.rb +18 -26
  369. data/lib/expressir/model/indexes/entity_index.rb +103 -0
  370. data/lib/expressir/model/indexes/item_graph.rb +185 -0
  371. data/lib/expressir/model/indexes/reference_index.rb +148 -0
  372. data/lib/expressir/model/indexes/type_index.rb +149 -0
  373. data/lib/expressir/model/indexes.rb +12 -0
  374. data/lib/expressir/model/interface_validator.rb +384 -0
  375. data/lib/expressir/model/literals/binary.rb +7 -9
  376. data/lib/expressir/model/literals/integer.rb +7 -9
  377. data/lib/expressir/model/literals/logical.rb +10 -12
  378. data/lib/expressir/model/literals/real.rb +7 -9
  379. data/lib/expressir/model/literals/string.rb +10 -12
  380. data/lib/expressir/model/literals.rb +13 -0
  381. data/lib/expressir/model/model_element.rb +286 -117
  382. data/lib/expressir/model/references/attribute_reference.rb +9 -12
  383. data/lib/expressir/model/references/group_reference.rb +9 -12
  384. data/lib/expressir/model/references/index_reference.rb +11 -15
  385. data/lib/expressir/model/references/simple_reference.rb +11 -14
  386. data/lib/expressir/model/references.rb +12 -0
  387. data/lib/expressir/model/remark_format.rb +17 -0
  388. data/lib/expressir/model/remark_info.rb +92 -0
  389. data/lib/expressir/model/remark_placement.rb +42 -0
  390. data/lib/expressir/model/repository.rb +472 -12
  391. data/lib/expressir/model/repository_validator.rb +293 -0
  392. data/lib/expressir/model/search_engine.rb +551 -0
  393. data/lib/expressir/model/statements/alias.rb +12 -16
  394. data/lib/expressir/model/statements/assignment.rb +12 -11
  395. data/lib/expressir/model/statements/case.rb +31 -14
  396. data/lib/expressir/model/statements/case_action.rb +9 -11
  397. data/lib/expressir/model/statements/compound.rb +10 -8
  398. data/lib/expressir/model/statements/escape.rb +10 -2
  399. data/lib/expressir/model/statements/if.rb +15 -14
  400. data/lib/expressir/model/statements/null.rb +10 -2
  401. data/lib/expressir/model/statements/procedure_call.rb +11 -11
  402. data/lib/expressir/model/statements/repeat.rb +21 -28
  403. data/lib/expressir/model/statements/return.rb +9 -8
  404. data/lib/expressir/model/statements/skip.rb +10 -2
  405. data/lib/expressir/model/statements.rb +20 -0
  406. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +13 -17
  407. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +7 -9
  408. data/lib/expressir/model/supertype_expressions.rb +12 -0
  409. data/lib/expressir/model.rb +38 -78
  410. data/lib/expressir/package/builder.rb +231 -0
  411. data/lib/expressir/package/metadata.rb +79 -0
  412. data/lib/expressir/package/reader.rb +149 -0
  413. data/lib/expressir/package.rb +8 -0
  414. data/lib/expressir/schema_manifest.rb +159 -0
  415. data/lib/expressir/schema_manifest_entry.rb +15 -0
  416. data/lib/expressir/version.rb +6 -1
  417. data/lib/expressir.rb +79 -9
  418. data/lib/tasks/verify_remarks.rake +16 -0
  419. data/rakelib/native.rake +24 -0
  420. data/rakelib/oracle.rake +52 -0
  421. data/rakelib/verify_remarks.rake +16 -0
  422. metadata +431 -129
  423. data/.cross_rubies +0 -20
  424. data/.gitmodules +0 -6
  425. data/.yardopts +0 -11
  426. data/docs/development.md +0 -90
  427. data/exe/format +0 -18
  428. data/exe/generate-parser +0 -51
  429. data/lib/expressir/cli/ui.rb +0 -36
  430. data/lib/expressir/express/2.7/express_parser.so +0 -0
  431. data/lib/expressir/express/3.0/express_parser.so +0 -0
  432. data/lib/expressir/express/3.1/express_parser.so +0 -0
  433. data/lib/expressir/express/3.2/express_parser.so +0 -0
  434. data/lib/expressir/express/visitor.rb +0 -2588
  435. data/lib/expressir/model/data_type.rb +0 -9
  436. data/lib/expressir/model/declaration.rb +0 -9
  437. data/lib/expressir/model/expression.rb +0 -9
  438. data/lib/expressir/model/literal.rb +0 -9
  439. data/lib/expressir/model/reference.rb +0 -9
  440. data/lib/expressir/model/statement.rb +0 -9
  441. data/lib/expressir/model/supertype_expression.rb +0 -9
  442. data/rakelib/antlr4-native.rake +0 -161
  443. data/rakelib/cross-ruby.rake +0 -368
  444. data/spec/acceptance/version_spec.rb +0 -27
  445. data/spec/expressir/express/cache_spec.rb +0 -89
  446. data/spec/expressir/express/formatter_spec.rb +0 -173
  447. data/spec/expressir/express/parser_spec.rb +0 -141
  448. data/spec/expressir/model/model_element_spec.rb +0 -318
  449. data/spec/spec_helper.rb +0 -24
  450. data/spec/support/console_helper.rb +0 -29
  451. data/spec/syntax/multiple.exp +0 -23
  452. data/spec/syntax/multiple.yaml +0 -198
  453. data/spec/syntax/multiple_formatted.exp +0 -71
  454. data/spec/syntax/multiple_hyperlink_formatted.exp +0 -71
  455. data/spec/syntax/multiple_schema_head_hyperlink_formatted.exp +0 -13
  456. data/spec/syntax/remark.exp +0 -193
  457. data/spec/syntax/remark.yaml +0 -471
  458. data/spec/syntax/remark_formatted.exp +0 -228
  459. data/spec/syntax/single.exp +0 -4
  460. data/spec/syntax/single.yaml +0 -18
  461. data/spec/syntax/single_formatted.exp +0 -10
  462. data/spec/syntax/single_formatted.yaml +0 -36
  463. data/spec/syntax/syntax.exp +0 -333
  464. data/spec/syntax/syntax.yaml +0 -3509
  465. data/spec/syntax/syntax_formatted.exp +0 -902
  466. data/spec/syntax/syntax_hyperlink_formatted.exp +0 -902
  467. data/spec/syntax/syntax_schema_head_formatted.exp +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2a6b02ca46088bbb8791b5c58664d9c2d9a5f6b8d2f7cf9b73bf9ccde220fbb
4
- data.tar.gz: 4cac56fe796c0cfe8f698ea87d5d4251103bedd26408c8f737ef9b429a840eda
3
+ metadata.gz: 7fa93fe8c1011361655bfe42fe86f172520e8ad3bcf73f32a7f21aa09335e1db
4
+ data.tar.gz: c8c2eaaca15dca8434b1c1bad4b02f97f1b6c76372453931e64c70db8e73cd64
5
5
  SHA512:
6
- metadata.gz: ad215fbfeb088247b2dcb1deb3e9b8930090f90ca2ac7bd18015bed576e519db650a2e1486d0653d6f4262d2b89bf1bc10b4d8bb44b3cad1a815cb0f98360999
7
- data.tar.gz: 68516efaa654392b064f4e71f58a46a334856bd5eb494be7b642f43c6248ea08908536a72611574490879c2d32f1d4441841ff6b966900212d998b36cbd1c321
6
+ metadata.gz: e4a81a449b2c6d1446132d5977ba6fa9ba3b6501058591d4d30f01f04030688468eb7f28de0a2b1f5213fecf3bad4da630cc602c893a612b0cc1ec479d23eaac
7
+ data.tar.gz: 7d81271a3c94b23d6f19130a111031c5474d315ef5776336f07748da08519b9ba52cba0e6bd2b567f2b65892083fba5cca1712744ebf20ed4fd57628b4929c5a
@@ -0,0 +1,3 @@
1
+ # Git deps fetch over SSH by the system git CLI (cargo HTTPS auth fails locally).
2
+ [net]
3
+ git-fetch-with-cli = true
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Smoke test for an INSTALLED expressir gem (run after `gem install`,
4
+ # never from the source directory): the Rust core binding must be
5
+ # active and the parser must handle the standard and #462 forms.
6
+ require "expressir"
7
+
8
+ abort "FAIL: NATIVE_AVAILABLE is false" unless Expressir::Express::Core::NATIVE_AVAILABLE
9
+ puts "native binding: active"
10
+
11
+ repo = Expressir::Express::Parser.from_exp(
12
+ "SCHEMA smoke; ENTITY e; a : STRING; END_ENTITY; END_SCHEMA;",
13
+ )
14
+ abort "FAIL: schema not parsed" unless repo.schemas.first.id == "smoke"
15
+ puts "standard parse: ok"
16
+
17
+ src = <<~EXP
18
+ SCHEMA m;
19
+ ENTITY e; END_ENTITY;
20
+ SUBTYPE_CONSTRAINT c FOR e;
21
+ ABSTRACT;
22
+ END_SUBTYPE_CONSTRAINT;
23
+ END_SCHEMA;
24
+ EXP
25
+ sc = Expressir::Express::Parser.from_exp(src).schemas.first.subtype_constraints.first
26
+ abort "FAIL: subtype constraint ABSTRACT body (#462)" unless sc&.abstract == true
27
+ puts "#462 form: ok"
28
+
29
+ # The platform gems force-build the Rust compiled-set writer; a leg that
30
+ # shipped a non-loadable expressir_core would otherwise pass this smoke.
31
+ abort "FAIL: core_set_available is false" unless Expressir::Express::Parser.core_set_available?
32
+ puts "compiled-set core: ok"
33
+
34
+ puts "SMOKE OK"
@@ -0,0 +1,35 @@
1
+ name: "CodeQL"
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ schedule:
7
+ - cron: '0 23 * * 3'
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}'
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ analyze:
16
+ name: Analyze
17
+ runs-on: ubuntu-latest
18
+
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Install Ruby
24
+ uses: ruby/setup-ruby@master
25
+ with:
26
+ ruby-version: 3.2
27
+ bundler-cache: true
28
+
29
+ - name: Initialize CodeQL
30
+ uses: github/codeql-action/init@v2
31
+ with:
32
+ languages: "ruby, cpp"
33
+
34
+ - name: Perform CodeQL Analysis
35
+ uses: github/codeql-action/analyze@v2
@@ -0,0 +1,99 @@
1
+ name: Deploy Documentation
2
+
3
+ on:
4
+ push:
5
+ branches: [main, master]
6
+ paths:
7
+ - 'docs/**'
8
+ - '.github/workflows/docs.yml'
9
+ pull_request:
10
+ branches: [main, master]
11
+ paths:
12
+ - 'docs/**'
13
+ workflow_dispatch:
14
+
15
+ # Allow only one concurrent deployment
16
+ concurrency:
17
+ group: "pages"
18
+ cancel-in-progress: true
19
+
20
+ jobs:
21
+ build:
22
+ runs-on: ubuntu-latest
23
+
24
+ steps:
25
+ - name: Checkout repository
26
+ uses: actions/checkout@v4
27
+
28
+ - name: Setup Ruby
29
+ uses: ruby/setup-ruby@v1
30
+ with:
31
+ ruby-version: '3.2'
32
+ bundler-cache: false
33
+ working-directory: docs
34
+
35
+ - name: Cache gems
36
+ uses: actions/cache@v4
37
+ with:
38
+ path: docs/vendor/bundle
39
+ key: ${{ runner.os }}-gems-${{ hashFiles('docs/Gemfile.lock') }}
40
+ restore-keys: |
41
+ ${{ runner.os }}-gems-
42
+
43
+ - name: Install dependencies
44
+ working-directory: docs
45
+ run: |
46
+ bundle config path vendor/bundle
47
+ bundle install --jobs 4 --retry 3
48
+
49
+ - name: Build Jekyll site
50
+ working-directory: docs
51
+ run: bundle exec jekyll build --trace
52
+ env:
53
+ JEKYLL_ENV: production
54
+
55
+ - name: Test built site
56
+ working-directory: docs
57
+ run: |
58
+ if [ ! -f "_site/index.html" ]; then
59
+ echo "Error: index.html not found in _site/"
60
+ exit 1
61
+ fi
62
+ echo "Site built successfully"
63
+ echo "Site contains $(find _site -type f | wc -l) files"
64
+
65
+ - name: Upload artifact
66
+ uses: actions/upload-pages-artifact@v3
67
+ with:
68
+ path: docs/_site
69
+
70
+ deploy:
71
+ # Only deploy on push to main/master, not on PRs
72
+ if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
73
+
74
+ needs: build
75
+
76
+ permissions:
77
+ pages: write
78
+ id-token: write
79
+ contents: write
80
+
81
+ environment:
82
+ name: github-pages
83
+ url: ${{ steps.deployment.outputs.page_url }}
84
+
85
+ runs-on: ubuntu-latest
86
+
87
+ steps:
88
+ - name: Deploy to GitHub Pages
89
+ id: deployment
90
+ uses: actions/deploy-pages@v4
91
+
92
+ - name: Comment on commit
93
+ if: success()
94
+ uses: peter-evans/commit-comment@v3
95
+ with:
96
+ body: |
97
+ :white_check_mark: Documentation deployed successfully!
98
+
99
+ View at: ${{ steps.deployment.outputs.page_url }}
@@ -0,0 +1,100 @@
1
+ name: Check Links
2
+
3
+ on:
4
+ push:
5
+ branches: [main, master]
6
+ paths:
7
+ - 'docs/**'
8
+ - '.github/workflows/links.yml'
9
+ - 'lychee.toml'
10
+ pull_request:
11
+ branches: [main, master]
12
+ paths:
13
+ - 'docs/**'
14
+ schedule:
15
+ # Run weekly on Monday at 9:00 UTC
16
+ - cron: '0 9 * * 1'
17
+ workflow_dispatch:
18
+
19
+ jobs:
20
+ link-check:
21
+ runs-on: ubuntu-latest
22
+
23
+ steps:
24
+ - name: Checkout repository
25
+ uses: actions/checkout@v4
26
+
27
+ - name: Setup Ruby
28
+ uses: ruby/setup-ruby@v1
29
+ with:
30
+ ruby-version: '3.2'
31
+ bundler-cache: false
32
+ working-directory: docs
33
+
34
+ - name: Cache gems
35
+ uses: actions/cache@v4
36
+ with:
37
+ path: docs/vendor/bundle
38
+ key: ${{ runner.os }}-gems-${{ hashFiles('docs/Gemfile.lock') }}
39
+ restore-keys: |
40
+ ${{ runner.os }}-gems-
41
+
42
+ - name: Install dependencies
43
+ working-directory: docs
44
+ run: |
45
+ bundle config path vendor/bundle
46
+ bundle install --jobs 4 --retry 3
47
+
48
+ - name: Build Jekyll site
49
+ working-directory: docs
50
+ run: bundle exec jekyll build --trace
51
+ env:
52
+ JEKYLL_ENV: production
53
+
54
+ - name: Check links with lychee
55
+ uses: lycheeverse/lychee-action@v1
56
+ with:
57
+ args: |
58
+ --config docs/lychee.toml
59
+ --verbose
60
+ --no-progress
61
+ --format markdown
62
+ 'docs/_site/**/*.html'
63
+ fail: true
64
+ output: link-check-report.md
65
+
66
+ - name: Upload link check report
67
+ if: always()
68
+ uses: actions/upload-artifact@v4
69
+ with:
70
+ name: link-check-report
71
+ path: link-check-report.md
72
+ retention-days: 30
73
+
74
+ - name: Comment on PR with results
75
+ if: failure() && github.event_name == 'pull_request'
76
+ uses: marocchino/sticky-pull-request-comment@v2
77
+ with:
78
+ header: link-check
79
+ path: link-check-report.md
80
+
81
+ - name: Create issue for broken links
82
+ if: failure() && github.event_name == 'schedule'
83
+ uses: peter-evans/create-issue-from-file@v5
84
+ with:
85
+ title: Broken links detected in documentation
86
+ content-filepath: link-check-report.md
87
+ labels: |
88
+ documentation
89
+ bug
90
+ automated
91
+
92
+ - name: Summary
93
+ if: always()
94
+ run: |
95
+ echo "## Link Check Results" >> $GITHUB_STEP_SUMMARY
96
+ if [ -f "link-check-report.md" ]; then
97
+ cat link-check-report.md >> $GITHUB_STEP_SUMMARY
98
+ else
99
+ echo "No broken links found! :white_check_mark:" >> $GITHUB_STEP_SUMMARY
100
+ fi
@@ -0,0 +1,201 @@
1
+ # Prebuilt platform gems (TODO.suma-improvements/01), following the
2
+ # parsanol-ruby gem-build pattern: oxidize-rb cross-gem builds
3
+ # per-platform gems in rake-compiler-dock containers, smoke jobs install
4
+ # them on real runners, and tag pushes publish to rubygems.
5
+ name: native-gems
6
+
7
+ on:
8
+ workflow_dispatch:
9
+ push:
10
+ branches: [main, "cross-gem/*", "pkg/*"]
11
+ tags: ["v*"]
12
+
13
+ concurrency:
14
+ group: ${{ github.workflow }}-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ permissions:
18
+ contents: read
19
+
20
+ jobs:
21
+ ci-data:
22
+ runs-on: ubuntu-22.04
23
+ outputs:
24
+ result: ${{ steps.fetch.outputs.result }}
25
+ steps:
26
+ - id: fetch
27
+ uses: oxidize-rb/actions/fetch-ci-data@v1
28
+ with:
29
+ supported-ruby-platforms: |
30
+ exclude: [x64-mingw32]
31
+ stable-ruby-versions: |
32
+ only: [3.2, 3.3, 3.4, 4.0]
33
+
34
+ native:
35
+ name: Build native gems
36
+ needs: ci-data
37
+ runs-on: ubuntu-22.04
38
+ strategy:
39
+ fail-fast: false
40
+ matrix:
41
+ ruby-platform: ${{ fromJSON(needs.ci-data.outputs.result).supported-ruby-platforms }}
42
+ steps:
43
+ - uses: actions/checkout@v4
44
+
45
+ - uses: ruby/setup-ruby@v1
46
+ with:
47
+ ruby-version: "3.4"
48
+
49
+ - uses: oxidize-rb/actions/cross-gem@v1
50
+ id: cross-gem
51
+ env:
52
+ EXPRESSIR_CORE_FORCE: "1"
53
+ with:
54
+ platform: ${{ matrix.ruby-platform }}
55
+ # Must include the dock image's HOST ruby (4.0): when the
56
+ # running ruby is absent from this list, rake-compiler adds an
57
+ # extra leg for it built from the host toolchain's RbConfig,
58
+ # and rb-sys correctly refuses to generate bindings against a
59
+ # different target_os. Current rb-sys-dock images ship cross
60
+ # rubies for 3.2-4.0 (parsanol-ruby's identical cross-gem
61
+ # setup builds a working x86_64-mingw-ucrt ruby-4.0.2 leg).
62
+ ruby-versions: "3.2,3.3,3.4,4.0"
63
+
64
+ - uses: actions/upload-artifact@v4
65
+ with:
66
+ name: cross-gem-${{ matrix.ruby-platform }}
67
+ path: ${{ steps.cross-gem.outputs.gem-path }}
68
+ if-no-files-found: error
69
+
70
+ smoke-linux:
71
+ name: Smoke test Linux x86_64
72
+ needs: native
73
+ runs-on: ubuntu-22.04
74
+ steps:
75
+ - uses: actions/checkout@v4
76
+ - uses: ruby/setup-ruby@v1
77
+ with:
78
+ ruby-version: "3.4"
79
+ - uses: actions/download-artifact@v4
80
+ with:
81
+ name: cross-gem-x86_64-linux
82
+ path: pkg/
83
+ - run: |
84
+ gem install pkg/expressir-*.gem --no-document
85
+ ruby .github/scripts/test_installed_gem.rb
86
+
87
+ smoke-linux-arm:
88
+ name: Smoke test Linux ARM64
89
+ needs: native
90
+ runs-on: ubuntu-22.04-arm
91
+ steps:
92
+ - uses: actions/checkout@v4
93
+ - uses: ruby/setup-ruby@v1
94
+ with:
95
+ ruby-version: "3.4"
96
+ - uses: actions/download-artifact@v4
97
+ with:
98
+ name: cross-gem-aarch64-linux
99
+ path: pkg/
100
+ - run: |
101
+ gem install pkg/expressir-*.gem --no-document
102
+ ruby .github/scripts/test_installed_gem.rb
103
+
104
+ smoke-macos-arm:
105
+ name: Smoke test macOS ARM64
106
+ needs: native
107
+ runs-on: macos-15
108
+ steps:
109
+ - uses: actions/checkout@v4
110
+ - uses: ruby/setup-ruby@v1
111
+ with:
112
+ ruby-version: "3.4"
113
+ - uses: actions/download-artifact@v4
114
+ with:
115
+ name: cross-gem-arm64-darwin
116
+ path: pkg/
117
+ - run: |
118
+ gem install pkg/expressir-*.gem --no-document
119
+ ruby .github/scripts/test_installed_gem.rb
120
+
121
+ smoke-macos-intel:
122
+ name: Smoke test macOS x86_64
123
+ needs: native
124
+ runs-on: macos-15-intel
125
+ steps:
126
+ - uses: actions/checkout@v4
127
+ - uses: ruby/setup-ruby@v1
128
+ with:
129
+ ruby-version: "3.4"
130
+ - uses: actions/download-artifact@v4
131
+ with:
132
+ name: cross-gem-x86_64-darwin
133
+ path: pkg/
134
+ - run: |
135
+ gem install pkg/expressir-*.gem --no-document
136
+ ruby .github/scripts/test_installed_gem.rb
137
+
138
+ smoke-windows:
139
+ name: Smoke test Windows x64
140
+ needs: native
141
+ runs-on: windows-2025
142
+ steps:
143
+ - uses: actions/checkout@v4
144
+ - uses: ruby/setup-ruby@v1
145
+ with:
146
+ ruby-version: "3.4"
147
+ - uses: actions/download-artifact@v4
148
+ with:
149
+ name: cross-gem-x64-mingw-ucrt
150
+ path: pkg/
151
+ - run: |
152
+ gem install pkg/expressir-*.gem --no-document
153
+ ruby .github/scripts/test_installed_gem.rb
154
+
155
+ source:
156
+ name: Build source gem
157
+ runs-on: ubuntu-22.04
158
+ steps:
159
+ - uses: actions/checkout@v4
160
+ - uses: oxidize-rb/actions/setup-ruby-and-rust@v1
161
+ with:
162
+ ruby-version: "3.4"
163
+ bundler-cache: true
164
+ cargo-cache: true
165
+ - run: bundle exec rake build
166
+ - uses: actions/upload-artifact@v4
167
+ with:
168
+ name: source-gem
169
+ path: pkg/*.gem
170
+ if-no-files-found: error
171
+
172
+ release:
173
+ name: Release gems to rubygems
174
+ needs: [native, smoke-linux, smoke-linux-arm, smoke-macos-arm, smoke-macos-intel, smoke-windows, source]
175
+ # workflow_dispatch lets a fix publish the already-tagged version when
176
+ # the tag's own run failed after the builds (reruns reuse the tag's
177
+ # workflow copy, so fixes cannot reach them any other way).
178
+ if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
179
+ runs-on: ubuntu-22.04
180
+ # No environment: the rubygems.org trusted publisher for native-gems.yml
181
+ # is registered without one; an environment claim would fail the match.
182
+ permissions:
183
+ id-token: write
184
+ steps:
185
+ - uses: actions/download-artifact@v4
186
+ with:
187
+ path: pkg/
188
+ pattern: cross-gem-*
189
+ merge-multiple: true
190
+ - uses: actions/download-artifact@v4
191
+ with:
192
+ path: pkg/
193
+ name: source-gem
194
+ # OIDC trusted publishing - the repo has no rubygems API-key secret;
195
+ # release.yml publishes through the same exchange.
196
+ - uses: rubygems/configure-rubygems-credentials@v2.1.0
197
+ - name: Push to rubygems
198
+ run: |
199
+ for gem in pkg/expressir-*.gem; do
200
+ gem push "$gem"
201
+ done