motedb-python 0.14.0__tar.gz → 0.15.1__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.
- motedb_python-0.15.1/.github/ISSUE_TEMPLATE/bug_report.yml +73 -0
- motedb_python-0.15.1/.github/ISSUE_TEMPLATE/config.yml +11 -0
- motedb_python-0.15.1/.github/ISSUE_TEMPLATE/feature_request.yml +50 -0
- motedb_python-0.15.1/.github/ISSUE_TEMPLATE/install_problem.yml +64 -0
- motedb_python-0.15.1/.github/pull_request_template.md +29 -0
- motedb_python-0.15.1/.github/workflows/node-publish.yml +292 -0
- motedb_python-0.15.1/.github/workflows/release-smoke.yml +160 -0
- motedb_python-0.15.1/.github/workflows/site.yml +35 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/CHANGELOG.md +180 -0
- motedb_python-0.15.1/CONTRIBUTING.md +111 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/Cargo.lock +8 -1
- {motedb_python-0.14.0 → motedb_python-0.15.1}/Cargo.toml +5 -4
- {motedb_python-0.14.0 → motedb_python-0.15.1}/Makefile +16 -1
- {motedb_python-0.14.0 → motedb_python-0.15.1}/PKG-INFO +3 -3
- {motedb_python-0.14.0 → motedb_python-0.15.1}/README.md +16 -3
- motedb_python-0.15.1/RELEASE_NOTES.md +104 -0
- motedb_python-0.15.1/SECURITY.md +76 -0
- motedb_python-0.15.1/bindings/go/README.md +44 -0
- motedb_python-0.15.1/bindings/go/go.mod +3 -0
- motedb_python-0.15.1/bindings/go/motedb.go +266 -0
- motedb_python-0.15.1/bindings/go/motedb.h +27 -0
- motedb_python-0.15.1/bindings/go/motedb_test.go +290 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/Cargo.lock +9 -2
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/Cargo.toml +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/e2e/e2e_workload.py +2 -0
- motedb_python-0.15.1/bindings/python/e2e/test_snapshot_export.py +82 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/src/lib.rs +37 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/01-quick-start.md +4 -1
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/02-installation.md +15 -4
- motedb_python-0.15.1/docs/18-install-troubleshooting.md +169 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/README.md +4 -1
- motedb_python-0.15.1/docs/design/2026-10-file-layout-plan.md +180 -0
- motedb_python-0.15.1/docs/design/2026-10-file-layout.md +160 -0
- motedb_python-0.15.1/docs/design/2026-10-good-first-issues.md +177 -0
- motedb_python-0.15.1/docs/design/2026-10-industry-parity-plan.md +323 -0
- motedb_python-0.15.1/examples/file_layout_bench.rs +153 -0
- motedb_python-0.15.1/examples/probe_ckpt.rs +72 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/traj_spike.rs +5 -7
- {motedb_python-0.14.0 → motedb_python-0.15.1}/pyproject.toml +6 -2
- motedb_python-0.15.1/scripts/release_smoke.sh +242 -0
- motedb_python-0.15.1/site/index.html +18 -0
- motedb_python-0.15.1/site/llms-full.txt +70 -0
- motedb_python-0.15.1/site/llms.txt +41 -0
- motedb_python-0.15.1/site/robots.txt +22 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/api.rs +184 -19
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/catalog/registry.rs +97 -12
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/config.rs +7 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/core.rs +290 -229
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/crud.rs +64 -92
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/datasets.rs +4 -4
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/helpers.rs +2 -1
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/index_metadata.rs +50 -16
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/indexes/timestamp.rs +106 -12
- motedb_python-0.15.1/src/database/meta_store.rs +344 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/mod.rs +2 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/persistence.rs +204 -6
- motedb_python-0.15.1/src/database/snapshot.rs +406 -0
- motedb_python-0.15.1/src/ffi.rs +533 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/btree.rs +66 -15
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/mcap_import.rs +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/ast.rs +5 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/evaluator.rs +91 -94
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/executor/join.rs +1 -11
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/executor/mod.rs +132 -1277
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/executor/scan.rs +4 -129
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/parser.rs +72 -43
- motedb_python-0.15.1/src/storage/col_segment/manifest.rs +790 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/col_segment/mod.rs +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/col_segment/segment.rs +2 -2
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/col_segment/store.rs +139 -35
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/columnar/store.rs +6 -2
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/blobstore.rs +44 -16
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/txn/wal.rs +79 -57
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_blob_type.rs +102 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_col_segment.rs +19 -21
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_col_segment_fastpaths.rs +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_corruption_recovery.rs +11 -3
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_datasets.rs +3 -3
- motedb_python-0.15.1/tests/test_file_layout.rs +284 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_fts_recovery_staleness.rs +17 -10
- motedb_python-0.15.1/tests/test_global_manifest.rs +488 -0
- motedb_python-0.15.1/tests/test_snapshot.rs +609 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_text_ts_search_semantics.rs +7 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_timeseries_semantics.rs +80 -0
- motedb_python-0.14.0/RELEASE_NOTES.md +0 -20
- motedb_python-0.14.0/src/ffi.rs +0 -110
- motedb_python-0.14.0/src/storage/col_segment/manifest.rs +0 -216
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.cargo/config.toml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.devcontainer/devcontainer.json +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.github/workflows/ci.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.github/workflows/fuzz.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.github/workflows/perf-gate.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.github/workflows/publish.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.github/workflows/python-wheels.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.gitignore +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.zcode/plans/plan-sess_abb2c954-05fb-477e-9d0a-3e22261e2449.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/.zcode/plans/plan-sess_b5937a06-b7bf-4471-9756-dbf2787b263c.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/LICENSE +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/README.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/README.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/adversarial_verify.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/bench_edge.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/compete_bench.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/compete_fts_industry.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/compete_scale.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/compete_spatial_ts.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/compete_vec_industry.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/compete_writes.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/fts_probe_once.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/perf_ab.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/perf_overall.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/prof_ann.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/prof_fts.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/prof_insert.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/prof_point.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/prof_real.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/prof_scale.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/prof_scale_vec.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/prof_vec_parallel.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/resource_bench.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/resource_bench_2026-09_profile.json +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/resource_bench_v0.10.0.json +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/spatial_eval.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/text_eval.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/ts_eval.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/bench/vector_recall_eval.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/build.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/e2e/test_durability_kwarg.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/licenses/LICENSE +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/scripts/build_wheel.sh +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/data/demo.mcap +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_backup.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_crash_recovery.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_e2e_cli.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_e2e_functional.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_feature_selfcheck.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_fetch_arrays.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_fuzz_bigtable.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_fuzz_differential.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_insert_arrays.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_mcap_import.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_parallel_ab.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/bindings/python/tests/test_smoke.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/deny.toml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/03-sql-operations.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/04-batch-operations.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/05-transactions.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/06-indexes-overview.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/07-column-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/08-vector-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/09-text-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/10-spatial-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/11-timestamp-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/12-performance.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/13-data-types.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/14-api-reference.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/15-best-practices.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/16-faq.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/17-hybrid-arrow.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/benchmark_methodology.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/design/2026-10-embodied-roadmap.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/design/2026-10-traj-spike.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/paper/README.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/docs/paper/motedb.tex +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_300k.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_autocommit_lock.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_disk.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_exec_only.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_insert_engine.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_layer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_memory.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_multimodal_vs_competitors.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_point_read.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_profile_hot.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_scaling.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_stability.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/bench_vs_sqlite.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/corruption_fuzz.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/crud.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/differential_fuzz.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/gen_test_bag.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/hello_world.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/join_differential_fuzz.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/logging.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/perf_smoke.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/probe_filter_decomp.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/probe_jemalloc.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/probe_memory_source.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/probe_tail_latency.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/text_rank_probe.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/examples/vector_recall_real.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/licenses/LICENSE +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/python/motedb/__init__.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/scripts/Dockerfile.e2e +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/scripts/compete.sh +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/scripts/docker_e2e.sh +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/scripts/repro_point_query_gap.sh +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/bin/motedb-cli.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/cache/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/cache/row_cache.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/catalog/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/doctor.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/indexes/column.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/indexes/dashmap_migration.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/indexes/ioctree.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/indexes/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/indexes/text.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/indexes/vector.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/mem_buffer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/pk_cache.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/table.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/timeseries.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/database/transaction.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/distance/cosine.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/distance/euclidean.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/distance/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/error.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/btree_generic.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/builder.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/cached_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/column_value.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/fresh_graph.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/ioctree/leaf_store.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/ioctree/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/ioctree/node.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/ioctree/persistence.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/ioctree/search.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/primary_key.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/text_dictionary.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/text_encoding.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/text_fts.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/text_query.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/text_types.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/tokenizers.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/vamana/config.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/vamana/disk_graph.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/vamana/diskann_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/vamana/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/vamana/pruner.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/vamana/sq8.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/index/vamana/sq8_vectors.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/lib.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/platform_io.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/executor/agg.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/join/hash_join.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/join/index_join.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/join/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/lexer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/optimizer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/row_converter.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/token.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/sql/vector_exec.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/checksum.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/col_segment/merge.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/colbatch.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/columnar/column_encoding.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/columnar/config.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/columnar/gorilla.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/columnar/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/columnar/segment.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/columnar/segment_manager.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/columnar/write_buffer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/file_manager.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/bloom.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/columnar.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/compaction.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/engine.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/memtable.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/merging_iterator.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/sstable.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/lsm/unified_memtable.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/manifest/manifest.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/manifest/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/manifest/version.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/storage/row_format.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/txn/coordinator.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/txn/lock_manager.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/txn/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/txn/mvcc.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/txn/recovery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/txn/version_store.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/types/comp_sum.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/types/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/types/spatial.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/types/table.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/types/tensor.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/types/text.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/src/types/timestamp.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/acid_test.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_2m.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_acid.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_batch_ops.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_compare.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_comprehensive.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_concurrent.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_index_ops.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_multimodal.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_multimodal_full.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_multimodal_ops.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_perf_report.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_quick_baseline.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_release.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_report.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_resource.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_sql_queries.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_timeseries_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_v060_report.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_vs_sqlite_100k.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/bench_vs_sqlite_v05.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/common/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/durability_probe.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/fts_probe.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/perf_test.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/repro_multirow_update_fts.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/repro_point_gap.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/stress_300k.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/stress_test.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_acid_audit.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_acid_comprehensive.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_advanced_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_api_correctness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_asof_join.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_auto_checkpoint_segments.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_backup.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_btree_integrity.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt2.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt3.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt4.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt5.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt6.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt7.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v10.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v100.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v101.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v11.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v12.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v13.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v14.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v15.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v16.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v17_cte.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v18.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v19.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v2.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v20.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v21.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v22.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v23.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v24.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v25.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v26.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v27.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v28.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v29.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v3.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v30.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v31.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v32.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v33.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v34.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v35.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v36.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v38.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v39.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v4.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v40.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v43.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v45.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v48.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v49.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v5.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v50.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v51.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v52.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v53.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v54.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v55.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v56.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v57.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v58.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v59.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v6.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v60.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v61.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v62.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v63.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v64.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v65.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v66.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v67.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v68.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v69.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v7.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v70.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v71.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v72.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v73.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v74.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v75.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v76.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v77.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v78.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v79.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v8.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v80.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v81.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v82.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v83.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v84.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v85.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v86.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v87.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v88.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v89.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v9.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v90.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v91.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v92.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v93.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v94.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v95.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v96.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v97.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v98.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_bug_hunt_v99.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_columnar.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_columnar_acid.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_compact_storage.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_compaction_integrity.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_compiled_where_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_comprehensive.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_comprehensive_audit.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_concurrent_sql_features.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_concurrent_stress.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_corruption_robustness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_crash_injection.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_crash_recovery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_data_types.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_db_path_hygiene.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_deadlock_stress.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_deep_edge.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_delete_persist.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_differential_correctness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_disk_bloat.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_disk_usage.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_doctor.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_durability.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_e2e_crash_and_stress.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_edge_cases.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_edge_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_episodes.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_executemany.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_exists_subquery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_explain.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_extreme_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_fast_paths.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_fuzz_sql_combinations.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_groupby_first_query.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_hybrid_search.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_index_maintenance.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_index_reopen.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_index_robustness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_indexed_query_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_insert_engine.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_insert_explicit_fastpath.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_insert_paths_index_maintenance.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_insert_select.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_ioctree.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_isolation_levels.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_join_count_fold.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_knn_parallel.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_large_rows.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_m5_mines.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_mcap_import.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_memory_leak.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_memory_linear.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_multimodal.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_multimodal_e2e.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_mvcc_isolation.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_mvcc_recovery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_no_bloat.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_optimization_regression.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_order_by_expr_keys.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_parser_fuzz_regression.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_performance_guarantees.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_pk_change_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_prepared_dml.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_public_api.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_query_equivalence.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_range_count.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_release_readiness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_repro12.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_round12_optimizations.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_round12b_edge.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_round12c_e2e_bugs.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_round13_bug_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_row_api.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_rrf_hybrid.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_savepoint_window.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_scalability.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_scan_integrity.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_semantic_edges.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_spatial_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_spatial_large_geometry.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_spatial_sql_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_sql_advanced.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_sql_correctness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_sql_correctness_part2.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_sql_ddl_features.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_sql_errors_edges.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_sql_functions.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_sql_groupby.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_sql_joins.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_sql_scenarios.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_storage_integrity.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_stress.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_stress_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_timeseries_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_timestamp_recovery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_transaction_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_txn_ddl_and_nan_ordering.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_update_perf.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_upsert.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_v050_features.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_vec_m0.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_vec_m4.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_vector_column_read_paths.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_vector_durability.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_vector_index_recall.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_vector_spatial_text.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_vector_visibility.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_wide_tables.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.1}/tests/test_write_concurrency.rs +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Something returns the wrong result, panics, corrupts data or hangs.
|
|
3
|
+
title: "[bug] "
|
|
4
|
+
labels: ["bug"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for the report. Install / import problems have their own template ("Installation problem").
|
|
10
|
+
Security-relevant bugs (crash from crafted input, path traversal, data loss): please use
|
|
11
|
+
private reporting instead — see SECURITY.md.
|
|
12
|
+
- type: input
|
|
13
|
+
id: version
|
|
14
|
+
attributes:
|
|
15
|
+
label: MoteDB version
|
|
16
|
+
description: "`cargo tree -i motedb`, `python -c \"import importlib.metadata as m; print(m.version('motedb-python'))\"`, or `node -p \"require('motedb/package.json').version\"`"
|
|
17
|
+
placeholder: "0.15.0"
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: dropdown
|
|
21
|
+
id: surface
|
|
22
|
+
attributes:
|
|
23
|
+
label: Where you hit it
|
|
24
|
+
options:
|
|
25
|
+
- Rust crate
|
|
26
|
+
- Python (motedb-python)
|
|
27
|
+
- Node.js (motedb)
|
|
28
|
+
- Go binding
|
|
29
|
+
- motedb-cli
|
|
30
|
+
- SQL (any surface)
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
- type: input
|
|
34
|
+
id: platform
|
|
35
|
+
attributes:
|
|
36
|
+
label: Platform
|
|
37
|
+
placeholder: "macOS 15 arm64 / Ubuntu 24.04 x86_64 (glibc) / Alpine 3.20 (musl) / Windows 11 x64"
|
|
38
|
+
validations:
|
|
39
|
+
required: true
|
|
40
|
+
- type: textarea
|
|
41
|
+
id: what
|
|
42
|
+
attributes:
|
|
43
|
+
label: What happened
|
|
44
|
+
description: Actual behaviour, including the full error message or panic backtrace (`RUST_BACKTRACE=1`).
|
|
45
|
+
validations:
|
|
46
|
+
required: true
|
|
47
|
+
- type: textarea
|
|
48
|
+
id: expected
|
|
49
|
+
attributes:
|
|
50
|
+
label: What you expected
|
|
51
|
+
validations:
|
|
52
|
+
required: true
|
|
53
|
+
- type: textarea
|
|
54
|
+
id: repro
|
|
55
|
+
attributes:
|
|
56
|
+
label: Minimal reproduction
|
|
57
|
+
description: |
|
|
58
|
+
The smallest schema + statements (or code) that shows the problem. Starting from an empty
|
|
59
|
+
database is ideal. If it needs an existing database file, say whether you can share it.
|
|
60
|
+
render: sql
|
|
61
|
+
validations:
|
|
62
|
+
required: true
|
|
63
|
+
- type: textarea
|
|
64
|
+
id: logs
|
|
65
|
+
attributes:
|
|
66
|
+
label: Logs
|
|
67
|
+
description: "Output with `RUST_LOG=motedb=debug` (Rust) or the equivalent logger in your language, if relevant."
|
|
68
|
+
render: text
|
|
69
|
+
- type: textarea
|
|
70
|
+
id: config
|
|
71
|
+
attributes:
|
|
72
|
+
label: Configuration
|
|
73
|
+
description: "Preset (`for_edge` / `for_robotics` / `for_embodied` / default) and any overridden `DBConfig` fields, read-only container or not."
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Questions & usage help
|
|
4
|
+
url: https://github.com/motedb/motedb/discussions/categories/q-a
|
|
5
|
+
about: "\"How do I…\", \"is this expected?\", schema design — ask in Discussions."
|
|
6
|
+
- name: Security vulnerability
|
|
7
|
+
url: https://github.com/motedb/motedb/security/advisories/new
|
|
8
|
+
about: Crash from crafted input, path traversal, silent data loss — report privately (see SECURITY.md).
|
|
9
|
+
- name: Show & tell
|
|
10
|
+
url: https://github.com/motedb/motedb/discussions/categories/show-and-tell
|
|
11
|
+
about: Built something on MoteDB? Robot, pipeline, benchmark — we would love to see it.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: A capability MoteDB should have — SQL syntax, an API, a format, a platform.
|
|
3
|
+
title: "[feat] "
|
|
4
|
+
labels: ["enhancement"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Not sure it fits? Open a [Discussion](https://github.com/motedb/motedb/discussions) first.
|
|
10
|
+
Out of scope by design (see `docs/design/`): distributed / clustered mode, a client-server daemon,
|
|
11
|
+
a visualization frontend, full DuckDB-level SQL parity.
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: problem
|
|
14
|
+
attributes:
|
|
15
|
+
label: The problem
|
|
16
|
+
description: What you are trying to do and why the current engine makes it hard. Concrete data shapes (rows, dimensions, rates) help a lot.
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: dropdown
|
|
20
|
+
id: scenario
|
|
21
|
+
attributes:
|
|
22
|
+
label: Scenario
|
|
23
|
+
options:
|
|
24
|
+
- On-robot / edge capture (power-fail safety, low memory)
|
|
25
|
+
- Training-data pipeline (MCAP / LeRobot / Parquet / DataLoader)
|
|
26
|
+
- Retrieval (vector / FTS / hybrid / trajectory)
|
|
27
|
+
- Time series / episodes / alignment (ASOF JOIN etc.)
|
|
28
|
+
- SQL surface / types
|
|
29
|
+
- SDK / bindings / platform support
|
|
30
|
+
- Tooling (CLI, doctor, MCP, observability)
|
|
31
|
+
- Other
|
|
32
|
+
validations:
|
|
33
|
+
required: true
|
|
34
|
+
- type: textarea
|
|
35
|
+
id: proposal
|
|
36
|
+
attributes:
|
|
37
|
+
label: Proposed shape
|
|
38
|
+
description: The SQL or API you would like to write. Pseudocode is fine.
|
|
39
|
+
render: sql
|
|
40
|
+
- type: textarea
|
|
41
|
+
id: alternatives
|
|
42
|
+
attributes:
|
|
43
|
+
label: Alternatives considered
|
|
44
|
+
description: What you do today instead (another tool, a workaround), and why it falls short.
|
|
45
|
+
- type: checkboxes
|
|
46
|
+
id: help
|
|
47
|
+
attributes:
|
|
48
|
+
label: Contribution
|
|
49
|
+
options:
|
|
50
|
+
- label: I am willing to implement this with guidance.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: Installation problem
|
|
2
|
+
description: pip / npm / cargo install fails, or the module does not load.
|
|
3
|
+
title: "[install] "
|
|
4
|
+
labels: ["install"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Please read [docs/18-install-troubleshooting.md](https://github.com/motedb/motedb/blob/main/docs/18-install-troubleshooting.md)
|
|
10
|
+
first — the package names differ per registry (`pip install motedb-python`, `npm install motedb`,
|
|
11
|
+
`cargo add motedb`) and most reports are covered there.
|
|
12
|
+
- type: dropdown
|
|
13
|
+
id: lang
|
|
14
|
+
attributes:
|
|
15
|
+
label: Language
|
|
16
|
+
options:
|
|
17
|
+
- Python (pip install motedb-python)
|
|
18
|
+
- Node.js (npm install motedb)
|
|
19
|
+
- Rust (cargo add motedb)
|
|
20
|
+
- Go (bindings/go)
|
|
21
|
+
validations:
|
|
22
|
+
required: true
|
|
23
|
+
- type: input
|
|
24
|
+
id: version
|
|
25
|
+
attributes:
|
|
26
|
+
label: Version you tried to install
|
|
27
|
+
placeholder: "0.15.0"
|
|
28
|
+
validations:
|
|
29
|
+
required: true
|
|
30
|
+
- type: input
|
|
31
|
+
id: platform
|
|
32
|
+
attributes:
|
|
33
|
+
label: OS / architecture / libc
|
|
34
|
+
description: "`uname -a` (or `ver` on Windows). On Linux say glibc or musl (Alpine)."
|
|
35
|
+
placeholder: "Linux 6.8 aarch64, Debian 12 (glibc 2.36) / Alpine 3.20 (musl) / macOS 15 arm64 / Windows 11 x64"
|
|
36
|
+
validations:
|
|
37
|
+
required: true
|
|
38
|
+
- type: input
|
|
39
|
+
id: runtime
|
|
40
|
+
attributes:
|
|
41
|
+
label: Runtime version
|
|
42
|
+
description: "`python -V && python -m pip --version` / `node -v && npm -v` / `rustc -V && cargo -V`"
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
- type: textarea
|
|
46
|
+
id: command
|
|
47
|
+
attributes:
|
|
48
|
+
label: Exact command
|
|
49
|
+
render: shell
|
|
50
|
+
validations:
|
|
51
|
+
required: true
|
|
52
|
+
- type: textarea
|
|
53
|
+
id: output
|
|
54
|
+
attributes:
|
|
55
|
+
label: Full output
|
|
56
|
+
description: Everything the command printed, unedited. For Node loader errors include `npm ls | grep motedb-`.
|
|
57
|
+
render: text
|
|
58
|
+
validations:
|
|
59
|
+
required: true
|
|
60
|
+
- type: textarea
|
|
61
|
+
id: env
|
|
62
|
+
attributes:
|
|
63
|
+
label: Environment details
|
|
64
|
+
description: "Container / CI image, proxy or private registry mirror, `--no-optional` / `--omit=optional`, pnpm/yarn, virtualenv/conda, anything non-default."
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<!-- Thanks! Keep the PR focused: one behaviour change per PR. -->
|
|
2
|
+
|
|
3
|
+
## What
|
|
4
|
+
|
|
5
|
+
<!-- One or two sentences: what changes and why. Link the issue / discussion / design note. -->
|
|
6
|
+
|
|
7
|
+
## How
|
|
8
|
+
|
|
9
|
+
<!-- The approach, and anything a reviewer should look at first (a tricky invariant, a lock order, a format change). -->
|
|
10
|
+
|
|
11
|
+
## Checklist
|
|
12
|
+
|
|
13
|
+
- [ ] Tests: new behaviour has a test; a bug fix has a regression test that failed before.
|
|
14
|
+
- [ ] `cargo fmt --check` and `cargo test --lib --all-features` pass locally.
|
|
15
|
+
- [ ] Touched suites pass: `cargo test --test <suite>` (and `CI=1 cargo test --workspace` if the change is broad).
|
|
16
|
+
- [ ] Storage format / WAL / recovery touched → migration test added, `docs/design/2026-10-file-layout.md` rules respected, crash tests run.
|
|
17
|
+
- [ ] SQL surface changed → `README.md` *SQL Support* and `docs/` updated; fuzz template / differential test extended where applicable.
|
|
18
|
+
- [ ] Engine capability added → wired through FFI + Python + Node (+ Go) or the gap is called out below.
|
|
19
|
+
- [ ] New dependency → passes `cargo deny check`, feature-gated if not needed by edge builds.
|
|
20
|
+
- [ ] `CHANGELOG.md` entry under the upcoming version.
|
|
21
|
+
- [ ] No `println!`/`eprintln!` in library code (use the `log` facade macros).
|
|
22
|
+
|
|
23
|
+
## Performance
|
|
24
|
+
|
|
25
|
+
<!-- Delete if not relevant. Otherwise: `make compete-quick` JSON attached, or "perf gate unchanged". No ad-hoc numbers. -->
|
|
26
|
+
|
|
27
|
+
## Not in this PR
|
|
28
|
+
|
|
29
|
+
<!-- Follow-ups you deliberately left out, so reviewers do not ask for them. -->
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
name: Node SDK publish (npm)
|
|
2
|
+
|
|
3
|
+
# Multi-platform prebuilt napi binaries → npmjs.org (unscoped):
|
|
4
|
+
# motedb (main, pure JS loader) + one platform package per target:
|
|
5
|
+
# motedb-darwin-arm64 / -darwin-x64 / -linux-x64-gnu / -linux-arm64-gnu /
|
|
6
|
+
# -win32-x64-msvc
|
|
7
|
+
# Triggers on v* tags (publish) and PRs touching the binding (build-only).
|
|
8
|
+
# 🔑 Publishing needs the NPM_TOKEN repository secret (an npmjs.org automation
|
|
9
|
+
# token with publish rights on the motedb* packages). The publish job fails
|
|
10
|
+
# fast with a clear message when it is missing.
|
|
11
|
+
# musl (Alpine) targets: the Alpine-container build step below is wired up but
|
|
12
|
+
# the two matrix entries stay commented out until a PR run has proven them —
|
|
13
|
+
# `publish` needs every matrix job green, so an unproven target must not be
|
|
14
|
+
# able to block a release. Enable them together with the matching
|
|
15
|
+
# package.json targets/optionalDependencies.
|
|
16
|
+
|
|
17
|
+
on:
|
|
18
|
+
push:
|
|
19
|
+
tags: ["v*"]
|
|
20
|
+
pull_request:
|
|
21
|
+
paths:
|
|
22
|
+
- "bindings/node/**"
|
|
23
|
+
- ".github/workflows/node-publish.yml"
|
|
24
|
+
workflow_dispatch:
|
|
25
|
+
|
|
26
|
+
concurrency:
|
|
27
|
+
group: node-publish-${{ github.ref }}
|
|
28
|
+
cancel-in-progress: true
|
|
29
|
+
|
|
30
|
+
permissions:
|
|
31
|
+
contents: write
|
|
32
|
+
id-token: write
|
|
33
|
+
packages: write
|
|
34
|
+
|
|
35
|
+
jobs:
|
|
36
|
+
build:
|
|
37
|
+
strategy:
|
|
38
|
+
fail-fast: false
|
|
39
|
+
matrix:
|
|
40
|
+
include:
|
|
41
|
+
- os: macos-latest # arm64
|
|
42
|
+
target: aarch64-apple-darwin
|
|
43
|
+
# x64-macOS via CROSS-COMPILE on the arm64 runner — macos-13
|
|
44
|
+
# (Intel) runners are retiring and queue for an hour+; rust
|
|
45
|
+
# cross-compiles x86_64-apple-darwin natively from arm64.
|
|
46
|
+
- os: macos-latest # arm64 → cross x64
|
|
47
|
+
target: x86_64-apple-darwin
|
|
48
|
+
- os: ubuntu-latest # x64 gnu
|
|
49
|
+
target: x86_64-unknown-linux-gnu
|
|
50
|
+
- os: ubuntu-24.04-arm
|
|
51
|
+
target: aarch64-unknown-linux-gnu
|
|
52
|
+
# musl: GitHub runners are glibc, so these build in the napi-rs
|
|
53
|
+
# Alpine image (same recipe as the napi-rs project template; the
|
|
54
|
+
# image carries the aarch64-linux-musl cross toolchain). Commented
|
|
55
|
+
# out until proven by a PR run — see the header note.
|
|
56
|
+
# - os: ubuntu-latest
|
|
57
|
+
# target: x86_64-unknown-linux-musl
|
|
58
|
+
# docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
|
|
59
|
+
# - os: ubuntu-latest
|
|
60
|
+
# target: aarch64-unknown-linux-musl
|
|
61
|
+
# docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
|
|
62
|
+
- os: windows-latest
|
|
63
|
+
target: x86_64-pc-windows-msvc
|
|
64
|
+
runs-on: ${{ matrix.os }}
|
|
65
|
+
steps:
|
|
66
|
+
- uses: actions/checkout@v4
|
|
67
|
+
|
|
68
|
+
- uses: actions/setup-node@v4
|
|
69
|
+
with:
|
|
70
|
+
node-version: 22
|
|
71
|
+
|
|
72
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
73
|
+
if: ${{ !matrix.docker }}
|
|
74
|
+
with:
|
|
75
|
+
targets: ${{ matrix.target }}
|
|
76
|
+
|
|
77
|
+
- uses: Swatinem/rust-cache@v2
|
|
78
|
+
if: ${{ !matrix.docker }}
|
|
79
|
+
with:
|
|
80
|
+
workspaces: bindings/node
|
|
81
|
+
key: ${{ matrix.target }}
|
|
82
|
+
|
|
83
|
+
- name: Install napi CLI
|
|
84
|
+
if: ${{ !matrix.docker }}
|
|
85
|
+
working-directory: bindings/node
|
|
86
|
+
run: npm install --no-save @napi-rs/cli@3.10.8
|
|
87
|
+
|
|
88
|
+
- name: Build (napi layout)
|
|
89
|
+
if: ${{ !matrix.docker }}
|
|
90
|
+
working-directory: bindings/node
|
|
91
|
+
shell: bash
|
|
92
|
+
run: |
|
|
93
|
+
set -e
|
|
94
|
+
ARGS=(--release --platform --target ${{ matrix.target }} --js false --dts false)
|
|
95
|
+
npx napi build "${ARGS[@]}"
|
|
96
|
+
|
|
97
|
+
- name: Build (napi layout, musl in Alpine container)
|
|
98
|
+
if: ${{ matrix.docker }}
|
|
99
|
+
uses: addnab/docker-run-action@v3
|
|
100
|
+
with:
|
|
101
|
+
image: ${{ matrix.docker }}
|
|
102
|
+
options: -v ${{ github.workspace }}:/build -w /build/bindings/node -e CARGO_TERM_COLOR=always
|
|
103
|
+
run: |
|
|
104
|
+
set -e
|
|
105
|
+
# 容器自带 Node 18, 而 @napi-rs/cli 的依赖树 (@inquirer/core) 已要求
|
|
106
|
+
# Node≥20 (styleText) 且 --no-save 无锁文件每次拉最新 — 曾于 2026-10-20
|
|
107
|
+
# 上游漂移打破构建。装固定版本的官方 musl Node, 消除漂移。
|
|
108
|
+
NODE_ARCH=$(uname -m); [ "$NODE_ARCH" = "x86_64" ] && NODE_ARCH=x64
|
|
109
|
+
NODE_VER=v22.14.0
|
|
110
|
+
wget -qO- "https://nodejs.org/dist/$NODE_VER/node-$NODE_VER-linux-$NODE_ARCH-musl.tar.xz" \
|
|
111
|
+
| tar xJ -C /usr/local --strip-components=1
|
|
112
|
+
node -v | grep -Eq '^v2[2-9]' || { echo "node upgrade failed: $(node -v)"; exit 1; }
|
|
113
|
+
rustup target add ${{ matrix.target }}
|
|
114
|
+
if [ "${{ matrix.target }}" = "aarch64-unknown-linux-musl" ]; then
|
|
115
|
+
# zstd-sys compiles C: point cc + the linker at the image's cross toolchain.
|
|
116
|
+
export CC_aarch64_unknown_linux_musl=aarch64-linux-musl-gcc
|
|
117
|
+
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-musl-gcc
|
|
118
|
+
fi
|
|
119
|
+
npm install --no-save @napi-rs/cli@3.10.8
|
|
120
|
+
npx napi build --release --platform --target ${{ matrix.target }} --js false --dts false
|
|
121
|
+
if [ "${{ matrix.target }}" = "x86_64-unknown-linux-musl" ]; then
|
|
122
|
+
node smoke_ci.js
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
- name: Smoke (JS loader)
|
|
126
|
+
if: matrix.target == 'aarch64-apple-darwin' || matrix.target == 'x86_64-unknown-linux-gnu'
|
|
127
|
+
working-directory: bindings/node
|
|
128
|
+
shell: bash
|
|
129
|
+
# smoke_ci.js is committed (also reused by scripts/release_smoke.sh);
|
|
130
|
+
# it requires './index.js' FILE-relative, so run it from the package dir.
|
|
131
|
+
run: node smoke_ci.js
|
|
132
|
+
|
|
133
|
+
- name: Upload binding artifact
|
|
134
|
+
uses: actions/upload-artifact@v4
|
|
135
|
+
with:
|
|
136
|
+
name: bindings-${{ matrix.target }}
|
|
137
|
+
path: bindings/node/*.node
|
|
138
|
+
if-no-files-found: error
|
|
139
|
+
|
|
140
|
+
package:
|
|
141
|
+
needs: build
|
|
142
|
+
runs-on: ubuntu-latest
|
|
143
|
+
steps:
|
|
144
|
+
- uses: actions/checkout@v4
|
|
145
|
+
- uses: actions/setup-node@v4
|
|
146
|
+
with:
|
|
147
|
+
node-version: 22
|
|
148
|
+
- name: Install napi CLI
|
|
149
|
+
working-directory: bindings/node
|
|
150
|
+
run: npm install --no-save @napi-rs/cli@3.10.8
|
|
151
|
+
- name: Create npm dirs
|
|
152
|
+
working-directory: bindings/node
|
|
153
|
+
run: npx napi create-npm-dirs
|
|
154
|
+
- uses: actions/download-artifact@v4
|
|
155
|
+
with:
|
|
156
|
+
path: bindings/node/artifacts
|
|
157
|
+
- name: Place binaries into npm dirs
|
|
158
|
+
working-directory: bindings/node
|
|
159
|
+
shell: bash
|
|
160
|
+
# 🔑 Deterministic placement (napi artifacts misbehaves with
|
|
161
|
+
# cross-compiled targets): match each downloaded .node against the
|
|
162
|
+
# platform package's "main" field, copy, then verify completeness.
|
|
163
|
+
run: |
|
|
164
|
+
set -e
|
|
165
|
+
for d in artifacts/bindings-*; do
|
|
166
|
+
node_file=$(ls "$d"/*.node 2>/dev/null | head -1 || true)
|
|
167
|
+
[ -n "$node_file" ] || { echo "no .node in $d"; ls -la "$d"; exit 1; }
|
|
168
|
+
base=$(basename "$node_file")
|
|
169
|
+
placed=0
|
|
170
|
+
for pkg in npm/*/; do
|
|
171
|
+
main=$(jq -r .main "${pkg}package.json")
|
|
172
|
+
if [ "$main" = "$base" ]; then
|
|
173
|
+
cp "$node_file" "$pkg"
|
|
174
|
+
echo "placed $base -> $pkg"
|
|
175
|
+
placed=1
|
|
176
|
+
fi
|
|
177
|
+
done
|
|
178
|
+
[ "$placed" = 1 ] || { echo "no package wants $base"; exit 1; }
|
|
179
|
+
done
|
|
180
|
+
missing=0
|
|
181
|
+
for pkg in npm/*/; do
|
|
182
|
+
main=$(jq -r .main "${pkg}package.json")
|
|
183
|
+
[ -f "$pkg/$main" ] || { echo "MISSING $pkg/$main"; missing=1; }
|
|
184
|
+
done
|
|
185
|
+
[ "$missing" = 0 ] || exit 1
|
|
186
|
+
ls -R npm | head -40
|
|
187
|
+
- name: Dry-run publish (structure validation only)
|
|
188
|
+
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
|
189
|
+
working-directory: bindings/node
|
|
190
|
+
shell: bash
|
|
191
|
+
run: |
|
|
192
|
+
set -e
|
|
193
|
+
# pre-publish performs REAL npm publishes, so staging (PRs) only
|
|
194
|
+
# validates each platform package with npm publish --dry-run.
|
|
195
|
+
for d in npm/*/; do
|
|
196
|
+
(cd "$d" && npm publish --dry-run --access public) || exit 1
|
|
197
|
+
done
|
|
198
|
+
npm pack --dry-run
|
|
199
|
+
|
|
200
|
+
publish:
|
|
201
|
+
needs: [build, package]
|
|
202
|
+
# workflow_dispatch 允许在 npm 反垃圾拦截后从 main 手动慢速重发 (无需新标签)
|
|
203
|
+
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
|
|
204
|
+
runs-on: ubuntu-latest
|
|
205
|
+
steps:
|
|
206
|
+
- uses: actions/checkout@v4
|
|
207
|
+
- uses: actions/setup-node@v4
|
|
208
|
+
with:
|
|
209
|
+
node-version: 22
|
|
210
|
+
registry-url: https://registry.npmjs.org
|
|
211
|
+
- name: Install napi CLI
|
|
212
|
+
working-directory: bindings/node
|
|
213
|
+
run: npm install --no-save @napi-rs/cli@3.10.8
|
|
214
|
+
- name: Create npm dirs
|
|
215
|
+
working-directory: bindings/node
|
|
216
|
+
run: npx napi create-npm-dirs
|
|
217
|
+
- uses: actions/download-artifact@v4
|
|
218
|
+
with:
|
|
219
|
+
path: bindings/node/artifacts
|
|
220
|
+
- name: Place binaries into npm dirs
|
|
221
|
+
working-directory: bindings/node
|
|
222
|
+
shell: bash
|
|
223
|
+
run: |
|
|
224
|
+
set -e
|
|
225
|
+
for d in artifacts/bindings-*; do
|
|
226
|
+
node_file=$(ls "$d"/*.node 2>/dev/null | head -1 || true)
|
|
227
|
+
[ -n "$node_file" ] || { echo "no .node in $d"; ls -la "$d"; exit 1; }
|
|
228
|
+
base=$(basename "$node_file")
|
|
229
|
+
placed=0
|
|
230
|
+
for pkg in npm/*/; do
|
|
231
|
+
main=$(jq -r .main "${pkg}package.json")
|
|
232
|
+
if [ "$main" = "$base" ]; then
|
|
233
|
+
cp "$node_file" "$pkg"
|
|
234
|
+
echo "placed $base -> $pkg"
|
|
235
|
+
placed=1
|
|
236
|
+
fi
|
|
237
|
+
done
|
|
238
|
+
[ "$placed" = 1 ] || { echo "no package wants $base"; exit 1; }
|
|
239
|
+
done
|
|
240
|
+
missing=0
|
|
241
|
+
for pkg in npm/*/; do
|
|
242
|
+
main=$(jq -r .main "${pkg}package.json")
|
|
243
|
+
[ -f "$pkg/$main" ] || { echo "MISSING $pkg/$main"; missing=1; }
|
|
244
|
+
done
|
|
245
|
+
[ "$missing" = 0 ] || exit 1
|
|
246
|
+
- name: Check NPM_TOKEN is configured
|
|
247
|
+
env:
|
|
248
|
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
249
|
+
run: |
|
|
250
|
+
if [ -z "$NPM_TOKEN" ]; then
|
|
251
|
+
echo "::error::NPM_TOKEN repository secret is not set — cannot publish to npmjs.org. Create an automation token at https://www.npmjs.com/settings/~/tokens and add it under Settings → Secrets → Actions."
|
|
252
|
+
exit 1
|
|
253
|
+
fi
|
|
254
|
+
- name: Publish platform packages + root
|
|
255
|
+
# 🔑 Plain `npm publish` per package (platform packages first, then the
|
|
256
|
+
# root loader whose optionalDependencies point at them). Auth comes
|
|
257
|
+
# from setup-node's .npmrc + NODE_AUTH_TOKEN. `napi pre-publish` is
|
|
258
|
+
# deliberately NOT used: it assumes a GitHub release flow we don't run.
|
|
259
|
+
# Idempotent + burst-safe: skips packages already on the registry
|
|
260
|
+
# (EPUBLISHCONFLICT would otherwise abort the loop on re-runs) and
|
|
261
|
+
# paces publishes ~3 min apart with retries — npm's anti-spam
|
|
262
|
+
# heuristics reject rapid-fire new-package creation from new accounts.
|
|
263
|
+
working-directory: bindings/node
|
|
264
|
+
env:
|
|
265
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
266
|
+
run: |
|
|
267
|
+
set -e
|
|
268
|
+
pub() {
|
|
269
|
+
local d="$1" name ver try
|
|
270
|
+
name=$(jq -r .name "$d/package.json")
|
|
271
|
+
ver=$(jq -r .version "$d/package.json")
|
|
272
|
+
# Compare the PINNED version, not mere existence: after a version
|
|
273
|
+
# bump the old package is on npm but this version is not, and
|
|
274
|
+
# skipping would leave root's optionalDependencies pointing at a
|
|
275
|
+
# version that never ships (E404 for every consumer).
|
|
276
|
+
if npm view "$name@$ver" version >/dev/null 2>&1; then
|
|
277
|
+
echo " $name@$ver already on npm — skip"; return 0
|
|
278
|
+
fi
|
|
279
|
+
for try in 1 2 3; do
|
|
280
|
+
echo "::group::publish $name (attempt $try)"
|
|
281
|
+
if (cd "$d" && npm publish --access public); then
|
|
282
|
+
echo "::endgroup::"; echo " published $name"; return 0
|
|
283
|
+
fi
|
|
284
|
+
echo "::endgroup::"
|
|
285
|
+
[ "$try" = 3 ] && break
|
|
286
|
+
echo " retry in 180s (npm anti-spam/rate heuristics)"; sleep 180
|
|
287
|
+
done
|
|
288
|
+
echo "::error::gave up publishing $name after 3 attempts"
|
|
289
|
+
return 1
|
|
290
|
+
}
|
|
291
|
+
for d in npm/*/; do pub "$d" || exit 1; sleep 90; done
|
|
292
|
+
pub . || exit 1
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
name: Release smoke (published packages)
|
|
2
|
+
|
|
3
|
+
# Post-publish gate. On every v* tag: wait until the three registries show
|
|
4
|
+
# the version, then `pip install` / `npm install` / `cargo add` it into
|
|
5
|
+
# throwaway environments on each platform and run the README examples
|
|
6
|
+
# (scripts/release_smoke.sh). A failure opens (or bumps) a tracking issue so
|
|
7
|
+
# a broken release is never silent. Runnable by hand for any version.
|
|
8
|
+
#
|
|
9
|
+
# This job installs the PUBLISHED artifacts — it does not build anything from
|
|
10
|
+
# the tree, so it only passes once publish.yml / python-wheels.yml /
|
|
11
|
+
# node-publish.yml have all landed for the same tag.
|
|
12
|
+
|
|
13
|
+
on:
|
|
14
|
+
push:
|
|
15
|
+
tags: ["v*"]
|
|
16
|
+
workflow_dispatch:
|
|
17
|
+
inputs:
|
|
18
|
+
version:
|
|
19
|
+
description: "Version to smoke (e.g. 0.15.0). Empty = the tag, else Cargo.toml."
|
|
20
|
+
required: false
|
|
21
|
+
default: ""
|
|
22
|
+
langs:
|
|
23
|
+
description: "Comma-separated subset of python,node,rust"
|
|
24
|
+
required: false
|
|
25
|
+
default: "python,node,rust"
|
|
26
|
+
|
|
27
|
+
permissions:
|
|
28
|
+
contents: read
|
|
29
|
+
issues: write
|
|
30
|
+
|
|
31
|
+
env:
|
|
32
|
+
# Registries lag their publish workflows by minutes; poll up to 30 min.
|
|
33
|
+
SMOKE_WAIT: "1800"
|
|
34
|
+
|
|
35
|
+
jobs:
|
|
36
|
+
resolve:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
outputs:
|
|
39
|
+
version: ${{ steps.v.outputs.version }}
|
|
40
|
+
langs: ${{ steps.v.outputs.langs }}
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
- id: v
|
|
44
|
+
shell: bash
|
|
45
|
+
run: |
|
|
46
|
+
v="${{ github.event.inputs.version }}"
|
|
47
|
+
if [ -z "$v" ]; then
|
|
48
|
+
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
|
|
49
|
+
v="${GITHUB_REF_NAME#v}"
|
|
50
|
+
else
|
|
51
|
+
v="$(grep -m1 '^version = ' Cargo.toml | cut -d'"' -f2)"
|
|
52
|
+
fi
|
|
53
|
+
fi
|
|
54
|
+
l="${{ github.event.inputs.langs }}"
|
|
55
|
+
[ -n "$l" ] || l="python,node,rust"
|
|
56
|
+
echo "version=$v" >> "$GITHUB_OUTPUT"
|
|
57
|
+
echo "langs=$l" >> "$GITHUB_OUTPUT"
|
|
58
|
+
echo "smoking v$v ($l)"
|
|
59
|
+
|
|
60
|
+
python:
|
|
61
|
+
needs: resolve
|
|
62
|
+
if: contains(needs.resolve.outputs.langs, 'python')
|
|
63
|
+
strategy:
|
|
64
|
+
fail-fast: false
|
|
65
|
+
matrix:
|
|
66
|
+
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
|
|
67
|
+
runs-on: ${{ matrix.os }}
|
|
68
|
+
steps:
|
|
69
|
+
- uses: actions/checkout@v4
|
|
70
|
+
- uses: actions/setup-python@v5
|
|
71
|
+
with:
|
|
72
|
+
python-version: "3.12"
|
|
73
|
+
- shell: bash
|
|
74
|
+
run: scripts/release_smoke.sh -v "${{ needs.resolve.outputs.version }}" -l python --wait "$SMOKE_WAIT"
|
|
75
|
+
|
|
76
|
+
node:
|
|
77
|
+
needs: resolve
|
|
78
|
+
if: contains(needs.resolve.outputs.langs, 'node')
|
|
79
|
+
strategy:
|
|
80
|
+
fail-fast: false
|
|
81
|
+
matrix:
|
|
82
|
+
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
|
|
83
|
+
runs-on: ${{ matrix.os }}
|
|
84
|
+
steps:
|
|
85
|
+
- uses: actions/checkout@v4
|
|
86
|
+
- uses: actions/setup-node@v4
|
|
87
|
+
with:
|
|
88
|
+
node-version: 22
|
|
89
|
+
- shell: bash
|
|
90
|
+
run: scripts/release_smoke.sh -v "${{ needs.resolve.outputs.version }}" -l node --wait "$SMOKE_WAIT"
|
|
91
|
+
|
|
92
|
+
node-alpine:
|
|
93
|
+
# musl: the only place the motedb-linux-x64-musl platform package and the
|
|
94
|
+
# loader's libc detection get exercised end to end. Non-blocking until the
|
|
95
|
+
# musl platform packages are actually published (node-publish.yml has
|
|
96
|
+
# their matrix entries commented out pending a PR run) — until then this
|
|
97
|
+
# job is expected to fail at the loader and must not open an issue.
|
|
98
|
+
needs: resolve
|
|
99
|
+
if: contains(needs.resolve.outputs.langs, 'node')
|
|
100
|
+
continue-on-error: true
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
container: node:22-alpine
|
|
103
|
+
steps:
|
|
104
|
+
- run: apk add --no-cache bash curl git
|
|
105
|
+
- uses: actions/checkout@v4
|
|
106
|
+
- shell: bash
|
|
107
|
+
run: scripts/release_smoke.sh -v "${{ needs.resolve.outputs.version }}" -l node --wait "$SMOKE_WAIT"
|
|
108
|
+
|
|
109
|
+
rust:
|
|
110
|
+
needs: resolve
|
|
111
|
+
if: contains(needs.resolve.outputs.langs, 'rust')
|
|
112
|
+
runs-on: ubuntu-latest
|
|
113
|
+
steps:
|
|
114
|
+
- uses: actions/checkout@v4
|
|
115
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
116
|
+
- shell: bash
|
|
117
|
+
run: scripts/release_smoke.sh -v "${{ needs.resolve.outputs.version }}" -l rust --wait "$SMOKE_WAIT"
|
|
118
|
+
|
|
119
|
+
report:
|
|
120
|
+
needs: [resolve, python, node, node-alpine, rust]
|
|
121
|
+
if: ${{ always() && contains(needs.*.result, 'failure') }}
|
|
122
|
+
runs-on: ubuntu-latest
|
|
123
|
+
steps:
|
|
124
|
+
- uses: actions/github-script@v7
|
|
125
|
+
env:
|
|
126
|
+
VERSION: ${{ needs.resolve.outputs.version }}
|
|
127
|
+
RESULTS: ${{ toJSON(needs) }}
|
|
128
|
+
with:
|
|
129
|
+
script: |
|
|
130
|
+
const version = process.env.VERSION;
|
|
131
|
+
const results = JSON.parse(process.env.RESULTS);
|
|
132
|
+
const { owner, repo } = context.repo;
|
|
133
|
+
const runUrl = `${context.serverUrl}/${owner}/${repo}/actions/runs/${context.runId}`;
|
|
134
|
+
const title = `Release smoke failed for v${version}`;
|
|
135
|
+
const table = Object.entries(results)
|
|
136
|
+
.filter(([name]) => name !== 'resolve')
|
|
137
|
+
.map(([name, r]) => `| ${name} | ${r.result} |`)
|
|
138
|
+
.join('\n');
|
|
139
|
+
const body = [
|
|
140
|
+
`The install-and-run smoke for the **published** v${version} packages failed.`,
|
|
141
|
+
'',
|
|
142
|
+
`Run: ${runUrl}`,
|
|
143
|
+
'',
|
|
144
|
+
'| job | result |', '|---|---|', table,
|
|
145
|
+
'',
|
|
146
|
+
'Reproduce locally: `scripts/release_smoke.sh -v ' + version + '` (see docs/18-install-troubleshooting.md).',
|
|
147
|
+
'Until this is green, users may be unable to install this version — fix forward with a patch release rather than re-tagging.',
|
|
148
|
+
].join('\n');
|
|
149
|
+
const open = await github.paginate(github.rest.issues.listForRepo, {
|
|
150
|
+
owner, repo, state: 'open', per_page: 100,
|
|
151
|
+
});
|
|
152
|
+
const existing = open.find((i) => i.title === title && !i.pull_request);
|
|
153
|
+
if (existing) {
|
|
154
|
+
await github.rest.issues.createComment({
|
|
155
|
+
owner, repo, issue_number: existing.number,
|
|
156
|
+
body: `Failed again: ${runUrl}\n\n| job | result |\n|---|---|\n${table}`,
|
|
157
|
+
});
|
|
158
|
+
} else {
|
|
159
|
+
await github.rest.issues.create({ owner, repo, title, body });
|
|
160
|
+
}
|