From 634f5ff99bedb6f88e2526c5e187a21faf2cd29d Mon Sep 17 00:00:00 2001 From: "Wid L. Hacker" Date: Thu, 22 Oct 2026 13:31:58 -1000 Subject: [PATCH 1/3] Pin floating dependency versions: Cargo.lock + sqlite-jdbc Rust (D2): commit bindings/rust/Cargo.lock (50 packages; rusqlite 0.40.2, uuid 1.28.0, json 0.12.4) so this repo's builds are reproducible and future crate bumps arrive as reviewable diffs. Cargo ignores a library's lock downstream, so this costs dependents nothing. Tighten the loose requirements that let the float bite: rusqlite ^0 -> ^0.40, json ^0 -> ^0.12, uuid (dev) ^0 -> ^1 (was silently stuck at 0.8.2), cargo_smoke_test rusqlite ^0.25 -> ^0.40, json ^0 -> ^0.12. JDBC (D4): pin sqlite-jdbc 3.53.4.0, replacing the open range [3.31.1,) that resolved to the newest release on the day of each build. sqlite-jdbc bundles the SQLite engine shipped inside the JDBC artifact; its version now changes at maintenance touches, not by calendar. Downstream Maven apps keep final say via dependency management. --- bindings/jdbc/genomicsqlite-jdbc/pom.xml | 6 +- bindings/rust/.gitignore | 5 +- bindings/rust/Cargo.lock | 425 +++++++++++++++++++++++ bindings/rust/Cargo.toml.in | 6 +- test/cargo_smoke_test/Cargo.toml.in | 4 +- 5 files changed, 437 insertions(+), 9 deletions(-) create mode 100644 bindings/rust/Cargo.lock diff --git a/bindings/jdbc/genomicsqlite-jdbc/pom.xml b/bindings/jdbc/genomicsqlite-jdbc/pom.xml index b7b3646..a4ef2a0 100644 --- a/bindings/jdbc/genomicsqlite-jdbc/pom.xml +++ b/bindings/jdbc/genomicsqlite-jdbc/pom.xml @@ -53,10 +53,14 @@ + org.xerial sqlite-jdbc - [3.31.1,) + 3.53.4.0 junit diff --git a/bindings/rust/.gitignore b/bindings/rust/.gitignore index 042eab2..f36a1e1 100644 --- a/bindings/rust/.gitignore +++ b/bindings/rust/.gitignore @@ -3,9 +3,8 @@ debug/ target/ -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock +# Cargo.lock is committed (2026-10-22): reproducible CI/dev builds for this +# repo; cargo ignores it downstream. Refresh it as an early release step. # These are backup files generated by rustfmt **/*.rs.bk diff --git a/bindings/rust/Cargo.lock b/bindings/rust/Cargo.lock new file mode 100644 index 0000000..e1e9665 --- /dev/null +++ b/bindings/rust/Cargo.lock @@ -0,0 +1,425 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "cc" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877bf67ac8e52449eb2f9e98a344ea163beb70dd1f9eebe3cc5357dcfeaee4df" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "find-msvc-tools" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "genomicsqlite" +version = "0.9.4-7-g1fa5e5c" +dependencies = [ + "json", + "rusqlite", + "tempfile", + "uuid", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashlink" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a596f1b20ed2cc5ecac41a164aaebc7258057060f06c0cf7a2ba3991ee7990fb" +dependencies = [ + "hashbrown 0.17.1", +] + +[[package]] +name = "js-sys" +version = "0.3.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "json" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" + +[[package]] +name = "libc" +version = "0.2.191" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" + +[[package]] +name = "libsqlite3-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1d20bef17f513b9b3004532233187769cd072d790971f4e4da0e346eb6401e8" +dependencies = [ + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rsqlite-vfs" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c" +dependencies = [ + "hashbrown 0.16.1", + "thiserror", +] + +[[package]] +name = "rusqlite" +version = "0.40.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f2a97da3e3873c73cb2a2e71b35c40ff95e0b1eefa8d72d8499a6928c3b5b3" +dependencies = [ + "bitflags", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", + "sqlite-wasm-rs", +] + +[[package]] +name = "rustix" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" + +[[package]] +name = "sqlite-wasm-rs" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc3efc0da82635d7e1ced0053bbbfa8c7ab9645d0bf36ceb4f7127bb85315d75" +dependencies = [ + "cc", + "js-sys", + "rsqlite-vfs", + "wasm-bindgen", +] + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "uuid" +version = "1.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cc1186384beb7dd8eedea376413fd654937285ea6c9cfbb928dc3043ea4b606" +dependencies = [ + "getrandom", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "wasm-bindgen" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] diff --git a/bindings/rust/Cargo.toml.in b/bindings/rust/Cargo.toml.in index d3979a9..690f721 100644 --- a/bindings/rust/Cargo.toml.in +++ b/bindings/rust/Cargo.toml.in @@ -17,13 +17,13 @@ default = ["bundle_libgenomicsqlite"] bundle_libgenomicsqlite = [] [dependencies] -json = "^0" +json = "^0.12" tempfile = "^3" [dependencies.rusqlite] -version = "^0" +version = "^0.40" features = ["load_extension", "vtab"] [dev-dependencies.uuid] -version = "^0" +version = "^1" features = ["v4"] diff --git a/test/cargo_smoke_test/Cargo.toml.in b/test/cargo_smoke_test/Cargo.toml.in index 6f36d5b..dcc6e2d 100644 --- a/test/cargo_smoke_test/Cargo.toml.in +++ b/test/cargo_smoke_test/Cargo.toml.in @@ -6,5 +6,5 @@ edition = "2018" [dependencies] genomicsqlite = "{{GENOMICSQLITE_VERSION}}" -rusqlite = "^0.25" -json = "^0" +rusqlite = "^0.40" +json = "^0.12" From a4cf305c85d260821c0b1286c7b3b810c20a2136 Mon Sep 17 00:00:00 2001 From: "Wid L. Hacker" Date: Thu, 22 Oct 2026 15:25:54 -1000 Subject: [PATCH 2/3] Address review: bounded rusqlite range; stable shim package version 1. rusqlite requirement ^0.40 -> >=0.25, <0.41 (Cargo.toml.in). The narrowed pin broke consumers: rusqlite 0.40 needs libsqlite3-sys 0.38 while rusqlite 0.25 needs 0.22, and Cargo allows only one links = "sqlite3" package per graph, so an app using rusqlite 0.25 elsewhere failed resolution outright. The bounded range lets the app unify rusqlite inside the tested span while this repo's Cargo.lock still develops against 0.40.2. Verified: a consumer pinned to rusqlite 0.25.4 resolves (one libsqlite3-sys) and type-checks passing Connections across the boundary. cargo_smoke_test's manifest is restored to main's: its rusqlite ^0.25 IS the older-version compatibility check, alongside the lock-based current-version tests. (json stays ^0.12: it has no links constraint, so nothing forces cross-version unification, and a wider range would overclaim Object type compatibility that pre-1.0 duplication does not deliver.) 2. Shim version no longer feeds on the tracked lockfile. Both cargo wrappers now stamp the nearest tag (git describe --abbrev=0) instead of the per-commit describe, and add -dirty only for changes other than Cargo.lock itself. Ordinary builds leave the lock untouched (verified: cargo check on a clean tree leaves git status empty), and consecutive wrapper runs report the same version. The lock's root entry is now the stable 0.9.4. --- bindings/rust/Cargo.lock | 2 +- bindings/rust/Cargo.toml.in | 2 +- bindings/rust/cargo | 8 +++++++- test/cargo_smoke_test/Cargo.toml.in | 4 ++-- test/cargo_smoke_test/cargo | 8 +++++++- 5 files changed, 18 insertions(+), 6 deletions(-) mode change 100755 => 100644 bindings/rust/cargo mode change 100755 => 100644 test/cargo_smoke_test/cargo diff --git a/bindings/rust/Cargo.lock b/bindings/rust/Cargo.lock index e1e9665..2f53040 100644 --- a/bindings/rust/Cargo.lock +++ b/bindings/rust/Cargo.lock @@ -96,7 +96,7 @@ dependencies = [ [[package]] name = "genomicsqlite" -version = "0.9.4-7-g1fa5e5c" +version = "0.9.4" dependencies = [ "json", "rusqlite", diff --git a/bindings/rust/Cargo.toml.in b/bindings/rust/Cargo.toml.in index 690f721..991fe89 100644 --- a/bindings/rust/Cargo.toml.in +++ b/bindings/rust/Cargo.toml.in @@ -21,7 +21,7 @@ json = "^0.12" tempfile = "^3" [dependencies.rusqlite] -version = "^0.40" +version = ">=0.25, <0.41" features = ["load_extension", "vtab"] [dev-dependencies.uuid] diff --git a/bindings/rust/cargo b/bindings/rust/cargo old mode 100755 new mode 100644 index 0aaa6bf..e3227b6 --- a/bindings/rust/cargo +++ b/bindings/rust/cargo @@ -4,7 +4,13 @@ set -e cd `dirname $0` -revision="$(git describe --tags --dirty)" +revision="$(git describe --tags --abbrev=0)" +# -dirty only for changes other than the tracked Cargo.lock: builds rewrite +# the lock's root-package version entry, and that must not feed back into +# the version itself (which would rewrite the lock again on the next run). +if git status --porcelain --untracked-files=no | grep -v 'Cargo.lock' | grep -q .; then + revision="${revision}-dirty" +fi revision="${revision#v}" # strip 'v' prefix >&2 echo "$revision" diff --git a/test/cargo_smoke_test/Cargo.toml.in b/test/cargo_smoke_test/Cargo.toml.in index dcc6e2d..6f36d5b 100644 --- a/test/cargo_smoke_test/Cargo.toml.in +++ b/test/cargo_smoke_test/Cargo.toml.in @@ -6,5 +6,5 @@ edition = "2018" [dependencies] genomicsqlite = "{{GENOMICSQLITE_VERSION}}" -rusqlite = "^0.40" -json = "^0.12" +rusqlite = "^0.25" +json = "^0" diff --git a/test/cargo_smoke_test/cargo b/test/cargo_smoke_test/cargo old mode 100755 new mode 100644 index 0aaa6bf..e3227b6 --- a/test/cargo_smoke_test/cargo +++ b/test/cargo_smoke_test/cargo @@ -4,7 +4,13 @@ set -e cd `dirname $0` -revision="$(git describe --tags --dirty)" +revision="$(git describe --tags --abbrev=0)" +# -dirty only for changes other than the tracked Cargo.lock: builds rewrite +# the lock's root-package version entry, and that must not feed back into +# the version itself (which would rewrite the lock again on the next run). +if git status --porcelain --untracked-files=no | grep -v 'Cargo.lock' | grep -q .; then + revision="${revision}-dirty" +fi revision="${revision#v}" # strip 'v' prefix >&2 echo "$revision" From d41acbd9b0a599a9c81488b261ee1c4f4eda72d1 Mon Sep 17 00:00:00 2001 From: Mike Lin Date: Thu, 22 Oct 2026 16:05:32 -1000 Subject: [PATCH 3/3] restore exec bits on cargo shims (stripped by connector push) --- bindings/rust/cargo | 0 test/cargo_smoke_test/cargo | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 bindings/rust/cargo mode change 100644 => 100755 test/cargo_smoke_test/cargo diff --git a/bindings/rust/cargo b/bindings/rust/cargo old mode 100644 new mode 100755 diff --git a/test/cargo_smoke_test/cargo b/test/cargo_smoke_test/cargo old mode 100644 new mode 100755