s2dm 0.16.2__tar.gz

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 (501) hide show
  1. s2dm-0.16.2/.bumpversion.toml +24 -0
  2. s2dm-0.16.2/.github/dependabot.yml +19 -0
  3. s2dm-0.16.2/.github/workflows/ci.yml +64 -0
  4. s2dm-0.16.2/.github/workflows/docgen.yml +85 -0
  5. s2dm-0.16.2/.github/workflows/release.yml +225 -0
  6. s2dm-0.16.2/.gitignore +184 -0
  7. s2dm-0.16.2/.gitlint +31 -0
  8. s2dm-0.16.2/.gitmodules +3 -0
  9. s2dm-0.16.2/.migration/.bumpversion.toml +18 -0
  10. s2dm-0.16.2/.migration/docs/modeling-guide.md +1 -0
  11. s2dm-0.16.2/.migration/docs/setup-guide.md +166 -0
  12. s2dm-0.16.2/.migration/setup-repository.sh +174 -0
  13. s2dm-0.16.2/.migration/workflows/migrate.yml +38 -0
  14. s2dm-0.16.2/.pre-commit-config.yaml +41 -0
  15. s2dm-0.16.2/CHANGELOG.md +681 -0
  16. s2dm-0.16.2/CONTRIBUTING.md +288 -0
  17. s2dm-0.16.2/LICENSE +373 -0
  18. s2dm-0.16.2/PKG-INFO +49 -0
  19. s2dm-0.16.2/README.md +20 -0
  20. s2dm-0.16.2/actions/s2dm-compose/README.md +151 -0
  21. s2dm-0.16.2/actions/s2dm-compose/action.yml +169 -0
  22. s2dm-0.16.2/actions/s2dm-publish/README.md +215 -0
  23. s2dm-0.16.2/actions/s2dm-publish/action.yml +409 -0
  24. s2dm-0.16.2/cliff.toml +88 -0
  25. s2dm-0.16.2/docs-gen/CHANGELOG.md +57 -0
  26. s2dm-0.16.2/docs-gen/LICENSE +21 -0
  27. s2dm-0.16.2/docs-gen/README.md +75 -0
  28. s2dm-0.16.2/docs-gen/assets/favicon.png +0 -0
  29. s2dm-0.16.2/docs-gen/assets/favicon.svg +5 -0
  30. s2dm-0.16.2/docs-gen/assets/images/.gitkeep +0 -0
  31. s2dm-0.16.2/docs-gen/assets/js/custom.js +29 -0
  32. s2dm-0.16.2/docs-gen/assets/scss/common/_custom.scss +1 -0
  33. s2dm-0.16.2/docs-gen/assets/scss/common/_variables-custom.scss +13 -0
  34. s2dm-0.16.2/docs-gen/assets/svgs/.gitkeep +0 -0
  35. s2dm-0.16.2/docs-gen/config/_default/hugo.toml +87 -0
  36. s2dm-0.16.2/docs-gen/config/_default/languages.toml +17 -0
  37. s2dm-0.16.2/docs-gen/config/_default/markup.toml +33 -0
  38. s2dm-0.16.2/docs-gen/config/_default/menus/menus.en.toml +16 -0
  39. s2dm-0.16.2/docs-gen/config/_default/module.toml +97 -0
  40. s2dm-0.16.2/docs-gen/config/_default/params.toml +140 -0
  41. s2dm-0.16.2/docs-gen/config/babel.config.js +17 -0
  42. s2dm-0.16.2/docs-gen/config/development/hugo.toml +2 -0
  43. s2dm-0.16.2/docs-gen/config/next/hugo.toml +2 -0
  44. s2dm-0.16.2/docs-gen/config/postcss.config.js +64 -0
  45. s2dm-0.16.2/docs-gen/config/production/hugo.toml +2 -0
  46. s2dm-0.16.2/docs-gen/content/_index.md +34 -0
  47. s2dm-0.16.2/docs-gen/content/docs/_index.md +11 -0
  48. s2dm-0.16.2/docs-gen/content/docs/approach-overview/_index.md +6 -0
  49. s2dm-0.16.2/docs-gen/content/docs/approach-overview/actively-developed.md +8 -0
  50. s2dm-0.16.2/docs-gen/content/docs/approach-overview/automated.md +8 -0
  51. s2dm-0.16.2/docs-gen/content/docs/approach-overview/optional-extensions.md +8 -0
  52. s2dm-0.16.2/docs-gen/content/docs/data-modeling-guideline/_index.md +5 -0
  53. s2dm-0.16.2/docs-gen/content/docs/data-modeling-guideline/how-to.md +82 -0
  54. s2dm-0.16.2/docs-gen/content/docs/data-modeling-guideline/pre-defined-elements.md +120 -0
  55. s2dm-0.16.2/docs-gen/content/docs/introduction/_index.md +15 -0
  56. s2dm-0.16.2/docs-gen/content/docs/introduction/introduction.md +33 -0
  57. s2dm-0.16.2/docs-gen/content/docs/tools/_index.md +6 -0
  58. s2dm-0.16.2/docs-gen/content/docs/tools/api.md +19 -0
  59. s2dm-0.16.2/docs-gen/content/docs/tools/automation.md +6 -0
  60. s2dm-0.16.2/docs-gen/content/docs/tools/cli.md +1946 -0
  61. s2dm-0.16.2/docs-gen/content/docs/tools/units-cli.md +169 -0
  62. s2dm-0.16.2/docs-gen/content/examples/examples-introduction/_index.md +15 -0
  63. s2dm-0.16.2/docs-gen/content/examples/examples-introduction/introduction.md +30 -0
  64. s2dm-0.16.2/docs-gen/content/examples/multiple-classification-schemes/_index.md +17 -0
  65. s2dm-0.16.2/docs-gen/content/examples/multiple-classification-schemes/multiple-classification-schemes.md +19 -0
  66. s2dm-0.16.2/docs-gen/content/examples/multiple-domains/_index.md +17 -0
  67. s2dm-0.16.2/docs-gen/content/examples/multiple-domains/multiple-domains.md +45 -0
  68. s2dm-0.16.2/docs-gen/content/examples/seat-capabilities/_index.md +17 -0
  69. s2dm-0.16.2/docs-gen/content/examples/seat-capabilities/seat-capabilities.md +19 -0
  70. s2dm-0.16.2/docs-gen/content/examples/seat-domain-model/_index.md +17 -0
  71. s2dm-0.16.2/docs-gen/content/examples/seat-domain-model/graphql-voyager.md +17 -0
  72. s2dm-0.16.2/docs-gen/content/examples/seat-domain-model/schema-documentation.md +15 -0
  73. s2dm-0.16.2/docs-gen/content/examples/seat-domain-model/seat-domain-model.md +25 -0
  74. s2dm-0.16.2/docs-gen/content/examples/specification-history-registry/_index.md +17 -0
  75. s2dm-0.16.2/docs-gen/content/examples/specification-history-registry/specification-history-registry.md +19 -0
  76. s2dm-0.16.2/docs-gen/content/examples/trailer-domain-model/_index.md +17 -0
  77. s2dm-0.16.2/docs-gen/content/examples/trailer-domain-model/graphql-voyager.md +17 -0
  78. s2dm-0.16.2/docs-gen/content/examples/trailer-domain-model/trailer-domain-model.md +24 -0
  79. s2dm-0.16.2/docs-gen/content/examples/version-bump-cli/_index.md +17 -0
  80. s2dm-0.16.2/docs-gen/content/examples/version-bump-cli/version-bump-cli.md +176 -0
  81. s2dm-0.16.2/docs-gen/content/test.md +0 -0
  82. s2dm-0.16.2/docs-gen/layouts/_partials/footer/script-footer-custom.html +13 -0
  83. s2dm-0.16.2/docs-gen/layouts/_partials/head/custom-head.html +62 -0
  84. s2dm-0.16.2/docs-gen/layouts/_partials/head/script-header.html +1 -0
  85. s2dm-0.16.2/docs-gen/layouts/_partials/sidebar/docs-toc-desktop.html +20 -0
  86. s2dm-0.16.2/docs-gen/layouts/_partials/sidebar/graphql-voyager-assets.html +43 -0
  87. s2dm-0.16.2/docs-gen/layouts/home.html +129 -0
  88. s2dm-0.16.2/docs-gen/layouts/shortcodes/graphql-voyager-builtin.html +250 -0
  89. s2dm-0.16.2/docs-gen/layouts/shortcodes/graphql-voyager.html +101 -0
  90. s2dm-0.16.2/docs-gen/layouts/shortcodes/img.html +21 -0
  91. s2dm-0.16.2/docs-gen/layouts/single.html +58 -0
  92. s2dm-0.16.2/docs-gen/netlify.toml +35 -0
  93. s2dm-0.16.2/docs-gen/package-lock.json +5867 -0
  94. s2dm-0.16.2/docs-gen/package.json +39 -0
  95. s2dm-0.16.2/docs-gen/static/.gitkeep +0 -0
  96. s2dm-0.16.2/docs-gen/static/cover.jpg +0 -0
  97. s2dm-0.16.2/docs-gen/static/examples/seat-capabilities/full_schema.graphql +185 -0
  98. s2dm-0.16.2/docs-gen/static/examples/seat-domain-model/full_schema.graphql +451 -0
  99. s2dm-0.16.2/docs-gen/static/examples/seat-to-vspec/full_sdl.graphql +451 -0
  100. s2dm-0.16.2/docs-gen/static/examples/trailer/full_schema.graphql +446 -0
  101. s2dm-0.16.2/docs-gen/static/favicon.ico +0 -0
  102. s2dm-0.16.2/docs-gen/static/favicon.png +0 -0
  103. s2dm-0.16.2/docs-gen/static/icon.svg +5 -0
  104. s2dm-0.16.2/docs-gen/static/images/COVESA-Logo-Small.png +0 -0
  105. s2dm-0.16.2/docs-gen/static/images/S2DM.png +0 -0
  106. s2dm-0.16.2/docs-gen/static/images/actively_developed.png +0 -0
  107. s2dm-0.16.2/docs-gen/static/images/automated.png +0 -0
  108. s2dm-0.16.2/docs-gen/static/images/current-vs-desired.jpg +0 -0
  109. s2dm-0.16.2/docs-gen/static/images/general-flow.jpg +0 -0
  110. s2dm-0.16.2/docs-gen/static/images/optional_extensions.png +0 -0
  111. s2dm-0.16.2/docs-gen/static/images/s2dm_overview.png +0 -0
  112. s2dm-0.16.2/docs-gen/static/images/s2dm_pre_def_elements.png +0 -0
  113. s2dm-0.16.2/docs-gen/static/images/s2dm_pre_def_elements.svg +4 -0
  114. s2dm-0.16.2/docs-gen/static/images/s2dm_role.png +0 -0
  115. s2dm-0.16.2/docs-gen/static/images/vss-limits-criteria.jpg +0 -0
  116. s2dm-0.16.2/docs-gen/test/.codesandbox/tasks.json +22 -0
  117. s2dm-0.16.2/docs-gen/test/.devcontainer/Dockerfile +19 -0
  118. s2dm-0.16.2/docs-gen/test/.devcontainer/devcontainer.json +5 -0
  119. s2dm-0.16.2/docs-gen/test/.gitignore +6 -0
  120. s2dm-0.16.2/docs-gen/test/.gitpod.yml +13 -0
  121. s2dm-0.16.2/docs-gen/test/.npmignore +2 -0
  122. s2dm-0.16.2/docs-gen/test/.npmrc +4 -0
  123. s2dm-0.16.2/docs-gen/test/.prettierignore +12 -0
  124. s2dm-0.16.2/docs-gen/test/.prettierrc.yaml +19 -0
  125. s2dm-0.16.2/docs-gen/test/LICENSE +21 -0
  126. s2dm-0.16.2/docs-gen/test/assets/favicon.png +0 -0
  127. s2dm-0.16.2/docs-gen/test/assets/favicon.svg +1 -0
  128. s2dm-0.16.2/docs-gen/test/assets/images/.gitkeep +0 -0
  129. s2dm-0.16.2/docs-gen/test/assets/js/custom.js +1 -0
  130. s2dm-0.16.2/docs-gen/test/assets/scss/common/_custom.scss +1 -0
  131. s2dm-0.16.2/docs-gen/test/assets/scss/common/_variables-custom.scss +1 -0
  132. s2dm-0.16.2/docs-gen/test/assets/svgs/.gitkeep +0 -0
  133. s2dm-0.16.2/docs-gen/test/config/_default/hugo.toml +87 -0
  134. s2dm-0.16.2/docs-gen/test/config/_default/languages.toml +32 -0
  135. s2dm-0.16.2/docs-gen/test/config/_default/markup.toml +33 -0
  136. s2dm-0.16.2/docs-gen/test/config/_default/menus/menus.en.toml +16 -0
  137. s2dm-0.16.2/docs-gen/test/config/_default/menus/menus.nl.toml +39 -0
  138. s2dm-0.16.2/docs-gen/test/config/_default/module.toml +97 -0
  139. s2dm-0.16.2/docs-gen/test/config/_default/params.toml +140 -0
  140. s2dm-0.16.2/docs-gen/test/config/babel.config.js +17 -0
  141. s2dm-0.16.2/docs-gen/test/config/next/hugo.toml +2 -0
  142. s2dm-0.16.2/docs-gen/test/config/postcss.config.js +64 -0
  143. s2dm-0.16.2/docs-gen/test/config/production/hugo.toml +2 -0
  144. s2dm-0.16.2/docs-gen/test/content/_index.md +13 -0
  145. s2dm-0.16.2/docs-gen/test/content/blog/_index.md +19 -0
  146. s2dm-0.16.2/docs-gen/test/content/blog/example/index.md +25 -0
  147. s2dm-0.16.2/docs-gen/test/content/docs/_index.md +15 -0
  148. s2dm-0.16.2/docs-gen/test/content/docs/guides/_index.md +15 -0
  149. s2dm-0.16.2/docs-gen/test/content/docs/guides/example.md +21 -0
  150. s2dm-0.16.2/docs-gen/test/content/docs/reference/_index.md +17 -0
  151. s2dm-0.16.2/docs-gen/test/content/docs/reference/example.md +21 -0
  152. s2dm-0.16.2/docs-gen/test/content/docs/resources.md +17 -0
  153. s2dm-0.16.2/docs-gen/test/content/privacy.md +14 -0
  154. s2dm-0.16.2/docs-gen/test/layouts/_partials/footer/script-footer-custom.html +13 -0
  155. s2dm-0.16.2/docs-gen/test/layouts/_partials/head/custom-head.html +1 -0
  156. s2dm-0.16.2/docs-gen/test/layouts/_partials/head/script-header.html +1 -0
  157. s2dm-0.16.2/docs-gen/test/layouts/home.html +59 -0
  158. s2dm-0.16.2/docs-gen/test/netlify.toml +35 -0
  159. s2dm-0.16.2/docs-gen/test/package.json +39 -0
  160. s2dm-0.16.2/docs-gen/test/static/.gitkeep +0 -0
  161. s2dm-0.16.2/docs-gen/test/static/apple-touch-icon.png +0 -0
  162. s2dm-0.16.2/docs-gen/test/static/cover.jpg +0 -0
  163. s2dm-0.16.2/docs-gen/test/static/favicon.ico +0 -0
  164. s2dm-0.16.2/docs-gen/test/static/icon.svg +1 -0
  165. s2dm-0.16.2/docs-gen/theme.toml +14 -0
  166. s2dm-0.16.2/examples/graphql-to-skos/.gitignore +1 -0
  167. s2dm-0.16.2/examples/graphql-to-skos/README.md +164 -0
  168. s2dm-0.16.2/examples/graphql-to-skos/sample.graphql +30 -0
  169. s2dm-0.16.2/examples/graphql-to-skos/shapes.shacl +118 -0
  170. s2dm-0.16.2/examples/graphql-to-skos/skos-mapping-diagram.md +84 -0
  171. s2dm-0.16.2/examples/multiple-classification-schemes/skos.ttl +84 -0
  172. s2dm-0.16.2/examples/multiple-domains/OtherDomains.graphql +29 -0
  173. s2dm-0.16.2/examples/seat-capabilities/Mutation.graphql +16 -0
  174. s2dm-0.16.2/examples/seat-capabilities/Query.graphql +19 -0
  175. s2dm-0.16.2/examples/seat-to-vspec/08.07.2025/result.vspec +317 -0
  176. s2dm-0.16.2/examples/seat-to-vspec/README.md +18 -0
  177. s2dm-0.16.2/examples/seat-to-vspec/Screenshot 2025-05-06 at 22.11.56.png +0 -0
  178. s2dm-0.16.2/examples/seat-to-vspec/expected.vspec +341 -0
  179. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/Cabin.graphql +16 -0
  180. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/CustomExtensions/ExtendedSeat.graphql +23 -0
  181. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/Queries.graphql +4 -0
  182. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/Seat/Seat.graphql +147 -0
  183. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/Seat/SeatAirbag.graphql +7 -0
  184. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/Seat/SeatBackrest.graphql +65 -0
  185. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/Seat/SeatHeadrest.graphql +32 -0
  186. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/Seat/SeatSeating.graphql +24 -0
  187. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/Vehicle.graphql +5 -0
  188. s2dm-0.16.2/examples/seat-to-vspec/modular_seat_spec/VehicleIdentification.graphql +8 -0
  189. s2dm-0.16.2/examples/seat-to-vspec/result.vspec +317 -0
  190. s2dm-0.16.2/examples/spec-history-registry/.gitignore +9 -0
  191. s2dm-0.16.2/examples/spec-history-registry/README.md +98 -0
  192. s2dm-0.16.2/examples/spec-history-registry/sample.graphql +99 -0
  193. s2dm-0.16.2/examples/spec-history-registry/sample_updated.graphql +100 -0
  194. s2dm-0.16.2/examples/trailer/README.md +13 -0
  195. s2dm-0.16.2/examples/trailer/full_schema.graphl +446 -0
  196. s2dm-0.16.2/examples/trailer/modular_trailer_example/Vehicle.graphql +16 -0
  197. s2dm-0.16.2/examples/trailer/modular_trailer_example/VehicleTrailer.graphql +32 -0
  198. s2dm-0.16.2/examples/trailer/modular_trailer_example/VehicleTrailerAxle.graphql +58 -0
  199. s2dm-0.16.2/examples/trailer/modular_trailer_example/VehicleTrailerWheel.graphql +50 -0
  200. s2dm-0.16.2/examples/trailer/modular_trailer_example/instances.graphql +66 -0
  201. s2dm-0.16.2/examples/trailer/trailer_voyager_graph.png +0 -0
  202. s2dm-0.16.2/examples/units/external_qudt/AccelerationUnit.graphql +50 -0
  203. s2dm-0.16.2/examples/units/external_qudt/AngleUnit.graphql +38 -0
  204. s2dm-0.16.2/examples/units/external_qudt/AngularVelocityUnit.graphql +23 -0
  205. s2dm-0.16.2/examples/units/external_qudt/DimensionlessRatioUnit.graphql +44 -0
  206. s2dm-0.16.2/examples/units/external_qudt/DisplacementCurrentUnit.graphql +20 -0
  207. s2dm-0.16.2/examples/units/external_qudt/ElectricChargeUnit.graphql +104 -0
  208. s2dm-0.16.2/examples/units/external_qudt/ElectricPotentialUnit.graphql +47 -0
  209. s2dm-0.16.2/examples/units/external_qudt/ElectricPowerUnit.graphql +38 -0
  210. s2dm-0.16.2/examples/units/external_qudt/ForcePerAreaUnit.graphql +203 -0
  211. s2dm-0.16.2/examples/units/external_qudt/ForceUnit.graphql +71 -0
  212. s2dm-0.16.2/examples/units/external_qudt/HeartRateUnit.graphql +5 -0
  213. s2dm-0.16.2/examples/units/external_qudt/LengthUnit.graphql +116 -0
  214. s2dm-0.16.2/examples/units/external_qudt/LuminousFluxPerAreaUnit.graphql +11 -0
  215. s2dm-0.16.2/examples/units/external_qudt/MassFlowRateUnit.graphql +131 -0
  216. s2dm-0.16.2/examples/units/external_qudt/MassPerLengthUnit.graphql +35 -0
  217. s2dm-0.16.2/examples/units/external_qudt/MassUnit.graphql +167 -0
  218. s2dm-0.16.2/examples/units/external_qudt/PowerUnit.graphql +200 -0
  219. s2dm-0.16.2/examples/units/external_qudt/ResistanceUnit.graphql +32 -0
  220. s2dm-0.16.2/examples/units/external_qudt/RotationalVelocityUnit.graphql +20 -0
  221. s2dm-0.16.2/examples/units/external_qudt/SoundPowerLevelUnit.graphql +20 -0
  222. s2dm-0.16.2/examples/units/external_qudt/TemperatureUnit.graphql +29 -0
  223. s2dm-0.16.2/examples/units/external_qudt/TorqueUnit.graphql +56 -0
  224. s2dm-0.16.2/examples/units/external_qudt/UnknownUnit.graphql +1382 -0
  225. s2dm-0.16.2/examples/units/external_qudt/VelocityUnit.graphql +110 -0
  226. s2dm-0.16.2/examples/units/external_qudt/VolumeFlowRateUnit.graphql +293 -0
  227. s2dm-0.16.2/examples/units/external_qudt/VolumeUnit.graphql +146 -0
  228. s2dm-0.16.2/noxfile.py +21 -0
  229. s2dm-0.16.2/package-lock.json +2995 -0
  230. s2dm-0.16.2/package.json +7 -0
  231. s2dm-0.16.2/playground/biome.json +34 -0
  232. s2dm-0.16.2/playground/components.json +22 -0
  233. s2dm-0.16.2/playground/index.html +21 -0
  234. s2dm-0.16.2/playground/package-lock.json +6285 -0
  235. s2dm-0.16.2/playground/package.json +56 -0
  236. s2dm-0.16.2/playground/src/App.tsx +57 -0
  237. s2dm-0.16.2/playground/src/api/capabilities.ts +6 -0
  238. s2dm-0.16.2/playground/src/api/client.ts +68 -0
  239. s2dm-0.16.2/playground/src/api/parseExporters.ts +252 -0
  240. s2dm-0.16.2/playground/src/api/s2dm.ts +59 -0
  241. s2dm-0.16.2/playground/src/api/schemaInputs.ts +23 -0
  242. s2dm-0.16.2/playground/src/api/types.ts +80 -0
  243. s2dm-0.16.2/playground/src/components/CliCommandDisplay.tsx +105 -0
  244. s2dm-0.16.2/playground/src/components/ErrorDisplay.tsx +18 -0
  245. s2dm-0.16.2/playground/src/components/ExplorePane.tsx +364 -0
  246. s2dm-0.16.2/playground/src/components/ExportConfig.tsx +256 -0
  247. s2dm-0.16.2/playground/src/components/FileList.tsx +444 -0
  248. s2dm-0.16.2/playground/src/components/InputPane.tsx +138 -0
  249. s2dm-0.16.2/playground/src/components/Pane.tsx +130 -0
  250. s2dm-0.16.2/playground/src/components/QueryEditorWrapper.tsx +76 -0
  251. s2dm-0.16.2/playground/src/components/ResultPane.tsx +207 -0
  252. s2dm-0.16.2/playground/src/components/SchemaVisualizer.tsx +65 -0
  253. s2dm-0.16.2/playground/src/components/TextEditor.tsx +126 -0
  254. s2dm-0.16.2/playground/src/components/ThemeToggle.tsx +80 -0
  255. s2dm-0.16.2/playground/src/components/graphiql-theme.css +154 -0
  256. s2dm-0.16.2/playground/src/components/ui/alert-dialog.tsx +159 -0
  257. s2dm-0.16.2/playground/src/components/ui/button.tsx +74 -0
  258. s2dm-0.16.2/playground/src/components/ui/checkbox.tsx +30 -0
  259. s2dm-0.16.2/playground/src/components/ui/collapsible-section.tsx +49 -0
  260. s2dm-0.16.2/playground/src/components/ui/dialog.tsx +139 -0
  261. s2dm-0.16.2/playground/src/components/ui/empty-state.tsx +43 -0
  262. s2dm-0.16.2/playground/src/components/ui/form-label.tsx +22 -0
  263. s2dm-0.16.2/playground/src/components/ui/heading.tsx +39 -0
  264. s2dm-0.16.2/playground/src/components/ui/input.tsx +21 -0
  265. s2dm-0.16.2/playground/src/components/ui/label.tsx +24 -0
  266. s2dm-0.16.2/playground/src/components/ui/select.tsx +145 -0
  267. s2dm-0.16.2/playground/src/components/ui/separator.tsx +10 -0
  268. s2dm-0.16.2/playground/src/components/ui/simple-dropdown.tsx +93 -0
  269. s2dm-0.16.2/playground/src/components/ui/tabs.tsx +53 -0
  270. s2dm-0.16.2/playground/src/components/voyager-dark.css +235 -0
  271. s2dm-0.16.2/playground/src/config/api.ts +3 -0
  272. s2dm-0.16.2/playground/src/constants.ts +3 -0
  273. s2dm-0.16.2/playground/src/hooks/useMonacoTheme.ts +9 -0
  274. s2dm-0.16.2/playground/src/hooks/useTheme.ts +24 -0
  275. s2dm-0.16.2/playground/src/index.css +126 -0
  276. s2dm-0.16.2/playground/src/language-support/turtleMonaco.ts +125 -0
  277. s2dm-0.16.2/playground/src/main.tsx +22 -0
  278. s2dm-0.16.2/playground/src/store/app/appSaga.ts +41 -0
  279. s2dm-0.16.2/playground/src/store/app/appSlice.ts +14 -0
  280. s2dm-0.16.2/playground/src/store/capabilities/capabilitiesSaga.ts +65 -0
  281. s2dm-0.16.2/playground/src/store/capabilities/capabilitiesSlice.ts +101 -0
  282. s2dm-0.16.2/playground/src/store/export/exportSaga.ts +147 -0
  283. s2dm-0.16.2/playground/src/store/export/exportSlice.ts +91 -0
  284. s2dm-0.16.2/playground/src/store/hooks.ts +6 -0
  285. s2dm-0.16.2/playground/src/store/schema/schemaSlice.ts +47 -0
  286. s2dm-0.16.2/playground/src/store/selection/pruneSchemaSaga.ts +68 -0
  287. s2dm-0.16.2/playground/src/store/selection/selectionSlice.ts +51 -0
  288. s2dm-0.16.2/playground/src/store/store.ts +50 -0
  289. s2dm-0.16.2/playground/src/store/types.ts +24 -0
  290. s2dm-0.16.2/playground/src/store/ui/uiSlice.ts +46 -0
  291. s2dm-0.16.2/playground/src/store/validation/validationSaga.ts +46 -0
  292. s2dm-0.16.2/playground/src/store/validation/validationSlice.ts +50 -0
  293. s2dm-0.16.2/playground/src/types/importedFile.ts +6 -0
  294. s2dm-0.16.2/playground/src/utils/buildCliCommand.ts +111 -0
  295. s2dm-0.16.2/playground/src/utils/cn.ts +7 -0
  296. s2dm-0.16.2/playground/src/utils/download.ts +14 -0
  297. s2dm-0.16.2/playground/src/utils/monacoLanguage.ts +24 -0
  298. s2dm-0.16.2/playground/src/utils/validation.ts +16 -0
  299. s2dm-0.16.2/playground/tsconfig.app.json +32 -0
  300. s2dm-0.16.2/playground/tsconfig.json +13 -0
  301. s2dm-0.16.2/playground/tsconfig.node.json +26 -0
  302. s2dm-0.16.2/playground/vite.config.ts +19 -0
  303. s2dm-0.16.2/pyproject.toml +91 -0
  304. s2dm-0.16.2/src/s2dm/__init__.py +7 -0
  305. s2dm-0.16.2/src/s2dm/api/__init__.py +5 -0
  306. s2dm-0.16.2/src/s2dm/api/config.py +10 -0
  307. s2dm-0.16.2/src/s2dm/api/errors.py +47 -0
  308. s2dm-0.16.2/src/s2dm/api/main.py +124 -0
  309. s2dm-0.16.2/src/s2dm/api/models/__init__.py +0 -0
  310. s2dm-0.16.2/src/s2dm/api/models/avro.py +22 -0
  311. s2dm-0.16.2/src/s2dm/api/models/base.py +103 -0
  312. s2dm-0.16.2/src/s2dm/api/models/filter.py +12 -0
  313. s2dm-0.16.2/src/s2dm/api/models/jsonschema.py +13 -0
  314. s2dm-0.16.2/src/s2dm/api/models/protobuf.py +14 -0
  315. s2dm-0.16.2/src/s2dm/api/models/query_validate.py +12 -0
  316. s2dm-0.16.2/src/s2dm/api/models/shacl.py +33 -0
  317. s2dm-0.16.2/src/s2dm/api/models/validate.py +11 -0
  318. s2dm-0.16.2/src/s2dm/api/routes/__init__.py +0 -0
  319. s2dm-0.16.2/src/s2dm/api/routes/avro.py +71 -0
  320. s2dm-0.16.2/src/s2dm/api/routes/filter.py +31 -0
  321. s2dm-0.16.2/src/s2dm/api/routes/jsonschema.py +41 -0
  322. s2dm-0.16.2/src/s2dm/api/routes/protobuf.py +53 -0
  323. s2dm-0.16.2/src/s2dm/api/routes/query_validate.py +40 -0
  324. s2dm-0.16.2/src/s2dm/api/routes/shacl.py +51 -0
  325. s2dm-0.16.2/src/s2dm/api/routes/validate.py +36 -0
  326. s2dm-0.16.2/src/s2dm/api/routes/vspec.py +38 -0
  327. s2dm-0.16.2/src/s2dm/api/services/__init__.py +0 -0
  328. s2dm-0.16.2/src/s2dm/api/services/response_service.py +38 -0
  329. s2dm-0.16.2/src/s2dm/api/services/schema_service.py +88 -0
  330. s2dm-0.16.2/src/s2dm/cli.py +1725 -0
  331. s2dm-0.16.2/src/s2dm/concept/__init__.py +0 -0
  332. s2dm-0.16.2/src/s2dm/concept/models.py +47 -0
  333. s2dm-0.16.2/src/s2dm/concept/services.py +74 -0
  334. s2dm-0.16.2/src/s2dm/exporters/README.md +700 -0
  335. s2dm-0.16.2/src/s2dm/exporters/__init__.py +0 -0
  336. s2dm-0.16.2/src/s2dm/exporters/avro/__init__.py +6 -0
  337. s2dm-0.16.2/src/s2dm/exporters/avro/avro.py +55 -0
  338. s2dm-0.16.2/src/s2dm/exporters/avro/common.py +39 -0
  339. s2dm-0.16.2/src/s2dm/exporters/avro/protocol.py +114 -0
  340. s2dm-0.16.2/src/s2dm/exporters/avro/protocol_transformer.py +161 -0
  341. s2dm-0.16.2/src/s2dm/exporters/avro/schema.py +55 -0
  342. s2dm-0.16.2/src/s2dm/exporters/avro/schema_transformer.py +309 -0
  343. s2dm-0.16.2/src/s2dm/exporters/avro/transformer.py +309 -0
  344. s2dm-0.16.2/src/s2dm/exporters/concept_uri.py +46 -0
  345. s2dm-0.16.2/src/s2dm/exporters/id.py +320 -0
  346. s2dm-0.16.2/src/s2dm/exporters/jsonschema/__init__.py +5 -0
  347. s2dm-0.16.2/src/s2dm/exporters/jsonschema/jsonschema.py +57 -0
  348. s2dm-0.16.2/src/s2dm/exporters/jsonschema/transformer.py +531 -0
  349. s2dm-0.16.2/src/s2dm/exporters/protobuf/__init__.py +3 -0
  350. s2dm-0.16.2/src/s2dm/exporters/protobuf/models.py +76 -0
  351. s2dm-0.16.2/src/s2dm/exporters/protobuf/protobuf.py +61 -0
  352. s2dm-0.16.2/src/s2dm/exporters/protobuf/templates/proto_standard.j2 +87 -0
  353. s2dm-0.16.2/src/s2dm/exporters/protobuf/transformer.py +519 -0
  354. s2dm-0.16.2/src/s2dm/exporters/shacl.py +312 -0
  355. s2dm-0.16.2/src/s2dm/exporters/skos.py +270 -0
  356. s2dm-0.16.2/src/s2dm/exporters/spec_history.py +249 -0
  357. s2dm-0.16.2/src/s2dm/exporters/utils/__init__.py +0 -0
  358. s2dm-0.16.2/src/s2dm/exporters/utils/annotated_schema.py +25 -0
  359. s2dm-0.16.2/src/s2dm/exporters/utils/directive.py +229 -0
  360. s2dm-0.16.2/src/s2dm/exporters/utils/extraction.py +106 -0
  361. s2dm-0.16.2/src/s2dm/exporters/utils/field.py +158 -0
  362. s2dm-0.16.2/src/s2dm/exporters/utils/graphql_type.py +32 -0
  363. s2dm-0.16.2/src/s2dm/exporters/utils/instance_tag.py +356 -0
  364. s2dm-0.16.2/src/s2dm/exporters/utils/naming.py +238 -0
  365. s2dm-0.16.2/src/s2dm/exporters/utils/naming_config.py +161 -0
  366. s2dm-0.16.2/src/s2dm/exporters/utils/schema.py +59 -0
  367. s2dm-0.16.2/src/s2dm/exporters/utils/schema_loader.py +871 -0
  368. s2dm-0.16.2/src/s2dm/exporters/vspec.py +410 -0
  369. s2dm-0.16.2/src/s2dm/logger.py +184 -0
  370. s2dm-0.16.2/src/s2dm/registry/README.md +65 -0
  371. s2dm-0.16.2/src/s2dm/registry/__init__.py +8 -0
  372. s2dm-0.16.2/src/s2dm/registry/concept_uris.py +134 -0
  373. s2dm-0.16.2/src/s2dm/registry/search.py +201 -0
  374. s2dm-0.16.2/src/s2dm/registry/spec_history.py +177 -0
  375. s2dm-0.16.2/src/s2dm/registry/variant_ids.py +92 -0
  376. s2dm-0.16.2/src/s2dm/tools/README.md +160 -0
  377. s2dm-0.16.2/src/s2dm/tools/__init__.py +0 -0
  378. s2dm-0.16.2/src/s2dm/tools/constraint_checker.py +54 -0
  379. s2dm-0.16.2/src/s2dm/tools/diff_parser.py +68 -0
  380. s2dm-0.16.2/src/s2dm/tools/graphql_inspector.py +351 -0
  381. s2dm-0.16.2/src/s2dm/tools/graphql_inspector_diff.js +151 -0
  382. s2dm-0.16.2/src/s2dm/tools/naming_checker.py +142 -0
  383. s2dm-0.16.2/src/s2dm/tools/string.py +6 -0
  384. s2dm-0.16.2/src/s2dm/tools/validators.py +31 -0
  385. s2dm-0.16.2/src/s2dm/units/README.md +204 -0
  386. s2dm-0.16.2/src/s2dm/units/__init__.py +0 -0
  387. s2dm-0.16.2/src/s2dm/units/sync.py +436 -0
  388. s2dm-0.16.2/src/s2dm/utils/__init__.py +1 -0
  389. s2dm-0.16.2/src/s2dm/utils/file.py +53 -0
  390. s2dm-0.16.2/test_env/bin/Activate.ps1 +247 -0
  391. s2dm-0.16.2/test_env/bin/activate +76 -0
  392. s2dm-0.16.2/test_env/bin/activate.csh +27 -0
  393. s2dm-0.16.2/test_env/bin/activate.fish +69 -0
  394. s2dm-0.16.2/test_env/bin/avro +8 -0
  395. s2dm-0.16.2/test_env/bin/csv2rdf +8 -0
  396. s2dm-0.16.2/test_env/bin/markdown-it +8 -0
  397. s2dm-0.16.2/test_env/bin/normalizer +8 -0
  398. s2dm-0.16.2/test_env/bin/pip +8 -0
  399. s2dm-0.16.2/test_env/bin/pip3 +8 -0
  400. s2dm-0.16.2/test_env/bin/pip3.12 +8 -0
  401. s2dm-0.16.2/test_env/bin/pygmentize +8 -0
  402. s2dm-0.16.2/test_env/bin/pyshacl +8 -0
  403. s2dm-0.16.2/test_env/bin/pyshacl_rules +8 -0
  404. s2dm-0.16.2/test_env/bin/pyshacl_server +8 -0
  405. s2dm-0.16.2/test_env/bin/pyshacl_validate +8 -0
  406. s2dm-0.16.2/test_env/bin/python +1 -0
  407. s2dm-0.16.2/test_env/bin/python3 +1 -0
  408. s2dm-0.16.2/test_env/bin/python3.12 +1 -0
  409. s2dm-0.16.2/test_env/bin/rdf2dot +8 -0
  410. s2dm-0.16.2/test_env/bin/rdfgraphisomorphism +8 -0
  411. s2dm-0.16.2/test_env/bin/rdfpipe +8 -0
  412. s2dm-0.16.2/test_env/bin/rdfs2dot +8 -0
  413. s2dm-0.16.2/test_env/bin/rich-click +8 -0
  414. s2dm-0.16.2/test_env/bin/s2dm +8 -0
  415. s2dm-0.16.2/test_env/bin/sq +8 -0
  416. s2dm-0.16.2/test_env/pyvenv.cfg +5 -0
  417. s2dm-0.16.2/tests/__init__.py +0 -0
  418. s2dm-0.16.2/tests/conftest.py +340 -0
  419. s2dm-0.16.2/tests/data/base.graphql +27 -0
  420. s2dm-0.16.2/tests/data/breaking.graphql +30 -0
  421. s2dm-0.16.2/tests/data/dangerous.graphql +31 -0
  422. s2dm-0.16.2/tests/data/invalid_query.graphql +9 -0
  423. s2dm-0.16.2/tests/data/no-change.graphql +27 -0
  424. s2dm-0.16.2/tests/data/non-breaking.graphql +33 -0
  425. s2dm-0.16.2/tests/data/schema1-1.graphql +48 -0
  426. s2dm-0.16.2/tests/data/schema1-2.graphql +43 -0
  427. s2dm-0.16.2/tests/data/schema1.graphql +87 -0
  428. s2dm-0.16.2/tests/data/schema1_query.graphql +15 -0
  429. s2dm-0.16.2/tests/data/schema2-1.graphql +50 -0
  430. s2dm-0.16.2/tests/data/schema2-2.graphql +43 -0
  431. s2dm-0.16.2/tests/data/schema2.graphql +88 -0
  432. s2dm-0.16.2/tests/data/schema3.graphql +89 -0
  433. s2dm-0.16.2/tests/data/spec/common.graphql +81 -0
  434. s2dm-0.16.2/tests/data/units/AccelerationUnit.graphql +50 -0
  435. s2dm-0.16.2/tests/data/units/AngleUnit.graphql +38 -0
  436. s2dm-0.16.2/tests/data/units/AngularVelocityUnit.graphql +23 -0
  437. s2dm-0.16.2/tests/data/units/DimensionlessRatioUnit.graphql +44 -0
  438. s2dm-0.16.2/tests/data/units/DisplacementCurrentUnit.graphql +20 -0
  439. s2dm-0.16.2/tests/data/units/ElectricChargeUnit.graphql +104 -0
  440. s2dm-0.16.2/tests/data/units/ElectricPotentialUnit.graphql +47 -0
  441. s2dm-0.16.2/tests/data/units/ElectricPowerUnit.graphql +38 -0
  442. s2dm-0.16.2/tests/data/units/ForcePerAreaUnit.graphql +203 -0
  443. s2dm-0.16.2/tests/data/units/ForceUnit.graphql +71 -0
  444. s2dm-0.16.2/tests/data/units/HeartRateUnit.graphql +5 -0
  445. s2dm-0.16.2/tests/data/units/LengthUnit.graphql +116 -0
  446. s2dm-0.16.2/tests/data/units/LuminousFluxPerAreaUnit.graphql +11 -0
  447. s2dm-0.16.2/tests/data/units/MassFlowRateUnit.graphql +131 -0
  448. s2dm-0.16.2/tests/data/units/MassPerLengthUnit.graphql +35 -0
  449. s2dm-0.16.2/tests/data/units/MassUnit.graphql +167 -0
  450. s2dm-0.16.2/tests/data/units/PowerUnit.graphql +200 -0
  451. s2dm-0.16.2/tests/data/units/ResistanceUnit.graphql +32 -0
  452. s2dm-0.16.2/tests/data/units/RotationalVelocityUnit.graphql +20 -0
  453. s2dm-0.16.2/tests/data/units/SoundPowerLevelUnit.graphql +20 -0
  454. s2dm-0.16.2/tests/data/units/TemperatureUnit.graphql +29 -0
  455. s2dm-0.16.2/tests/data/units/TorqueUnit.graphql +56 -0
  456. s2dm-0.16.2/tests/data/units/UnknownUnit.graphql +1382 -0
  457. s2dm-0.16.2/tests/data/units/VelocityUnit.graphql +110 -0
  458. s2dm-0.16.2/tests/data/units/VolumeFlowRateUnit.graphql +293 -0
  459. s2dm-0.16.2/tests/data/units/VolumeUnit.graphql +146 -0
  460. s2dm-0.16.2/tests/data/valid_query.graphql +11 -0
  461. s2dm-0.16.2/tests/test_api_core.py +196 -0
  462. s2dm-0.16.2/tests/test_api_exports.py +424 -0
  463. s2dm-0.16.2/tests/test_api_schema_routes.py +236 -0
  464. s2dm-0.16.2/tests/test_api_schema_service.py +200 -0
  465. s2dm-0.16.2/tests/test_avro.py +815 -0
  466. s2dm-0.16.2/tests/test_avro_idl.py +624 -0
  467. s2dm-0.16.2/tests/test_check_constraint.py +131 -0
  468. s2dm-0.16.2/tests/test_cli_validation.py +127 -0
  469. s2dm-0.16.2/tests/test_e2e_avro.py +328 -0
  470. s2dm-0.16.2/tests/test_e2e_avro_idl.py +204 -0
  471. s2dm-0.16.2/tests/test_e2e_cli.py +1181 -0
  472. s2dm-0.16.2/tests/test_e2e_jsonschema.py +292 -0
  473. s2dm-0.16.2/tests/test_e2e_protobuf.py +396 -0
  474. s2dm-0.16.2/tests/test_enum_validation.py +250 -0
  475. s2dm-0.16.2/tests/test_expanded_instances/__init__.py +1 -0
  476. s2dm-0.16.2/tests/test_expanded_instances/test_nested_schema.graphql +35 -0
  477. s2dm-0.16.2/tests/test_expanded_instances/test_schema.graphql +67 -0
  478. s2dm-0.16.2/tests/test_get_field_case.py +143 -0
  479. s2dm-0.16.2/tests/test_get_field_case_logic.py +53 -0
  480. s2dm-0.16.2/tests/test_gql_inspector.py +127 -0
  481. s2dm-0.16.2/tests/test_id_exporter_variants.py +867 -0
  482. s2dm-0.16.2/tests/test_jsonschema.py +884 -0
  483. s2dm-0.16.2/tests/test_naming_convention.py +163 -0
  484. s2dm-0.16.2/tests/test_naming_utils.py +462 -0
  485. s2dm-0.16.2/tests/test_nested_types/spec.graphql +37 -0
  486. s2dm-0.16.2/tests/test_protobuf.py +1107 -0
  487. s2dm-0.16.2/tests/test_s2dm.py +5 -0
  488. s2dm-0.16.2/tests/test_schema_loader.py +261 -0
  489. s2dm-0.16.2/tests/test_schema_processing.py +152 -0
  490. s2dm-0.16.2/tests/test_skos_exporter.py +327 -0
  491. s2dm-0.16.2/tests/test_skos_search.py +260 -0
  492. s2dm-0.16.2/tests/test_type_modifiers/output_shacl.ttl +77 -0
  493. s2dm-0.16.2/tests/test_type_modifiers/test_spec.graphql +102 -0
  494. s2dm-0.16.2/tests/test_units_sync.py +190 -0
  495. s2dm-0.16.2/tests/test_utils.py +459 -0
  496. s2dm-0.16.2/tests/test_vss_Seat/15_05_2025/result.csv +193 -0
  497. s2dm-0.16.2/tests/test_vss_Seat/15_05_2025/result.json +8471 -0
  498. s2dm-0.16.2/tests/test_vss_Seat/15_05_2025/result.yaml +1113 -0
  499. s2dm-0.16.2/tests/test_vss_Seat/15_05_2025/schema.graphql +439 -0
  500. s2dm-0.16.2/tests/test_vss_Seat/15_05_2025/schema_with_other_domains.graphql +467 -0
  501. s2dm-0.16.2/uv.lock +2911 -0
