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.
- package/.circleci/config.yml +405 -0
- package/.circleci/scripts/gen_ci.clj +194 -0
- package/.cirrus.yml +60 -0
- package/.clj-kondo/babashka/sci/config.edn +1 -0
- package/.clj-kondo/babashka/sci/sci/core.clj +9 -0
- package/.clj-kondo/config.edn +95 -0
- package/.dir-locals.el +2 -0
- package/.github/FUNDING.yml +3 -0
- package/.github/ISSUE_TEMPLATE/1-bug-report.yml +68 -0
- package/.github/ISSUE_TEMPLATE/2-feature-request.yml +28 -0
- package/.github/ISSUE_TEMPLATE/config.yml +6 -0
- package/.github/pull_request_template.md +24 -0
- package/.github/workflows/native-image.yml +84 -0
- package/LICENSE +203 -0
- package/README.md +273 -0
- package/bb/deps.edn +9 -0
- package/bb/resources/github-fingerprints +3 -0
- package/bb/resources/native-image-tests/run-bb-pod-tests.clj +162 -0
- package/bb/resources/native-image-tests/run-libdatahike-tests +12 -0
- package/bb/resources/native-image-tests/run-native-image-tests +74 -0
- package/bb/resources/native-image-tests/run-python-tests +22 -0
- package/bb/resources/native-image-tests/testconfig.attr-refs.edn +6 -0
- package/bb/resources/native-image-tests/testconfig.edn +5 -0
- package/bb/resources/template/.settings/org.eclipse.jdt.apt.core.prefs +2 -0
- package/bb/resources/template/.settings/org.eclipse.jdt.core.prefs +9 -0
- package/bb/resources/template/.settings/org.eclipse.m2e.core.prefs +4 -0
- package/bb/resources/template/pom.xml +22 -0
- package/bb/src/tools/build.clj +132 -0
- package/bb/src/tools/clj_kondo.clj +32 -0
- package/bb/src/tools/deploy.clj +26 -0
- package/bb/src/tools/examples.clj +19 -0
- package/bb/src/tools/npm.clj +100 -0
- package/bb/src/tools/python.clj +14 -0
- package/bb/src/tools/release.clj +94 -0
- package/bb/src/tools/test.clj +148 -0
- package/bb/src/tools/version.clj +47 -0
- package/bb.edn +269 -0
- package/benchmark/src/benchmark/cli.clj +195 -0
- package/benchmark/src/benchmark/compare.clj +157 -0
- package/benchmark/src/benchmark/config.clj +316 -0
- package/benchmark/src/benchmark/measure.clj +187 -0
- package/benchmark/src/benchmark/store.clj +190 -0
- package/benchmark/test/benchmark/measure_test.clj +156 -0
- package/build.clj +30 -0
- package/config.edn +49 -0
- package/deps.edn +138 -0
- package/dev/sandbox.clj +82 -0
- package/dev/sandbox.cljs +127 -0
- package/dev/sandbox_benchmarks.clj +27 -0
- package/dev/sandbox_client.clj +87 -0
- package/dev/sandbox_transact_bench.clj +109 -0
- package/dev/user.clj +79 -0
- package/doc/README.md +96 -0
- package/doc/adl/README.md +6 -0
- package/doc/adl/adr-000-adr.org +28 -0
- package/doc/adl/adr-001-attribute-references.org +15 -0
- package/doc/adl/adr-002-build-tooling.org +54 -0
- package/doc/adl/adr-003-db-meta-data.md +52 -0
- package/doc/adl/adr-004-github-flow.md +40 -0
- package/doc/adl/adr-XYZ-template.md +30 -0
- package/doc/adl/index.org +3 -0
- package/doc/assets/datahike-logo.svg +3 -0
- package/doc/assets/datahiking-invoice.org +85 -0
- package/doc/assets/hhtree2.png +0 -0
- package/doc/assets/network_topology.svg +624 -0
- package/doc/assets/perf.png +0 -0
- package/doc/assets/schema_mindmap.mm +132 -0
- package/doc/assets/schema_mindmap.svg +970 -0
- package/doc/assets/temporal_index.mm +74 -0
- package/doc/backend-development.md +78 -0
- package/doc/bb-pod.md +89 -0
- package/doc/benchmarking.md +360 -0
- package/doc/bindings/edn-conversion.md +383 -0
- package/doc/cli.md +162 -0
- package/doc/cljdoc.edn +27 -0
- package/doc/cljs-support.md +133 -0
- package/doc/config.md +406 -0
- package/doc/contributing.md +114 -0
- package/doc/datalog-vs-sql.md +210 -0
- package/doc/datomic_differences.md +109 -0
- package/doc/development/pull-api-ns.md +186 -0
- package/doc/development/pull-frame-state-diagram.jpg +0 -0
- package/doc/distributed.md +566 -0
- package/doc/entity_spec.md +92 -0
- package/doc/gc.md +273 -0
- package/doc/java-api.md +808 -0
- package/doc/javascript-api.md +421 -0
- package/doc/libdatahike.md +86 -0
- package/doc/logging_and_error_handling.md +43 -0
- package/doc/norms.md +66 -0
- package/doc/schema-migration.md +85 -0
- package/doc/schema.md +287 -0
- package/doc/storage-backends.md +363 -0
- package/doc/store-id-refactoring.md +596 -0
- package/doc/time_variance.md +325 -0
- package/doc/unstructured.md +167 -0
- package/doc/versioning.md +261 -0
- package/examples/basic/README.md +19 -0
- package/examples/basic/deps.edn +6 -0
- package/examples/basic/docker-compose.yml +13 -0
- package/examples/basic/src/examples/core.clj +60 -0
- package/examples/basic/src/examples/schema.clj +155 -0
- package/examples/basic/src/examples/store.clj +60 -0
- package/examples/basic/src/examples/time_travel.clj +185 -0
- package/examples/java/.settings/org.eclipse.core.resources.prefs +3 -0
- package/examples/java/.settings/org.eclipse.jdt.apt.core.prefs +2 -0
- package/examples/java/.settings/org.eclipse.jdt.core.prefs +9 -0
- package/examples/java/.settings/org.eclipse.m2e.core.prefs +4 -0
- package/examples/java/README.md +162 -0
- package/examples/java/pom.xml +62 -0
- package/examples/java/src/main/java/examples/QuickStart.java +115 -0
- package/examples/java/src/main/java/examples/SchemaExample.java +148 -0
- package/examples/java/src/main/java/examples/TimeTravelExample.java +121 -0
- package/flake.lock +27 -0
- package/flake.nix +27 -0
- package/http-server/datahike/http/middleware.clj +75 -0
- package/http-server/datahike/http/server.clj +269 -0
- package/java/src/datahike/java/Database.java +274 -0
- package/java/src/datahike/java/Datahike.java +281 -0
- package/java/src/datahike/java/DatahikeGeneratedTest.java +349 -0
- package/java/src/datahike/java/DatahikeTest.java +370 -0
- package/java/src/datahike/java/EDN.java +170 -0
- package/java/src/datahike/java/IEntity.java +11 -0
- package/java/src/datahike/java/Keywords.java +161 -0
- package/java/src/datahike/java/SchemaFlexibility.java +52 -0
- package/java/src/datahike/java/Util.java +219 -0
- package/karma.conf.js +19 -0
- package/libdatahike/compile-cpp +7 -0
- package/libdatahike/src/datahike/impl/LibDatahikeBase.java +203 -0
- package/libdatahike/src/datahike/impl/libdatahike.clj +59 -0
- package/libdatahike/src/test_cpp.cpp +61 -0
- package/npm-package/PUBLISHING.md +140 -0
- package/npm-package/README.md +226 -0
- package/npm-package/package.template.json +34 -0
- package/npm-package/test-isomorphic.ts +281 -0
- package/npm-package/test.js +557 -0
- package/npm-package/typescript-test.ts +70 -0
- package/package.json +16 -0
- package/pydatahike/README.md +569 -0
- package/pydatahike/pyproject.toml +91 -0
- package/pydatahike/setup.py +42 -0
- package/pydatahike/src/datahike/__init__.py +134 -0
- package/pydatahike/src/datahike/_native.py +250 -0
- package/pydatahike/src/datahike/_version.py +2 -0
- package/pydatahike/src/datahike/database.py +722 -0
- package/pydatahike/src/datahike/edn.py +311 -0
- package/pydatahike/src/datahike/py.typed +0 -0
- package/pydatahike/tests/conftest.py +17 -0
- package/pydatahike/tests/test_basic.py +170 -0
- package/pydatahike/tests/test_database.py +51 -0
- package/pydatahike/tests/test_edn_conversion.py +299 -0
- package/pydatahike/tests/test_query.py +99 -0
- package/pydatahike/tests/test_schema.py +55 -0
- package/resources/clj-kondo.exports/io.replikativ/datahike/config.edn +5 -0
- package/resources/example_server.edn +4 -0
- package/shadow-cljs.edn +56 -0
- package/src/data_readers.clj +7 -0
- package/src/datahike/api/impl.cljc +176 -0
- package/src/datahike/api/specification.cljc +633 -0
- package/src/datahike/api/types.cljc +261 -0
- package/src/datahike/api.cljc +41 -0
- package/src/datahike/array.cljc +99 -0
- package/src/datahike/cli.clj +166 -0
- package/src/datahike/cljs.cljs +6 -0
- package/src/datahike/codegen/cli.clj +406 -0
- package/src/datahike/codegen/clj_kondo.clj +291 -0
- package/src/datahike/codegen/java.clj +403 -0
- package/src/datahike/codegen/naming.cljc +33 -0
- package/src/datahike/codegen/native.clj +559 -0
- package/src/datahike/codegen/pod.clj +488 -0
- package/src/datahike/codegen/python.clj +838 -0
- package/src/datahike/codegen/report.clj +55 -0
- package/src/datahike/codegen/typescript.clj +262 -0
- package/src/datahike/codegen/validation.clj +145 -0
- package/src/datahike/config.cljc +294 -0
- package/src/datahike/connections.cljc +16 -0
- package/src/datahike/connector.cljc +265 -0
- package/src/datahike/constants.cljc +142 -0
- package/src/datahike/core.cljc +297 -0
- package/src/datahike/datom.cljc +459 -0
- package/src/datahike/db/interface.cljc +119 -0
- package/src/datahike/db/search.cljc +305 -0
- package/src/datahike/db/transaction.cljc +937 -0
- package/src/datahike/db/utils.cljc +338 -0
- package/src/datahike/db.cljc +956 -0
- package/src/datahike/experimental/unstructured.cljc +126 -0
- package/src/datahike/experimental/versioning.cljc +172 -0
- package/src/datahike/externs.js +31 -0
- package/src/datahike/gc.cljc +69 -0
- package/src/datahike/http/client.clj +188 -0
- package/src/datahike/http/writer.clj +79 -0
- package/src/datahike/impl/entity.cljc +218 -0
- package/src/datahike/index/interface.cljc +93 -0
- package/src/datahike/index/persistent_set.cljc +469 -0
- package/src/datahike/index/utils.cljc +44 -0
- package/src/datahike/index.cljc +32 -0
- package/src/datahike/js/api.cljs +172 -0
- package/src/datahike/js/api_macros.clj +22 -0
- package/src/datahike/js.cljs +163 -0
- package/src/datahike/json.cljc +209 -0
- package/src/datahike/lru.cljc +146 -0
- package/src/datahike/migrate.clj +39 -0
- package/src/datahike/norm/norm.clj +245 -0
- package/src/datahike/online_gc.cljc +252 -0
- package/src/datahike/pod.clj +155 -0
- package/src/datahike/pull_api.cljc +325 -0
- package/src/datahike/query.cljc +1945 -0
- package/src/datahike/query_stats.cljc +88 -0
- package/src/datahike/readers.cljc +62 -0
- package/src/datahike/remote.cljc +218 -0
- package/src/datahike/schema.cljc +228 -0
- package/src/datahike/schema_cache.cljc +42 -0
- package/src/datahike/spec.cljc +101 -0
- package/src/datahike/store.cljc +80 -0
- package/src/datahike/tools.cljc +308 -0
- package/src/datahike/transit.cljc +80 -0
- package/src/datahike/writer.cljc +239 -0
- package/src/datahike/writing.cljc +362 -0
- package/src/deps.cljs +1 -0
- package/src-hitchhiker-tree/datahike/index/hitchhiker_tree/insert.cljc +76 -0
- package/src-hitchhiker-tree/datahike/index/hitchhiker_tree/upsert.cljc +128 -0
- package/src-hitchhiker-tree/datahike/index/hitchhiker_tree.cljc +213 -0
- package/test/datahike/backward_compatibility_test/src/backward_test.clj +37 -0
- package/test/datahike/integration_test/config_record_file_test.clj +14 -0
- package/test/datahike/integration_test/config_record_test.clj +14 -0
- package/test/datahike/integration_test/depr_config_uri_test.clj +15 -0
- package/test/datahike/integration_test/return_map_test.clj +62 -0
- package/test/datahike/integration_test.cljc +67 -0
- package/test/datahike/norm/norm_test.clj +124 -0
- package/test/datahike/norm/resources/naming-and-sorting-test/001-a1-example.edn +5 -0
- package/test/datahike/norm/resources/naming-and-sorting-test/002-a2-example.edn +5 -0
- package/test/datahike/norm/resources/naming-and-sorting-test/003-tx-fn-test.edn +1 -0
- package/test/datahike/norm/resources/naming-and-sorting-test/004-tx-data-and-tx-fn-test.edn +5 -0
- package/test/datahike/norm/resources/naming-and-sorting-test/01-transact-basic-characters.edn +2 -0
- package/test/datahike/norm/resources/naming-and-sorting-test/02 add occupation.edn +5 -0
- package/test/datahike/norm/resources/naming-and-sorting-test/checksums.edn +12 -0
- package/test/datahike/norm/resources/simple-test/001-a1-example.edn +5 -0
- package/test/datahike/norm/resources/simple-test/002-a2-example.edn +5 -0
- package/test/datahike/norm/resources/simple-test/checksums.edn +4 -0
- package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/001-a1-example.edn +5 -0
- package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/002-a2-example.edn +5 -0
- package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/003-tx-fn-test.edn +1 -0
- package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/checksums.edn +6 -0
- package/test/datahike/norm/resources/tx-data-and-tx-fn-test/second/004-tx-data-and-tx-fn-test.edn +5 -0
- package/test/datahike/norm/resources/tx-data-and-tx-fn-test/second/checksums.edn +2 -0
- package/test/datahike/norm/resources/tx-fn-test/first/001-a1-example.edn +5 -0
- package/test/datahike/norm/resources/tx-fn-test/first/002-a2-example.edn +5 -0
- package/test/datahike/norm/resources/tx-fn-test/first/checksums.edn +4 -0
- package/test/datahike/norm/resources/tx-fn-test/second/003-tx-fn-test.edn +1 -0
- package/test/datahike/norm/resources/tx-fn-test/second/checksums.edn +2 -0
- package/test/datahike/test/api_test.cljc +895 -0
- package/test/datahike/test/array_test.cljc +40 -0
- package/test/datahike/test/attribute_refs/datoms_test.cljc +140 -0
- package/test/datahike/test/attribute_refs/db_test.cljc +42 -0
- package/test/datahike/test/attribute_refs/differences_test.cljc +515 -0
- package/test/datahike/test/attribute_refs/entity_test.cljc +89 -0
- package/test/datahike/test/attribute_refs/pull_api_test.cljc +320 -0
- package/test/datahike/test/attribute_refs/query_find_specs_test.cljc +59 -0
- package/test/datahike/test/attribute_refs/query_fns_test.cljc +130 -0
- package/test/datahike/test/attribute_refs/query_interop_test.cljc +47 -0
- package/test/datahike/test/attribute_refs/query_not_test.cljc +193 -0
- package/test/datahike/test/attribute_refs/query_or_test.cljc +137 -0
- package/test/datahike/test/attribute_refs/query_pull_test.cljc +156 -0
- package/test/datahike/test/attribute_refs/query_rules_test.cljc +176 -0
- package/test/datahike/test/attribute_refs/query_test.cljc +241 -0
- package/test/datahike/test/attribute_refs/temporal_search.cljc +22 -0
- package/test/datahike/test/attribute_refs/transact_test.cljc +220 -0
- package/test/datahike/test/attribute_refs/utils.cljc +128 -0
- package/test/datahike/test/cache_test.cljc +38 -0
- package/test/datahike/test/components_test.cljc +92 -0
- package/test/datahike/test/config_test.cljc +158 -0
- package/test/datahike/test/core_test.cljc +105 -0
- package/test/datahike/test/datom_test.cljc +44 -0
- package/test/datahike/test/db_test.cljc +54 -0
- package/test/datahike/test/entity_spec_test.cljc +159 -0
- package/test/datahike/test/entity_test.cljc +103 -0
- package/test/datahike/test/explode_test.cljc +143 -0
- package/test/datahike/test/filter_test.cljc +75 -0
- package/test/datahike/test/gc_test.cljc +159 -0
- package/test/datahike/test/http/server_test.clj +192 -0
- package/test/datahike/test/http/writer_test.clj +86 -0
- package/test/datahike/test/ident_test.cljc +32 -0
- package/test/datahike/test/index_test.cljc +345 -0
- package/test/datahike/test/insert.cljc +125 -0
- package/test/datahike/test/java_bindings_test.clj +6 -0
- package/test/datahike/test/listen_test.cljc +41 -0
- package/test/datahike/test/lookup_refs_test.cljc +266 -0
- package/test/datahike/test/lru_test.cljc +27 -0
- package/test/datahike/test/migrate_test.clj +297 -0
- package/test/datahike/test/model/core.cljc +376 -0
- package/test/datahike/test/model/invariant.cljc +142 -0
- package/test/datahike/test/model/rng.cljc +82 -0
- package/test/datahike/test/model_test.clj +217 -0
- package/test/datahike/test/nodejs_test.cljs +262 -0
- package/test/datahike/test/online_gc_test.cljc +475 -0
- package/test/datahike/test/pod_test.clj +369 -0
- package/test/datahike/test/pull_api_test.cljc +474 -0
- package/test/datahike/test/purge_test.cljc +144 -0
- package/test/datahike/test/query_aggregates_test.cljc +101 -0
- package/test/datahike/test/query_find_specs_test.cljc +52 -0
- package/test/datahike/test/query_fns_test.cljc +523 -0
- package/test/datahike/test/query_interop_test.cljc +47 -0
- package/test/datahike/test/query_not_test.cljc +189 -0
- package/test/datahike/test/query_or_test.cljc +158 -0
- package/test/datahike/test/query_pull_test.cljc +147 -0
- package/test/datahike/test/query_rules_test.cljc +248 -0
- package/test/datahike/test/query_stats_test.cljc +218 -0
- package/test/datahike/test/query_test.cljc +984 -0
- package/test/datahike/test/schema_test.cljc +424 -0
- package/test/datahike/test/specification_test.cljc +30 -0
- package/test/datahike/test/store_test.cljc +78 -0
- package/test/datahike/test/stress_test.cljc +57 -0
- package/test/datahike/test/time_variance_test.cljc +518 -0
- package/test/datahike/test/tools_test.clj +134 -0
- package/test/datahike/test/transact_test.cljc +518 -0
- package/test/datahike/test/tuples_test.cljc +564 -0
- package/test/datahike/test/unstructured_test.cljc +291 -0
- package/test/datahike/test/upsert_impl_test.cljc +205 -0
- package/test/datahike/test/upsert_test.cljc +363 -0
- package/test/datahike/test/utils.cljc +110 -0
- package/test/datahike/test/validation_test.cljc +48 -0
- package/test/datahike/test/versioning_test.cljc +56 -0
- package/test/datahike/test.cljc +66 -0
- package/tests.edn +24 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
(ns tools.build
|
|
2
|
+
(:refer-clojure :exclude [compile])
|
|
3
|
+
(:require
|
|
4
|
+
[babashka.fs :as fs]
|
|
5
|
+
[babashka.process :as p]
|
|
6
|
+
[cheshire.core :as json]
|
|
7
|
+
[clojure.string :as str]
|
|
8
|
+
[clojure.tools.build.api :as b]
|
|
9
|
+
[selmer.parser :refer [render]]
|
|
10
|
+
[tools.version :as version :refer [read-edn-file]]))
|
|
11
|
+
|
|
12
|
+
(defn clean [{:keys [target-dir] :as _project-config}]
|
|
13
|
+
(print (str "Cleaning up target directory '" target-dir "'..."))
|
|
14
|
+
(fs/delete-tree target-dir)
|
|
15
|
+
(println "Done."))
|
|
16
|
+
|
|
17
|
+
(defn basis [{:keys [deps-file aliases] :as _project-config}]
|
|
18
|
+
(b/create-basis (cond-> {:project deps-file}
|
|
19
|
+
aliases (assoc :aliases aliases))))
|
|
20
|
+
|
|
21
|
+
(defn write-version-resource
|
|
22
|
+
"Writes version string to resources/DATAHIKE_VERSION for embedding in builds"
|
|
23
|
+
[repo-config]
|
|
24
|
+
(print "Writing version resource file...")
|
|
25
|
+
(fs/create-dirs "resources")
|
|
26
|
+
(spit "resources/DATAHIKE_VERSION" (version/string repo-config))
|
|
27
|
+
(println "Done. Version:" (version/string repo-config)))
|
|
28
|
+
|
|
29
|
+
(defn compile-java
|
|
30
|
+
([] (compile-java (read-edn-file "config.edn")))
|
|
31
|
+
([{:keys [class-dir java-src-dirs] :as project-config}]
|
|
32
|
+
(print (str "Compiling Java classes saving them to '" class-dir "'..."))
|
|
33
|
+
(b/javac {:src-dirs java-src-dirs
|
|
34
|
+
:class-dir class-dir
|
|
35
|
+
:basis (basis project-config)
|
|
36
|
+
:javac-opts ["--release" "8"
|
|
37
|
+
"-Xlint:deprecation"]})
|
|
38
|
+
(println "Done.")))
|
|
39
|
+
|
|
40
|
+
(defn compile-clojure [{:keys [class-dir src-dirs] :as project-config}]
|
|
41
|
+
(print (str "Compiling Clojure namespaces saving them to '" class-dir "'..."))
|
|
42
|
+
(b/compile-clj {:src-dirs src-dirs
|
|
43
|
+
:class-dir class-dir
|
|
44
|
+
:basis (basis project-config)})
|
|
45
|
+
(println "Done."))
|
|
46
|
+
|
|
47
|
+
(defn pom-path [{:keys [class-dir lib] :as _project-config}]
|
|
48
|
+
(b/pom-path {:lib lib
|
|
49
|
+
:class-dir class-dir}))
|
|
50
|
+
|
|
51
|
+
(defn pom [{:keys [pom-template scm] :as repo-config}
|
|
52
|
+
{:keys [class-dir lib src-dirs] :as project-config}]
|
|
53
|
+
(print (str "Creating pom file from template at '" pom-template "'..."))
|
|
54
|
+
(b/write-pom {:src-pom pom-template
|
|
55
|
+
:src-dirs src-dirs
|
|
56
|
+
:class-dir class-dir
|
|
57
|
+
:lib lib
|
|
58
|
+
:version (version/string repo-config)
|
|
59
|
+
:basis (basis project-config)
|
|
60
|
+
:scm (assoc scm :tag (version/sha))})
|
|
61
|
+
(println "Done." "Saved to" (pom-path project-config)))
|
|
62
|
+
|
|
63
|
+
(defn jar-path [repo-config {:keys [target-dir jar-pattern] :as project-config}]
|
|
64
|
+
(str target-dir "/" (render jar-pattern {:project project-config
|
|
65
|
+
:repo repo-config
|
|
66
|
+
:version-str (version/string repo-config)})))
|
|
67
|
+
|
|
68
|
+
(defn lib-path [repo-config {:keys [target-dir jar-pattern] :as project-config}]
|
|
69
|
+
(str target-dir "/" (render jar-pattern {:project project-config
|
|
70
|
+
:repo repo-config
|
|
71
|
+
:version-str (version/string repo-config)})))
|
|
72
|
+
|
|
73
|
+
(defn jar
|
|
74
|
+
"Builds jar file"
|
|
75
|
+
[repo-config {:keys [class-dir target-dir src-dirs resource-dir] :as project-config}]
|
|
76
|
+
(print (str "Packaging jar at '" target-dir "'..."))
|
|
77
|
+
(b/copy-dir {:src-dirs (filter identity (conj src-dirs resource-dir))
|
|
78
|
+
:target-dir class-dir})
|
|
79
|
+
(b/jar {:class-dir class-dir
|
|
80
|
+
:jar-file (jar-path repo-config project-config)})
|
|
81
|
+
(println "Done."))
|
|
82
|
+
|
|
83
|
+
(defn uber
|
|
84
|
+
"Builds uber jar file"
|
|
85
|
+
[repo-config {:keys [class-dir target-dir src-dirs resource-dir main] :as project-config}]
|
|
86
|
+
(print (str "Packaging uber jar at '" target-dir "'..."))
|
|
87
|
+
(b/copy-dir {:src-dirs (filter identity (conj src-dirs resource-dir))
|
|
88
|
+
:target-dir class-dir})
|
|
89
|
+
(b/uber {:class-dir class-dir
|
|
90
|
+
:uber-file (jar-path repo-config project-config)
|
|
91
|
+
:basis (basis project-config)
|
|
92
|
+
:main main})
|
|
93
|
+
(println "Done."))
|
|
94
|
+
|
|
95
|
+
(defn native-compile [repo-config {:keys [project-target-dir class-path project-name java-interface] :as project-config}]
|
|
96
|
+
(if-let [graalvm-dir (System/getenv "GRAALVM_HOME")]
|
|
97
|
+
(let [native-jar (jar-path repo-config project-config)
|
|
98
|
+
svm-jar (str graalvm-dir "/lib/svm/builder/svm.jar")
|
|
99
|
+
java-base-file (str/replace java-interface #"LibDatahike\.java$" "LibDatahikeBase.java")]
|
|
100
|
+
(println "Compiling native bindings Java classes.")
|
|
101
|
+
(p/shell (str graalvm-dir "/bin/javac")
|
|
102
|
+
"-cp" (str native-jar ":" svm-jar)
|
|
103
|
+
"-d" class-path
|
|
104
|
+
java-base-file java-interface)
|
|
105
|
+
(println "Compiling shared library through native image.")
|
|
106
|
+
(p/shell (str graalvm-dir "/bin/native-image")
|
|
107
|
+
"-jar" native-jar
|
|
108
|
+
"-cp" class-path
|
|
109
|
+
(str "-o " project-name)
|
|
110
|
+
"--shared"
|
|
111
|
+
"-H:+ReportExceptionStackTraces"
|
|
112
|
+
"-H:+GenerateBuildArtifactsFile"
|
|
113
|
+
"-J-Dclojure.spec.skip-macros=true"
|
|
114
|
+
"-J-Dclojure.compiler.direct-linking=true"
|
|
115
|
+
(str "-H:IncludeResources=" (version/string repo-config))
|
|
116
|
+
"--initialize-at-build-time"
|
|
117
|
+
"-H:Log=registerResource:"
|
|
118
|
+
"--verbose"
|
|
119
|
+
"--no-fallback"
|
|
120
|
+
"--no-server"
|
|
121
|
+
"-J-Xmx5g")
|
|
122
|
+
(fs/delete-tree project-target-dir)
|
|
123
|
+
(fs/create-dir project-target-dir)
|
|
124
|
+
(->> (slurp "build-artifacts.json")
|
|
125
|
+
(json/parse-string)
|
|
126
|
+
vals
|
|
127
|
+
(apply concat)
|
|
128
|
+
(cons "build-artifacts.json")
|
|
129
|
+
(run! #(fs/move % project-target-dir))))
|
|
130
|
+
(do (println "GRAALVM_HOME not set!")
|
|
131
|
+
(println "Please set GRAALVM_HOME to the root of the graalvm directory on your system.")
|
|
132
|
+
(System/exit 1))))
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
(ns tools.clj-kondo
|
|
2
|
+
"Generate clj-kondo export configuration for dynamically generated API."
|
|
3
|
+
(:require [babashka.process :as p]))
|
|
4
|
+
|
|
5
|
+
(defn generate-clj-kondo-config!
|
|
6
|
+
"Generate clj-kondo configuration from api-specification.
|
|
7
|
+
|
|
8
|
+
This:
|
|
9
|
+
1. Generates export config at resources/clj-kondo.exports/io.replikativ/datahike/config.edn
|
|
10
|
+
(packaged in jar, auto-imported by consuming projects)
|
|
11
|
+
2. Copies to .clj-kondo/datahike/datahike/config.edn
|
|
12
|
+
(for local development via :config-paths)
|
|
13
|
+
3. Updates main config at .clj-kondo/config.edn with type-mismatch linter
|
|
14
|
+
(for Datahike's own project)
|
|
15
|
+
|
|
16
|
+
This allows clj-kondo to understand the dynamically expanded API functions
|
|
17
|
+
from the emit-api macro, providing IDE autocomplete, signature hints, and
|
|
18
|
+
type checking."
|
|
19
|
+
[export-path local-path main-path]
|
|
20
|
+
(println "Generating clj-kondo configuration...")
|
|
21
|
+
(let [clj-code (str "(require '[datahike.codegen.clj-kondo :as clj-kondo]) "
|
|
22
|
+
"(clj-kondo/write-config! \"" export-path "\") "
|
|
23
|
+
"(clj-kondo/copy-export-to-local! \"" export-path "\" \"" local-path "\") "
|
|
24
|
+
"(clj-kondo/update-main-config! \"" main-path "\")")
|
|
25
|
+
result (p/shell {:out :string
|
|
26
|
+
:err :string}
|
|
27
|
+
"clojure" "-M" "-e" clj-code)]
|
|
28
|
+
(when-not (zero? (:exit result))
|
|
29
|
+
(println "Error generating clj-kondo config:")
|
|
30
|
+
(println (:err result))
|
|
31
|
+
(throw (ex-info "clj-kondo config generation failed" result)))
|
|
32
|
+
(println (:out result))))
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
(ns tools.deploy
|
|
2
|
+
(:require [babashka.process :refer [shell]]
|
|
3
|
+
[tools.build :refer [pom-path jar-path]]))
|
|
4
|
+
|
|
5
|
+
(defn clj [& args] (apply shell "clojure" args))
|
|
6
|
+
(defn quoted [s] (str \" s \"))
|
|
7
|
+
|
|
8
|
+
(defn remote
|
|
9
|
+
"Deploy library to clojars"
|
|
10
|
+
[repo-config project-config]
|
|
11
|
+
(if-not (System/getenv "CLOJARS_USERNAME")
|
|
12
|
+
(println "Environment variable CLOJARS_USERNAME not set!")
|
|
13
|
+
(if-not (System/getenv "CLOJARS_PASSWORD")
|
|
14
|
+
(println "Environment variable CLOJARS_PASSWORD not set!")
|
|
15
|
+
(clj "-X:deploy" "deps-deploy.deps-deploy/deploy"
|
|
16
|
+
:installer :remote
|
|
17
|
+
:artifact (jar-path repo-config project-config)
|
|
18
|
+
:pom-file (quoted (pom-path project-config))))))
|
|
19
|
+
|
|
20
|
+
(defn local
|
|
21
|
+
"Install library locally"
|
|
22
|
+
[repo-config project-config]
|
|
23
|
+
(clj "-X:deploy" "deps-deploy.deps-deploy/deploy"
|
|
24
|
+
:installer :local
|
|
25
|
+
:artifact (jar-path repo-config project-config)
|
|
26
|
+
:pom-file (quoted (pom-path project-config))))
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
(ns tools.examples
|
|
2
|
+
"Tools for managing example projects"
|
|
3
|
+
(:require [clojure.string :as str]
|
|
4
|
+
[tools.version :as version]))
|
|
5
|
+
|
|
6
|
+
(defn update-java-examples-version!
|
|
7
|
+
"Update the datahike.version property in examples/java/pom.xml to match current version"
|
|
8
|
+
[config]
|
|
9
|
+
(let [pom-file "examples/java/pom.xml"
|
|
10
|
+
current-version (version/string config)
|
|
11
|
+
pom-content (slurp pom-file)
|
|
12
|
+
updated-content (str/replace
|
|
13
|
+
pom-content
|
|
14
|
+
#"<datahike\.version>[^<]+</datahike\.version>"
|
|
15
|
+
(str "<datahike.version>" current-version "</datahike.version>"))]
|
|
16
|
+
(when (not= pom-content updated-content)
|
|
17
|
+
(println (str "Updating examples/java/pom.xml datahike.version to " current-version))
|
|
18
|
+
(spit pom-file updated-content)
|
|
19
|
+
true)))
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
(ns tools.npm
|
|
2
|
+
"Build and version management for npm package."
|
|
3
|
+
(:require [babashka.fs :as fs]
|
|
4
|
+
[babashka.process :as p]
|
|
5
|
+
[cheshire.core :as json]
|
|
6
|
+
[clojure.string :as str]
|
|
7
|
+
[tools.version :as version]))
|
|
8
|
+
|
|
9
|
+
(defn clean-npm-package!
|
|
10
|
+
"Remove compiled JS files from npm package directory (both Node and browser builds)"
|
|
11
|
+
[npm-package-path]
|
|
12
|
+
(println "Cleaning npm package directory...")
|
|
13
|
+
(let [js-files (fs/glob npm-package-path "*.js")
|
|
14
|
+
js-map-files (fs/glob npm-package-path "*.js.map")
|
|
15
|
+
all-files (concat js-files js-map-files)
|
|
16
|
+
files-to-keep #{"test.js" "test-final.js" "test-config-keys.js" "test-key-duplication.js"}
|
|
17
|
+
files-to-delete (remove #(contains? files-to-keep (str (fs/file-name %))) all-files)]
|
|
18
|
+
(doseq [file files-to-delete]
|
|
19
|
+
(fs/delete file))
|
|
20
|
+
(println (str "Removed " (count files-to-delete) " compiled files from " npm-package-path))
|
|
21
|
+
(when (fs/exists? (str npm-package-path "/browser"))
|
|
22
|
+
(fs/delete-tree (str npm-package-path "/browser"))
|
|
23
|
+
(println "Removed browser build directory"))))
|
|
24
|
+
|
|
25
|
+
(defn update-package-json-version!
|
|
26
|
+
"Generate npm package.json from template with version from config.edn"
|
|
27
|
+
[config npm-package-path]
|
|
28
|
+
(let [version-str (version/string config)
|
|
29
|
+
package-json-path (str npm-package-path "/package.json")
|
|
30
|
+
template-path (str npm-package-path "/package.template.json")
|
|
31
|
+
template-content (slurp template-path)
|
|
32
|
+
generated-content (str/replace template-content "{{VERSION}}" version-str)]
|
|
33
|
+
(spit package-json-path generated-content)
|
|
34
|
+
(println (str "Generated " package-json-path " from template with version: " version-str))))
|
|
35
|
+
|
|
36
|
+
(defn generate-typescript-definitions!
|
|
37
|
+
"Generate TypeScript definitions for npm package"
|
|
38
|
+
[output-path]
|
|
39
|
+
(println "Generating TypeScript definitions...")
|
|
40
|
+
(let [clj-code (str "(require '[datahike.codegen.typescript :as ts]) "
|
|
41
|
+
"(ts/write-type-definitions! \"" output-path "\")")
|
|
42
|
+
result (p/shell {:out :string
|
|
43
|
+
:err :string}
|
|
44
|
+
"clojure" "-M" "-e" clj-code)]
|
|
45
|
+
(when-not (zero? (:exit result))
|
|
46
|
+
(println "Error generating TypeScript definitions:")
|
|
47
|
+
(println (:err result))
|
|
48
|
+
(throw (ex-info "TypeScript generation failed" result)))
|
|
49
|
+
(println (str "TypeScript definitions written to: " output-path))))
|
|
50
|
+
|
|
51
|
+
(defn build-npm-package!
|
|
52
|
+
"Build npm package: clean, update version, generate types, compile ClojureScript for Node and Browser"
|
|
53
|
+
[config npm-package-path]
|
|
54
|
+
(println "Building npm package...")
|
|
55
|
+
(println "")
|
|
56
|
+
|
|
57
|
+
(println "Step 1/6: Cleaning old compiled files")
|
|
58
|
+
(clean-npm-package! npm-package-path)
|
|
59
|
+
(println "")
|
|
60
|
+
|
|
61
|
+
(println "Step 2/6: Updating package.json version")
|
|
62
|
+
(update-package-json-version! config npm-package-path)
|
|
63
|
+
(println "")
|
|
64
|
+
|
|
65
|
+
(println "Step 3/6: Generating TypeScript definitions")
|
|
66
|
+
(generate-typescript-definitions! (str npm-package-path "/index.d.ts"))
|
|
67
|
+
(println "")
|
|
68
|
+
|
|
69
|
+
(println "Step 4/6: Compiling Node.js build with shadow-cljs")
|
|
70
|
+
(let [result (p/shell {:out :inherit
|
|
71
|
+
:err :inherit}
|
|
72
|
+
"npx shadow-cljs compile npm-release")]
|
|
73
|
+
(when-not (zero? (:exit result))
|
|
74
|
+
(throw (ex-info "Shadow-cljs Node.js compilation failed" result)))
|
|
75
|
+
(println ""))
|
|
76
|
+
|
|
77
|
+
(println "Step 5/6: Compiling Browser build with shadow-cljs")
|
|
78
|
+
(let [result (p/shell {:out :inherit
|
|
79
|
+
:err :inherit}
|
|
80
|
+
"npx shadow-cljs compile browser-release")]
|
|
81
|
+
(when-not (zero? (:exit result))
|
|
82
|
+
(throw (ex-info "Shadow-cljs browser compilation failed" result)))
|
|
83
|
+
(println ""))
|
|
84
|
+
|
|
85
|
+
(println "Step 6/6: Running npm package tests")
|
|
86
|
+
(let [test-result (p/shell {:dir npm-package-path
|
|
87
|
+
:out :inherit
|
|
88
|
+
:err :inherit}
|
|
89
|
+
"node test.js")]
|
|
90
|
+
(when-not (zero? (:exit test-result))
|
|
91
|
+
(throw (ex-info "npm package tests failed" test-result)))
|
|
92
|
+
(println "")
|
|
93
|
+
(println "✓ npm package build complete!")
|
|
94
|
+
(println (str " Version: " (version/string config)))
|
|
95
|
+
(println (str " Node.js: " npm-package-path "/datahike.js.api.js"))
|
|
96
|
+
(println (str " Browser: " npm-package-path "/browser/main.js"))
|
|
97
|
+
(println "")
|
|
98
|
+
(println "Next steps:")
|
|
99
|
+
(println (str " 1. Verify: cd " npm-package-path " && npm pack --dry-run"))
|
|
100
|
+
(println " 2. Publish: npm publish")))
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
(ns tools.python
|
|
2
|
+
"Python package utilities."
|
|
3
|
+
(:require [clojure.string :as str]
|
|
4
|
+
[tools.version :as version]))
|
|
5
|
+
|
|
6
|
+
(defn update-python-version!
|
|
7
|
+
"Generate Python version file from config.edn"
|
|
8
|
+
[config python-package-path]
|
|
9
|
+
(let [version-str (version/string config)
|
|
10
|
+
version-file-path (str python-package-path "/src/datahike/_version.py")
|
|
11
|
+
content (str "\"\"\"Auto-generated version file from config.edn.\"\"\"\n"
|
|
12
|
+
"__version__ = \"" version-str "\"\n")]
|
|
13
|
+
(spit version-file-path content)
|
|
14
|
+
(println (str "Generated " version-file-path " with version: " version-str))))
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
(ns tools.release
|
|
2
|
+
(:require
|
|
3
|
+
[babashka.fs :as fs]
|
|
4
|
+
[borkdude.gh-release-artifact :as gh]
|
|
5
|
+
[selmer.parser :refer [render]]
|
|
6
|
+
[tools.build :as build]
|
|
7
|
+
[tools.version :as version])
|
|
8
|
+
(:import
|
|
9
|
+
[clojure.lang ExceptionInfo]))
|
|
10
|
+
|
|
11
|
+
(defn fib [a b]
|
|
12
|
+
(lazy-seq (cons a (fib b (+ a b)))))
|
|
13
|
+
|
|
14
|
+
(defn retry-with-fib-backoff [retries exec-fn fail-test-fn]
|
|
15
|
+
(loop [idle-times (take retries (fib 1 2))]
|
|
16
|
+
(let [result (exec-fn)]
|
|
17
|
+
(if (fail-test-fn result)
|
|
18
|
+
(do (println "Returned: " result)
|
|
19
|
+
(if-let [sleep-ms (first idle-times)]
|
|
20
|
+
(do (println "Retrying with remaining back-off times (in s): " idle-times)
|
|
21
|
+
(Thread/sleep (* 1000 sleep-ms))
|
|
22
|
+
(recur (rest idle-times)))
|
|
23
|
+
result))
|
|
24
|
+
result))))
|
|
25
|
+
|
|
26
|
+
(defn try-release [file repo-config]
|
|
27
|
+
(try (gh/release-artifact
|
|
28
|
+
{:org (:org repo-config)
|
|
29
|
+
:repo (:lib repo-config)
|
|
30
|
+
:tag (version/string repo-config)
|
|
31
|
+
:commit (version/current-commit)
|
|
32
|
+
:file file
|
|
33
|
+
:content-type "application/java-archive"
|
|
34
|
+
:draft false})
|
|
35
|
+
(catch ExceptionInfo e
|
|
36
|
+
(assoc (ex-data e) :failure? true))))
|
|
37
|
+
|
|
38
|
+
(defn gh-release
|
|
39
|
+
"Create a GitHub release and upload the library jar"
|
|
40
|
+
[repo-config file]
|
|
41
|
+
(println "Trying to release artifact" file "...")
|
|
42
|
+
(let [_ (when-not (fs/exists? file)
|
|
43
|
+
(println "Release file at" file "doesn't exist!")
|
|
44
|
+
(System/exit 1))
|
|
45
|
+
ret (retry-with-fib-backoff 10 #(try-release file repo-config) :failure?)]
|
|
46
|
+
(if (:failure? ret)
|
|
47
|
+
(do (println "GitHub release failed!")
|
|
48
|
+
(System/exit 1))
|
|
49
|
+
(println (:url ret)))))
|
|
50
|
+
|
|
51
|
+
(defn zip-path [lib version target-dir zip-pattern]
|
|
52
|
+
(let [platform (System/getenv "DTHK_PLATFORM")
|
|
53
|
+
arch (System/getenv "DTHK_ARCH")]
|
|
54
|
+
(if-not (and platform arch)
|
|
55
|
+
(do (println "ERROR: Environment variables DTHK_PLATFORM and DTHK_ARCH need to be set")
|
|
56
|
+
(System/exit 1))
|
|
57
|
+
(str target-dir "/" (render zip-pattern {:platform platform
|
|
58
|
+
:arch arch
|
|
59
|
+
:lib lib
|
|
60
|
+
:version version})))))
|
|
61
|
+
|
|
62
|
+
(defn zip-lib [config project]
|
|
63
|
+
(let [{:keys [target-dir zip-pattern]} (-> config :release project) lib "libdatahike"
|
|
64
|
+
version (version/string config)]
|
|
65
|
+
(if-not (fs/exists? target-dir)
|
|
66
|
+
(do (println (str "ERROR: " target-dir " path not found, please compile first."))
|
|
67
|
+
(System/exit 1))
|
|
68
|
+
(let [zip-name (zip-path lib version "." zip-pattern)]
|
|
69
|
+
(fs/zip zip-name [target-dir])
|
|
70
|
+
zip-name))))
|
|
71
|
+
|
|
72
|
+
(defn zip-cli [config project]
|
|
73
|
+
(let [{:keys [target-dir binary-name zip-pattern]} (-> config :release project)
|
|
74
|
+
lib (:lib config)
|
|
75
|
+
version (version/string config)
|
|
76
|
+
binary-path (str target-dir "/" binary-name)]
|
|
77
|
+
(if-not (fs/exists? binary-path)
|
|
78
|
+
(do (println (str "ERROR: " binary-path " executable not found, please compile first."))
|
|
79
|
+
(System/exit 1))
|
|
80
|
+
(let [zip-name (zip-path lib version target-dir zip-pattern)]
|
|
81
|
+
(fs/zip zip-name [binary-name])
|
|
82
|
+
zip-name))))
|
|
83
|
+
|
|
84
|
+
(defn -main [config args]
|
|
85
|
+
(let [cmd (first args)]
|
|
86
|
+
(case cmd
|
|
87
|
+
"jar" (->> (build/jar-path config (-> config :build :clj))
|
|
88
|
+
(gh-release config))
|
|
89
|
+
"native-image" (->> (zip-cli config :native-cli)
|
|
90
|
+
(gh-release config))
|
|
91
|
+
"libdatahike" (->> (zip-lib config :libdatahike)
|
|
92
|
+
(gh-release config))
|
|
93
|
+
(do (println "ERROR: Command not found: " cmd)
|
|
94
|
+
(System/exit 1)))))
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
(ns tools.test
|
|
2
|
+
(:refer-clojure :exclude [test])
|
|
3
|
+
(:require [babashka.fs :as fs]
|
|
4
|
+
[babashka.process :as p]
|
|
5
|
+
[clojure.java.io :as io]
|
|
6
|
+
[tools.build :as build]))
|
|
7
|
+
|
|
8
|
+
(defn clj [opts & args] (apply p/shell opts "clojure" args))
|
|
9
|
+
(defn git [opts & args] (apply p/shell opts "git" args))
|
|
10
|
+
|
|
11
|
+
(defn kaocha [& args]
|
|
12
|
+
(apply clj {:extra-env {"TIMBRE_LEVEL" ":warn"}}
|
|
13
|
+
"-M:test" "-m" "kaocha.runner" args))
|
|
14
|
+
|
|
15
|
+
(defn back-compat [config]
|
|
16
|
+
(println "Testing backwards compatibility")
|
|
17
|
+
(let [old-version-dir "datahike-old"
|
|
18
|
+
ssh-dir (fs/expand-home "~/.ssh")
|
|
19
|
+
known-hosts-file (fs/expand-home "~/.ssh/known_hosts")]
|
|
20
|
+
(println "WRITING TEST DATA TO TEST-DB")
|
|
21
|
+
(when-not (fs/exists? ssh-dir)
|
|
22
|
+
(fs/create-dirs ssh-dir))
|
|
23
|
+
(fs/delete-on-exit old-version-dir)
|
|
24
|
+
(let [output (:out (p/shell {:out :string}
|
|
25
|
+
"ssh-keyscan" "github.com"))]
|
|
26
|
+
(when-not (fs/exists? known-hosts-file)
|
|
27
|
+
(fs/create-file known-hosts-file))
|
|
28
|
+
(fs/write-lines known-hosts-file [output] {:append true}))
|
|
29
|
+
(fs/delete-tree old-version-dir)
|
|
30
|
+
(git {:dir "."}
|
|
31
|
+
"clone" "--depth" "1" (:git-url config) old-version-dir)
|
|
32
|
+
|
|
33
|
+
;; Generate Java API bindings before compiling
|
|
34
|
+
(println "Generating Java API for old version...")
|
|
35
|
+
(let [old-dir old-version-dir
|
|
36
|
+
cp (:out (p/shell {:out :string :dir old-dir}
|
|
37
|
+
"clojure" "-Spath"))]
|
|
38
|
+
;; First compile Java dependencies
|
|
39
|
+
(println "Compiling Java dependencies...")
|
|
40
|
+
(p/shell {:dir old-dir}
|
|
41
|
+
"javac" "-cp" cp "-d" "target/classes"
|
|
42
|
+
"java/src/datahike/java/IEntity.java"
|
|
43
|
+
"java/src/datahike/java/Util.java")
|
|
44
|
+
;; Generate DatahikeGenerated.java
|
|
45
|
+
(println "Generating DatahikeGenerated.java...")
|
|
46
|
+
(p/shell {:dir old-dir}
|
|
47
|
+
"clojure" "-M" "-m" "datahike.codegen.java" "java/src-generated"))
|
|
48
|
+
|
|
49
|
+
(build/compile-java {:class-dir (str old-version-dir "/target/classes")
|
|
50
|
+
:java-src-dirs [(str old-version-dir "/java")
|
|
51
|
+
(str old-version-dir "/java/src-generated")]
|
|
52
|
+
:deps-file (str old-version-dir "/deps.edn")})
|
|
53
|
+
|
|
54
|
+
(clj {:dir old-version-dir}
|
|
55
|
+
"-Sdeps" (str "{:deps {io.replikativ/datahike {:local/root \".\"}}"
|
|
56
|
+
" :paths [\"test/datahike/backward_compatibility_test/src\"]}")
|
|
57
|
+
"-X" "backward-test/write")
|
|
58
|
+
(fs/delete-tree old-version-dir)
|
|
59
|
+
|
|
60
|
+
(println "READING TEST DATA FROM TEST-DB")
|
|
61
|
+
(clj {:dir "."}
|
|
62
|
+
"-Sdeps" (str "{:deps {io.replikativ/datahike {:local/root \".\"}}"
|
|
63
|
+
" :paths [\"test/datahike/backward_compatibility_test/src\"]}")
|
|
64
|
+
"-X" "backward-test/read")))
|
|
65
|
+
|
|
66
|
+
(defn native-image []
|
|
67
|
+
(if (fs/exists? "./dthk")
|
|
68
|
+
(p/shell "./bb/resources/native-image-tests/run-native-image-tests")
|
|
69
|
+
(println "Native image cli missing. Please run 'bb ni-cli' and try again.")))
|
|
70
|
+
|
|
71
|
+
(defn libdatahike []
|
|
72
|
+
(if (fs/exists? "./libdatahike/target")
|
|
73
|
+
(p/shell "./bb/resources/native-image-tests/run-libdatahike-tests")
|
|
74
|
+
(println "libdatahike binaries missing. Please run 'bb ni-compile' and try again.")))
|
|
75
|
+
|
|
76
|
+
(defn bb-pod []
|
|
77
|
+
(if (fs/exists? "./dthk")
|
|
78
|
+
(p/shell "./bb/resources/native-image-tests/run-bb-pod-tests.clj")
|
|
79
|
+
(do (println "Native image cli missing. Please run 'bb ni-cli' and try again.")
|
|
80
|
+
(System/exit 1))))
|
|
81
|
+
|
|
82
|
+
(defn python []
|
|
83
|
+
(if (fs/exists? "./libdatahike/target")
|
|
84
|
+
(p/shell "./bb/resources/native-image-tests/run-python-tests")
|
|
85
|
+
(println "libdatahike binaries missing. Please run 'bb ni-compile' and try again.")))
|
|
86
|
+
|
|
87
|
+
(defn specs []
|
|
88
|
+
(kaocha "--focus" "specs" "--plugin" "kaocha.plugin/orchestra"))
|
|
89
|
+
|
|
90
|
+
(defn kabel []
|
|
91
|
+
(kaocha "--focus" "kabel"))
|
|
92
|
+
|
|
93
|
+
(defn cljs-node-test []
|
|
94
|
+
(p/shell "clj -M:cljs -m shadow.cljs.devtools.cli compile :node-test")
|
|
95
|
+
(p/shell "node target/out/node-test.js"))
|
|
96
|
+
|
|
97
|
+
(defn cljs-browser-test []
|
|
98
|
+
(println "Installing npm dependencies...")
|
|
99
|
+
(p/shell "npm install")
|
|
100
|
+
(println "Starting Kabel test server...")
|
|
101
|
+
(let [server-process (p/process "clojure -M:test -e \"(require 'datahike.kabel.browser-test-server) (datahike.kabel.browser-test-server/start-test-server!) (Thread/sleep Long/MAX_VALUE)\"")]
|
|
102
|
+
(try
|
|
103
|
+
(println "Waiting for server startup...")
|
|
104
|
+
(Thread/sleep 5000)
|
|
105
|
+
(println "Compiling browser tests...")
|
|
106
|
+
(p/shell "npx shadow-cljs compile :browser-ci")
|
|
107
|
+
(println "Running tests with Karma...")
|
|
108
|
+
;; Set CHROME_BIN to chromium if available
|
|
109
|
+
(let [chrome-bin (or (System/getenv "CHROME_BIN")
|
|
110
|
+
(first (keep #(when (.exists (io/file %)) %)
|
|
111
|
+
["/snap/bin/chromium"
|
|
112
|
+
"/usr/bin/chromium"
|
|
113
|
+
"/usr/bin/chromium-browser"
|
|
114
|
+
"/usr/bin/google-chrome"])))
|
|
115
|
+
env (if chrome-bin
|
|
116
|
+
(assoc (into {} (System/getenv)) "CHROME_BIN" chrome-bin)
|
|
117
|
+
(into {} (System/getenv)))]
|
|
118
|
+
(p/shell {:env env} "npx karma start --single-run"))
|
|
119
|
+
(finally
|
|
120
|
+
(println "Stopping test server...")
|
|
121
|
+
(p/destroy server-process)))))
|
|
122
|
+
|
|
123
|
+
(defn all [config]
|
|
124
|
+
(kaocha "--skip" "specs")
|
|
125
|
+
(specs)
|
|
126
|
+
(kabel)
|
|
127
|
+
(back-compat config)
|
|
128
|
+
(native-image)
|
|
129
|
+
(libdatahike)
|
|
130
|
+
(python)
|
|
131
|
+
(bb-pod)
|
|
132
|
+
(cljs-node-test)
|
|
133
|
+
(cljs-browser-test))
|
|
134
|
+
|
|
135
|
+
(defn -main [config & args]
|
|
136
|
+
(if (seq args)
|
|
137
|
+
(case (first args)
|
|
138
|
+
"native-image" (native-image)
|
|
139
|
+
"libdatahike" (libdatahike)
|
|
140
|
+
"python" (python)
|
|
141
|
+
"bb-pod" (bb-pod)
|
|
142
|
+
"back-compat" (back-compat config)
|
|
143
|
+
"specs" (specs)
|
|
144
|
+
"kabel" (kabel)
|
|
145
|
+
"cljs-node" (cljs-node-test)
|
|
146
|
+
"cljs-browser" (cljs-browser-test)
|
|
147
|
+
(apply kaocha "--focus" args))
|
|
148
|
+
(all config)))
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
(ns tools.version
|
|
2
|
+
"Update the project version."
|
|
3
|
+
(:refer-clojure :exclude [inc])
|
|
4
|
+
(:require [clojure.edn :as edn]
|
|
5
|
+
[clojure.string :as str]
|
|
6
|
+
[clojure.tools.build.api :as b]))
|
|
7
|
+
|
|
8
|
+
(defn read-edn-file [filename]
|
|
9
|
+
(edn/read-string (slurp filename)))
|
|
10
|
+
|
|
11
|
+
(defn commit-nr []
|
|
12
|
+
(b/git-count-revs {:dir "."}))
|
|
13
|
+
|
|
14
|
+
(defn current-commit []
|
|
15
|
+
(str/trim (b/git-process {:git-args "rev-parse HEAD"})))
|
|
16
|
+
|
|
17
|
+
(defn sha []
|
|
18
|
+
(-> (b/git-process {:git-args "log -1"})
|
|
19
|
+
(str/split #"\s+")
|
|
20
|
+
second))
|
|
21
|
+
|
|
22
|
+
(defn string [config]
|
|
23
|
+
(let [{:keys [major minor]} (:version config)]
|
|
24
|
+
(str major "." minor "." (commit-nr))))
|
|
25
|
+
|
|
26
|
+
(defn- update-in-settings [config-file ks fn]
|
|
27
|
+
(spit config-file (update-in (read-edn-file config-file) ks fn)))
|
|
28
|
+
|
|
29
|
+
(defn show
|
|
30
|
+
"Show the version string of a library"
|
|
31
|
+
[config]
|
|
32
|
+
(println (string config)))
|
|
33
|
+
|
|
34
|
+
(defn inc
|
|
35
|
+
"Increment the library version.
|
|
36
|
+
The version part can be 'major' or 'minor'."
|
|
37
|
+
([config-file]
|
|
38
|
+
(println "Current library version: ")
|
|
39
|
+
(show (read-edn-file config-file))
|
|
40
|
+
(println "Call this function with :major or :minor to increase the respective version part!"))
|
|
41
|
+
([config-file part]
|
|
42
|
+
(case (name part)
|
|
43
|
+
"major" (update-in-settings config-file [:version :major] inc)
|
|
44
|
+
"minor" (update-in-settings config-file [:version :minor] inc))))
|
|
45
|
+
|
|
46
|
+
(defn as-tag [config]
|
|
47
|
+
(str "v" (string config)))
|