Repository navigation
Bump pinned Rust toolchain to 1.98.1 - #34
Conversation
goyox86
left a comment
There was a problem hiding this comment.
Made a small question.
Please feel free to compare 1.88 with 1.98 with models and check if compatibility is fine in libsql-sqlite3
| [toolchain] | ||
| profile = "default" | ||
| channel = "1.85.0" | ||
| channel = "1.88.0" |
There was a problem hiding this comment.
Is there any problems going with the latest stable version? Could we check if everything works with currant stable which I think is 1.98.1
There was a problem hiding this comment.
Yep, checked it — stable is 1.98.1 and I've pinned it to this version. It also has no compatbility issues with libsql-sqlite3.
The only wrinkle was that 1.98.1 needed 12 mechanical lint fixes (-D warnings caught a new lifetime-syntax lint + one dead assignment) whereas 1.88 required none. I think this tradeoff is worth the extra lines of code changes so we don't have to come back here for a while and change the pinned Rust toolchain.
37c364c to
1bef999
Compare
libsql-sqlite3/test/rust_suite has no committed Cargo.lock, so CI resolves its transitive dependencies fresh on every run. Several of those now require a newer compiler than the pinned 1.85.0 (icu_* and wasm-encoder/wast declare rust-version 1.88; yoke-derive 0.8.3 declares none but uses str::from_utf8 as an inherent method, stabilized in 1.87). This breaks the Extensions Tests job and the rusttestwasm step of make-sqlite3 on main. Pin current stable (1.98.1) rather than the minimum that compiles today (1.88.0, verified green in CI), so crate MSRV bumps do not break CI again in the near term. Document the constraint next to the unlocked test crate.
07c2523 to
0565dd0
Compare
CI compiles with RUSTFLAGS="-D warnings", so lints added since 1.85.0 fail the build: - mismatched_lifetime_syntaxes (new in 1.89): eleven signatures elide a lifetime on the input side (&self / &str) but hide it on the output type (Vec<Column>, PageHdrIter, CursorStep<S>, Cow<str>). Spell the output lifetime as '_ as the compiler suggests. No semantic change; this is the lifetime rustc already inferred. - unused_assignments: `frameno` in bottomless-cli's restore loop was only ever copied into BatchReader::new and then incremented, never read. BatchReader tracks its own next_frame_no and the function returns the separate last_received_frame_no, so the local was dead since it was introduced in 4a71b20. Remove it and pass first_frame_no directly. Verified locally on 1.98.1 with the same flags as CI: cargo check --all-targets --all-features, cargo fmt --check, and cargo check -p libsql --no-default-features for core/replication/remote.
0565dd0 to
c22cc62
Compare
Summary
Draft to test whether bumping the pinned toolchain fixes the two CI jobs that are currently red on
main, #32, and #33: Extensions Tests and therusttestwasmstep ofmake-sqlite3.Root cause
rust-toolchain.tomlpins Rust 1.85.0 (unchanged since 2025-06-01, same as upstream).libsql-sqlite3/test/rust_suitehas no committedCargo.lock(it is gitignored) and is excluded from the root workspace, so CI resolves its transitive dependencies from scratch on every run.icu_*,wasm-encoder,wast,watdeclarerust-version = 1.88→ Cargo refuses to build (rustc 1.85.0 is not supported by the following packages). This is whatmainand Fix out-of-bounds read when formatting overlong vector text elements #32 hit.yoke-derive 0.8.3(published 2026-09-15) declares norust-version, so even upstream'sresolver = "3"(which Syncing main branch with the upstream repo #33 brings in) still selects it — and it usesstr::from_utf8as an inherent method, stabilized in 1.87. This is what Syncing main branch with the upstream repo #33 hits after resolution succeeds.Change
rust-toolchain.toml:1.85.0→1.98.1(current stable).1.88.0is the lowest version that satisfies every crate above, and was verified first: all 13 CI jobs passed on commit37c364c3with no lint fixes needed. Pinning current stable instead buys headroom before the next crate MSRV bump breaks CI again.sqlite3.yml(themake-sqlite3job) has alibsql-sqlite3/**path filter, so it only ran on this PR while an earlier revision touched a file under that path. It passed on this toolchain pin (commit07c25236, samerust-toolchain.tomlas the current head); the revision since then only removed a comment, so that result stands.Lint fallout from the newer compiler (second commit)
CI runs with
RUSTFLAGS: -D warnings, and 1.98.1 surfaced two lints that 1.85.0 did not have. Fixed in a separate commit so they can be reviewed independently:mismatched_lifetime_syntaxes(new in 1.89) — 11 signatures that elide a lifetime on the input (&self/&str) but hide it on the output type (Vec<Column>,PageHdrIter,CursorStep<S>,Cow<str>). Changed to spell the output lifetime as'_, exactly as rustc suggests. No semantic change; this is the lifetime the compiler already inferred.unused_assignments—framenoinbottomless-cli's restore loop was only ever copied intoBatchReader::newand then incremented, never read (BatchReadertracks its ownnext_frame_no; the function returns the separatelast_received_frame_no). Dead since it was introduced in4a71b2072a. Removed the local entirely and passfirst_frame_nodirectly.These were found and verified locally on 1.98.1 with the same flags as CI (
cargo check --all-targets --all-features,cargo fmt --check, and the three-p libsql --no-default-features --features {core,replication,remote}checks), all clean.What to watch in CI
Extensions Testsandmake-sqlite3should go green (they already did on the first 1.98.1 run).Run Checks,Run Tests,Check featuresfailed on the first 1.98.1 run on exactly the lints above; they should be green now.Scope notes
cargoinvoked inside this repo (fork CI and thelibsql-serverimage build, whoserust:1.90base already satisfies this). POS Mobile consumes the fork as a git dependency with its own toolchain and is unaffected.yoke-derive 0.8.3shipped, so they will hit the same failure on their next run. Until they bump, this is a one-line divergence.main, so no rebase needed).