@@ -0,0 +1,24 @@
1
+ [tool.bumpversion]
2
+ current_version = "0.16.2"
3
+ parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
4
+ serialize = ["{major}.{minor}.{patch}"]
5
+ search = "{current_version}"
6
+ replace = "{new_version}"
7
+ regex = false
8
+ ignore_missing_version = false
9
+ ignore_missing_files = false
10
+ tag = true
11
+ sign_tags = false
12
+ tag_name = "v{new_version}"
13
+ tag_message = "Bump version: {current_version} → {new_version}"
14
+ allow_dirty = false
15
+ commit = false
16
+ message = "chore: bump version {current_version} → {new_version}"
17
+ moveable_tags = []
18
+ commit_args = ""
19
+
20
+ [[tool.bumpversion.files]]
21
+ filename = "src/s2dm/__init__.py"
22
+
23
+ [[tool.bumpversion.files]]
24
+ filename = "tests/test_s2dm.py"
@@ -0,0 +1,19 @@
1
+ version: 2
2
+ updates:
3
+ # Enable version updates for GitHub Actions
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ labels:
9
+ - "dependencies"
10
+ - "github-actions"
11
+
12
+ # Enable version updates for Python packages
13
+ - package-ecosystem: "pip"
14
+ directory: "/"
15
+ schedule:
16
+ interval: "weekly"
17
+ labels:
18
+ - "dependencies"
19
+ - "python"
@@ -0,0 +1,64 @@
1
+ name: ci
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - main
7
+ - develop
8
+ push:
9
+ branches:
10
+ - main
11
+ - develop
12
+
13
+ jobs:
14
+ check:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: checkout
18
+ uses: actions/checkout@v6
19
+ with:
20
+ fetch-depth: 0
21
+
22
+ - name: setup python
23
+ uses: actions/setup-python@v6
24
+ with:
25
+ python-version: "3.13"
26
+
27
+ - name: setup node
28
+ uses: actions/setup-node@v6
29
+ with:
30
+ node-version: "20"
31
+
32
+ - name: install node dependencies
33
+ run: npm install
34
+
35
+ - name: uv
36
+ uses: astral-sh/setup-uv@v7
37
+
38
+ - name: sync
39
+ run: |
40
+ uv sync --frozen
41
+
42
+ - name: pre-commit
43
+ run: |
44
+ uv run pre-commit run --all-files
45
+
46
+ - name: gitlint
47
+ run: |
48
+ # Determine base branch - use PR base if in PR, otherwise main
49
+ if [ "${{ github.event_name }}" = "pull_request" ]; then
50
+ BASE_BRANCH="${{ github.base_ref }}"
51
+ else
52
+ BASE_BRANCH="main"
53
+ fi
54
+ echo "Using base branch: $BASE_BRANCH"
55
+ # Run gitlint on commits since base branch
56
+ uv run gitlint --commits $(git merge-base HEAD origin/$BASE_BRANCH)..HEAD
57
+
58
+ - name: mypy
59
+ run: |
60
+ uv run mypy src/ tests/
61
+
62
+ - name: test
63
+ run: |
64
+ uv run nox
@@ -0,0 +1,85 @@
1
+ name: Deploy S2DM site to Pages
2
+
3
+ on:
4
+ # Runs on pushes targeting the default branch
5
+ push:
6
+ branches:
7
+ - main
8
+
9
+ # Allows you to run this workflow manually from the Actions tab
10
+ workflow_dispatch:
11
+
12
+ # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
13
+ permissions:
14
+ contents: read
15
+ pages: write
16
+ id-token: write
17
+
18
+ # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
19
+ # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
20
+ concurrency:
21
+ group: "pages"
22
+ cancel-in-progress: false
23
+
24
+ # Default to bash
25
+ defaults:
26
+ run:
27
+ shell: bash
28
+
29
+ jobs:
30
+ # Build job
31
+ build:
32
+ runs-on: ubuntu-latest
33
+ env:
34
+ HUGO_VERSION: 0.147.9
35
+ steps:
36
+ - name: Install Hugo CLI
37
+ run: |
38
+ wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
39
+ && sudo dpkg -i ${{ runner.temp }}/hugo.deb
40
+ - name: Checkout
41
+ uses: actions/checkout@v6
42
+ with:
43
+ submodules: recursive
44
+ fetch-depth: 0
45
+ - name: Setup Node.js
46
+ uses: actions/setup-node@v6
47
+ with:
48
+ node-version: '20'
49
+ cache: 'npm'
50
+ cache-dependency-path: 'docs-gen/package-lock.json'
51
+ - name: Setup Pages
52
+ id: pages
53
+ uses: actions/configure-pages@v5
54
+ - name: Install dependencies
55
+ working-directory: ./docs-gen
56
+ run: npm ci
57
+ - name: Build production website
58
+ working-directory: ./docs-gen
59
+ env:
60
+ # For maximum backward compatibility with Hugo modules
61
+ HUGO_ENVIRONMENT: production
62
+ HUGO_ENV: production
63
+ TZ: America/Los_Angeles
64
+ run: |
65
+ hugo \
66
+ --environment production \
67
+ --minify \
68
+ --cleanDestinationDir \
69
+ --baseURL "${{ steps.pages.outputs.base_url }}/"
70
+ - name: Upload artifact
71
+ uses: actions/upload-pages-artifact@v4
72
+ with:
73
+ path: ./docs-gen/public
74
+
75
+ # Deployment job
76
+ deploy:
77
+ environment:
78
+ name: github-pages
79
+ url: ${{ steps.deployment.outputs.page_url }}
80
+ runs-on: ubuntu-latest
81
+ needs: build
82
+ steps:
83
+ - name: Deploy to GitHub Pages
84
+ id: deployment
85
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,225 @@
1
+ name: release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ workflow_dispatch:
8
+ inputs:
9
+ dry_run:
10
+ description: 'Dry run - build and create release but do not commit or publish to PyPI'
11
+ required: false
12
+ type: boolean
13
+ default: false
14
+
15
+ env:
16
+ ZERO_BASED_VERSIONING: true # set this to false when you want to release v1.0.0
17
+
18
+ jobs:
19
+ release:
20
+ if: github.repository_owner == 'covesa'
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - name: checkout
24
+ uses: actions/checkout@v6
25
+ with:
26
+ ssh-key: ${{ secrets.DEPLOY_KEY }}
27
+ fetch-depth: 0
28
+
29
+ - name: setup python
30
+ uses: actions/setup-python@v6
31
+ with:
32
+ python-version: "3.13"
33
+
34
+ - name: uv
35
+ uses: astral-sh/setup-uv@v7
36
+
37
+ - name: sync
38
+ run: uv sync --frozen
39
+
40
+ - name: install git-cliff
41
+ run: |
42
+ curl -L https://github.com/orhun/git-cliff/releases/download/v2.9.1/git-cliff-2.9.1-x86_64-unknown-linux-gnu.tar.gz | tar xz
43
+ sudo mv git-cliff-2.9.1/git-cliff /usr/local/bin/
44
+
45
+ - name: determine version bump
46
+ id: version
47
+ run: |
48
+ # Get commits since last tag
49
+ LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
50
+ if [ -z "$LAST_TAG" ]; then
51
+ COMMITS=$(git log --pretty=format:"%s" HEAD)
52
+ else
53
+ COMMITS=$(git log --pretty=format:"%s" ${LAST_TAG}..HEAD)
54
+ fi
55
+
56
+ echo "Commits since last tag:"
57
+ echo "$COMMITS"
58
+
59
+ # Determine version bump based on conventional commits
60
+ MAJOR=false
61
+ MINOR=false
62
+ PATCH=false
63
+
64
+ while IFS= read -r commit; do
65
+ echo "Analyzing: $commit"
66
+ if echo "$commit" | grep -qE "^[a-zA-Z]+(\(.+\))?!:"; then
67
+ echo "Breaking change detected"
68
+ MAJOR=true
69
+ elif echo "$commit" | grep -qE "^feat(\(.+\))?:"; then
70
+ echo "Feature detected"
71
+ MINOR=true
72
+ elif echo "$commit" | grep -qE "^(fix|perf)(\(.+\))?:"; then
73
+ echo "Fix/perf detected"
74
+ PATCH=true
75
+ elif echo "$commit" | grep -qE "BREAKING CHANGE:"; then
76
+ echo "Breaking change in body detected"
77
+ MAJOR=true
78
+ fi
79
+ done <<< "$COMMITS"
80
+
81
+ # Determine bump type (major > minor > patch)
82
+ # Use minor bump for breaking changes when zero-based versioning is enabled
83
+ if [ "$MAJOR" = true ]; then
84
+ if [ "$ZERO_BASED_VERSIONING" = "true" ]; then
85
+ echo "bump=minor" >> $GITHUB_OUTPUT
86
+ echo "Version bump: MINOR (zero-based versioning - breaking change)"
87
+ else
88
+ echo "bump=major" >> $GITHUB_OUTPUT
89
+ echo "Version bump: MAJOR"
90
+ fi
91
+ elif [ "$MINOR" = true ]; then
92
+ echo "bump=minor" >> $GITHUB_OUTPUT
93
+ echo "Version bump: MINOR"
94
+ elif [ "$PATCH" = true ]; then
95
+ echo "bump=patch" >> $GITHUB_OUTPUT
96
+ echo "Version bump: PATCH"
97
+ else
98
+ echo "bump=none" >> $GITHUB_OUTPUT
99
+ echo "No version bump needed"
100
+ fi
101
+
102
+ - name: bump version and update changelog
103
+ if: steps.version.outputs.bump != 'none'
104
+ run: |
105
+ git config --local user.email "action@github.com"
106
+ git config --local user.name "GitHub Action"
107
+
108
+ # Bump version without creating a tag or commit (since commit=false in .bumpversion.toml)
109
+ uv run bump-my-version bump ${{ steps.version.outputs.bump }} --no-tag --no-commit
110
+
111
+ # Get the new version from .bumpversion.toml
112
+ NEW_VERSION="v$(grep -E '^current_version = ' .bumpversion.toml | cut -d'"' -f2)"
113
+ echo "NEW_VERSION=${NEW_VERSION}" >> $GITHUB_ENV
114
+
115
+ # Generate changelog with git-cliff for the changes since last tag
116
+ LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
117
+ if [ -z "$LAST_TAG" ]; then
118
+ CHANGELOG=$(git-cliff --latest --strip=header)
119
+ else
120
+ CHANGELOG=$(git-cliff ${LAST_TAG}..HEAD --strip=header)
121
+ fi
122
+
123
+ CHANGELOG=$(echo "$CHANGELOG" | sed "s/\[unreleased\]/[${NEW_VERSION#v}] - $(date +%Y-%m-%d)/i")
124
+
125
+ # Update CHANGELOG.md - insert new version above the previous version
126
+ # Create temporary file with the new changelog entry
127
+ echo "${CHANGELOG}" > temp_changelog.md
128
+ echo "" >> temp_changelog.md
129
+
130
+ # Insert the new changelog entry after the header (line 7) and before the first version entry
131
+ head -n 7 CHANGELOG.md > updated_changelog.md
132
+ cat temp_changelog.md >> updated_changelog.md
133
+ tail -n +8 CHANGELOG.md >> updated_changelog.md
134
+ mv updated_changelog.md CHANGELOG.md
135
+ rm temp_changelog.md
136
+
137
+ - name: build package
138
+ if: steps.version.outputs.bump != 'none'
139
+ run: |
140
+ uv build
141
+
142
+ - name: verify build
143
+ if: steps.version.outputs.bump != 'none'
144
+ run: |
145
+ # Verify the build artifacts exist
146
+ ls -la dist/
147
+ echo "Build artifacts:"
148
+ ls dist/
149
+
150
+ # Test that the version can be imported and matches
151
+ uv pip install dist/*.whl --force-reinstall
152
+ PACKAGE_VERSION=$(uv run python -c "import s2dm; print(s2dm.__version__)")
153
+ EXPECTED_VERSION=$(grep -E '^current_version = ' .bumpversion.toml | cut -d'"' -f2)
154
+
155
+ echo "Package version: $PACKAGE_VERSION"
156
+ echo "Expected version: $EXPECTED_VERSION"
157
+
158
+ if [ "$PACKAGE_VERSION" != "$EXPECTED_VERSION" ]; then
159
+ echo "ERROR: Version mismatch!"
160
+ exit 1
161
+ fi
162
+
163
+ echo "✓ Build verification successful"
164
+
165
+ - name: commit and tag
166
+ if: steps.version.outputs.bump != 'none' && (github.event.inputs.dry_run != 'true')
167
+ run: |
168
+ # Stage all changes (version files and changelog)
169
+ git add .bumpversion.toml src/s2dm/__init__.py tests/test_s2dm.py CHANGELOG.md
170
+ git commit -m "chore: release ${NEW_VERSION}
171
+
172
+ - Bump version to ${NEW_VERSION#v}
173
+ - Update CHANGELOG.md"
174
+
175
+ # Create the tag on this commit
176
+ git tag ${NEW_VERSION}
177
+
178
+ - name: push changes
179
+ if: steps.version.outputs.bump != 'none' && (github.event.inputs.dry_run != 'true')
180
+ run: |
181
+ git push origin ${{ github.ref_name }} --tags
182
+
183
+ - name: create release
184
+ if: steps.version.outputs.bump != 'none' && (github.event.inputs.dry_run != 'true')
185
+ env:
186
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
187
+ run: |
188
+ # Generate changelog with git-cliff
189
+ LAST_TAG=$(git tag --sort=-version:refname | sed -n '2p')
190
+ if [ -z "$LAST_TAG" ]; then
191
+ CHANGELOG=$(git-cliff --latest --strip=header)
192
+ else
193
+ CHANGELOG=$(git-cliff ${LAST_TAG}..${NEW_VERSION} --strip=header)
194
+ fi
195
+
196
+ # Create GitHub release
197
+ gh release create ${NEW_VERSION} \
198
+ --title "${NEW_VERSION}" \
199
+ --notes "## Changes
200
+
201
+ ${CHANGELOG}"
202
+
203
+ - name: dry run summary
204
+ if: steps.version.outputs.bump != 'none' && github.event.inputs.dry_run == 'true'
205
+ run: |
206
+ echo "DRY RUN MODE"
207
+ echo "============================================"
208
+ echo "The following would be released:"
209
+ echo " Version: ${NEW_VERSION}"
210
+ echo " Package version: $(uv run python -c 'import s2dm; print(s2dm.__version__)')"
211
+ echo ""
212
+ echo "Build artifacts:"
213
+ ls -lh dist/
214
+ echo ""
215
+ echo "Skipped steps:"
216
+ echo " Git commit and tag"
217
+ echo " Push to repository"
218
+ echo " GitHub release creation"
219
+ echo " Publish to PyPI"
220
+
221
+ - name: publish to pypi
222
+ if: steps.version.outputs.bump != 'none' && (github.event.inputs.dry_run != 'true')
223
+ uses: pypa/gh-action-pypi-publish@release/v1
224
+ with:
225
+ password: ${{ secrets.PYPI_API_TOKEN }}
s2dm-0.16.2/.gitignore ADDED
@@ -0,0 +1,184 @@
1
+ # macOS-specific files
2
+ *.DS_Store
3
+
4
+ # Node.js dependencies and build artifacts
5
+ node_modules/
6
+ npm-debug.log*
7
+ yarn-debug.log*
8
+ yarn-error.log*
9
+ .npm
10
+ .eslintcache
11
+ .stylelintcache
12
+
13
+ # Hugo build artifacts
14
+ public/
15
+ .hugo_build.lock
16
+ hugo_stats.json
17
+ resources/_gen/
18
+ docs-gen/resources/_gen/
19
+
20
+ # Local configuration files
21
+ .envrc
22
+ .vscode
23
+
24
+ # Byte-compiled / optimized / DLL files
25
+ __pycache__/
26
+ *.py[cod]
27
+ *$py.class
28
+
29
+ # C extensions
30
+ *.so
31
+
32
+ # Distribution / packaging
33
+ .Python
34
+ build/
35
+ develop-eggs/
36
+ dist/
37
+ downloads/
38
+ eggs/
39
+ .eggs/
40
+ lib/
41
+ lib64/
42
+ parts/
43
+ sdist/
44
+ var/
45
+ wheels/
46
+ share/python-wheels/
47
+ *.egg-info/
48
+ .installed.cfg
49
+ *.egg
50
+ MANIFEST
51
+
52
+ # PyInstaller
53
+ # Usually these files are written by a python script from a template
54
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
55
+ *.manifest
56
+ *.spec
57
+
58
+ # Installer logs
59
+ pip-log.txt
60
+ pip-delete-this-directory.txt
61
+
62
+ # Unit test / coverage reports
63
+ htmlcov/
64
+ .tox/
65
+ .nox/
66
+ .coverage
67
+ .coverage.*
68
+ .cache
69
+ nosetests.xml
70
+ coverage.xml
71
+ *.cover
72
+ *.py,cover
73
+ .hypothesis/
74
+ .pytest_cache/
75
+ cover/
76
+
77
+ # Translations
78
+ *.mo
79
+ *.pot
80
+
81
+ # Django stuff:
82
+ *.log
83
+ local_settings.py
84
+ db.sqlite3
85
+ db.sqlite3-journal
86
+
87
+ # Flask stuff:
88
+ instance/
89
+ .webassets-cache
90
+
91
+ # Scrapy stuff:
92
+ .scrapy
93
+
94
+ # Sphinx documentation
95
+ docs/_build/
96
+
97
+ # PyBuilder
98
+ .pybuilder/
99
+ target/
100
+
101
+ # Jupyter Notebook
102
+ .ipynb_checkpoints
103
+
104
+ # IPython
105
+ profile_default/
106
+ ipython_config.py
107
+
108
+ # pyenv
109
+ # For a library or package, you might want to ignore these files since the code is
110
+ # intended to run in multiple environments; otherwise, check them in:
111
+ # .python-version
112
+
113
+ # pipenv
114
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
115
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
116
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
117
+ # install all needed dependencies.
118
+ #Pipfile.lock
119
+
120
+ # poetry
121
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
122
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
123
+ # commonly ignored for libraries.
124
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
125
+ #poetry.lock
126
+
127
+ # pdm
128
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
129
+ #pdm.lock
130
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
131
+ # in version control.
132
+ # https://pdm.fming.dev/#use-with-ide
133
+ .pdm.toml
134
+
135
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
136
+ __pypackages__/
137
+
138
+ # Celery stuff
139
+ celerybeat-schedule
140
+ celerybeat.pid
141
+
142
+ # SageMath parsed files
143
+ *.sage.py
144
+
145
+ # Environments
146
+ .env
147
+ .venv
148
+ env/
149
+ venv/
150
+ ENV/
151
+ env.bak/
152
+ venv.bak/
153
+
154
+ # Spyder project settings
155
+ .spyderproject
156
+ .spyproject
157
+
158
+ # Rope project settings
159
+ .ropeproject
160
+
161
+ # mkdocs documentation
162
+ /site
163
+
164
+ # mypy
165
+ .mypy_cache/
166
+ .dmypy.json
167
+ dmypy.json
168
+
169
+ # Pyre type checker
170
+ .pyre/
171
+
172
+ # pytype static type analyzer
173
+ .pytype/
174
+
175
+ # Cython debug symbols
176
+ cython_debug/
177
+
178
+ # PyCharm
179
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
180
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
181
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
182
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
183
+ .idea/
184
+ .cursor/
s2dm-0.16.2/.gitlint ADDED
@@ -0,0 +1,31 @@
1
+ [general]
2
+
3
+ # Ignore rules, reference them by id or name (comma-separated)
4
+
5
+ ignore=B6
6
+
7
+ # Use search semantics for regex matching
8
+
9
+ regex-style-search=True
10
+
11
+ # Enable specific community contributed rules
12
+
13
+ contrib=contrib-title-conventional-commits,CC1
14
+
15
+ # Set the extra-path where gitlint will search for user defined rules
16
+
17
+ # extra-path=./gitlint_rules/my_rules.py
18
+
19
+ ### Configuring rules ###
20
+
21
+ [title-max-length]
22
+ line-length=100
23
+
24
+ [title-min-length]
25
+ min-length=5
26
+
27
+ # Ignore all rules for GitHub Actions or depdenabot bot commits
28
+
29
+ [ignore-by-author-name]
30
+ regex=(GitHub Action|^(dependabot\[bot\]|dependabot))
31
+ ignore=all
@@ -0,0 +1,3 @@
1
+ [submodule "docs-gen/themes/hugo-theme-relearn"]
2
+ path = docs-gen/themes/hugo-theme-relearn
3
+ url = https://github.com/McShelby/hugo-theme-relearn.git
@@ -0,0 +1,18 @@
1
+ [tool.bumpversion]
2
+ current_version = "0.0.0"
3
+ parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
4
+ serialize = ["{major}.{minor}.{patch}"]
5
+ search = "{current_version}"
6
+ replace = "{new_version}"
7
+ regex = false
8
+ ignore_missing_version = false
9
+ ignore_missing_files = false
10
+ tag = true
11
+ sign_tags = false
12
+ tag_name = "v{new_version}"
13
+ tag_message = "Bump version: {current_version} → {new_version}"
14
+ allow_dirty = false
15
+ commit = true
16
+ message = "chore: bump version {current_version} → {new_version}"
17
+ moveable_tags = []
18
+ commit_args = ""
@@ -0,0 +1 @@
1
+ # Modeling Guide