diff --git a/.depot/workflows/ci.yml b/.depot/workflows/ci.yml
index 5f4cd5f..e554a17 100644
--- a/.depot/workflows/ci.yml
+++ b/.depot/workflows/ci.yml
@@ -1,9 +1,3 @@
-# Depot CI Migration
-# Source: .github/workflows/ci.yml
-#
-# Changes made:
-# - Changed GitHub runs-on labels to their Depot equivalents
-
name: ci
on:
pull_request:
@@ -13,91 +7,8 @@ on:
permissions:
contents: read
jobs:
- changes:
- name: 01-changed-paths
- runs-on: depot-ubuntu-24.04
- outputs:
- inspect: ${{ steps.scope.outputs.inspect }}
- sync: ${{ steps.scope.outputs.sync }}
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0
- - name: Classify changed paths
- id: scope
- shell: bash
- run: |
- if [[ "${{ github.event_name }}" != "pull_request" ]]; then
- echo "inspect=true" >> "$GITHUB_OUTPUT"
- echo "sync=true" >> "$GITHUB_OUTPUT"
- exit 0
- fi
-
- inspect=false
- sync=false
- while IFS= read -r path; do
- case "$path" in
- apps/convex-inspect/*|crates/convex-sync-core/*|Cargo.toml|Cargo.lock|rust-toolchain.toml|rustfmt.toml|.depot/workflows/ci.yml)
- inspect=true
- ;;
- esac
- case "$path" in
- apps/convex-sync/*|crates/convex-export-s3/*|crates/convex-sync-core/*|Cargo.toml|Cargo.lock|rust-toolchain.toml|rustfmt.toml|.depot/workflows/ci.yml)
- sync=true
- ;;
- esac
- done < <(git diff --name-only "${{ github.event.pull_request.base.sha }}"...HEAD)
-
- echo "inspect=${inspect}" >> "$GITHUB_OUTPUT"
- echo "sync=${sync}" >> "$GITHUB_OUTPUT"
-
- fmt:
- name: 02-rustfmt
- runs-on: depot-ubuntu-24.04 # was: ubuntu-24.04. Mapped standard GitHub runner to Depot equivalent.
- steps:
- - uses: actions/checkout@v4
- - name: Install Rust toolchain
- uses: dtolnay/rust-toolchain@stable
- with:
- components: rustfmt
- - name: Run rustfmt
- run: cargo fmt --all --check
- clippy-inspect:
- name: 03-clippy-inspect
- needs: changes
- if: needs.changes.outputs.inspect == 'true'
- runs-on: depot-ubuntu-24.04
- steps:
- - uses: actions/checkout@v4
- - name: Setup Depot
- uses: depot/setup-action@v1
- - name: Install sccache
- run: sudo apt-get update && sudo apt-get install -y sccache
- - name: Install Rust toolchain
- uses: dtolnay/rust-toolchain@stable
- with:
- components: clippy
- - name: Run clippy
- run: depot cargo clippy -p convex-sync-core -p convex-inspect --all-targets --all-features -- -D warnings
- test-inspect:
- name: 04-test-inspect
- needs: changes
- if: needs.changes.outputs.inspect == 'true'
- runs-on: depot-ubuntu-24.04
- steps:
- - uses: actions/checkout@v4
- - name: Setup Depot
- uses: depot/setup-action@v1
- - name: Install sccache
- run: sudo apt-get update && sudo apt-get install -y sccache
- - name: Install Rust toolchain
- uses: dtolnay/rust-toolchain@stable
- - name: Run tests
- run: depot cargo test -p convex-sync-core -p convex-inspect
- clippy-sync:
- name: 05-clippy-sync
- needs: changes
- if: needs.changes.outputs.sync == 'true'
+ rust:
+ name: 01-rust-workspace
runs-on: depot-ubuntu-latest-4
steps:
- uses: actions/checkout@v4
@@ -106,23 +17,21 @@ jobs:
- name: Install sccache
run: sudo apt-get update && sudo apt-get install -y sccache
- name: Install Rust toolchain
- uses: dtolnay/rust-toolchain@stable
+ uses: dtolnay/rust-toolchain@1.95.0
with:
- components: clippy
+ components: clippy, rustfmt
+ - name: Verify toolchain selection
+ run: |
+ rustup show active-toolchain
+ rustc --version
+ cargo --version
+ - name: Run rustfmt
+ run: cargo fmt --all --check
- name: Run clippy
- run: depot cargo clippy -p convex-export-s3 -p convex-sync --all-targets --all-features -- -D warnings
- test-sync:
- name: 06-test-sync
- needs: changes
- if: needs.changes.outputs.sync == 'true'
- runs-on: depot-ubuntu-latest-4
- steps:
- - uses: actions/checkout@v4
- - name: Setup Depot
- uses: depot/setup-action@v1
- - name: Install sccache
- run: sudo apt-get update && sudo apt-get install -y sccache
- - name: Install Rust toolchain
- uses: dtolnay/rust-toolchain@stable
+ run: depot cargo clippy --workspace --locked --all-targets --all-features -- -D warnings
- name: Run tests
- run: depot cargo test -p convex-export-s3 -p convex-sync
+ run: depot cargo test --workspace --locked
+ - name: Build CLI entrypoints
+ run: depot cargo build --workspace --locked
+ - name: Exercise CLI and S3 behavior against local fixtures
+ run: python3 scripts/test-runtime.py
diff --git a/.depot/workflows/release-rc.yml b/.depot/workflows/release-rc.yml
index ac5ddc0..bc64d9f 100644
--- a/.depot/workflows/release-rc.yml
+++ b/.depot/workflows/release-rc.yml
@@ -73,7 +73,7 @@ jobs:
- name: install-sccache
run: sudo apt-get update && sudo apt-get install -y sccache
- name: install-rust-toolchain
- uses: dtolnay/rust-toolchain@stable
+ uses: dtolnay/rust-toolchain@1.95.0
- name: build-prerelease-archive
shell: bash
run: |
diff --git a/.depot/workflows/release.yml b/.depot/workflows/release.yml
index 7eddcd2..bcafdd2 100644
--- a/.depot/workflows/release.yml
+++ b/.depot/workflows/release.yml
@@ -43,7 +43,7 @@ jobs:
- name: install-sccache
run: sudo apt-get update && sudo apt-get install -y sccache
- name: install-rust-toolchain
- uses: dtolnay/rust-toolchain@stable
+ uses: dtolnay/rust-toolchain@1.95.0
- name: build-cli-archive
shell: bash
run: |
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
deleted file mode 100644
index f45f214..0000000
--- a/.github/pull_request_template.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## Summary
-
--
-
-## Verification
-
-- [ ] `just verify`
-- [ ] relevant manual validation completed
-- [ ] docs updated if behavior or repo shape changed
-
-## Notes
-
--
diff --git a/Cargo.lock b/Cargo.lock
index 7d82ab3..f8969c6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -25,12 +25,6 @@ dependencies = [
"memchr",
]
-[[package]]
-name = "allocator-api2"
-version = "0.2.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
-
[[package]]
name = "android_system_properties"
version = "0.1.5"
@@ -76,7 +70,7 @@ version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -87,14 +81,23 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
+]
+
+[[package]]
+name = "arc-swap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b"
+dependencies = [
+ "rustversion",
]
[[package]]
name = "arrow-array"
-version = "54.3.1"
+version = "60.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a12fcdb3f1d03f69d3ec26ac67645a8fe3f878d77b5ebb0b15d64a116c212985"
+checksum = "51dff6e4b9f158864a0aeb6a131ad53858ecbae7a2fc8989307b9b3c6b2f122e"
dependencies = [
"ahash",
"arrow-buffer",
@@ -102,92 +105,80 @@ dependencies = [
"arrow-schema",
"chrono",
"half",
- "hashbrown 0.15.5",
- "num",
+ "hashbrown",
+ "num-complex",
+ "num-integer",
+ "num-traits",
]
[[package]]
name = "arrow-buffer"
-version = "54.3.1"
+version = "60.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "263f4801ff1839ef53ebd06f99a56cecd1dbaf314ec893d93168e2e860e0291c"
+checksum = "c7235b863533e9db3ab86905b4521251de11226275b436ff3cb2d0010558d1c5"
dependencies = [
"bytes",
"half",
- "num",
+ "num-bigint",
+ "num-traits",
]
[[package]]
-name = "arrow-cast"
-version = "54.3.1"
+name = "arrow-cmp"
+version = "60.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ede6175fbc039dfc946a61c1b6d42fd682fcecf5ab5d148fbe7667705798cac9"
+checksum = "73a0e9adb28d95739fabcdae637261a2c14e618caf58ba1b88857120f9ee2687"
dependencies = [
"arrow-array",
"arrow-buffer",
- "arrow-data",
"arrow-schema",
- "arrow-select",
- "atoi",
- "base64",
- "chrono",
- "half",
- "lexical-core",
- "num",
- "ryu",
]
[[package]]
name = "arrow-data"
-version = "54.3.1"
+version = "60.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61cfdd7d99b4ff618f167e548b2411e5dd2c98c0ddebedd7df433d34c20a4429"
+checksum = "5aa06d5e22786c4966ffc4d2f171d0cb65d95f6bdea108a14e8c335e9faa437f"
dependencies = [
"arrow-buffer",
"arrow-schema",
"half",
- "num",
+ "num-integer",
+ "num-traits",
]
[[package]]
name = "arrow-ipc"
-version = "54.3.1"
+version = "60.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62ff528658b521e33905334723b795ee56b393dbe9cf76c8b1f64b648c65a60c"
+checksum = "86c523472d22e31f984df7a44fc36e6323d3c9b05ffe53d267ee4c3aa7c128d2"
dependencies = [
"arrow-array",
"arrow-buffer",
"arrow-data",
"arrow-schema",
+ "arrow-select",
"flatbuffers",
]
[[package]]
name = "arrow-schema"
-version = "54.3.1"
+version = "60.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39cfaf5e440be44db5413b75b72c2a87c1f8f0627117d110264048f2969b99e9"
+checksum = "f85a9a58cd03560526b0066487574aacb9008e413504fa0ee23d61141e96c338"
[[package]]
name = "arrow-select"
-version = "54.3.1"
+version = "60.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69efcd706420e52cd44f5c4358d279801993846d1c2a8e52111853d61d55a619"
+checksum = "ba3482b7d03bf4a3bf0b195f08a7f2b071595ccd54897e35b975ac63d3104977"
dependencies = [
"ahash",
"arrow-array",
"arrow-buffer",
+ "arrow-cmp",
"arrow-data",
"arrow-schema",
- "num",
-]
-
-[[package]]
-name = "atoi"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
-dependencies = [
"num-traits",
]
@@ -205,9 +196,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "aws-config"
-version = "1.8.15"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11493b0bad143270fb8ad284a096dd529ba91924c5409adeac856cc1bf047dbc"
+checksum = "b8d7b388a9fc3a6db15a5ec778c38b354eff1364882c94d08e0252f7a47dcaa4"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -219,12 +210,13 @@ dependencies = [
"aws-smithy-json",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
+ "aws-smithy-schema",
"aws-smithy-types",
"aws-types",
"bytes",
"fastrand",
"hex",
- "http 1.4.0",
+ "http",
"sha1 0.10.6",
"time",
"tokio",
@@ -235,9 +227,9 @@ dependencies = [
[[package]]
name = "aws-credential-types"
-version = "1.2.14"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f20799b373a1be121fe3005fba0c2090af9411573878f224df44b42727fcaf7"
+checksum = "e93964ffdaf57857f544be3666a5f57570bb699e934700f11b49708f61bb556e"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
@@ -247,9 +239,9 @@ dependencies = [
[[package]]
name = "aws-lc-rs"
-version = "1.16.3"
+version = "1.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f"
+checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e"
dependencies = [
"aws-lc-sys",
"zeroize",
@@ -257,21 +249,22 @@ dependencies = [
[[package]]
name = "aws-lc-sys"
-version = "0.40.0"
+version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7"
+checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27"
dependencies = [
"cc",
"cmake",
"dunce",
"fs_extra",
+ "pkg-config",
]
[[package]]
name = "aws-runtime"
-version = "1.7.2"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fc0651c57e384202e47153c1260b84a9936e19803d747615edf199dc3b98d17"
+checksum = "2b8a9911551b4ea6ca13805ef52ed96f7d2bbb43cc3b4a14cb0776a71f33cfaa"
dependencies = [
"aws-credential-types",
"aws-sigv4",
@@ -285,10 +278,8 @@ dependencies = [
"bytes",
"bytes-utils",
"fastrand",
- "http 0.2.12",
- "http 1.4.0",
- "http-body 0.4.6",
- "http-body 1.0.1",
+ "http",
+ "http-body",
"percent-encoding",
"pin-project-lite",
"tracing",
@@ -297,10 +288,11 @@ dependencies = [
[[package]]
name = "aws-sdk-s3"
-version = "1.129.0"
+version = "1.152.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d4e8410fadbc0ee453145dd77a4958227b18b05bf67c2795d0a8b8596c9aa0f"
+checksum = "004d5acbd6850ab58789a43822e0a2ef23927a46b012c17f8fa51253103db9f8"
dependencies = [
+ "arc-swap",
"aws-credential-types",
"aws-runtime",
"aws-sigv4",
@@ -312,30 +304,31 @@ dependencies = [
"aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
+ "aws-smithy-schema",
"aws-smithy-types",
"aws-smithy-xml",
"aws-types",
"bytes",
"fastrand",
"hex",
- "hmac",
- "http 0.2.12",
- "http 1.4.0",
- "http-body 1.0.1",
+ "hmac 0.13.0",
+ "http",
+ "http-body",
"lru",
"percent-encoding",
"regex-lite",
- "sha2 0.10.9",
+ "sha2 0.11.0",
"tracing",
"url",
]
[[package]]
name = "aws-sdk-sso"
-version = "1.97.0"
+version = "1.114.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9aadc669e184501caaa6beafb28c6267fc1baef0810fb58f9b205485ca3f2567"
+checksum = "12be2f9c8eef7f5fc919c96d538e629698469a02b4cb75408b26b1bd984ebe79"
dependencies = [
+ "arc-swap",
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
@@ -344,22 +337,23 @@ dependencies = [
"aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
+ "aws-smithy-schema",
"aws-smithy-types",
"aws-types",
"bytes",
"fastrand",
- "http 0.2.12",
- "http 1.4.0",
+ "http",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-ssooidc"
-version = "1.99.0"
+version = "1.116.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1342a7db8f358d3de0aed2007a0b54e875458e39848d54cc1d46700b2bfcb0a8"
+checksum = "d7645db8724ea3b82fdccfb67e1b0f637c9d8ab0e7ef29d84884d8d8d73f805d"
dependencies = [
+ "arc-swap",
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
@@ -368,22 +362,23 @@ dependencies = [
"aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
+ "aws-smithy-schema",
"aws-smithy-types",
"aws-types",
"bytes",
"fastrand",
- "http 0.2.12",
- "http 1.4.0",
+ "http",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-sts"
-version = "1.102.0"
+version = "1.119.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fc35b7a14cabdad13795fbbbd26d5ddec0882c01492ceedf2af575aad5f37dd"
+checksum = "03e490aa904849b38e770922faac779dd245f5cf8be81f19065acf18d276e4ad"
dependencies = [
+ "arc-swap",
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
@@ -393,21 +388,21 @@ dependencies = [
"aws-smithy-query",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
+ "aws-smithy-schema",
"aws-smithy-types",
"aws-smithy-xml",
"aws-types",
"fastrand",
- "http 0.2.12",
- "http 1.4.0",
+ "http",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sigv4"
-version = "1.4.2"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0b660013a6683ab23797778e21f1f854744fdf05f68204b4cca4c8c04b5d1f4"
+checksum = "2312577f088c9fbf4206dfdb884cf1de9407b43e1a923cbed5237775116fc24b"
dependencies = [
"aws-credential-types",
"aws-smithy-eventstream",
@@ -415,16 +410,14 @@ dependencies = [
"aws-smithy-runtime-api",
"aws-smithy-types",
"bytes",
- "crypto-bigint 0.5.5",
+ "crypto-bigint",
"form_urlencoded",
"hex",
- "hmac",
- "http 0.2.12",
- "http 1.4.0",
+ "hmac 0.13.0",
+ "http",
"p256",
"percent-encoding",
- "ring",
- "sha2 0.10.9",
+ "sha2 0.11.0",
"subtle",
"time",
"tracing",
@@ -433,9 +426,9 @@ dependencies = [
[[package]]
name = "aws-smithy-async"
-version = "1.2.14"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc"
+checksum = "f02e407fb3b54891734224b9ffac8a71fdd35f542500fa1af95754a6b2beb316"
dependencies = [
"futures-util",
"pin-project-lite",
@@ -444,17 +437,17 @@ dependencies = [
[[package]]
name = "aws-smithy-checksums"
-version = "0.64.7"
+version = "0.65.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10efbbcec1e044b81600e2fc562a391951d291152d95b482d5b7e7132299d762"
+checksum = "b67ecd999972b58e67cab052f5129906c08c25883bd0788ceefc55ef97d61307"
dependencies = [
"aws-smithy-http",
"aws-smithy-types",
"bytes",
"crc-fast",
"hex",
- "http 1.4.0",
- "http-body 1.0.1",
+ "http",
+ "http-body",
"http-body-util",
"md-5",
"pin-project-lite",
@@ -465,9 +458,9 @@ dependencies = [
[[package]]
name = "aws-smithy-eventstream"
-version = "0.60.20"
+version = "0.61.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "faf09d74e5e32f76b8762da505a3cd59303e367a664ca67295387baa8c1d7548"
+checksum = "80c2051c2f1016fb8e6548dd07b8bc2ac9c3fe583721444b92f515e856d31609"
dependencies = [
"aws-smithy-types",
"bytes",
@@ -476,9 +469,9 @@ dependencies = [
[[package]]
name = "aws-smithy-http"
-version = "0.63.6"
+version = "0.64.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba1ab2dc1c2c3749ead27180d333c42f11be8b0e934058fb4b2258ee8dbe5231"
+checksum = "639b4d8f8555f24a9be649811c3eb0b4d4616f4d61daf0c32e28873bc1ea9af1"
dependencies = [
"aws-smithy-eventstream",
"aws-smithy-runtime-api",
@@ -487,8 +480,8 @@ dependencies = [
"bytes-utils",
"futures-core",
"futures-util",
- "http 1.4.0",
- "http-body 1.0.1",
+ "http",
+ "http-body",
"http-body-util",
"percent-encoding",
"pin-project-lite",
@@ -498,80 +491,78 @@ dependencies = [
[[package]]
name = "aws-smithy-http-client"
-version = "1.1.12"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a2f165a7feee6f263028b899d0a181987f4fa7179a6411a32a439fba7c5f769"
+checksum = "51c89cc3f1f281d659a67a519a1b5c6d445b5ce09fa7e5aee40c2c2707e9509d"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
"aws-smithy-types",
- "h2 0.3.27",
- "h2 0.4.13",
- "http 0.2.12",
- "http 1.4.0",
- "http-body 0.4.6",
- "hyper 0.14.32",
- "hyper 1.9.0",
- "hyper-rustls 0.24.2",
- "hyper-rustls 0.27.9",
+ "h2",
+ "http",
+ "hyper",
+ "hyper-rustls",
"hyper-util",
"pin-project-lite",
- "rustls 0.21.12",
- "rustls 0.23.38",
+ "rustls",
"rustls-native-certs",
"rustls-pki-types",
"tokio",
- "tokio-rustls 0.26.4",
+ "tokio-rustls",
"tower",
"tracing",
]
[[package]]
name = "aws-smithy-json"
-version = "0.62.5"
+version = "0.63.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9648b0bb82a2eedd844052c6ad2a1a822d1f8e3adee5fbf668366717e428856a"
+checksum = "3385d469edbe8b60cc72002784652b5efca39178192aa9cc4b44c9875c6bdc18"
dependencies = [
+ "aws-smithy-runtime-api",
+ "aws-smithy-schema",
"aws-smithy-types",
]
[[package]]
name = "aws-smithy-observability"
-version = "0.2.6"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a06c2315d173edbf1920da8ba3a7189695827002e4c0fc961973ab1c54abca9c"
+checksum = "8e86338c869539a581bf161247762a6e87f92c5c075060057b5ed6d06632ed0c"
dependencies = [
"aws-smithy-runtime-api",
]
[[package]]
name = "aws-smithy-query"
-version = "0.60.15"
+version = "0.62.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a56d79744fb3edb5d722ef79d86081e121d3b9422cb209eb03aea6aa4f21ebd"
+checksum = "f1d1d71f6562be974caa85442ecd90194c40fdb5df045f182a6c2e872ce95056"
dependencies = [
+ "aws-smithy-runtime-api",
+ "aws-smithy-schema",
"aws-smithy-types",
+ "aws-smithy-xml",
"urlencoding",
]
[[package]]
name = "aws-smithy-runtime"
-version = "1.11.1"
+version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0504b1ab12debb5959e5165ee5fe97dd387e7aa7ea6a477bfd7635dfe769a4f5"
+checksum = "d6e302ac1d88b99652489df31abdec6ac42a2ab2ac3982ad0ac49f64dfaf28ba"
dependencies = [
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-http-client",
"aws-smithy-observability",
"aws-smithy-runtime-api",
+ "aws-smithy-schema",
"aws-smithy-types",
"bytes",
"fastrand",
- "http 0.2.12",
- "http 1.4.0",
- "http-body 0.4.6",
- "http-body 1.0.1",
+ "http",
+ "http-body",
"http-body-util",
"pin-project-lite",
"pin-utils",
@@ -581,16 +572,15 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime-api"
-version = "1.12.0"
+version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71a13df6ada0aafbf21a73bdfcdf9324cfa9df77d96b8446045be3cde61b42e"
+checksum = "c0730c16f91124c6a2abb4932c77e299288b3dd9f967ea2e9ec48cc6731e87a4"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api-macros",
"aws-smithy-types",
"bytes",
- "http 0.2.12",
- "http 1.4.0",
+ "http",
"pin-project-lite",
"tokio",
"tracing",
@@ -599,29 +589,38 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime-api-macros"
-version = "1.0.0"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d7396fd9500589e62e460e987ecb671bad374934e55ec3b5f498cc7a8a8a7b7"
+checksum = "221eaa237ddf1ca79b60d1372aad77e47f9c0ea5b3ce5099da8c61d027dc77b3"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
+[[package]]
+name = "aws-smithy-schema"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8f395d93304280b64b7632fea798d177e74897fe7f063416ce627cd6fa24829"
+dependencies = [
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "http",
+]
+
[[package]]
name = "aws-smithy-types"
-version = "1.4.7"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d73dbfbaa8e4bc57b9045137680b958d274823509a360abfd8e1d514d40c95c"
+checksum = "69bb407740a197147da48238ecc94498493c9e85445732360cec180296ca45f1"
dependencies = [
"base64-simd",
"bytes",
"bytes-utils",
"futures-core",
- "http 0.2.12",
- "http 1.4.0",
- "http-body 0.4.6",
- "http-body 1.0.1",
+ "http",
+ "http-body",
"http-body-util",
"itoa",
"num-integer",
@@ -636,22 +635,26 @@ dependencies = [
[[package]]
name = "aws-smithy-xml"
-version = "0.60.15"
+version = "0.62.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ce02add1aa3677d022f8adf81dcbe3046a95f17a1b1e8979c145cd21d3d22b3"
+checksum = "0b932c8d6dc127fc980eecd78f8694ae9b9551b69a93a7def2a199c1c0033daf"
dependencies = [
+ "aws-smithy-runtime-api",
+ "aws-smithy-schema",
+ "aws-smithy-types",
"xmlparser",
]
[[package]]
name = "aws-types"
-version = "1.3.14"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47c8323699dd9b3c8d5b3c13051ae9cdef58fd179957c882f8374dd8725962d9"
+checksum = "209f3a6d82a6e9e5f94abbed94c7a26e1c052341002bf57a5fb5481f625896fc"
dependencies = [
"aws-credential-types",
"aws-smithy-async",
"aws-smithy-runtime-api",
+ "aws-smithy-schema",
"aws-smithy-types",
"rustc_version",
"tracing",
@@ -659,9 +662,9 @@ dependencies = [
[[package]]
name = "base16ct"
-version = "0.1.1"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
[[package]]
name = "base64"
@@ -669,6 +672,12 @@ version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+[[package]]
+name = "base64"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
+
[[package]]
name = "base64-simd"
version = "0.8.0"
@@ -685,12 +694,6 @@ version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
-[[package]]
-name = "bitflags"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
[[package]]
name = "bitflags"
version = "2.11.1"
@@ -721,12 +724,6 @@ version = "3.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
-[[package]]
-name = "byteorder"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
-
[[package]]
name = "bytes"
version = "1.11.1"
@@ -767,6 +764,17 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+[[package]]
+name = "chacha20"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06"
+dependencies = [
+ "cfg-if",
+ "cpufeatures 0.3.0",
+ "rand_core 0.10.1",
+]
+
[[package]]
name = "chrono"
version = "0.4.44"
@@ -827,6 +835,12 @@ dependencies = [
"cc",
]
+[[package]]
+name = "cmov"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a"
+
[[package]]
name = "colorchoice"
version = "1.0.5"
@@ -1001,26 +1015,16 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
-[[package]]
-name = "crypto-bigint"
-version = "0.4.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
-dependencies = [
- "generic-array",
- "rand_core 0.6.4",
- "subtle",
- "zeroize",
-]
-
[[package]]
name = "crypto-bigint"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
dependencies = [
+ "generic-array",
"rand_core 0.6.4",
"subtle",
+ "zeroize",
]
[[package]]
@@ -1042,13 +1046,23 @@ dependencies = [
"hybrid-array",
]
+[[package]]
+name = "ctutils"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03bb0e1cc970d482d121d9a1744999169b69a07470b3d644a7894e53fcaf4574"
+dependencies = [
+ "cmov",
+]
+
[[package]]
name = "der"
-version = "0.6.1"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
+checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
dependencies = [
"const-oid 0.9.6",
+ "pem-rfc7468",
"zeroize",
]
@@ -1068,6 +1082,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer 0.10.4",
+ "const-oid 0.9.6",
"crypto-common 0.1.7",
"subtle",
]
@@ -1081,6 +1096,7 @@ dependencies = [
"block-buffer 0.12.0",
"const-oid 0.10.2",
"crypto-common 0.2.1",
+ "ctutils",
]
[[package]]
@@ -1108,14 +1124,16 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
[[package]]
name = "ecdsa"
-version = "0.14.8"
+version = "0.16.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c"
+checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
dependencies = [
"der",
+ "digest 0.10.7",
"elliptic-curve",
"rfc6979",
"signature",
+ "spki",
]
[[package]]
@@ -1126,17 +1144,17 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
name = "elliptic-curve"
-version = "0.12.3"
+version = "0.13.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
dependencies = [
"base16ct",
- "crypto-bigint 0.4.9",
- "der",
+ "crypto-bigint",
"digest 0.10.7",
"ff",
"generic-array",
"group",
+ "pem-rfc7468",
"pkcs8",
"rand_core 0.6.4",
"sec1",
@@ -1157,7 +1175,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
- "windows-sys 0.61.2",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -1168,9 +1186,9 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
[[package]]
name = "ff"
-version = "0.12.1"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
dependencies = [
"rand_core 0.6.4",
"subtle",
@@ -1184,11 +1202,11 @@ checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
[[package]]
name = "flatbuffers"
-version = "24.12.23"
+version = "25.12.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f1baf0dbf96932ec9a3038d57900329c015b0bfb7b63d904f3bc27e2b02a096"
+checksum = "35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags",
"rustc_version",
]
@@ -1266,6 +1284,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
+ "zeroize",
]
[[package]]
@@ -1288,55 +1307,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [
"cfg-if",
- "js-sys",
"libc",
- "r-efi",
+ "r-efi 5.3.0",
"wasip2",
- "wasm-bindgen",
]
[[package]]
-name = "group"
-version = "0.12.1"
+name = "getrandom"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
dependencies = [
- "ff",
- "rand_core 0.6.4",
- "subtle",
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "r-efi 6.0.0",
+ "rand_core 0.10.1",
+ "wasm-bindgen",
]
[[package]]
-name = "h2"
-version = "0.3.27"
+name = "group"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
dependencies = [
- "bytes",
- "fnv",
- "futures-core",
- "futures-sink",
- "futures-util",
- "http 0.2.12",
- "indexmap",
- "slab",
- "tokio",
- "tokio-util",
- "tracing",
+ "ff",
+ "rand_core 0.6.4",
+ "subtle",
]
[[package]]
name = "h2"
-version = "0.4.13"
+version = "0.4.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
+checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16"
dependencies = [
"atomic-waker",
"bytes",
"fnv",
"futures-core",
"futures-sink",
- "http 1.4.0",
+ "http",
"indexmap",
"slab",
"tokio",
@@ -1358,27 +1370,13 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.15.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
-
-[[package]]
-name = "hashbrown"
-version = "0.16.1"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
dependencies = [
- "allocator-api2",
- "equivalent",
"foldhash",
]
-[[package]]
-name = "hashbrown"
-version = "0.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
-
[[package]]
name = "heck"
version = "0.5.0"
@@ -1401,14 +1399,12 @@ dependencies = [
]
[[package]]
-name = "http"
-version = "0.2.12"
+name = "hmac"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
+checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f"
dependencies = [
- "bytes",
- "fnv",
- "itoa",
+ "digest 0.11.2",
]
[[package]]
@@ -1421,17 +1417,6 @@ dependencies = [
"itoa",
]
-[[package]]
-name = "http-body"
-version = "0.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
-dependencies = [
- "bytes",
- "http 0.2.12",
- "pin-project-lite",
-]
-
[[package]]
name = "http-body"
version = "1.0.1"
@@ -1439,7 +1424,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
- "http 1.4.0",
+ "http",
]
[[package]]
@@ -1450,8 +1435,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
dependencies = [
"bytes",
"futures-core",
- "http 1.4.0",
- "http-body 1.0.1",
+ "http",
+ "http-body",
"pin-project-lite",
]
@@ -1461,12 +1446,6 @@ version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
-[[package]]
-name = "httpdate"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
-
[[package]]
name = "hybrid-array"
version = "0.4.10"
@@ -1476,30 +1455,6 @@ dependencies = [
"typenum",
]
-[[package]]
-name = "hyper"
-version = "0.14.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"
-dependencies = [
- "bytes",
- "futures-channel",
- "futures-core",
- "futures-util",
- "h2 0.3.27",
- "http 0.2.12",
- "http-body 0.4.6",
- "httparse",
- "httpdate",
- "itoa",
- "pin-project-lite",
- "socket2 0.5.10",
- "tokio",
- "tower-service",
- "tracing",
- "want",
-]
-
[[package]]
name = "hyper"
version = "1.9.0"
@@ -1510,9 +1465,9 @@ dependencies = [
"bytes",
"futures-channel",
"futures-core",
- "h2 0.4.13",
- "http 1.4.0",
- "http-body 1.0.1",
+ "h2",
+ "http",
+ "http-body",
"httparse",
"itoa",
"pin-project-lite",
@@ -1521,34 +1476,19 @@ dependencies = [
"want",
]
-[[package]]
-name = "hyper-rustls"
-version = "0.24.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
-dependencies = [
- "futures-util",
- "http 0.2.12",
- "hyper 0.14.32",
- "log",
- "rustls 0.21.12",
- "tokio",
- "tokio-rustls 0.24.1",
-]
-
[[package]]
name = "hyper-rustls"
version = "0.27.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f"
dependencies = [
- "http 1.4.0",
- "hyper 1.9.0",
+ "http",
+ "hyper",
"hyper-util",
- "rustls 0.23.38",
+ "rustls",
"rustls-native-certs",
"tokio",
- "tokio-rustls 0.26.4",
+ "tokio-rustls",
"tower-service",
"webpki-roots",
]
@@ -1559,18 +1499,18 @@ version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
dependencies = [
- "base64",
+ "base64 0.22.1",
"bytes",
"futures-channel",
"futures-util",
- "http 1.4.0",
- "http-body 1.0.1",
- "hyper 1.9.0",
+ "http",
+ "http-body",
+ "hyper",
"ipnet",
"libc",
"percent-encoding",
"pin-project-lite",
- "socket2 0.6.3",
+ "socket2",
"tokio",
"tower-service",
"tracing",
@@ -1710,15 +1650,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
dependencies = [
"equivalent",
- "hashbrown 0.17.0",
+ "hashbrown",
]
-[[package]]
-name = "integer-encoding"
-version = "3.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02"
-
[[package]]
name = "ipnet"
version = "2.12.0"
@@ -1775,63 +1709,6 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
-[[package]]
-name = "lexical-core"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594"
-dependencies = [
- "lexical-parse-float",
- "lexical-parse-integer",
- "lexical-util",
- "lexical-write-float",
- "lexical-write-integer",
-]
-
-[[package]]
-name = "lexical-parse-float"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56"
-dependencies = [
- "lexical-parse-integer",
- "lexical-util",
-]
-
-[[package]]
-name = "lexical-parse-integer"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34"
-dependencies = [
- "lexical-util",
-]
-
-[[package]]
-name = "lexical-util"
-version = "1.0.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17"
-
-[[package]]
-name = "lexical-write-float"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361"
-dependencies = [
- "lexical-util",
- "lexical-write-integer",
-]
-
-[[package]]
-name = "lexical-write-integer"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df"
-dependencies = [
- "lexical-util",
-]
-
[[package]]
name = "libc"
version = "0.2.185"
@@ -1858,11 +1735,11 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]]
name = "lru"
-version = "0.16.4"
+version = "0.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39"
+checksum = "ef9ac18847474e638e3702b76c65d4eb93428471a74778ef0f1be711717f89b5"
dependencies = [
- "hashbrown 0.16.1",
+ "hashbrown",
]
[[package]]
@@ -1913,28 +1790,14 @@ version = "0.50.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
dependencies = [
- "windows-sys 0.61.2",
-]
-
-[[package]]
-name = "num"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
-dependencies = [
- "num-bigint",
- "num-complex",
- "num-integer",
- "num-iter",
- "num-rational",
- "num-traits",
+ "windows-sys 0.60.2",
]
[[package]]
name = "num-bigint"
-version = "0.4.6"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
+checksum = "93e7820bc0a80a0238e650327316f929ba18d5be054b647490a3a6a339f3e7c0"
dependencies = [
"num-integer",
"num-traits",
@@ -1964,28 +1827,6 @@ dependencies = [
"num-traits",
]
-[[package]]
-name = "num-iter"
-version = "0.1.45"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
-dependencies = [
- "autocfg",
- "num-integer",
- "num-traits",
-]
-
-[[package]]
-name = "num-rational"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
-dependencies = [
- "num-bigint",
- "num-integer",
- "num-traits",
-]
-
[[package]]
name = "num-traits"
version = "0.2.19"
@@ -2014,15 +1855,6 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
-[[package]]
-name = "ordered-float"
-version = "2.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
-dependencies = [
- "num-traits",
-]
-
[[package]]
name = "outref"
version = "0.5.2"
@@ -2031,47 +1863,49 @@ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
[[package]]
name = "p256"
-version = "0.11.1"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
dependencies = [
"ecdsa",
"elliptic-curve",
+ "primeorder",
"sha2 0.10.9",
]
[[package]]
name = "parquet"
-version = "54.3.1"
+version = "60.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfb15796ac6f56b429fd99e33ba133783ad75b27c36b4b5ce06f1f82cc97754e"
+checksum = "8af83d2940bc0510f9aef86d865f56fdc6095f87ab115ac885a80b7c5226d3ba"
dependencies = [
"ahash",
"arrow-array",
"arrow-buffer",
- "arrow-cast",
"arrow-data",
"arrow-ipc",
"arrow-schema",
"arrow-select",
- "base64",
+ "base64 0.23.1",
"bytes",
"chrono",
"half",
- "hashbrown 0.15.5",
- "num",
+ "hashbrown",
"num-bigint",
- "paste",
+ "num-integer",
+ "num-traits",
"seq-macro",
- "thrift",
"twox-hash",
]
[[package]]
-name = "paste"
-version = "1.0.15"
+name = "pem-rfc7468"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+dependencies = [
+ "base64ct",
+]
[[package]]
name = "percent-encoding"
@@ -2093,14 +1927,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkcs8"
-version = "0.9.0"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
dependencies = [
"der",
"spki",
]
+[[package]]
+name = "pkg-config"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"
+
[[package]]
name = "potential_utf"
version = "0.1.5"
@@ -2117,12 +1957,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
-name = "ppv-lite86"
-version = "0.2.21"
+name = "primeorder"
+version = "0.13.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
dependencies = [
- "zerocopy",
+ "elliptic-curve",
]
[[package]]
@@ -2146,8 +1986,8 @@ dependencies = [
"quinn-proto",
"quinn-udp",
"rustc-hash",
- "rustls 0.23.38",
- "socket2 0.6.3",
+ "rustls",
+ "socket2",
"thiserror",
"tokio",
"tracing",
@@ -2156,17 +1996,18 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.11.14"
+version = "0.11.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
+checksum = "0e750cca55fe4f0439a15d0bb529da9651e79993e8e72c61a899a36d462befbe"
dependencies = [
"bytes",
- "getrandom 0.3.4",
+ "getrandom 0.4.3",
"lru-slab",
"rand",
+ "rand_pcg",
"ring",
"rustc-hash",
- "rustls 0.23.38",
+ "rustls",
"rustls-pki-types",
"slab",
"thiserror",
@@ -2184,7 +2025,7 @@ dependencies = [
"cfg_aliases",
"libc",
"once_cell",
- "socket2 0.6.3",
+ "socket2",
"tracing",
"windows-sys 0.60.2",
]
@@ -2205,23 +2046,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
-name = "rand"
-version = "0.9.4"
+name = "r-efi"
+version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
-dependencies = [
- "rand_chacha",
- "rand_core 0.9.5",
-]
+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]]
-name = "rand_chacha"
-version = "0.9.0"
+name = "rand"
+version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af"
dependencies = [
- "ppv-lite86",
- "rand_core 0.9.5",
+ "chacha20",
+ "getrandom 0.4.3",
+ "rand_core 0.10.1",
]
[[package]]
@@ -2235,11 +2073,17 @@ dependencies = [
[[package]]
name = "rand_core"
-version = "0.9.5"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
+checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
+
+[[package]]
+name = "rand_pcg"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"
dependencies = [
- "getrandom 0.3.4",
+ "rand_core 0.10.1",
]
[[package]]
@@ -2271,28 +2115,28 @@ version = "0.12.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
dependencies = [
- "base64",
+ "base64 0.22.1",
"bytes",
"futures-core",
- "http 1.4.0",
- "http-body 1.0.1",
+ "http",
+ "http-body",
"http-body-util",
- "hyper 1.9.0",
- "hyper-rustls 0.27.9",
+ "hyper",
+ "hyper-rustls",
"hyper-util",
"js-sys",
"log",
"percent-encoding",
"pin-project-lite",
"quinn",
- "rustls 0.23.38",
+ "rustls",
"rustls-pki-types",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper",
"tokio",
- "tokio-rustls 0.26.4",
+ "tokio-rustls",
"tower",
"tower-http",
"tower-service",
@@ -2305,13 +2149,12 @@ dependencies = [
[[package]]
name = "rfc6979"
-version = "0.3.1"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
dependencies = [
- "crypto-bigint 0.4.9",
- "hmac",
- "zeroize",
+ "hmac 0.12.1",
+ "subtle",
]
[[package]]
@@ -2345,27 +2188,15 @@ dependencies = [
[[package]]
name = "rustls"
-version = "0.21.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
-dependencies = [
- "log",
- "ring",
- "rustls-webpki 0.101.7",
- "sct",
-]
-
-[[package]]
-name = "rustls"
-version = "0.23.38"
+version = "0.23.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21"
+checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634"
dependencies = [
"aws-lc-rs",
"once_cell",
"ring",
"rustls-pki-types",
- "rustls-webpki 0.103.12",
+ "rustls-webpki",
"subtle",
"zeroize",
]
@@ -2394,19 +2225,9 @@ dependencies = [
[[package]]
name = "rustls-webpki"
-version = "0.101.7"
+version = "0.103.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
-dependencies = [
- "ring",
- "untrusted",
-]
-
-[[package]]
-name = "rustls-webpki"
-version = "0.103.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06"
+checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2"
dependencies = [
"aws-lc-rs",
"ring",
@@ -2444,21 +2265,11 @@ dependencies = [
"windows-sys 0.61.2",
]
-[[package]]
-name = "sct"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
-dependencies = [
- "ring",
- "untrusted",
-]
-
[[package]]
name = "sec1"
-version = "0.3.0"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
dependencies = [
"base16ct",
"der",
@@ -2474,7 +2285,7 @@ version = "3.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags",
"core-foundation",
"core-foundation-sys",
"libc",
@@ -2629,9 +2440,9 @@ dependencies = [
[[package]]
name = "signature"
-version = "1.6.4"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
dependencies = [
"digest 0.10.7",
"rand_core 0.6.4",
@@ -2649,16 +2460,6 @@ version = "1.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
-[[package]]
-name = "socket2"
-version = "0.5.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
-dependencies = [
- "libc",
- "windows-sys 0.52.0",
-]
-
[[package]]
name = "socket2"
version = "0.6.3"
@@ -2666,20 +2467,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
dependencies = [
"libc",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
name = "spin"
-version = "0.10.0"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591"
+checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3"
[[package]]
name = "spki"
-version = "0.6.0"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b"
+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
dependencies = [
"base64ct",
"der",
@@ -2691,12 +2492,6 @@ version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
-[[package]]
-name = "static_assertions"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
-
[[package]]
name = "strsim"
version = "0.11.1"
@@ -2769,17 +2564,6 @@ dependencies = [
"cfg-if",
]
-[[package]]
-name = "thrift"
-version = "0.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09"
-dependencies = [
- "byteorder",
- "integer-encoding",
- "ordered-float",
-]
-
[[package]]
name = "time"
version = "0.3.47"
@@ -2855,7 +2639,7 @@ dependencies = [
"mio",
"pin-project-lite",
"signal-hook-registry",
- "socket2 0.6.3",
+ "socket2",
"tokio-macros",
"windows-sys 0.61.2",
]
@@ -2871,23 +2655,13 @@ dependencies = [
"syn",
]
-[[package]]
-name = "tokio-rustls"
-version = "0.24.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
-dependencies = [
- "rustls 0.21.12",
- "tokio",
-]
-
[[package]]
name = "tokio-rustls"
version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
dependencies = [
- "rustls 0.23.38",
+ "rustls",
"tokio",
]
@@ -2925,11 +2699,11 @@ version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags",
"bytes",
"futures-util",
- "http 1.4.0",
- "http-body 1.0.1",
+ "http",
+ "http-body",
"iri-string",
"pin-project-lite",
"tower",
@@ -3018,13 +2792,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "twox-hash"
-version = "1.6.3"
+version = "2.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
-dependencies = [
- "cfg-if",
- "static_assertions",
-]
+checksum = "86a801b3cea342a06d468c8710662aa29e5e05e4f5c0d62f00bbb7f2ad7941c2"
[[package]]
name = "typenum"
@@ -3227,7 +2997,7 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys 0.52.0",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index cd4c197..4bb93ad 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,14 +14,15 @@ publish = false
version = "0.0.3"
[workspace.dependencies]
-arrow-array = "54.2.1"
-arrow-schema = "54.2.1"
-aws-config = "1.8.8"
-aws-sdk-s3 = "1.106.0"
+arrow-array = "60.0.0"
+arrow-schema = "60.0.0"
+aws-config = "1.12.0"
+# Keep the supported HTTPS client without the legacy Hyper 0.14 / Rustls 0.21 client.
+aws-sdk-s3 = { version = "1.152.0", default-features = false, features = ["default-https-client", "rt-tokio", "sigv4a", "http-1x"] }
clap = { version = "4.5.39", features = ["derive", "env"] }
dotenvy = "0.15.7"
hex = "0.4.3"
-parquet = { version = "54.2.1", default-features = false, features = ["arrow"] }
+parquet = { version = "60.0.0", default-features = false, features = ["arrow"] }
reqwest = { version = "0.12.15", default-features = false, features = ["json", "rustls-tls"] }
serde = { version = "1.0.219", features = ["derive"] }
serde_json = "1.0.140"
diff --git a/README.md b/README.md
index d465ae3..404a108 100644
--- a/README.md
+++ b/README.md
@@ -178,11 +178,18 @@ Examples in this repo often use `.memory/` because that is convenient for local
| Layer | Present | Tooling | Runs in CI |
|---|---|---|---|
-| unit | yes | `cargo test --workspace` | yes |
-| integration | no | `none` | no |
+| unit | yes | `cargo test --workspace --locked` | yes |
+| integration | yes | `scripts/test-runtime.py` runs both CLIs against local Convex/S3 fixtures | yes |
| e2e api | no | `none` | no |
| e2e web | no | `none` | no |
+Run `just verify` with Rust 1.95.0 (selected by `rust-toolchain.toml`),
+Python 3, and just. CI uses the same pinned Rust version and locked dependency
+graph for formatting, Clippy, tests, and executable fixture checks in one job.
+The fixtures cover snapshot/resume/delete, incremental Parquet staging, S3
+publishing, and failed manifest reads. They do not verify live Convex, AWS, or
+Databricks credentials, permissions, or deployments.
+
Remote automation:
```bash
diff --git a/crates/convex-export-s3/src/publish/mod.rs b/crates/convex-export-s3/src/publish/mod.rs
index af7faf4..58587a6 100644
--- a/crates/convex-export-s3/src/publish/mod.rs
+++ b/crates/convex-export-s3/src/publish/mod.rs
@@ -367,7 +367,13 @@ async fn load_manifest_if_present(
.into_bytes();
Ok(Some(serde_json::from_slice(&bytes)?))
},
- Err(err) if is_missing_key(&format!("{err:?}")) => Ok(None),
+ Err(err)
+ if err
+ .as_service_error()
+ .is_some_and(|err| err.is_no_such_key()) =>
+ {
+ Ok(None)
+ },
Err(err) => Err(AppError::S3(format!("{err:?}"))),
}
}
@@ -411,10 +417,6 @@ async fn delete_object_if_exists(client: &Client, bucket: &str, key: &str) -> Ap
Ok(())
}
-fn is_missing_key(message: &str) -> bool {
- message.contains("NoSuchKey")
-}
-
#[cfg(test)]
mod tests {
use std::{
diff --git a/docs/release-artifacts.md b/docs/release-artifacts.md
index 135fb1d..df3d545 100644
--- a/docs/release-artifacts.md
+++ b/docs/release-artifacts.md
@@ -22,6 +22,34 @@ verify.
`convex-inspect` is intentionally excluded from release artifacts for now. It is
a repo-local source-inspection binary, not the published operator entrypoint.
+## Maintenance verification
+
+Local checks, Depot CI, and release builds use Rust 1.95.0 and `Cargo.lock`.
+Keep `rust-toolchain.toml` and the Rust action versions in all three Depot
+workflows aligned when changing the toolchain.
+
+The S3 client uses the supported default HTTPS transport, without the legacy
+Hyper 0.14 / Rustls 0.21 feature. SSO, process credentials, and SigV4a remain
+enabled. Arrow and Parquet use the same major version.
+
+After the maintenance PR is merged, the existing `release` workflow updates the
+release-please PR. The `release-rc` workflow publishes the merged main commit as
+a prerelease; a stable release follows the release-please PR merge. Verify the
+actual release target SHA, download its archive and `SHA256SUMS`, check the
+checksum, and run the extracted CLI's `--version` before calling it shipped.
+
+To test a released CLI against the same local fixtures and check raw Parquet
+compatibility in both directions:
+
+```bash
+cargo build --workspace --locked
+python3 scripts/test-runtime.py --legacy-sync /path/to/extracted/convex-sync
+```
+
+This checks executable behavior with synthetic data and local HTTP endpoints,
+not live service access or TLS negotiation. Databricks assets are deployed by
+the existing operator scripts, not by the Rust CLI release workflow.
+
## Dev Install Surface
This repo also ships a checkout-linked dev command:
diff --git a/justfile b/justfile
index 2e114ca..8ae4bc0 100644
--- a/justfile
+++ b/justfile
@@ -7,13 +7,13 @@ install-hooks:
chmod +x .githooks/pre-commit
build-inspect:
- cargo build -p convex-inspect
+ cargo build --locked -p convex-inspect
build-cli:
- cargo build -p convex-sync
+ cargo build --locked -p convex-sync
build-cli-release:
- cargo build -p convex-sync --release --locked
+ cargo build --locked -p convex-sync --release
fmt:
cargo fmt --all
@@ -22,15 +22,19 @@ fmt-check:
cargo fmt --all --check
check:
- cargo check --workspace
+ cargo check --workspace --locked
test:
- cargo test --workspace
+ cargo test --workspace --locked
clippy:
- cargo clippy --workspace --all-targets --all-features -- -D warnings
+ cargo clippy --workspace --locked --all-targets --all-features -- -D warnings
-verify: fmt-check clippy test
+runtime-test:
+ cargo build --workspace --locked
+ python3 scripts/test-runtime.py
+
+verify: fmt-check clippy test runtime-test
# CI
depot-ci *args:
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
index 33893d4..8770b1d 100644
--- a/rust-toolchain.toml
+++ b/rust-toolchain.toml
@@ -1,4 +1,4 @@
[toolchain]
-channel = "stable"
+channel = "1.95.0"
profile = "minimal"
components = ["clippy", "rustfmt"]
diff --git a/scripts/convex-sync-dev b/scripts/convex-sync-dev
index db67dac..57d4f34 100755
--- a/scripts/convex-sync-dev
+++ b/scripts/convex-sync-dev
@@ -38,7 +38,7 @@ fi
(
cd "${repo_root}"
- CONVEX_SYNC_VERSION="${version_label}" cargo build -p convex-sync --quiet
+ CONVEX_SYNC_VERSION="${version_label}" cargo build --locked -p convex-sync --quiet
)
reported_version="$("${binary_path}" --version 2>/dev/null | awk '{print $2}')"
diff --git a/scripts/test-runtime.py b/scripts/test-runtime.py
new file mode 100644
index 0000000..faaf05a
--- /dev/null
+++ b/scripts/test-runtime.py
@@ -0,0 +1,179 @@
+#!/usr/bin/env python3
+"""Exercise built CLIs against local Convex/S3 fixtures, without credentials.
+
+Usage: python3 scripts/test-runtime.py [--sync PATH] [--inspect PATH]
+ [--legacy-sync PATH]
+The optional released CLI checks Parquet compatibility in both directions.
+"""
+
+import argparse
+import json
+import os
+from pathlib import Path
+import subprocess
+import tempfile
+import threading
+from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
+from urllib.parse import urlsplit
+
+
+class Fixture(BaseHTTPRequestHandler):
+ objects = {}
+ writes = []
+ deny_manifest = False
+ delete_user = False
+
+ def log_message(self, *_):
+ pass
+
+ def reply(self, status, body, content_type="application/json"):
+ self.send_response(status)
+ self.send_header("Content-Type", content_type)
+ self.send_header("Content-Length", str(len(body)))
+ self.end_headers()
+ self.wfile.write(body)
+
+ def do_GET(self):
+ path = urlsplit(self.path).path
+ if path.startswith("/api/"):
+ if self.headers.get("Authorization") != "Convex test-key":
+ self.reply(401, b"{}")
+ return
+ user = {"_component": "", "_table": "users", "_id": "users:1",
+ "_ts": 42, "name": "Ada", "active": True, "score": 1.5}
+ if path == "/api/json_schemas":
+ body = {"users": {"type": "object"}}
+ elif path == "/api/list_snapshot":
+ body = {"values": [user], "snapshot": 42,
+ "cursor": None, "hasMore": False}
+ elif path == "/api/document_deltas":
+ body = {"values": [dict(user, _ts=44, _deleted=True)]
+ if self.delete_user else [],
+ "cursor": 44 if self.delete_user else 43, "hasMore": False}
+ else:
+ self.reply(404, b"{}")
+ return
+ self.reply(200, json.dumps(body).encode())
+ elif self.deny_manifest:
+ # The message mentions NoSuchKey, but the service error is AccessDenied.
+ self.reply(403, b"AccessDenied"
+ b"NoSuchKey is not the error code",
+ "application/xml")
+ elif path in self.objects:
+ self.reply(200, self.objects[path])
+ else:
+ self.reply(404, b"NoSuchKey", "application/xml")
+
+ def do_PUT(self):
+ path = urlsplit(self.path).path
+ self.objects[path] = self.rfile.read(int(self.headers["Content-Length"]))
+ self.writes.append(("PUT", path))
+ self.reply(200, b"")
+
+ def do_DELETE(self):
+ path = urlsplit(self.path).path
+ self.objects.pop(path, None)
+ self.writes.append(("DELETE", path))
+ self.reply(204, b"")
+
+
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument("--sync", default="target/debug/convex-sync")
+ parser.add_argument("--inspect", default="target/debug/convex-inspect")
+ parser.add_argument("--legacy-sync")
+ args = parser.parse_args()
+ sync = str(Path(args.sync).resolve())
+ inspect = str(Path(args.inspect).resolve())
+ legacy = str(Path(args.legacy_sync).resolve()) if args.legacy_sync else None
+
+ server = ThreadingHTTPServer(("127.0.0.1", 0), Fixture)
+ thread = threading.Thread(target=server.serve_forever, daemon=True)
+ thread.start()
+ try:
+ with tempfile.TemporaryDirectory(prefix="convex-runtime-") as temp:
+ root = Path(temp)
+ endpoint = f"http://127.0.0.1:{server.server_port}"
+ # Do not inherit AWS profiles, endpoint overrides, proxy or Convex secrets.
+ env = {"PATH": os.environ["PATH"], "HOME": temp, "RUST_LOG": "off",
+ "CONVEX_DEPLOYMENT_URL": endpoint, "CONVEX_DEPLOY_KEY": "test-key",
+ "AWS_ACCESS_KEY_ID": "test", "AWS_SECRET_ACCESS_KEY": "test",
+ "AWS_REGION": "us-east-1", "AWS_ENDPOINT_URL": endpoint,
+ "AWS_EC2_METADATA_DISABLED": "true", "AWS_MAX_ATTEMPTS": "1",
+ "AWS_CONFIG_FILE": str(root / "no-config"),
+ "AWS_SHARED_CREDENTIALS_FILE": str(root / "no-credentials"),
+ "AWS_REQUEST_CHECKSUM_CALCULATION": "WHEN_REQUIRED"}
+
+ def run(binary, *argv, success=True):
+ result = subprocess.run([binary, *map(str, argv)], cwd=temp, env=env,
+ text=True, capture_output=True, timeout=45)
+ if success:
+ if result.returncode:
+ raise AssertionError(f"{argv}: {result.stderr}")
+ return json.loads(result.stdout)
+ if result.returncode == 0:
+ raise AssertionError(f"{argv}: unexpectedly succeeded")
+ return result
+
+ assert "users" in run(inspect, "schemas")
+ assert len(run(inspect, "snapshot", "--raw")["values"]) == 1
+ assert run(inspect, "deltas", "--cursor", "42", "--raw")["values"] == []
+
+ raw, staging = root / "raw", root / "staging"
+ checkpoint = root / "checkpoint.json"
+ first = run(sync, "sync-once", "--output", raw, "--checkpoint-path", checkpoint)
+ assert first["events_written"] == 1
+ resumed = run(sync, "sync-once", "--output", raw, "--checkpoint-path", checkpoint)
+ assert resumed["snapshot_pages_fetched"] == 0
+ assert resumed["events_written"] == 0
+
+ def materialize(binary, source, output):
+ return run(binary, "materialize-staging", "--raw-change-log", source,
+ "--output", output, "--incremental")
+
+ assert materialize(sync, raw, staging)["rows_materialized"] == 1
+ assert materialize(sync, raw, staging)["files_read"] == 0
+ parquet = staging / "_root/users.parquet"
+ assert parquet.read_bytes().startswith(b"PAR1")
+
+ if legacy:
+ legacy_raw = root / "legacy-raw"
+ run(legacy, "sync-once", "--output", legacy_raw,
+ "--checkpoint-path", root / "legacy-checkpoint.json")
+ assert materialize(sync, legacy_raw, root / "new-reader")["rows_materialized"] == 1
+ assert materialize(legacy, raw, root / "old-reader")["rows_materialized"] == 1
+ print("PASS: released/new Parquet readers accept each other's raw logs")
+
+ def publish(success=True):
+ return run(sync, "publish-s3", "--staging-dir", staging,
+ "--bucket", "test-bucket", "--prefix", "exports", success=success)
+
+ assert publish()["tables_uploaded"] == 1
+ current = "/test-bucket/exports/staging/current/_root/users.parquet"
+ assert Fixture.objects[current] == parquet.read_bytes()
+ assert publish()["tables_unchanged"] == 1
+
+ Fixture.deny_manifest = True
+ before = len(Fixture.writes)
+ denied = publish(success=False)
+ assert "AccessDenied" in denied.stderr
+ assert len(Fixture.writes) == before, "manifest read failure must not write objects"
+ Fixture.deny_manifest = False
+
+ Fixture.delete_user = True
+ assert run(sync, "sync-once", "--output", raw,
+ "--checkpoint-path", checkpoint)["events_written"] == 1
+ assert materialize(sync, raw, staging)["rows_materialized"] == 0
+ assert not parquet.exists()
+ assert publish()["tables_deleted"] == 1
+ assert current not in Fixture.objects
+ print("PASS: inspect, snapshot/resume/delete, Parquet, incremental staging, "
+ "S3 upload/no-op/delete, and fail-closed manifest errors (local fixtures)")
+ finally:
+ server.shutdown()
+ server.server_close()
+ thread.join()
+
+
+if __name__ == "__main__":
+ main()