datahike-browser-tests 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/.circleci/config.yml +405 -0
  2. package/.circleci/scripts/gen_ci.clj +194 -0
  3. package/.cirrus.yml +60 -0
  4. package/.clj-kondo/babashka/sci/config.edn +1 -0
  5. package/.clj-kondo/babashka/sci/sci/core.clj +9 -0
  6. package/.clj-kondo/config.edn +95 -0
  7. package/.dir-locals.el +2 -0
  8. package/.github/FUNDING.yml +3 -0
  9. package/.github/ISSUE_TEMPLATE/1-bug-report.yml +68 -0
  10. package/.github/ISSUE_TEMPLATE/2-feature-request.yml +28 -0
  11. package/.github/ISSUE_TEMPLATE/config.yml +6 -0
  12. package/.github/pull_request_template.md +24 -0
  13. package/.github/workflows/native-image.yml +84 -0
  14. package/LICENSE +203 -0
  15. package/README.md +273 -0
  16. package/bb/deps.edn +9 -0
  17. package/bb/resources/github-fingerprints +3 -0
  18. package/bb/resources/native-image-tests/run-bb-pod-tests.clj +162 -0
  19. package/bb/resources/native-image-tests/run-libdatahike-tests +12 -0
  20. package/bb/resources/native-image-tests/run-native-image-tests +74 -0
  21. package/bb/resources/native-image-tests/run-python-tests +22 -0
  22. package/bb/resources/native-image-tests/testconfig.attr-refs.edn +6 -0
  23. package/bb/resources/native-image-tests/testconfig.edn +5 -0
  24. package/bb/resources/template/.settings/org.eclipse.jdt.apt.core.prefs +2 -0
  25. package/bb/resources/template/.settings/org.eclipse.jdt.core.prefs +9 -0
  26. package/bb/resources/template/.settings/org.eclipse.m2e.core.prefs +4 -0
  27. package/bb/resources/template/pom.xml +22 -0
  28. package/bb/src/tools/build.clj +132 -0
  29. package/bb/src/tools/clj_kondo.clj +32 -0
  30. package/bb/src/tools/deploy.clj +26 -0
  31. package/bb/src/tools/examples.clj +19 -0
  32. package/bb/src/tools/npm.clj +100 -0
  33. package/bb/src/tools/python.clj +14 -0
  34. package/bb/src/tools/release.clj +94 -0
  35. package/bb/src/tools/test.clj +148 -0
  36. package/bb/src/tools/version.clj +47 -0
  37. package/bb.edn +269 -0
  38. package/benchmark/src/benchmark/cli.clj +195 -0
  39. package/benchmark/src/benchmark/compare.clj +157 -0
  40. package/benchmark/src/benchmark/config.clj +316 -0
  41. package/benchmark/src/benchmark/measure.clj +187 -0
  42. package/benchmark/src/benchmark/store.clj +190 -0
  43. package/benchmark/test/benchmark/measure_test.clj +156 -0
  44. package/build.clj +30 -0
  45. package/config.edn +49 -0
  46. package/deps.edn +138 -0
  47. package/dev/sandbox.clj +82 -0
  48. package/dev/sandbox.cljs +127 -0
  49. package/dev/sandbox_benchmarks.clj +27 -0
  50. package/dev/sandbox_client.clj +87 -0
  51. package/dev/sandbox_transact_bench.clj +109 -0
  52. package/dev/user.clj +79 -0
  53. package/doc/README.md +96 -0
  54. package/doc/adl/README.md +6 -0
  55. package/doc/adl/adr-000-adr.org +28 -0
  56. package/doc/adl/adr-001-attribute-references.org +15 -0
  57. package/doc/adl/adr-002-build-tooling.org +54 -0
  58. package/doc/adl/adr-003-db-meta-data.md +52 -0
  59. package/doc/adl/adr-004-github-flow.md +40 -0
  60. package/doc/adl/adr-XYZ-template.md +30 -0
  61. package/doc/adl/index.org +3 -0
  62. package/doc/assets/datahike-logo.svg +3 -0
  63. package/doc/assets/datahiking-invoice.org +85 -0
  64. package/doc/assets/hhtree2.png +0 -0
  65. package/doc/assets/network_topology.svg +624 -0
  66. package/doc/assets/perf.png +0 -0
  67. package/doc/assets/schema_mindmap.mm +132 -0
  68. package/doc/assets/schema_mindmap.svg +970 -0
  69. package/doc/assets/temporal_index.mm +74 -0
  70. package/doc/backend-development.md +78 -0
  71. package/doc/bb-pod.md +89 -0
  72. package/doc/benchmarking.md +360 -0
  73. package/doc/bindings/edn-conversion.md +383 -0
  74. package/doc/cli.md +162 -0
  75. package/doc/cljdoc.edn +27 -0
  76. package/doc/cljs-support.md +133 -0
  77. package/doc/config.md +406 -0
  78. package/doc/contributing.md +114 -0
  79. package/doc/datalog-vs-sql.md +210 -0
  80. package/doc/datomic_differences.md +109 -0
  81. package/doc/development/pull-api-ns.md +186 -0
  82. package/doc/development/pull-frame-state-diagram.jpg +0 -0
  83. package/doc/distributed.md +566 -0
  84. package/doc/entity_spec.md +92 -0
  85. package/doc/gc.md +273 -0
  86. package/doc/java-api.md +808 -0
  87. package/doc/javascript-api.md +421 -0
  88. package/doc/libdatahike.md +86 -0
  89. package/doc/logging_and_error_handling.md +43 -0
  90. package/doc/norms.md +66 -0
  91. package/doc/schema-migration.md +85 -0
  92. package/doc/schema.md +287 -0
  93. package/doc/storage-backends.md +363 -0
  94. package/doc/store-id-refactoring.md +596 -0
  95. package/doc/time_variance.md +325 -0
  96. package/doc/unstructured.md +167 -0
  97. package/doc/versioning.md +261 -0
  98. package/examples/basic/README.md +19 -0
  99. package/examples/basic/deps.edn +6 -0
  100. package/examples/basic/docker-compose.yml +13 -0
  101. package/examples/basic/src/examples/core.clj +60 -0
  102. package/examples/basic/src/examples/schema.clj +155 -0
  103. package/examples/basic/src/examples/store.clj +60 -0
  104. package/examples/basic/src/examples/time_travel.clj +185 -0
  105. package/examples/java/.settings/org.eclipse.core.resources.prefs +3 -0
  106. package/examples/java/.settings/org.eclipse.jdt.apt.core.prefs +2 -0
  107. package/examples/java/.settings/org.eclipse.jdt.core.prefs +9 -0
  108. package/examples/java/.settings/org.eclipse.m2e.core.prefs +4 -0
  109. package/examples/java/README.md +162 -0
  110. package/examples/java/pom.xml +62 -0
  111. package/examples/java/src/main/java/examples/QuickStart.java +115 -0
  112. package/examples/java/src/main/java/examples/SchemaExample.java +148 -0
  113. package/examples/java/src/main/java/examples/TimeTravelExample.java +121 -0
  114. package/flake.lock +27 -0
  115. package/flake.nix +27 -0
  116. package/http-server/datahike/http/middleware.clj +75 -0
  117. package/http-server/datahike/http/server.clj +269 -0
  118. package/java/src/datahike/java/Database.java +274 -0
  119. package/java/src/datahike/java/Datahike.java +281 -0
  120. package/java/src/datahike/java/DatahikeGeneratedTest.java +349 -0
  121. package/java/src/datahike/java/DatahikeTest.java +370 -0
  122. package/java/src/datahike/java/EDN.java +170 -0
  123. package/java/src/datahike/java/IEntity.java +11 -0
  124. package/java/src/datahike/java/Keywords.java +161 -0
  125. package/java/src/datahike/java/SchemaFlexibility.java +52 -0
  126. package/java/src/datahike/java/Util.java +219 -0
  127. package/karma.conf.js +19 -0
  128. package/libdatahike/compile-cpp +7 -0
  129. package/libdatahike/src/datahike/impl/LibDatahikeBase.java +203 -0
  130. package/libdatahike/src/datahike/impl/libdatahike.clj +59 -0
  131. package/libdatahike/src/test_cpp.cpp +61 -0
  132. package/npm-package/PUBLISHING.md +140 -0
  133. package/npm-package/README.md +226 -0
  134. package/npm-package/package.template.json +34 -0
  135. package/npm-package/test-isomorphic.ts +281 -0
  136. package/npm-package/test.js +557 -0
  137. package/npm-package/typescript-test.ts +70 -0
  138. package/package.json +16 -0
  139. package/pydatahike/README.md +569 -0
  140. package/pydatahike/pyproject.toml +91 -0
  141. package/pydatahike/setup.py +42 -0
  142. package/pydatahike/src/datahike/__init__.py +134 -0
  143. package/pydatahike/src/datahike/_native.py +250 -0
  144. package/pydatahike/src/datahike/_version.py +2 -0
  145. package/pydatahike/src/datahike/database.py +722 -0
  146. package/pydatahike/src/datahike/edn.py +311 -0
  147. package/pydatahike/src/datahike/py.typed +0 -0
  148. package/pydatahike/tests/conftest.py +17 -0
  149. package/pydatahike/tests/test_basic.py +170 -0
  150. package/pydatahike/tests/test_database.py +51 -0
  151. package/pydatahike/tests/test_edn_conversion.py +299 -0
  152. package/pydatahike/tests/test_query.py +99 -0
  153. package/pydatahike/tests/test_schema.py +55 -0
  154. package/resources/clj-kondo.exports/io.replikativ/datahike/config.edn +5 -0
  155. package/resources/example_server.edn +4 -0
  156. package/shadow-cljs.edn +56 -0
  157. package/src/data_readers.clj +7 -0
  158. package/src/datahike/api/impl.cljc +176 -0
  159. package/src/datahike/api/specification.cljc +633 -0
  160. package/src/datahike/api/types.cljc +261 -0
  161. package/src/datahike/api.cljc +41 -0
  162. package/src/datahike/array.cljc +99 -0
  163. package/src/datahike/cli.clj +166 -0
  164. package/src/datahike/cljs.cljs +6 -0
  165. package/src/datahike/codegen/cli.clj +406 -0
  166. package/src/datahike/codegen/clj_kondo.clj +291 -0
  167. package/src/datahike/codegen/java.clj +403 -0
  168. package/src/datahike/codegen/naming.cljc +33 -0
  169. package/src/datahike/codegen/native.clj +559 -0
  170. package/src/datahike/codegen/pod.clj +488 -0
  171. package/src/datahike/codegen/python.clj +838 -0
  172. package/src/datahike/codegen/report.clj +55 -0
  173. package/src/datahike/codegen/typescript.clj +262 -0
  174. package/src/datahike/codegen/validation.clj +145 -0
  175. package/src/datahike/config.cljc +294 -0
  176. package/src/datahike/connections.cljc +16 -0
  177. package/src/datahike/connector.cljc +265 -0
  178. package/src/datahike/constants.cljc +142 -0
  179. package/src/datahike/core.cljc +297 -0
  180. package/src/datahike/datom.cljc +459 -0
  181. package/src/datahike/db/interface.cljc +119 -0
  182. package/src/datahike/db/search.cljc +305 -0
  183. package/src/datahike/db/transaction.cljc +937 -0
  184. package/src/datahike/db/utils.cljc +338 -0
  185. package/src/datahike/db.cljc +956 -0
  186. package/src/datahike/experimental/unstructured.cljc +126 -0
  187. package/src/datahike/experimental/versioning.cljc +172 -0
  188. package/src/datahike/externs.js +31 -0
  189. package/src/datahike/gc.cljc +69 -0
  190. package/src/datahike/http/client.clj +188 -0
  191. package/src/datahike/http/writer.clj +79 -0
  192. package/src/datahike/impl/entity.cljc +218 -0
  193. package/src/datahike/index/interface.cljc +93 -0
  194. package/src/datahike/index/persistent_set.cljc +469 -0
  195. package/src/datahike/index/utils.cljc +44 -0
  196. package/src/datahike/index.cljc +32 -0
  197. package/src/datahike/js/api.cljs +172 -0
  198. package/src/datahike/js/api_macros.clj +22 -0
  199. package/src/datahike/js.cljs +163 -0
  200. package/src/datahike/json.cljc +209 -0
  201. package/src/datahike/lru.cljc +146 -0
  202. package/src/datahike/migrate.clj +39 -0
  203. package/src/datahike/norm/norm.clj +245 -0
  204. package/src/datahike/online_gc.cljc +252 -0
  205. package/src/datahike/pod.clj +155 -0
  206. package/src/datahike/pull_api.cljc +325 -0
  207. package/src/datahike/query.cljc +1945 -0
  208. package/src/datahike/query_stats.cljc +88 -0
  209. package/src/datahike/readers.cljc +62 -0
  210. package/src/datahike/remote.cljc +218 -0
  211. package/src/datahike/schema.cljc +228 -0
  212. package/src/datahike/schema_cache.cljc +42 -0
  213. package/src/datahike/spec.cljc +101 -0
  214. package/src/datahike/store.cljc +80 -0
  215. package/src/datahike/tools.cljc +308 -0
  216. package/src/datahike/transit.cljc +80 -0
  217. package/src/datahike/writer.cljc +239 -0
  218. package/src/datahike/writing.cljc +362 -0
  219. package/src/deps.cljs +1 -0
  220. package/src-hitchhiker-tree/datahike/index/hitchhiker_tree/insert.cljc +76 -0
  221. package/src-hitchhiker-tree/datahike/index/hitchhiker_tree/upsert.cljc +128 -0
  222. package/src-hitchhiker-tree/datahike/index/hitchhiker_tree.cljc +213 -0
  223. package/test/datahike/backward_compatibility_test/src/backward_test.clj +37 -0
  224. package/test/datahike/integration_test/config_record_file_test.clj +14 -0
  225. package/test/datahike/integration_test/config_record_test.clj +14 -0
  226. package/test/datahike/integration_test/depr_config_uri_test.clj +15 -0
  227. package/test/datahike/integration_test/return_map_test.clj +62 -0
  228. package/test/datahike/integration_test.cljc +67 -0
  229. package/test/datahike/norm/norm_test.clj +124 -0
  230. package/test/datahike/norm/resources/naming-and-sorting-test/001-a1-example.edn +5 -0
  231. package/test/datahike/norm/resources/naming-and-sorting-test/002-a2-example.edn +5 -0
  232. package/test/datahike/norm/resources/naming-and-sorting-test/003-tx-fn-test.edn +1 -0
  233. package/test/datahike/norm/resources/naming-and-sorting-test/004-tx-data-and-tx-fn-test.edn +5 -0
  234. package/test/datahike/norm/resources/naming-and-sorting-test/01-transact-basic-characters.edn +2 -0
  235. package/test/datahike/norm/resources/naming-and-sorting-test/02 add occupation.edn +5 -0
  236. package/test/datahike/norm/resources/naming-and-sorting-test/checksums.edn +12 -0
  237. package/test/datahike/norm/resources/simple-test/001-a1-example.edn +5 -0
  238. package/test/datahike/norm/resources/simple-test/002-a2-example.edn +5 -0
  239. package/test/datahike/norm/resources/simple-test/checksums.edn +4 -0
  240. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/001-a1-example.edn +5 -0
  241. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/002-a2-example.edn +5 -0
  242. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/003-tx-fn-test.edn +1 -0
  243. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/checksums.edn +6 -0
  244. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/second/004-tx-data-and-tx-fn-test.edn +5 -0
  245. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/second/checksums.edn +2 -0
  246. package/test/datahike/norm/resources/tx-fn-test/first/001-a1-example.edn +5 -0
  247. package/test/datahike/norm/resources/tx-fn-test/first/002-a2-example.edn +5 -0
  248. package/test/datahike/norm/resources/tx-fn-test/first/checksums.edn +4 -0
  249. package/test/datahike/norm/resources/tx-fn-test/second/003-tx-fn-test.edn +1 -0
  250. package/test/datahike/norm/resources/tx-fn-test/second/checksums.edn +2 -0
  251. package/test/datahike/test/api_test.cljc +895 -0
  252. package/test/datahike/test/array_test.cljc +40 -0
  253. package/test/datahike/test/attribute_refs/datoms_test.cljc +140 -0
  254. package/test/datahike/test/attribute_refs/db_test.cljc +42 -0
  255. package/test/datahike/test/attribute_refs/differences_test.cljc +515 -0
  256. package/test/datahike/test/attribute_refs/entity_test.cljc +89 -0
  257. package/test/datahike/test/attribute_refs/pull_api_test.cljc +320 -0
  258. package/test/datahike/test/attribute_refs/query_find_specs_test.cljc +59 -0
  259. package/test/datahike/test/attribute_refs/query_fns_test.cljc +130 -0
  260. package/test/datahike/test/attribute_refs/query_interop_test.cljc +47 -0
  261. package/test/datahike/test/attribute_refs/query_not_test.cljc +193 -0
  262. package/test/datahike/test/attribute_refs/query_or_test.cljc +137 -0
  263. package/test/datahike/test/attribute_refs/query_pull_test.cljc +156 -0
  264. package/test/datahike/test/attribute_refs/query_rules_test.cljc +176 -0
  265. package/test/datahike/test/attribute_refs/query_test.cljc +241 -0
  266. package/test/datahike/test/attribute_refs/temporal_search.cljc +22 -0
  267. package/test/datahike/test/attribute_refs/transact_test.cljc +220 -0
  268. package/test/datahike/test/attribute_refs/utils.cljc +128 -0
  269. package/test/datahike/test/cache_test.cljc +38 -0
  270. package/test/datahike/test/components_test.cljc +92 -0
  271. package/test/datahike/test/config_test.cljc +158 -0
  272. package/test/datahike/test/core_test.cljc +105 -0
  273. package/test/datahike/test/datom_test.cljc +44 -0
  274. package/test/datahike/test/db_test.cljc +54 -0
  275. package/test/datahike/test/entity_spec_test.cljc +159 -0
  276. package/test/datahike/test/entity_test.cljc +103 -0
  277. package/test/datahike/test/explode_test.cljc +143 -0
  278. package/test/datahike/test/filter_test.cljc +75 -0
  279. package/test/datahike/test/gc_test.cljc +159 -0
  280. package/test/datahike/test/http/server_test.clj +192 -0
  281. package/test/datahike/test/http/writer_test.clj +86 -0
  282. package/test/datahike/test/ident_test.cljc +32 -0
  283. package/test/datahike/test/index_test.cljc +345 -0
  284. package/test/datahike/test/insert.cljc +125 -0
  285. package/test/datahike/test/java_bindings_test.clj +6 -0
  286. package/test/datahike/test/listen_test.cljc +41 -0
  287. package/test/datahike/test/lookup_refs_test.cljc +266 -0
  288. package/test/datahike/test/lru_test.cljc +27 -0
  289. package/test/datahike/test/migrate_test.clj +297 -0
  290. package/test/datahike/test/model/core.cljc +376 -0
  291. package/test/datahike/test/model/invariant.cljc +142 -0
  292. package/test/datahike/test/model/rng.cljc +82 -0
  293. package/test/datahike/test/model_test.clj +217 -0
  294. package/test/datahike/test/nodejs_test.cljs +262 -0
  295. package/test/datahike/test/online_gc_test.cljc +475 -0
  296. package/test/datahike/test/pod_test.clj +369 -0
  297. package/test/datahike/test/pull_api_test.cljc +474 -0
  298. package/test/datahike/test/purge_test.cljc +144 -0
  299. package/test/datahike/test/query_aggregates_test.cljc +101 -0
  300. package/test/datahike/test/query_find_specs_test.cljc +52 -0
  301. package/test/datahike/test/query_fns_test.cljc +523 -0
  302. package/test/datahike/test/query_interop_test.cljc +47 -0
  303. package/test/datahike/test/query_not_test.cljc +189 -0
  304. package/test/datahike/test/query_or_test.cljc +158 -0
  305. package/test/datahike/test/query_pull_test.cljc +147 -0
  306. package/test/datahike/test/query_rules_test.cljc +248 -0
  307. package/test/datahike/test/query_stats_test.cljc +218 -0
  308. package/test/datahike/test/query_test.cljc +984 -0
  309. package/test/datahike/test/schema_test.cljc +424 -0
  310. package/test/datahike/test/specification_test.cljc +30 -0
  311. package/test/datahike/test/store_test.cljc +78 -0
  312. package/test/datahike/test/stress_test.cljc +57 -0
  313. package/test/datahike/test/time_variance_test.cljc +518 -0
  314. package/test/datahike/test/tools_test.clj +134 -0
  315. package/test/datahike/test/transact_test.cljc +518 -0
  316. package/test/datahike/test/tuples_test.cljc +564 -0
  317. package/test/datahike/test/unstructured_test.cljc +291 -0
  318. package/test/datahike/test/upsert_impl_test.cljc +205 -0
  319. package/test/datahike/test/upsert_test.cljc +363 -0
  320. package/test/datahike/test/utils.cljc +110 -0
  321. package/test/datahike/test/validation_test.cljc +48 -0
  322. package/test/datahike/test/versioning_test.cljc +56 -0
  323. package/test/datahike/test.cljc +66 -0
  324. package/tests.edn +24 -0
