diff --git a/.agents/skills/extenddb/references/setup/02-dependency-checks.md b/.agents/skills/extenddb/references/setup/02-dependency-checks.md index 884ccfa88..54695616d 100644 --- a/.agents/skills/extenddb/references/setup/02-dependency-checks.md +++ b/.agents/skills/extenddb/references/setup/02-dependency-checks.md @@ -8,7 +8,7 @@ This file lists the dependency checks the `extenddb-setup` skill runs before pro | Dependency | Check command | Minimum version | Rationale | |---|---|---|---| -| Rust toolchain | `cargo --version` and `rustc --version` | 1.88 | extenddb is a Rust workspace; older toolchains fail `cargo build --release`. | +| Rust toolchain | `cargo --version` and `rustc --version` | 1.91.1 | extenddb is a Rust workspace; older toolchains fail `cargo build --release`. | | PostgreSQL client | `psql --version` | 14 | extenddb speaks the Postgres protocol at init and runtime; older clients may lack required features. | | PostgreSQL server readiness | `pg_isready` | n/a (server-side check) | Confirms the server is reachable before `extenddb init`. | | Python 3 | `python3 --version` | 3.10 | Required by the sample apps and the docs build pipeline. | @@ -29,7 +29,7 @@ If `which cargo` exits nonzero, Rust is not installed. Install: - Linux (Fedora/RHEL): `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` - macOS: `brew install rustup-init && rustup-init` -If Rust is installed but `rustc --version` reports older than 1.88: +If Rust is installed but `rustc --version` reports older than 1.91.1: ```bash rustup update @@ -84,7 +84,7 @@ If `python3 --version` reports older than 3.10, upgrade via the same package man ## Version parsing -`rustc --version` prints `rustc 1.88.0 (abcdef0 2025-01-01)`. Extract the version field with `awk`: +`rustc --version` prints `rustc 1.91.1 (abcdef0 2025-01-01)`. Extract the version field with `awk`: ```bash rustc --version | awk '{print $2}' @@ -96,11 +96,11 @@ rustc --version | awk '{print $2}' psql --version | awk '{print $3}' ``` -Compare the extracted version against the minimum (1.88 for Rust, 14 for Postgres) by splitting on `.` and comparing numerically. For skill-level checks, a string prefix comparison (`[[ "$PG_VER" < "14" ]]`) is adequate because major versions are single or double digits. +Compare the extracted version against the minimum (1.91.1 for Rust, 14 for Postgres) by splitting on `.` and comparing numerically. For skill-level checks, a string prefix comparison (`[[ "$PG_VER" < "14" ]]`) is adequate because major versions are single or double digits. ## Rust version upgrade path -If Rust is installed via rustup and `rustc --version` reports older than 1.88, the fix is: +If Rust is installed via rustup and `rustc --version` reports older than 1.91.1, the fix is: ```bash rustup update diff --git a/.agents/skills/extenddb/references/setup/03-build-stage.md b/.agents/skills/extenddb/references/setup/03-build-stage.md index 8204129fc..90833bb87 100644 --- a/.agents/skills/extenddb/references/setup/03-build-stage.md +++ b/.agents/skills/extenddb/references/setup/03-build-stage.md @@ -59,4 +59,4 @@ This should print the extenddb version string. If it does not, the build failed cargo build --release --verbose ``` -Common causes of silent build failure are a missing system library (for example, `libpq-dev` or `openssl-dev` on Linux), a Rust toolchain older than 1.88, or a disk full condition under `target/`. The verbose output names the failing crate and the missing dependency. +Common causes of silent build failure are a missing system library (for example, `libpq-dev` or `openssl-dev` on Linux), a Rust toolchain older than 1.91.1, or a disk full condition under `target/`. The verbose output names the failing crate and the missing dependency. diff --git a/.cargo/config.toml b/.cargo/config.toml index cfc36d196..4cab86c4f 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,7 +3,7 @@ [resolver] # Prefer dependency versions whose declared rust-version fits the workspace -# rust-version (1.88, tested in CI), so `cargo update` on a newer toolchain -# does not pull in crates that no longer build on 1.88. Only applies when a +# rust-version (1.91.1, tested in CI), so `cargo update` on a newer toolchain +# does not pull in crates that no longer build on 1.91.1. Only applies when a # newer version would be incompatible; everything else updates as usual. incompatible-rust-versions = "fallback" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ef1b68230..b3c5100f2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,7 +27,7 @@ jobs: timeout-minutes: 15 strategy: matrix: - toolchain: [stable, "1.88.0"] + toolchain: [stable, "1.91.1"] steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master diff --git a/AGENTS.md b/AGENTS.md index 33908f768..7715c6f78 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -9,7 +9,7 @@ License. ExtendDB is a clean-room implementation of the DynamoDB wire protocol, by AWS engineers. It is not a fork of DynamoDB and contains no DynamoDB source code. ExtendDB speaks the DynamoDB wire protocol: any AWS SDK, CLI, or tool that works with DynamoDB works with ExtendDB, unchanged. -- **Language:** Rust (edition 2024, MSRV 1.88+) +- **Language:** Rust (edition 2024, MSRV 1.91.1+) - **Storage backends:** PostgreSQL 14+ (default), SQLite (bundled, no server or client install required; feature flag `sqlite`, also `sqlite-memory` for dev and CI), MongoDB 7.0+ (feature flag `mongodb`), Cassandra 4.1+ (experimental; feature flag `cassandra`). One backend per binary, selected by mutually exclusive Cargo features. - **Architecture:** Async (tokio), trait-based storage abstraction - **Authentication:** Mandatory SigV4 with built-in IAM (users, groups, roles, policies) @@ -97,7 +97,7 @@ extenddb (bin) ### Prerequisites -- Rust 1.88+ (`rustup update`) +- Rust 1.91.1+ (`rustup update`) - Storage backend (one of): - PostgreSQL 14+ running locally (see `docs/local-postgres-setup.md`) - SQLite (embedded; nothing to install) @@ -417,7 +417,7 @@ python3 docs/build-docs.py ## Code Style and Conventions - **Rust edition:** 2024 -- **MSRV:** 1.88 +- **MSRV:** 1.91.1 - **Async:** tokio, no `#[async_trait]` (use RPITIT) - **Error handling:** `thiserror` for library errors, `anyhow` for application errors - **Serialization:** `serde` + `serde_json` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e321d02e0..e38fadfe3 100755 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Thank you for your interest in contributing to ExtendDB! ### Prerequisites -- Rust 1.88+ (stable) +- Rust 1.91.1+ (stable) - PostgreSQL 14+ - Python 3.10+ (for integration tests) diff --git a/Cargo.lock b/Cargo.lock index faabdd021..dc21c3a9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -445,9 +445,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.11" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52eec3db979d18cb807fc1070961cc51d87d069abe9ab57917769687368a8c6c" +checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc" dependencies = [ "futures-util", "pin-project-lite", @@ -534,10 +534,12 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.62.3" +version = "0.62.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb96aa208d62ee94104645f7b2ecaf77bf27edf161590b6224bfbac2832f979" +checksum = "701a947f4797e52a911e114a898667c746c39feea467bbd1abd7b3721f702ffa" dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", ] @@ -587,11 +589,12 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.11.3" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49952c52f7eebb72ce2a754d3866cc0f87b97d2a46146b79f80f3a93fb2b3716" +checksum = "9db177daa6ba8afb9ee1aefcf548c907abcf52065e394ee11a92780057fe0e8c" dependencies = [ "aws-smithy-async", + "aws-smithy-runtime-api-macros", "aws-smithy-types", "bytes", "http 0.2.12", @@ -602,11 +605,33 @@ dependencies = [ "zeroize", ] +[[package]] +name = "aws-smithy-runtime-api-macros" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d7396fd9500589e62e460e987ecb671bad374934e55ec3b5f498cc7a8a8a7b7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "aws-smithy-schema" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7442cb268338f0eb8278140a107c046756aa01093d8ef5e99628d34ae09c94f5" +dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-types", + "http 1.4.0", +] + [[package]] name = "aws-smithy-types" -version = "1.4.3" +version = "1.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3a26048eeab0ddeba4b4f9d51654c79af8c3b32357dc5f336cee85ab331c33" +checksum = "53f93074121a1be41317b9aa607143ae17900631f7f59a99f2b905d519d6783b" dependencies = [ "base64-simd", "bytes", diff --git a/Cargo.toml b/Cargo.toml index 2ee723c20..2386a32f0 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ members = [ [workspace.package] version = "0.1.14" edition = "2024" -rust-version = "1.88" +rust-version = "1.91.1" license = "Apache-2.0" [workspace.dependencies] @@ -89,14 +89,13 @@ bson = "2.13" dashmap = "6" # Backup store -# Exact pins: the aws-sdk crates release in lockstep, and these are the newest -# versions whose declared minimum supported rustc fits the workspace -# rust-version (1.88); later releases require a newer compiler. Their -# transitive aws-* and aws-smithy-* crates are held in Cargo.lock at the -# newest versions that build on 1.88 (set with -# `cargo +1.88.0 update @ --precise `). The resolver +# Exact pins: the aws-sdk crates release in lockstep, and each of these +# versions declares a minimum supported rustc at or below the workspace +# rust-version (1.91.1). Their transitive aws-* and aws-smithy-* crates are +# held in Cargo.lock at versions that build on 1.91.1 (set with +# `cargo +1.91.1 update @ --precise `). The resolver # fallback in .cargo/config.toml keeps a plain `cargo update` from moving -# them past that, and the 1.88 leg of .github/workflows/test.yml fails if +# them past that, and the 1.91.1 leg of .github/workflows/test.yml fails if # they drift. The feature set is that of tests/rust/Cargo.toml plus `sso` on # aws-config, so a server whose credentials come from an SSO profile # (`sso_session` in the shared config) can reach the backup bucket. diff --git a/Dockerfile b/Dockerfile index 31767f462..47a7754d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # The runtime base is explicitly approved for this public OSS distribution. # Keep both references digest-pinned and update them only through reviewed CRs. -FROM public.ecr.aws/docker/library/rust:1.88-bookworm@sha256:af306cfa71d987911a781c37b59d7d67d934f49684058f96cf72079c3626bfe0 AS build +FROM public.ecr.aws/docker/library/rust:1.91.1-bookworm@sha256:c1e5f19e773b7878c3f7a805dd00a495e747acbdc76fb2337a4ebf0418896b33 AS build ARG VCS_REF ARG BUILD_DATE WORKDIR /src diff --git a/Dockerfile.cassandra b/Dockerfile.cassandra index 9652feabf..2cfbb5f55 100644 --- a/Dockerfile.cassandra +++ b/Dockerfile.cassandra @@ -4,7 +4,7 @@ # external service: use an Apache Cassandra 4.1+ cluster you operate, or the # optional docker-compose.cassandra.yml reference stack for local development. -FROM public.ecr.aws/docker/library/rust:1.88-bookworm@sha256:af306cfa71d987911a781c37b59d7d67d934f49684058f96cf72079c3626bfe0 AS build +FROM public.ecr.aws/docker/library/rust:1.91.1-bookworm@sha256:c1e5f19e773b7878c3f7a805dd00a495e747acbdc76fb2337a4ebf0418896b33 AS build ARG VCS_REF ARG BUILD_DATE WORKDIR /src diff --git a/Dockerfile.dev b/Dockerfile.dev index 79412bba0..61b7673e0 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -14,7 +14,7 @@ # production binaries keep readable panic backtraces. # * distroless runtime: no shell, no package manager, no setuid binaries. -FROM public.ecr.aws/docker/library/rust:1.88-bookworm@sha256:af306cfa71d987911a781c37b59d7d67d934f49684058f96cf72079c3626bfe0 AS build +FROM public.ecr.aws/docker/library/rust:1.91.1-bookworm@sha256:c1e5f19e773b7878c3f7a805dd00a495e747acbdc76fb2337a4ebf0418896b33 AS build ARG VCS_REF ARG BUILD_DATE WORKDIR /src diff --git a/Dockerfile.mongodb b/Dockerfile.mongodb index de5302f65..a74b5ccfd 100644 --- a/Dockerfile.mongodb +++ b/Dockerfile.mongodb @@ -4,7 +4,7 @@ # external service: use MongoDB Atlas, a managed replica set, or the optional # docker-compose.mongodb.yml reference stack. -FROM public.ecr.aws/docker/library/rust:1.88-bookworm@sha256:af306cfa71d987911a781c37b59d7d67d934f49684058f96cf72079c3626bfe0 AS build +FROM public.ecr.aws/docker/library/rust:1.91.1-bookworm@sha256:c1e5f19e773b7878c3f7a805dd00a495e747acbdc76fb2337a4ebf0418896b33 AS build ARG VCS_REF ARG BUILD_DATE WORKDIR /src diff --git a/README.md b/README.md index f5cf0ff55..64be22aec 100755 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ scripts/install-macos.sh # macOS ## Prerequisites -- Rust 1.88+ (`rustup update`) +- Rust 1.91.1+ (`rustup update`) - Python 3.10+ (for test suites and documentation) - A storage backend: - PostgreSQL 14+ (see `docs/local-postgres-setup.md`) diff --git a/SOFTWARE-LICENSE-NOTICES-CASSANDRA.html b/SOFTWARE-LICENSE-NOTICES-CASSANDRA.html index 8a5f1b144..711c5b2ec 100644 --- a/SOFTWARE-LICENSE-NOTICES-CASSANDRA.html +++ b/SOFTWARE-LICENSE-NOTICES-CASSANDRA.html @@ -49,7 +49,7 @@

ExtendDB Software License Notices

Overview of licenses: