diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 962c6fc..4eb76a4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -138,6 +138,9 @@ jobs: - uses: rustsec/audit-check@v2 with: token: ${{ secrets.GITHUB_TOKEN }} + # RUSTSEC-2026-0387: crypto-bigint 0.5 comes through p256 and p384 in jsonwebtoken, + # whose latest release still requires them. Tokens are HS256 only, so that code never runs. + ignore: RUSTSEC-2026-0387 compose: name: Quick start diff --git a/Cargo.lock b/Cargo.lock index e58fda6..6db7047 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,15 +38,6 @@ version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" -dependencies = [ - "derive_arbitrary", -] - [[package]] name = "arc-swap" version = "1.9.2" @@ -202,9 +193,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b25655df2c3cdd83c5e5b293b88acd880332b2ddadd7c30ac43144fdc0033da9" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" [[package]] name = "base64ct" @@ -503,9 +494,9 @@ dependencies = [ [[package]] name = "ctutils" -version = "0.4.2" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +checksum = "a2376ffd6f96d8a9db59875b4b6b0237d6900b5baf64279714e05493ce64828a" dependencies = [ "cmov", ] @@ -562,17 +553,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "derive_arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "digest" version = "0.10.7" @@ -780,7 +760,7 @@ dependencies = [ "arc-swap", "argon2", "axum", - "base64 0.23.0", + "base64 0.23.1", "chrono", "dashmap", "dotenvy", @@ -1711,6 +1691,18 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "nix" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" +dependencies = [ + "bitflags", + "cfg-if", + "cfg_aliases", + "libc", +] + [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -2972,7 +2964,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", @@ -3266,6 +3258,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "typed-path" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce898823d8cd0f028662d2f349694b1af0a5cc9be83f1d213a00d3147445e1e" + [[package]] name = "typenum" version = "1.20.1" @@ -3337,9 +3335,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utoipa" -version = "5.5.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bde15df68e80b16c7d16b9616e80770ad158988daa56a27dccd1e55558b0160" +checksum = "8765fe27aeff71012a3f90fa474cf1df863a7d0dd81ed25de4e63fff2544994f" dependencies = [ "indexmap", "serde", @@ -3349,28 +3347,27 @@ dependencies = [ [[package]] name = "utoipa-gen" -version = "5.5.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba0b99ee52df3028635d93840c797102da61f8a7bb3cf751032455895b52ef8" +checksum = "d935f1c83fdf8b88f09bbe050d0cea78ea4afee6d7b0317403228c1200b2c8ab" dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.119", + "syn 3.0.3", "uuid", ] [[package]] name = "utoipa-swagger-ui" -version = "9.0.2" +version = "10.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d047458f1b5b65237c2f6dc6db136945667f40a7668627b3490b9513a3d43a55" +checksum = "4f1fd2f9615838885c6ff4115fde8a2b58825dc7b4617f78d29c167377a15c92" dependencies = [ "axum", - "base64 0.22.1", + "base64 0.23.1", "mime_guess", "regex", - "rust-embed", "serde", "serde_json", "url", @@ -3919,15 +3916,19 @@ dependencies = [ [[package]] name = "zip" -version = "3.0.0" +version = "9.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12598812502ed0105f607f941c386f43d441e00148fce9dec3ca5ffb0bde9308" +checksum = "e408c6cc4699dd017d53dc080cd51c2cea2b5354af57a1479bd265ed42911487" dependencies = [ - "arbitrary", "crc32fast", "flate2", + "getrandom 0.4.3", "indexmap", + "libc", "memchr", + "nix", + "typed-path", + "windows-sys 0.61.2", "zopfli", ] diff --git a/Cargo.toml b/Cargo.toml index 9ae0d63..52d457f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ exclude = ["crates/web"] [workspace.package] version = "0.3.0" edition = "2024" -rust-version = "1.85" +rust-version = "1.88" license = "MIT" repository = "https://github.com/Ssebv/flagforge" authors = ["FlagForge contributors"] @@ -70,8 +70,8 @@ base64 = "0.23" rand = "0.10" # Docs -utoipa = { version = "5.5", features = ["axum_extras", "uuid", "chrono"] } -utoipa-swagger-ui = { version = "9.0", features = ["axum"] } +utoipa = { version = "6.0", features = ["axum_extras", "uuid", "chrono"] } +utoipa-swagger-ui = { version = "10.0", features = ["axum"] } # Misc rust-embed = "8.12" diff --git a/README.md b/README.md index 884b90c..c786517 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ from the same codebase. [![CI](https://github.com/Ssebv/flagforge/actions/workflows/ci.yml/badge.svg)](https://github.com/Ssebv/flagforge/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) -![Rust 1.85+](https://img.shields.io/badge/rust-1.85%2B-orange.svg) +![Rust 1.88+](https://img.shields.io/badge/rust-1.88%2B-orange.svg) ![No JavaScript build](https://img.shields.io/badge/frontend-Leptos%20%2F%20WASM-orange.svg) **Run it in two commands** — `docker compose up --build`, then diff --git a/crates/sdk/tests/agreement.rs b/crates/sdk/tests/agreement.rs index 66d734b..4cd0ad3 100644 --- a/crates/sdk/tests/agreement.rs +++ b/crates/sdk/tests/agreement.rs @@ -197,7 +197,7 @@ impl Fixture { fn context(index: u32) -> EvaluationContext { EvaluationContext::new(format!("user-{index}")) - .with("plan", if index % 10 == 0 { "enterprise" } else { "free" }) + .with("plan", if index.is_multiple_of(10) { "enterprise" } else { "free" }) } #[sqlx::test(migrations = "../../migrations")] @@ -357,7 +357,7 @@ async fn recorded_counters_agree_with_local_assignment(pool: PgPool) { *exposures.entry(variant.clone()).or_default() += 1; // Every third user converts. - if i % 3 == 0 { + if i.is_multiple_of(3) { assert_eq!(client.track("order.completed", &context), 1); *conversions.entry(variant).or_default() += 1; }