@@ -0,0 +1,405 @@
1
+ version: 2.1
2
+
3
+ setup: true
4
+
5
+ orbs:
6
+ tools: replikativ/clj-tools@0
7
+ continuation: circleci/continuation@2.0
8
+
9
+ jobs:
10
+ setup:
11
+ executor: tools/clojurecli
12
+ parameters:
13
+ setup_cljs:
14
+ type: boolean
15
+ default: true
16
+ steps:
17
+ - restore_cache:
18
+ keys:
19
+ - source-{{ .Branch }}-{{ .Revision }}
20
+ - source-{{ .Branch }}
21
+ - source-
22
+ - checkout
23
+ - save_cache:
24
+ key: source-{{ .Branch }}-{{ .Revision }}
25
+ paths:
26
+ - .git
27
+ - restore_cache:
28
+ keys:
29
+ - deps-{{ checksum "deps.edn" }}
30
+ - deps-
31
+ - run:
32
+ name: resolve deps
33
+ command: clojure -A:dev:test:build -P
34
+ - save_cache:
35
+ key: deps-{{ checksum "deps.edn" }}
36
+ paths:
37
+ - /home/circleci/.m2
38
+ - when:
39
+ condition: <<parameters.setup_cljs>>
40
+ steps:
41
+ - restore_cache:
42
+ keys:
43
+ - npm-{{ checksum "package-lock.json" }}
44
+ - npm-
45
+ - run: npm ci
46
+ - save_cache:
47
+ key: npm-{{ checksum "package-lock.json" }}
48
+ paths:
49
+ - /home/circleci/.npm
50
+ - persist_to_workspace:
51
+ root: /home/circleci/
52
+ paths:
53
+ - .m2
54
+ - .npm
55
+ - replikativ
56
+ format:
57
+ executor: tools/clojurecli
58
+ steps:
59
+ - attach_workspace:
60
+ at: /home/circleci
61
+ - run:
62
+ name: Check format
63
+ command: bb format
64
+ no_output_timeout: 5m
65
+ - save_cache:
66
+ key: deps-{{ checksum "deps.edn" }}
67
+ paths:
68
+ - /home/circleci/.m2
69
+ - /home/circleci/.deps.clj
70
+ native-image:
71
+ executor: tools/clojurecli
72
+ steps:
73
+ - attach_workspace:
74
+ at: /home/circleci
75
+ - run:
76
+ name: Add GitHub to known hosts
77
+ command: mkdir -p ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
78
+ no_output_timeout: 1m
79
+ - run:
80
+ name: Generate config
81
+ command: |
82
+ bb --version
83
+ bb .circleci/scripts/gen_ci.clj > generated_config.yml
84
+ - continuation/continue:
85
+ configuration_path: generated_config.yml
86
+ - save_cache:
87
+ key: deps-{{ checksum "deps.edn" }}
88
+ paths:
89
+ - /home/circleci/.m2
90
+ - /home/circleci/.deps.clj
91
+ persistent-set-test:
92
+ executor: tools/clojurecli
93
+ steps:
94
+ - attach_workspace:
95
+ at: /home/circleci
96
+ - run:
97
+ name: Run unittests for persistent sorted set index
98
+ command: bb test clj-pss
99
+ no_output_timeout: 5m
100
+ - save_cache:
101
+ key: deps-{{ checksum "deps.edn" }}
102
+ paths:
103
+ - /home/circleci/.m2
104
+ - /home/circleci/.deps.clj
105
+ hitchhiker-tree-test:
106
+ executor: tools/clojurecli
107
+ steps:
108
+ - attach_workspace:
109
+ at: /home/circleci
110
+ - run:
111
+ name: Run unittests for hitchhiker-tree index
112
+ command: bb test clj-hht
113
+ no_output_timeout: 5m
114
+ - save_cache:
115
+ key: deps-{{ checksum "deps.edn" }}
116
+ paths:
117
+ - /home/circleci/.m2
118
+ - /home/circleci/.deps.clj
119
+ spec-test:
120
+ executor: tools/clojurecli
121
+ steps:
122
+ - attach_workspace:
123
+ at: /home/circleci
124
+ - run:
125
+ name: Run unittests for hitchhiker-tree index
126
+ command: bb test specs
127
+ no_output_timeout: 5m
128
+ - save_cache:
129
+ key: deps-{{ checksum "deps.edn" }}
130
+ paths:
131
+ - /home/circleci/.m2
132
+ - /home/circleci/.deps.clj
133
+ backward-compatibility-test:
134
+ executor: tools/clojurecli
135
+ steps:
136
+ - attach_workspace:
137
+ at: /home/circleci
138
+ - run:
139
+ name: Retrieve ssh-fingerprints
140
+ command: mkdir ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
141
+ no_output_timeout: 1m
142
+ - run:
143
+ name: Run backward compatibility test
144
+ command: bb test back-compat
145
+ no_output_timeout: 5m
146
+ - save_cache:
147
+ key: deps-{{ checksum "deps.edn" }}
148
+ paths:
149
+ - /home/circleci/.m2
150
+ - /home/circleci/.deps.clj
151
+ integration-test:
152
+ executor: tools/clojurecli
153
+ steps:
154
+ - attach_workspace:
155
+ at: /home/circleci
156
+ - run:
157
+ name: Run integration test
158
+ command: bb test integration
159
+ no_output_timeout: 5m
160
+ - save_cache:
161
+ key: deps-{{ checksum "deps.edn" }}
162
+ paths:
163
+ - /home/circleci/.m2
164
+ - /home/circleci/.deps.clj
165
+ kabel-test:
166
+ executor: tools/clojurecli
167
+ steps:
168
+ - attach_workspace:
169
+ at: /home/circleci
170
+ - run:
171
+ name: Run kabel tests
172
+ command: bb test kabel
173
+ no_output_timeout: 5m
174
+ - save_cache:
175
+ key: deps-{{ checksum "deps.edn" }}
176
+ paths:
177
+ - /home/circleci/.m2
178
+ - /home/circleci/.deps.clj
179
+ browser-test:
180
+ executor: tools/clojurecli
181
+ steps:
182
+ - attach_workspace:
183
+ at: /home/circleci
184
+ - run:
185
+ name: Prepare dependencies
186
+ command: clojure -X:deps prep
187
+ - run:
188
+ name: Start test server
189
+ command: clojure -M:test -e "(require 'datahike.kabel.browser-test-server) (datahike.kabel.browser-test-server/start-test-server!) (Thread/sleep Long/MAX_VALUE)"
190
+ background: true
191
+ - run:
192
+ name: Wait for server startup
193
+ command: sleep 20
194
+ - run:
195
+ name: Compile ClojureScript for browser tests
196
+ command: npx shadow-cljs compile :browser-ci
197
+ no_output_timeout: 5m
198
+ - run:
199
+ name: Run Karma browser tests
200
+ command: npx karma start --single-run
201
+ no_output_timeout: 5m
202
+ node-cljs-test:
203
+ executor: tools/clojurecli
204
+ steps:
205
+ - attach_workspace:
206
+ at: /home/circleci
207
+ - run:
208
+ name: Run CLJS node tests
209
+ command: bb node-cljs-test
210
+ no_output_timeout: 5m
211
+ - save_cache:
212
+ key: deps-{{ checksum "deps.edn" }}
213
+ paths:
214
+ - /home/circleci/.m2
215
+ - /home/circleci/.deps.clj
216
+ npm-test:
217
+ executor: tools/clojurecli
218
+ steps:
219
+ - attach_workspace:
220
+ at: /home/circleci
221
+ - run:
222
+ name: Build npm package
223
+ command: bb npm-build
224
+ no_output_timeout: 5m
225
+ - run:
226
+ name: Run npm JS tests
227
+ command: bb npm-test
228
+ - save_cache:
229
+ key: deps-{{ checksum "deps.edn" }}
230
+ paths:
231
+ - /home/circleci/.m2
232
+ - /home/circleci/.deps.clj
233
+ java-examples-test:
234
+ executor: tools/clojurecli
235
+ steps:
236
+ - attach_workspace:
237
+ at: /home/circleci
238
+ - run:
239
+ name: Update examples pom.xml to current version
240
+ command: bb java-examples-version
241
+ - run:
242
+ name: Verify local Datahike jar exists
243
+ command: |
244
+ echo "Checking .m2 directory structure:"
245
+ ls -la /home/circleci/.m2/repository/org/replikativ/ || echo ".m2/repository/org/replikativ not found"
246
+ echo ""
247
+ echo "Checking datahike versions:"
248
+ ls -la /home/circleci/.m2/repository/org/replikativ/datahike/ || echo "datahike directory not found"
249
+ echo ""
250
+ echo "Current version directory:"
251
+ CURRENT_VERSION=$(grep -oP '<datahike.version>\K[^<]+' examples/java/pom.xml)
252
+ echo "Looking for version: $CURRENT_VERSION"
253
+ ls -la /home/circleci/.m2/repository/org/replikativ/datahike/$CURRENT_VERSION/ || echo "$CURRENT_VERSION directory not found"
254
+ - run:
255
+ name: Download Maven dependencies
256
+ command: cd examples/java && mvn dependency:resolve dependency:resolve-plugins
257
+ - run:
258
+ name: Run QuickStart example
259
+ command: cd examples/java && mvn compile exec:java -Dexec.mainClass="examples.QuickStart"
260
+ no_output_timeout: 3m
261
+ - run:
262
+ name: Run SchemaExample
263
+ command: cd examples/java && mvn compile exec:java -Dexec.mainClass="examples.SchemaExample"
264
+ no_output_timeout: 3m
265
+ - run:
266
+ name: Run TimeTravelExample
267
+ command: cd examples/java && mvn compile exec:java -Dexec.mainClass="examples.TimeTravelExample"
268
+ no_output_timeout: 3m
269
+ - save_cache:
270
+ key: deps-{{ checksum "deps.edn" }}
271
+ paths:
272
+ - /home/circleci/.m2
273
+ - /home/circleci/.deps.clj
274
+ build:
275
+ executor: tools/clojurecli
276
+ steps:
277
+ - attach_workspace:
278
+ at: /home/circleci
279
+ - run:
280
+ name: Build jar
281
+ command: bb jar
282
+ - run:
283
+ name: Install jar to local Maven repository
284
+ command: bb install
285
+ - persist_to_workspace:
286
+ root: /home/circleci/
287
+ paths:
288
+ - .m2
289
+ - .npm
290
+ - replikativ
291
+ deploy:
292
+ executor: tools/clojurecli
293
+ steps:
294
+ - attach_workspace:
295
+ at: /home/circleci
296
+ - run:
297
+ name: Deploy to clojars
298
+ command: bb clojars
299
+ release-jar:
300
+ executor: tools/clojurecli
301
+ steps:
302
+ - attach_workspace:
303
+ at: /home/circleci
304
+ - run:
305
+ name: Release jar on GitHub
306
+ command: bb release jar
307
+
308
+ workflows:
309
+ build-test-and-deploy:
310
+ jobs:
311
+ - setup:
312
+ context: ghcr-read-package
313
+ setup_cljs: true
314
+ - build:
315
+ context: ghcr-read-package
316
+ requires:
317
+ - setup
318
+ - native-image:
319
+ context:
320
+ - ghcr-read-package
321
+ - github-token
322
+ filters:
323
+ branches:
324
+ only: main
325
+ requires:
326
+ - setup
327
+ - format:
328
+ context: ghcr-read-package
329
+ requires:
330
+ - setup
331
+ - persistent-set-test:
332
+ context: ghcr-read-package
333
+ requires:
334
+ - build
335
+ - hitchhiker-tree-test:
336
+ context: ghcr-read-package
337
+ requires:
338
+ - build
339
+ - backward-compatibility-test:
340
+ context: ghcr-read-package
341
+ requires:
342
+ - build
343
+ - integration-test:
344
+ context: ghcr-read-package
345
+ requires:
346
+ - build
347
+ - kabel-test:
348
+ context: ghcr-read-package
349
+ requires:
350
+ - build
351
+ - browser-test:
352
+ context: ghcr-read-package
353
+ requires:
354
+ - build
355
+ - node-cljs-test:
356
+ context: ghcr-read-package
357
+ requires:
358
+ - build
359
+ - npm-test:
360
+ context: ghcr-read-package
361
+ requires:
362
+ - build
363
+ - java-examples-test:
364
+ context: ghcr-read-package
365
+ requires:
366
+ - build
367
+ - deploy:
368
+ context:
369
+ - ghcr-read-package
370
+ - clojars-deploy
371
+ - github-token
372
+ filters:
373
+ branches:
374
+ only: main
375
+ requires:
376
+ - format
377
+ - persistent-set-test
378
+ - hitchhiker-tree-test
379
+ - backward-compatibility-test
380
+ - integration-test
381
+ - kabel-test
382
+ - browser-test
383
+ - node-cljs-test
384
+ - npm-test
385
+ - java-examples-test
386
+ - native-image
387
+ - release-jar:
388
+ context:
389
+ - ghcr-read-package
390
+ - github-token
391
+ filters:
392
+ branches:
393
+ only: main
394
+ requires:
395
+ - format
396
+ - persistent-set-test
397
+ - hitchhiker-tree-test
398
+ - backward-compatibility-test
399
+ - integration-test
400
+ - kabel-test
401
+ - browser-test
402
+ - node-cljs-test
403
+ - npm-test
404
+ - java-examples-test
405
+ - native-image
@@ -0,0 +1,194 @@
1
+ (ns gen-ci
2
+ (:require
3
+ [babashka.tasks :as tasks]
4
+ [clj-yaml.core :as yaml]
5
+ [clojure.string :as str]
6
+ [flatland.ordered.map :refer [ordered-map]]))
7
+
8
+ (def graalvm-version "25.0.0")
9
+
10
+ (defn run
11
+ ([cmd-name cmd]
12
+ (run cmd-name cmd nil))
13
+ ([cmd-name cmd no-output-timeout]
14
+ (let [base {:run {:name cmd-name
15
+ :command cmd}}]
16
+ (if no-output-timeout
17
+ (assoc-in base [:run :no_output_timeout] no-output-timeout)
18
+ base))))
19
+
20
+ (defn make-graalvm-url [arch]
21
+ (let [myarch (case arch
22
+ "amd64" "x64"
23
+ "aarch64" "aarch64")]
24
+ (str "https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-"
25
+ graalvm-version
26
+ "/graalvm-community-jdk-"
27
+ graalvm-version
28
+ "_linux-"
29
+ myarch
30
+ "_bin.tar.gz")))
31
+
32
+ (defn build-native-image
33
+ [arch resource-class]
34
+ (let [cache-key (str arch "-deps-linux-{{ checksum \"deps.edn\" }}")
35
+ graalvm-url (make-graalvm-url arch)]
36
+ (ordered-map
37
+ :machine
38
+ {:image "ubuntu-2204:2023.10.1"
39
+ :resource_class resource-class}
40
+ :working_directory "/home/circleci/replikativ"
41
+ :environment {:GRAALVM_VERSION graalvm-version
42
+ :GRAALVM_HOME "/home/circleci/graalvm"
43
+ :DTHK_PLATFORM "linux"
44
+ :DTHK_ARCH arch
45
+ :PATH "/bin:/home/circleci/graalvm/bin:/home/circleci/clojure/bin:/home/circleci/bin"
46
+ :JAVA_HOME "/home/circleci/graalvm/bin/java"}
47
+ :steps
48
+ [:checkout
49
+ {:restore_cache {:keys [cache-key]}}
50
+ (run "Install GraalVM"
51
+ (format "cd /home/circleci
52
+ /bin/curl -sL %s -o graalvm.tar.gz
53
+ /bin/mkdir graalvm || true
54
+ /bin/tar -xzf graalvm.tar.gz --directory graalvm --strip-components 1
55
+ sudo update-alternatives --install /usr/bin/java java /home/circleci/graalvm/bin/java 0
56
+ sudo update-alternatives --install /usr/bin/javac javac /home/circleci/graalvm/bin/javac 0
57
+ sudo update-alternatives --set java /home/circleci/graalvm/bin/java
58
+ sudo update-alternatives --set javac /home/circleci/graalvm/bin/javac"
59
+ graalvm-url))
60
+ (run "Install Clojure"
61
+ "cd /home/circleci
62
+ /bin/curl -sL https://download.clojure.org/install/linux-install-1.12.2.1565.sh -o clojure-install.sh
63
+ /bin/chmod +x clojure-install.sh
64
+ /bin/bash -x clojure-install.sh --prefix /home/circleci/clojure")
65
+ (run "Install Babashka"
66
+ "cd /home/circleci
67
+ /bin/curl -sL https://raw.githubusercontent.com/babashka/babashka/master/install -o babashka-install.sh
68
+ /bin/chmod +x babashka-install.sh
69
+ /bin/bash -x babashka-install.sh --dir /home/circleci/bin")
70
+ (run "Build native image"
71
+ "cd /home/circleci/replikativ
72
+ bb ni-cli")
73
+ (run "Build libdatahike"
74
+ "cd /home/circleci/replikativ
75
+ bb ni-compile")
76
+ (run "Test native image"
77
+ "cd /home/circleci/replikativ
78
+ bb test native-image")
79
+ (run "Test babashka pod"
80
+ "cd /home/circleci/replikativ
81
+ bb test bb-pod")
82
+ (run "Test libdatahike"
83
+ "cd /home/circleci/replikativ
84
+ bb test libdatahike")
85
+ (run "Install Python dependencies"
86
+ "pip install --user pytest")
87
+ (run "Test Python bindings"
88
+ "cd /home/circleci/replikativ
89
+ bb test python")
90
+ {:persist_to_workspace
91
+ {:root "/home/circleci/"
92
+ :paths ["replikativ/dthk" "replikativ/libdatahike/target" "replikativ/graalvm"]}}
93
+ {:save_cache
94
+ {:paths ["~/.m2" ".deps.clj"]
95
+ :key cache-key}}])))
96
+
97
+ (defn release-artifacts
98
+ [arch]
99
+ (let [cache-key (str arch "-deps-linux-{{ checksum \"deps.edn\" }}")]
100
+ (ordered-map
101
+ :executor "tools/clojurecli"
102
+ :working_directory "/home/circleci/replikativ"
103
+ :environment {:DTHK_PLATFORM "linux"
104
+ :DTHK_ARCH arch}
105
+ :steps
106
+ [:checkout
107
+ {:restore_cache {:keys [cache-key]}}
108
+ {:attach_workspace {:at "/home/circleci"}}
109
+ (run "Release native image"
110
+ "cd /home/circleci/replikativ
111
+ bb release native-image")
112
+ (run "Release libdatahike"
113
+ "cd /home/circleci/replikativ
114
+ bb release libdatahike")
115
+ {:persist_to_workspace
116
+ {:root "/home/circleci/"
117
+ :paths ["replikativ/dthk" "replikativ/graalvm"]}}
118
+ {:save_cache
119
+ {:paths ["~/.m2" ".deps.clj"]
120
+ :key cache-key}}])))
121
+
122
+ (defn make-config []
123
+ (ordered-map
124
+ :version 2.1
125
+ :orbs
126
+ {:tools "replikativ/clj-tools@0"}
127
+ :commands
128
+ {:setup-docker-buildx
129
+ {:steps
130
+ [{:run
131
+ {:name "Create multi-platform capable buildx builder"
132
+ :command
133
+ "docker run --privileged --rm tonistiigi/binfmt --install all\ndocker buildx create --name ci-builder --use"}}]}}
134
+ :jobs (ordered-map
135
+ :build-linux-amd64 (build-native-image "amd64" "large")
136
+ :build-linux-aarch64 (build-native-image "aarch64" "arm.large")
137
+ :release-linux-amd64 (release-artifacts "amd64")
138
+ :release-linux-aarch64 (release-artifacts "aarch64"))
139
+ :workflows (ordered-map
140
+ :version 2
141
+ :native-images
142
+ {:jobs ["build-linux-amd64"
143
+ "build-linux-aarch64"
144
+ {"release-linux-amd64"
145
+ {:context ["dockerhub-deploy"
146
+ "github-token"]
147
+ :filters {:branches {:only "main"}}
148
+ :requires ["build-linux-amd64"]}}
149
+ {"release-linux-aarch64"
150
+ {:context ["dockerhub-deploy"
151
+ "github-token"]
152
+ :filters {:branches {:only "main"}}
153
+ :requires ["build-linux-aarch64"]}}]})))
154
+
155
+ (def skip-config
156
+ {:skip-if-only [#"^doc\/.*"
157
+ #"^bb\/.*"
158
+ #"^dev\/.*"
159
+ #"^examples\/.*"
160
+ #"^test\/.*"
161
+ #".*.md$"]})
162
+
163
+ (defn get-changes
164
+ []
165
+ (-> (tasks/shell {:out :string} "git diff --name-only HEAD~1")
166
+ (:out)
167
+ (str/split-lines)))
168
+
169
+ (defn irrelevant-change?
170
+ [change regexes]
171
+ (some? (some #(re-matches % change) regexes)))
172
+
173
+ (defn anything-relevant?
174
+ [change-set regexes]
175
+ (some? (some #(not (irrelevant-change? % regexes)) change-set)))
176
+
177
+ (defn main
178
+ []
179
+ (let [{:keys [skip-if-only]} skip-config
180
+ changed-files (get-changes)]
181
+ (when (anything-relevant? changed-files skip-if-only)
182
+ (-> (make-config)
183
+ (yaml/generate-string :dumper-options {:flow-style :block})
184
+ println))))
185
+
186
+ (when (= *file* (System/getProperty "babashka.file"))
187
+ (main))
188
+
189
+ (comment
190
+ (def changed-files (get-changes))
191
+ (anything-relevant? changed-files (:skip-if-only skip-config))
192
+ (-> (make-config)
193
+ (yaml/generate-string :dumper-options {:flow-style :block})
194
+ println))
package/.cirrus.yml ADDED
@@ -0,0 +1,60 @@
1
+ macos_instance:
2
+ image: ghcr.io/cirruslabs/macos-runner:sequoia
3
+
4
+ build-task:
5
+ only_if: $CIRRUS_BRANCH == 'main'
6
+ maven_cache:
7
+ folder: ~/.m2
8
+ env:
9
+ DTHK_PLATFORM: macos
10
+ DTHK_ARCH: aarch64
11
+ INSTALL_DIR: ${HOME}
12
+ GRAALVM_VERSION: 25.0.0
13
+ GRAALVM_HOME: ${HOME}/graalvm/Contents/Home/
14
+ GITHUB_TOKEN: ENCRYPTED[!86a3791406be6ffc9490f464846ec5385908ae8d3d2a9eeb1457d529060816e14e9d7b88ecd190970add6a5d5d4e7b59!]
15
+ script: |
16
+ set -euo pipefail
17
+
18
+ # install babashka
19
+ curl -sLO https://raw.githubusercontent.com/babashka/babashka/master/install
20
+ chmod +x install
21
+ ./install --dir ${HOME}/.local/bin
22
+ export PATH=${HOME}/.local/bin:$PATH
23
+
24
+ # install clojure
25
+ curl -L -O https://github.com/clojure/brew-install/releases/latest/download/posix-install.sh
26
+ chmod +x posix-install.sh
27
+ sudo ./posix-install.sh
28
+
29
+ # install graalvm
30
+ pushd "$INSTALL_DIR" >/dev/null
31
+ curl -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${GRAALVM_VERSION}/graalvm-community-jdk-${GRAALVM_VERSION}_${DTHK_PLATFORM}-${DTHK_ARCH}_bin.tar.gz -o graalvm.tar.gz
32
+ sudo xattr -r -d com.apple.quarantine graalvm.tar.gz
33
+ mkdir graalvm
34
+ tar -xzf graalvm.tar.gz --strip-components=1 -C graalvm
35
+ popd >/dev/null
36
+
37
+ # prepare
38
+ export PATH=${GRAALVM_HOME}/bin:${PATH}
39
+ export JAVA_HOME=${GRAALVM_HOME}
40
+ sudo /usr/sbin/softwareupdate --install-rosetta --agree-to-license
41
+ java -version
42
+ ${GRAALVM_HOME}bin/native-image --version
43
+ echo $PATH
44
+ native-image --version
45
+
46
+ # compile native artifacts
47
+ bb ni-cli
48
+ bb ni-compile
49
+
50
+ # test native artifacts
51
+ bb test native-image
52
+ bb test bb-pod
53
+ bb test libdatahike
54
+
55
+ # release native artifacts
56
+ bb release native-image
57
+ bb release libdatahike
58
+
59
+ binaries_artifacts:
60
+ path: "dist/*"
@@ -0,0 +1 @@
1
+ {:hooks {:macroexpand {sci.core/copy-ns sci.core/copy-ns}}}
@@ -0,0 +1,9 @@
1
+ (ns sci.core)
2
+
3
+ (defmacro copy-ns
4
+ ([ns-sym sci-ns]
5
+ `(copy-ns ~ns-sym ~sci-ns nil))
6
+ ([ns-sym sci-ns opts]
7
+ `[(quote ~ns-sym)
8
+ ~sci-ns
9
+ (quote ~opts)]))