From 4ccbbb025adc754dbc4223f4288c33b9be8fa307 Mon Sep 17 00:00:00 2001 From: Viv Date: Sun, 27 Sep 2026 01:52:00 +0200 Subject: [PATCH 1/7] update flake --- flake.lock | 103 +++++++++++++---------------------------------------- flake.nix | 63 ++++++++++++++++++-------------- 2 files changed, 61 insertions(+), 105 deletions(-) diff --git a/flake.lock b/flake.lock index 5ccd637..5ac8637 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1757831996, - "narHash": "sha256-vLvo3VmGXA+mvra90asjpZTdjElDOZB62xuQP31pO2s=", + "lastModified": 1790420830, + "narHash": "sha256-z3OT9zp96drkDc2qZlC9WRXMpKaysdMDJiwWpLVeiOU=", "owner": "nix-community", "repo": "fenix", - "rev": "7b679aa06678433ff15df49c9fc50671fc4fc4cc", + "rev": "5f7e7d793cb2553410f857554de86f277ebe2f71", "type": "github" }, "original": { @@ -21,52 +21,13 @@ "type": "github" } }, - "flake-parts": { - "inputs": { - "nixpkgs-lib": [ - "nur", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1733312601, - "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "nixpkgs": { "locked": { - "lastModified": 1757745802, - "narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=", + "lastModified": 1790323409, + "narHash": "sha256-VVTPf+Hyd5ebpjBMHmrLMSBIeW6ls48Bqtosj7CNKLA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c23193b943c6c689d70ee98ce3128239ed9e32d1", + "rev": "e94cb152ed51bd6e24eb4a41f1460252beb52cd2", "type": "github" }, "original": { @@ -76,43 +37,21 @@ "type": "github" } }, - "nur": { - "inputs": { - "flake-parts": "flake-parts", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1757863705, - "narHash": "sha256-XV74BO+MPnrRb/btERHmwBZuXCLsvIe9Gxw8ocgBLCE=", - "owner": "nix-community", - "repo": "NUR", - "rev": "8de27b6789546d3278ebfab3b74dbf8951fdea1e", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "NUR", - "type": "github" - } - }, "root": { "inputs": { "fenix": "fenix", - "flake-utils": "flake-utils", "nixpkgs": "nixpkgs", - "nur": "nur" + "serpentine": "serpentine" } }, "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1757362324, - "narHash": "sha256-/PAhxheUq4WBrW5i/JHzcCqK5fGWwLKdH6/Lu1tyS18=", + "lastModified": 1790305964, + "narHash": "sha256-2qzlUJB59Rq0XIjVGf42XqqaTwXoRLIFX4S7sW1t2iw=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "9edc9cbe5d8e832b5864e09854fa94861697d2fd", + "rev": "1ad44dc58e65304b594063e70c144ecb58643671", "type": "github" }, "original": { @@ -122,18 +61,24 @@ "type": "github" } }, - "systems": { + "serpentine": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "lastModified": 1790461918, + "narHash": "sha256-vy506LetXQKb5krmK62+br1itoS7TgJrjnrSVQfJwhU=", + "owner": "Serpent-Tools", + "repo": "serpentine", + "rev": "94a7424fb6e8e14d5ad198b2847ea5b0b52ff28b", "type": "github" }, "original": { - "owner": "nix-systems", - "repo": "default", + "owner": "Serpent-Tools", + "ref": "v1.0.1", + "repo": "serpentine", "type": "github" } } diff --git a/flake.nix b/flake.nix index da29b02..d03ff6f 100644 --- a/flake.nix +++ b/flake.nix @@ -7,33 +7,46 @@ url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; - flake-utils.url = "github:numtide/flake-utils"; - nur = { - url = "github:nix-community/NUR"; + serpentine = { + url = "github:Serpent-Tools/serpentine/v1.0.1"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { - self, nixpkgs, fenix, - flake-utils, - nur, + serpentine, + ... }: - flake-utils.lib.eachDefaultSystem ( - system: - let - pkgs = import nixpkgs { - inherit system; - overlays = [ nur.overlays.default ]; - }; - in - { - devShells.default = pkgs.mkShell { - packages = with pkgs; [ - (fenix.packages.${system}.latest.withComponents [ + let + systems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + forAllSystems = + function: + nixpkgs.lib.genAttrs systems ( + system: + function ( + import nixpkgs { + inherit system; + overlays = [ + fenix.overlays.default + serpentine.overlays.default + ]; + } + ) + ); + in + { + devShells = forAllSystems (pkgs: { + default = pkgs.mkShell { + packages = [ + (pkgs.fenix.latest.withComponents [ "cargo" "clippy" "rustc" @@ -43,15 +56,13 @@ "rust-src" ]) - pkgs.nur.repos.dagger.dagger - just - bacon - cargo-edit + pkgs.serpentine + pkgs.just - wasm-bindgen-cli_0_2_100 - binaryen + pkgs.wasm-bindgen-cli_0_2_100 + pkgs.binaryen ]; }; - } - ); + }); + }; } From 51eb3c526db97d8a96fefd15f225165993975552 Mon Sep 17 00:00:00 2001 From: Viv Date: Sun, 27 Sep 2026 01:53:22 +0200 Subject: [PATCH 2/7] delete dagger --- CONTRIBUTING.md | 18 - Cargo.lock | 2355 +++++++++------------------- Cargo.toml | 1 - dagger_pipeline/Cargo.toml | 30 - dagger_pipeline/src/base_images.rs | 178 --- dagger_pipeline/src/fix.rs | 45 - dagger_pipeline/src/main.rs | 180 --- dagger_pipeline/src/report.rs | 193 --- dagger_pipeline/src/targets.rs | 990 ------------ justfile | 20 - main.snek | 1 + 11 files changed, 707 insertions(+), 3304 deletions(-) delete mode 100644 dagger_pipeline/Cargo.toml delete mode 100644 dagger_pipeline/src/base_images.rs delete mode 100644 dagger_pipeline/src/fix.rs delete mode 100644 dagger_pipeline/src/main.rs delete mode 100644 dagger_pipeline/src/report.rs delete mode 100644 dagger_pipeline/src/targets.rs create mode 100644 main.snek diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf4b4d3..858446e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,30 +14,12 @@ Please join the [Discord Server](https://discord.gg/Rptzjf3Nnm) where we can ans ## Development Setup -Natrix uses [Dagger](https://dagger.io/) for containerized CI/CD pipeline execution and [`just`](https://github.com/casey/just) for task automation. Please follow the [Dagger installation guide](https://docs.dagger.io/install) to set up your development environment. We also have a [Nix](https://nixos.org/) flake to setup a working dev environment for natrix. -~~**Why Dagger?** We use Dagger because Natrix has extensive E2E tests and benchmarks that would otherwise require installing around 10 different tools (Chrome, wasm-bindgen, wasm-opt, various Rust tools, etc.). With Dagger, all dependencies are containerized, ensuring consistent builds across environments.~~ - -> [!NOTE] -> We have since found out dagger doesnt fit our workflow too well, hence we are developing [Serpentine](https://github.com/Serpent-Tools/serpentine) to replace it ## Development Workflow -### Running the CI Pipeline - -The primary way to run tests is through the justfile targets: - -- **`just test [jobs]`** - Run the complete test suite -- **`just test_tui [jobs]`** - Run the complete test suite, but report results to the TUI instead of the allure report. -- **`just book`** - Compile and open the mdbook -- **`just fix`** - Runs automatic fixing of typos, formatting, and outdated snapshot tests. - -> [!IMPORTANT] -> * The snapshot tests will assume the new results are correct, always verify the new output is correct in the error logs first. -> * `typos` might assume the wrong correction, always inspect the suggestions in its errors before running `just fix` - ### Quick Development Iteration diff --git a/Cargo.lock b/Cargo.lock index 2f65928..3f7fe00 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,21 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - [[package]] name = "ahash" version = "0.8.12" @@ -24,7 +9,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -32,9 +17,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -47,9 +32,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -62,50 +47,53 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" +dependencies = [ + "rustversion", +] [[package]] name = "ascii" @@ -115,13 +103,13 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.6", ] [[package]] @@ -132,36 +120,21 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "backtrace" -version = "0.3.76" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-link", -] +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64" -version = "0.22.1" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" [[package]] name = "base64-simd" @@ -210,21 +183,15 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.9.4" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "bitvec" -version = "1.0.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" dependencies = [ "funty", "radium", @@ -243,12 +210,12 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "6bb31b46c14244e20ee9984b11bf5c992b91fb6939fea616e3512c8baecdbe5f" dependencies = [ "memchr", - "serde", + "serde_core", ] [[package]] @@ -262,26 +229,27 @@ dependencies = [ [[package]] name = "bytes" -version = "1.10.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "camino" -version = "1.2.1" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +checksum = "bbbad30e4b4c14a39e3cc8aed085a12a327257c316619c93581e017bc52be591" dependencies = [ "serde_core", ] [[package]] name = "cargo-platform" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122ec45a44b270afd1402f351b782c676b173e3c3fb28d86ff7ebfb4d86a4ee4" +checksum = "dd0061da739915fae12ea00e16397555ed4371a6bb285431aab930f61b0aa4ba" dependencies = [ "serde", + "serde_core", ] [[package]] @@ -294,7 +262,7 @@ dependencies = [ "serde", "serde-untagged", "serde-value", - "thiserror 2.0.17", + "thiserror 2.0.21", "toml", "unicode-xid", "url", @@ -312,9 +280,15 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.21", ] +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + [[package]] name = "castaway" version = "0.2.4" @@ -326,9 +300,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.39" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" +checksum = "f360145194ee8e21db5ee7f3fcd4fe52210864c75c985dae33218202c8bbe040" dependencies = [ "find-msvc-tools", "shlex", @@ -336,15 +310,26 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[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.1", + "rand_core 0.10.1", +] [[package]] name = "chunked_transfer" @@ -354,9 +339,9 @@ checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" [[package]] name = "clap" -version = "4.5.48" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -364,55 +349,45 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.48" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", ] [[package]] name = "clap_derive" -version = "4.5.47" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.6", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "colorchoice" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "combine" -version = "4.6.7" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "compact_str" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" +checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab" dependencies = [ "castaway", "cfg-if", @@ -424,34 +399,21 @@ dependencies = [ [[package]] name = "console" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "windows-sys 0.59.0", -] - -[[package]] -name = "console" -version = "0.16.1" +version = "0.16.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" +checksum = "e96a4956774c13c126a8b5af4daa79384f4d826534c95a02d76afb39e2ab64e3" dependencies = [ "encode_unicode", "libc", - "once_cell", "unicode-width", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] name = "console_log" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8aed40e4edbf4d3b4431ab260b63fdc40f5780a4766824329ea0f1eefe3c0f" +checksum = "86919cef3e37b9356ccf54d4421208c17ecfda01beae61393e7ffd72916c0ef1" dependencies = [ "log", "wasm-bindgen", @@ -466,23 +428,9 @@ checksum = "0d8a42181e0652c2997ae4d217f25b63c5337a52fd2279736e97b832fa0a3cff" [[package]] name = "const-str" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21077772762a1002bb421c3af42ac1725fa56066bfc53d9a55bb79905df2aaf3" -dependencies = [ - "const-str-proc-macro", -] - -[[package]] -name = "const-str-proc-macro" -version = "0.3.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1e0fdd2e5d3041e530e1b21158aeeef8b5d0e306bc5c1e3d6cf0930d10e25a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "18f12cc9948ed9604230cdddc7c86e270f9401ccbe3c2e98a4378c5e7632212f" [[package]] name = "const_base" @@ -495,11 +443,12 @@ dependencies = [ [[package]] name = "const_format" -version = "0.2.34" +version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" dependencies = [ "const_format_proc_macros", + "konst", ] [[package]] @@ -515,9 +464,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e262cdaac42494e3ae34c43969f9cdeb7da178bdb4b66fa6a1ea2edb4c8ae652" +checksum = "9603f79528ece8163c496f8932121cb36cfe46259e9c907bb3d8205139d7caa3" dependencies = [ "typewit", ] @@ -531,22 +480,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - [[package]] name = "cow-utils" version = "0.1.3" @@ -563,19 +496,19 @@ dependencies = [ ] [[package]] -name = "crc32fast" -version = "1.5.0" +name = "cpufeatures" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ - "cfg-if", + "libc", ] [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -583,24 +516,24 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -608,121 +541,41 @@ dependencies = [ [[package]] name = "cssparser" -version = "0.33.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be934d936a0fbed5bcdc01042b770de1398bf79d0e192f49fa7faea0e99281e" +checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98" dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf 0.11.3", + "phf 0.13.1", "smallvec", ] [[package]] name = "cssparser-color" -version = "0.1.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556c099a61d85989d7af52b692e35a8d68a57e7df8c6d07563dc0778b3960c9f" +checksum = "bbaa233e1dcd9c13a5d3e3a8a2c0f5a727bac380398345dbcb31db4597edc86b" dependencies = [ "cssparser", ] [[package]] name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.106", -] - -[[package]] -name = "dagger-sdk" -version = "0.18.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31704b26bb199e88d7e01282fa33bcd2ea12e64db8ff8d9f66aacfdf09ea43bf" -dependencies = [ - "async-trait", - "base64 0.21.7", - "derive_builder", - "dirs", - "eyre", - "flate2", - "futures", - "graphql_client", - "hex", - "hex-literal", - "platform-info", - "reqwest 0.11.27", - "serde", - "serde_graphql_input", - "serde_json", - "sha2", - "tar", - "tempfile", - "thiserror 1.0.69", - "tokio", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "dagger_pipeline" -version = "0.1.0" -dependencies = [ - "clap", - "dagger-sdk", - "eyre", - "futures", - "itertools 0.14.0", - "serde", - "serde_json", - "tokio", - "uuid", -] - -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "d045de693cb712d0b22c6a64be5b953f67b3ce00ab5ad3dd5d8b441886ab8e1a" dependencies = [ - "darling_core", "quote", - "syn 1.0.109", + "syn 3.0.6", ] [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" [[package]] name = "debugid" @@ -734,37 +587,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "derive_builder" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder_macro" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" -dependencies = [ - "derive_builder_core", - "syn 1.0.109", -] - [[package]] name = "digest" version = "0.10.7" @@ -775,36 +597,15 @@ dependencies = [ "crypto-common", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.6", ] [[package]] @@ -815,9 +616,9 @@ checksum = "d742b56656e8b14d63e7ea9806597b1849ae25412584c8adf78c0f67bd985e66" [[package]] name = "dtoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" [[package]] name = "dtoa-short" @@ -830,9 +631,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "encode_unicode" @@ -840,15 +641,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -857,9 +649,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" dependencies = [ "serde", "serde_core", @@ -873,17 +665,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.1", -] - -[[package]] -name = "eyre" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", + "windows-sys 0.61.2", ] [[package]] @@ -894,27 +676,15 @@ checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "filetime" -version = "0.2.26" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.60.2", -] +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "find-msvc-tools" -version = "0.1.2" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" [[package]] name = "fixedbitset" @@ -922,16 +692,6 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" -[[package]] -name = "flate2" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - [[package]] name = "fnv" version = "1.0.7" @@ -968,92 +728,36 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", - "futures-sink", ] [[package]] name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ - "futures-channel", "futures-core", - "futures-io", - "futures-macro", - "futures-sink", "futures-task", - "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -1069,28 +773,40 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", - "wasi 0.14.7+wasi-0.2.4", + "r-efi 6.0.0", + "rand_core 0.10.1", "wasm-bindgen", ] @@ -1106,9 +822,9 @@ dependencies = [ [[package]] name = "globset" -version = "0.4.16" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" +checksum = "07c34a9410465b45bd9787443bc7370f37735bad04b0f0cd57ff1a3186c98988" dependencies = [ "aho-corasick", "bstr", @@ -1117,84 +833,6 @@ dependencies = [ "regex-syntax", ] -[[package]] -name = "graphql-introspection-query" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2a4732cf5140bd6c082434494f785a19cfb566ab07d1382c3671f5812fed6d" -dependencies = [ - "serde", -] - -[[package]] -name = "graphql-parser" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a818c0d883d7c0801df27be910917750932be279c7bc82dc541b8769425f409" -dependencies = [ - "combine", - "thiserror 1.0.69", -] - -[[package]] -name = "graphql_client" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cdf7b487d864c2939b23902291a5041bc4a84418268f25fda1c8d4e15ad8fa" -dependencies = [ - "graphql_query_derive", - "reqwest 0.11.27", - "serde", - "serde_json", -] - -[[package]] -name = "graphql_client_codegen" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40f793251171991c4eb75bd84bc640afa8b68ff6907bc89d3b712a22f700506" -dependencies = [ - "graphql-introspection-query", - "graphql-parser", - "heck 0.4.1", - "lazy_static", - "proc-macro2", - "quote", - "serde", - "serde_json", - "syn 1.0.109", -] - -[[package]] -name = "graphql_query_derive" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00bda454f3d313f909298f626115092d348bc231025699f557b27e248475f48c" -dependencies = [ - "graphql_client_codegen", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "h2" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hashbrown" version = "0.15.5" @@ -1207,15 +845,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" - -[[package]] -name = "heck" -version = "0.4.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heck" @@ -1223,77 +855,36 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" -version = "1.3.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", - "fnv", "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" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", - "http 1.3.1", + "http", ] [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "pin-project-lite", ] @@ -1311,44 +902,19 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[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", - "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.7.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "httparse", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", "want", @@ -1356,54 +922,39 @@ dependencies = [ [[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", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" +version = "0.27.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +checksum = "dfa8e654703247911e29c23fbeaa261834bd9bb74efba2f9acddc37bfb127f53" dependencies = [ - "http 1.3.1", - "hyper 1.7.0", + "http", + "hyper", "hyper-util", - "rustls 0.23.32", - "rustls-pki-types", + "rustls", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower-service", - "webpki-roots 1.0.2", + "webpki-roots", ] [[package]] name = "hyper-util" -version = "0.1.17" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff" dependencies = [ - "base64 0.22.1", + "base64 0.23.1", "bytes", "futures-channel", - "futures-core", "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "hyper 1.7.0", + "http", + "http-body", + "httparse", + "hyper", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2", "tokio", "tower-service", "tracing", @@ -1411,12 +962,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -1424,24 +976,44 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ "displaydoc", "litemap", + "serde", "tinystr", "writeable", "zerovec", ] +[[package]] +name = "icu_locale_fallback" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251af8e57c9400e3eb58242fe5b8b1152b2a64fdf4cf632f923c38ccee6f2fa9" +dependencies = [ + "icu_locale_core", + "icu_locale_fallback_data", + "icu_provider", + "potential_utf", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locale_fallback_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "decf2a22ec8fa68f1a0c1129a3f8583f8f8bc24e8b9ccbe98ead99f62a4dc3a8" + [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1452,42 +1024,41 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", + "serde", "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1496,10 +1067,26 @@ dependencies = [ ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "icu_segmenter" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d07aafccd67af15d02512a6adf5896fbc5ed00f2e99b471d2efa14016db3db" +dependencies = [ + "icu_collections", + "icu_locale_fallback", + "icu_provider", + "icu_segmenter_data", + "potential_utf", + "smallvec", + "utf8_iter", + "zerovec", +] + +[[package]] +name = "icu_segmenter_data" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "ae293c039020f9ec10710af98d29ce6aa2051486638b49c9a6409f3b4a9e98ad" [[package]] name = "idna" @@ -1514,9 +1101,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -1530,9 +1117,9 @@ checksum = "cd62e6b5e86ea8eeeb8db1de02880a6abc01a397b2ebb64b5d74ac255318f5cb" [[package]] name = "ignore" -version = "0.4.23" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" +checksum = "00b69833ed729dc5aa7d19541d96d6cf8e9137194207a04916d658e43168402f" dependencies = [ "crossbeam-deque", "globset", @@ -1544,31 +1131,25 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "indenter" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" - [[package]] name = "indexmap" -version = "2.11.4" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.17.1", "serde", "serde_core", ] [[package]] name = "indicatif" -version = "0.18.0" +version = "0.18.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" +checksum = "9433806cd6b4ec1aba79c021c7e4c58fb4c3b9977c085062e611ac929998fb0c" dependencies = [ - "console 0.16.1", + "console", "portable-atomic", "unicode-width", "unit-prefix", @@ -1577,33 +1158,34 @@ dependencies = [ [[package]] name = "inotify" -version = "0.11.0" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +checksum = "4cc00ea907cab49550b7da656f80ebb97be1b997d931fbcd28d39734e17ce592" dependencies = [ - "bitflags 2.9.4", + "bitflags", "inotify-sys", "libc", ] [[package]] name = "inotify-sys" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +checksum = "c033f80b2c113cdf91ab7a33faa9cbc014726dcad99880c8609af2a370edf37d" dependencies = [ "libc", ] [[package]] name = "insta" -version = "1.43.2" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fdb647ebde000f43b5b53f773c30cf9b0cb4300453208713fa38b2c70935a0" +checksum = "86f0f8fee8c926415c58d6ae43a08523a26faccb2323f5e6b644fe7dd4ef6b82" dependencies = [ - "console 0.15.11", + "console", "once_cell", "similar", + "tempfile", ] [[package]] @@ -1626,62 +1208,24 @@ dependencies = [ [[package]] name = "inventory" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" dependencies = [ "rustversion", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "libc", -] - [[package]] name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "is_ci" -version = "1.2.0" +version = "2.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -1703,17 +1247,18 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" dependencies = [ - "once_cell", + "cfg-if", + "futures-util", "wasm-bindgen", ] @@ -1726,11 +1271,26 @@ dependencies = [ "anyhow", ] +[[package]] +name = "konst" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb" +dependencies = [ + "konst_macro_rules", +] + +[[package]] +name = "konst_macro_rules" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" + [[package]] name = "kqueue" -version = "1.1.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +checksum = "8d763e5b24120b4ddf50de6c92308156765aabfbbccebf401da7cff2d70a41ea" dependencies = [ "kqueue-sys", "libc", @@ -1738,11 +1298,11 @@ dependencies = [ [[package]] name = "kqueue-sys" -version = "1.0.4" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 1.3.2", + "bitflags", "libc", ] @@ -1754,34 +1314,29 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.176" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] -name = "libredox" -version = "0.1.10" +name = "libm" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" -dependencies = [ - "bitflags 2.9.4", - "libc", - "redox_syscall", -] +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "lightningcss" -version = "1.0.0-alpha.68" +version = "1.0.0-alpha.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b407ca668368d1d5a86cea58ac82d9f9f9ca4bac1e9dce6f16f875f0f081a911" +checksum = "d31b760f96e8fdfe1d0c295e4bf76c503d6f15d2d470d53bd8cd1f7aa8c7d934" dependencies = [ "ahash", - "bitflags 2.9.4", + "bitflags", "const-str", "cssparser", "cssparser-color", "data-encoding", - "getrandom 0.3.3", + "getrandom 0.3.4", "indexmap", "itertools 0.10.5", "lazy_static", @@ -1806,79 +1361,54 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" - -[[package]] -name = "lock_api" -version = "0.4.13" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" -dependencies = [ - "autocfg", - "scopeguard", -] +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "log" -version = "0.4.28" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "lru-slab" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" [[package]] name = "memchr" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" - -[[package]] -name = "mime" -version = "0.3.17" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "minicov" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" +checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d" dependencies = [ "cc", "walkdir", ] -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - [[package]] name = "mio" -version = "1.0.4" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" dependencies = [ "libc", "log", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -1948,7 +1478,7 @@ dependencies = [ "natrix_shared", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -1976,7 +1506,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.9.4", + "bitflags", "fsevent-sys", "inotify", "kqueue", @@ -1990,24 +1520,27 @@ dependencies = [ [[package]] name = "notify-types" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" +checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" +dependencies = [ + "bitflags", +] [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", @@ -2015,9 +1548,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -2029,34 +1562,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", -] - -[[package]] -name = "object" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "memchr", + "libm", ] [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] -name = "option-ext" -version = "0.2.0" +name = "oorandom" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "ordered-float" @@ -2075,13 +1600,9 @@ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" [[package]] name = "owo-colors" -version = "4.2.3" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" -dependencies = [ - "supports-color 2.1.0", - "supports-color 3.0.2", -] +checksum = "13c45bb4a6ae1280ec0803b1ef9d3455eb50f01efbbe1447ab020f1d54fba9d8" [[package]] name = "oxc" @@ -2103,28 +1624,28 @@ dependencies = [ [[package]] name = "oxc-miette" -version = "2.5.1" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c42cefdcbebec6b0b72229ac0e02261a6770cb7ba39ccc5475a856164066db1" +checksum = "4356a61f2ed4c9b3610245215fbf48970eb277126919f87db9d0efa93a74245c" dependencies = [ "cfg-if", "owo-colors", "oxc-miette-derive", "textwrap", - "thiserror 2.0.17", + "thiserror 2.0.21", "unicode-segmentation", "unicode-width", ] [[package]] name = "oxc-miette-derive" -version = "2.5.1" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05bbaa5b6b98826bb62b164406f703bee72c5287af9986f9c863fa8ea992b476" +checksum = "b237422b014f8f8fff75bb9379e697d13f8d57551a22c88bebb39f073c1bf696" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -2146,7 +1667,7 @@ version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ba50df87007e8a17713809d3d3d718a92ea15ce0d8b7027bdb1a60bba3c319" dependencies = [ - "bitflags 2.9.4", + "bitflags", "oxc_allocator", "oxc_ast_macros", "oxc_data_structures", @@ -2165,7 +1686,7 @@ dependencies = [ "phf 0.13.1", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -2186,7 +1707,7 @@ version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1201354911d04d57684151465913886656ede9c36a58a63f7461a743aa5bf0a" dependencies = [ - "bitflags 2.9.4", + "bitflags", "itertools 0.14.0", "nonmax", "oxc_index", @@ -2201,7 +1722,7 @@ version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5060d80b2a41ce511f91fc0542f339d23ab3b97aa5578c19da68365169ff486b" dependencies = [ - "bitflags 2.9.4", + "bitflags", "cow-utils", "dragonbox_ecma", "itoa", @@ -2305,7 +1826,7 @@ version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24866abd5855220ad0289d80eca57885231d712bee7d19382224e893899a98ee" dependencies = [ - "bitflags 2.9.4", + "bitflags", "cow-utils", "memchr", "num-bigint", @@ -2328,7 +1849,7 @@ version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65b077d808e836a34139d12baf92c60dc75a7867c3f362f172845ec445f97da5" dependencies = [ - "bitflags 2.9.4", + "bitflags", "oxc_allocator", "oxc_ast_macros", "oxc_diagnostics", @@ -2392,7 +1913,7 @@ version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa817698fbf3a9f35cd7a0c9e053362121331571504a41d435d327e3d3093817" dependencies = [ - "bitflags 2.9.4", + "bitflags", "cow-utils", "dragonbox_ecma", "nonmax", @@ -2427,11 +1948,11 @@ dependencies = [ [[package]] name = "parcel_selectors" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54fd03f1ad26cb6b3ec1b7414fa78a3bd639e7dbb421b1a60513c96ce886a196" +checksum = "d05f71e01edca03d245ab0a9f7ce13a974ceb79baaae8faf2ba0b11de6b90913" dependencies = [ - "bitflags 2.9.4", + "bitflags", "cssparser", "log", "phf 0.11.3", @@ -2441,29 +1962,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "parking_lot" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - [[package]] name = "paste" version = "1.0.15" @@ -2506,7 +2004,6 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ - "phf_macros 0.11.3", "phf_shared 0.11.3", ] @@ -2516,7 +2013,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ - "phf_macros 0.13.1", + "phf_macros", "phf_shared 0.13.1", "serde", ] @@ -2538,7 +2035,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared 0.11.3", - "rand 0.8.5", + "rand 0.8.8", ] [[package]] @@ -2551,19 +2048,6 @@ dependencies = [ "phf_shared 0.13.1", ] -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "phf_macros" version = "0.13.1" @@ -2574,7 +2058,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -2597,58 +2081,44 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "platform-info" -version = "2.0.5" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7539aeb3fdd8cb4f6a331307cf71a1039cee75e94e8a71725b9484f4a0d9451a" -dependencies = [ - "libc", - "winapi", -] +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ + "serde_core", + "writeable", "zerovec", ] @@ -2669,25 +2139,24 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bb0be07becd10686a0bb407298fb425360a5c44a663774406340c59a22de4ce" +checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.4", - "lazy_static", + "bitflags", "num-traits", - "rand 0.9.2", + "rand 0.9.5", "rand_chacha", "rand_xorshift", "regex-syntax", @@ -2704,7 +2173,7 @@ checksum = "095a99f75c69734802359b682be8daaf8980296731f6470434ea2c652af1dd30" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] @@ -2715,9 +2184,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" dependencies = [ "bytes", "cfg_aliases", @@ -2725,9 +2194,9 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.32", - "socket2 0.6.0", - "thiserror 2.0.17", + "rustls", + "socket2", + "thiserror 2.0.21", "tokio", "tracing", "web-time", @@ -2735,20 +2204,21 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.4.3", "lru-slab", - "rand 0.9.2", + "rand 0.10.3", + "rand_pcg", "ring", "rustc-hash", - "rustls 0.23.32", + "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.17", + "thiserror 2.0.21", "tinyvec", "tracing", "web-time", @@ -2756,23 +2226,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.0", + "socket2", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "quote" -version = "1.0.41" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -2783,6 +2253,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "radium" version = "0.7.0" @@ -2791,21 +2267,32 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" dependencies = [ "rand_core 0.6.4", ] [[package]] name = "rand" -version = "0.9.2" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha", - "rand_core 0.9.3", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] @@ -2815,7 +2302,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -2826,47 +2313,42 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] -name = "rand_xorshift" -version = "0.4.0" +name = "rand_core" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" -dependencies = [ - "rand_core 0.9.3", -] +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] -name = "redox_syscall" -version = "0.5.17" +name = "rand_pcg" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" dependencies = [ - "bitflags 2.9.4", + "rand_core 0.10.1", ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "rand_xorshift" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 1.0.69", + "rand_core 0.9.5", ] [[package]] name = "regex" -version = "1.11.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -2876,9 +2358,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.11" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -2887,81 +2369,38 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" - -[[package]] -name = "reqwest" -version = "0.11.27" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.12", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration", - "tokio", - "tokio-rustls 0.24.1", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots 0.25.4", - "winreg", -] +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "reqwest" -version = "0.12.23" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", "futures-core", - "http 1.3.1", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", - "hyper 1.7.0", - "hyper-rustls 0.27.7", + "hyper", + "hyper-rustls", "hyper-util", "js-sys", "log", "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.32", + "rustls", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower", "tower-http", "tower-service", @@ -2969,7 +2408,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 1.0.2", + "webpki-roots", ] [[package]] @@ -2980,23 +2419,17 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", ] -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -3009,57 +2442,36 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ - "bitflags 2.9.4", + "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.1", -] - -[[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", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.32" +version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.7", + "rustls-webpki", "subtle", "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "web-time", "zeroize", @@ -3067,19 +2479,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.7" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "ring", "rustls-pki-types", @@ -3088,15 +2490,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rusty-fork" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" dependencies = [ "fnv", "quick-error", @@ -3106,9 +2508,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" @@ -3119,33 +2521,17 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "self_cell" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" +checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813" [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" dependencies = [ "serde", "serde_core", @@ -3159,9 +2545,9 @@ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -3191,60 +2577,47 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[package]] -name = "serde_graphql_input" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7b3ed302fb48549bd1b0df59d180655f0eb621d71a3924c68e1af9aed4f6a6a" -dependencies = [ - "anyhow", - "itoa", - "serde", - "tokio", - "tracing", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "indexmap", "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.6", ] [[package]] @@ -3270,49 +2643,20 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.9" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - [[package]] name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.6" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" -dependencies = [ - "libc", -] +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "similar" @@ -3322,63 +2666,53 @@ checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" [[package]] name = "simple_logger" -version = "5.0.0" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c5dfa5e08767553704aa0ffd9d9794d527103c736aba9854773851fd7497eb" +checksum = "c7038d0e96661bf9ce647e1a6f6ef6d6f3663f66d9bf741abf14ba4876071c17" dependencies = [ "log", - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" [[package]] name = "smawk" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" - -[[package]] -name = "socket2" -version = "0.5.10" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] +checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "sourcemap" -version = "9.2.2" +version = "9.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22afbcb92ce02d23815b9795523c005cb9d3c214f8b7a66318541c240ea7935" +checksum = "314d62a489431668f719ada776ca1d49b924db951b7450f8974c9ae51ab05ad7" dependencies = [ "base64-simd", "bitvec", @@ -3394,9 +2728,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -3413,12 +2747,6 @@ dependencies = [ "regex", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -3431,25 +2759,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "supports-color" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89" -dependencies = [ - "is-terminal", - "is_ci", -] - -[[package]] -name = "supports-color" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" -dependencies = [ - "is_ci", -] - [[package]] name = "syn" version = "1.0.109" @@ -3463,9 +2772,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -3473,10 +2782,15 @@ dependencies = [ ] [[package]] -name = "sync_wrapper" -version = "0.1.2" +name = "syn" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] name = "sync_wrapper" @@ -3489,34 +2803,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", + "syn 3.0.6", ] [[package]] @@ -3525,38 +2818,27 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "tar" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" -dependencies = [ - "filetime", - "libc", - "xattr", -] - [[package]] name = "tempfile" -version = "3.23.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] name = "textwrap" -version = "0.16.2" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" +checksum = "6ecfad6c3abc80a577f2b91c1e412ee57e7a060d430b553c1b0c940974ebcd49" dependencies = [ + "icu_segmenter", "smawk", - "unicode-linebreak", "unicode-width", ] @@ -3573,10 +2855,10 @@ dependencies = [ "cfg-if", "const_format", "futures-util", - "http 1.3.1", + "http", "indexmap", "paste", - "reqwest 0.12.23", + "reqwest", "serde", "serde_json", "serde_repr", @@ -3598,11 +2880,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.21", ] [[package]] @@ -3613,27 +2895,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", + "syn 3.0.6", ] [[package]] @@ -3650,90 +2923,54 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", + "serde_core", "zerovec", ] [[package]] name = "tinyvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.47.1" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", - "parking_lot", "pin-project-lite", - "signal-hook-registry", - "slab", - "socket2 0.6.0", + "socket2", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[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", + "syn 3.0.6", ] [[package]] name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ - "rustls 0.23.32", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.16" +version = "0.26.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", + "rustls", "tokio", ] @@ -3780,14 +3017,14 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -3795,20 +3032,20 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.9.4", + "bitflags", "bytes", "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "iri-string", + "http", + "http-body", "pin-project-lite", "tower", "tower-layer", "tower-service", + "url", ] [[package]] @@ -3825,11 +3062,10 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -3837,49 +3073,22 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ - "log", "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" -dependencies = [ - "nu-ansi-term", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", ] [[package]] @@ -3896,12 +3105,12 @@ checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", - "http 1.3.1", + "http", "httparse", "log", - "rand 0.9.2", + "rand 0.9.5", "sha1", - "thiserror 2.0.17", + "thiserror 2.0.21", "utf-8", ] @@ -3913,15 +3122,15 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "typewit" -version = "1.14.2" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c1ae7cc0fdb8b842d65d127cb981574b0d2b249b74d1c7a2986863dc134f71" +checksum = "214ca0b2191785cbc06209b9ca1861e048e39b5ba33574b3cedd58363d5bb5f6" [[package]] name = "unarray" @@ -3931,33 +3140,27 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-id-start" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b79ad29b5e19de4260020f8919b443b2ef0277d242ce532ec7b7a2cc8b6007" +checksum = "0825d2e09dcae814a4273c1e1435979d414ede25b2ee235b1545da6682483765" [[package]] name = "unicode-ident" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" - -[[package]] -name = "unicode-linebreak" -version = "0.1.5" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "unicode-xid" @@ -3967,9 +3170,9 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unit-prefix" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" +checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" [[package]] name = "untrusted" @@ -3985,9 +3188,9 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -4015,21 +3218,14 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.1" +version = "1.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" dependencies = [ - "getrandom 0.3.3", "js-sys", "wasm-bindgen", ] -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - [[package]] name = "version_check" version = "0.9.5" @@ -4082,29 +3278,20 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" dependencies = [ "cfg-if", "once_cell", @@ -4113,38 +3300,22 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" dependencies = [ - "cfg-if", "js-sys", - "once_cell", + "tokio", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4152,62 +3323,64 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.54" +version = "0.3.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" +checksum = "ae7499dfd45780a0a91d7ee6bb9ac51970a4479a41a89da443fdda5a39547d42" dependencies = [ + "async-trait", + "cast", "js-sys", + "libm", "minicov", + "nu-ansi-term", + "num-traits", + "oorandom", + "serde", + "serde_json", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", + "wasm-bindgen-test-shared", ] [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.54" +version = "0.3.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" +checksum = "3b84b5ac638bfb168196a1a461fcc8f46a294a18b1b6be52133b4e0db122cc9f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.6", ] [[package]] -name = "wasm-streams" -version = "0.4.2" +name = "wasm-bindgen-test-shared" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] +checksum = "4f692aa943ccd88363733b77063f32cfed5bc6cbea8e6e8b251b302f881606fe" [[package]] name = "wasmparser" @@ -4215,14 +3388,14 @@ version = "0.239.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c9d90bb93e764f6beabf1d02028c70a2156a6583e63ac4218dd07ef733368b0" dependencies = [ - "bitflags 2.9.4", + "bitflags", ] [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" dependencies = [ "js-sys", "wasm-bindgen", @@ -4240,64 +3413,27 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "webpki-roots" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" dependencies = [ "rustls-pki-types", ] -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-link" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" - -[[package]] -name = "windows-sys" -version = "0.48.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" @@ -4308,48 +3444,24 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.4", + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.61.1" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -4368,27 +3480,21 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.4" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -4397,15 +3503,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -4415,15 +3515,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -4433,9 +3527,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -4445,15 +3539,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -4463,15 +3551,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -4481,15 +3563,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -4499,15 +3575,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -4517,40 +3587,30 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ "memchr", ] -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "wyz" @@ -4561,23 +3621,12 @@ dependencies = [ "tap", ] -[[package]] -name = "xattr" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" -dependencies = [ - "libc", - "rustix", -] - [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -4585,80 +3634,82 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.6", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "6df92bf3d9227be3d53173901ddbffac2babc27ae50f397776ffd6dc33f800cb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "ac4f328cf2f05d084e496c3e9c3f33ed0a183656a16e1fcec4d464d8373aec82" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.119", ] [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.6", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke", "zerofrom", + "zerovec", ] [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ + "serde", "yoke", "zerofrom", "zerovec-derive", @@ -4666,11 +3717,17 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 3.0.6", ] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index 084ee3d..87f9bcc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,6 @@ members = [ "crates/natrix-cli", "ci/integration_tests", "ci/integration_tests_dependency", - "dagger_pipeline", ] exclude = [ "ci/benchmark", diff --git a/dagger_pipeline/Cargo.toml b/dagger_pipeline/Cargo.toml deleted file mode 100644 index 20c5698..0000000 --- a/dagger_pipeline/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "dagger_pipeline" -version = "0.1.0" -edition = "2024" -publish = false - -[dependencies] -# CLI -clap = { version = "4.5.47", features = ["derive"] } -eyre = "0.6.12" - -# CI/CD -# Dagger does breaking changes in patch versions... -# https://github.com/dagger/dagger/releases/tag/v0.18.17 -dagger-sdk = "=0.18.16" - -# Async -tokio = { version = "1.47.1", features = ["macros", "rt-multi-thread"] } -futures = "0.3.31" - -# Utilities -itertools = "0.14.0" -uuid = { version = "1.18.1", features = ["v4"] } - -# Serialization -serde = { version = "1.0.219", features = ["derive"] } -serde_json = "1.0.143" - -[lints] -workspace = true diff --git a/dagger_pipeline/src/base_images.rs b/dagger_pipeline/src/base_images.rs deleted file mode 100644 index 87fcb71..0000000 --- a/dagger_pipeline/src/base_images.rs +++ /dev/null @@ -1,178 +0,0 @@ -//! Contains the base images - -use dagger_sdk::{ContainerWithEnvVariableOpts, File}; - -use crate::prelude::*; - -/// A base image -pub fn base(client: &Query) -> Container { - client - .container() - .from("debian:bookworm-slim") - .with_exec(vec!["apt", "update"]) - .with_mounted_cache("/file_caches", client.cache_volume("file_caches")) -} - -/// A base image with rust installed -pub fn rust(client: &Query) -> Container { - base(client) - .with_exec(vec!["apt", "install", "-yqq", "curl", "build-essential"]) - .with_exec(vec![ - "sh", - "-c", - "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y", - ]) - .with_env_variable_opts( - "PATH", - "$PATH:/root/.cargo/bin", - ContainerWithEnvVariableOpts { expand: Some(true) }, - ) - .with_mounted_cache( - "/root/.cargo/registry", - client.cache_volume("cargo-registry"), - ) - .with_mounted_cache("/root/.cargo/git", client.cache_volume("cargo-git")) - .with_symlink("/file_caches/package-cache", "/root/.cargo/.package-cache") - .with_exec(vec!["rustup", "toolchain", "install", "nightly"]) -} - -/// Container for mdbook (already contains workspace) -pub fn book(client: &Query) -> Container { - rust(client) - .with_exec(vec!["rustup", "default", "nightly"]) - .with_exec(vec!["rustup", "component", "add", "rust-analyzer"]) - .with_exec(vec![ - "cargo", - "install", - "mdbookkit", - "--features", - "mdbook-rustdoc-link", - ]) - .with_directory("/bin", binstall(client, "mdbook")) - .with_directory("/bin", binstall(client, "mdbook-callouts")) - .with_workspace(client) - .with_workdir("./docs") -} - -/// Base for wasm-tests -pub fn wasm(client: &Query) -> Container { - chrome(client, &rust(client)) - .with_exec(vec![ - "rustup", - "+nightly", - "target", - "add", - "wasm32-unknown-unknown", - ]) - .with_exec(vec![ - "rustup", - "+stable", - "target", - "add", - "wasm32-unknown-unknown", - ]) - .with_exec(vec!["rustup", "+nightly", "component", "add", "rust-src"]) - .with_directory("/bin", binstall(client, "wasm-pack")) - .with_directory("/bin", binstall(client, "wasm-bindgen-cli")) - .with_file("/bin/wasm-opt", wasm_opt(client)) -} - -/// Instal wasm-opt -pub fn wasm_opt(client: &Query) -> File { - // https://github.com/WebAssembly/binaryen/releases/download/version_123/binaryen-version_123-aarch64-linux.tar.gz - let version = "123"; - let archive = format!("binaryen-version_{version}-x86_64-linux.tar.gz"); - let download_url = format!( - "https://github.com/WebAssembly/binaryen/releases/download/version_{version}/{archive}" - ); - - base(client) - .with_exec(vec!["apt", "install", "-y", "curl", "tar"]) - .with_exec(vec![ - "curl".into(), - "-sSL".into(), - download_url, - "-o".into(), - format!("/{archive}"), - ]) - .with_exec(vec!["tar".into(), "-xzf".into(), format!("/{archive}")]) - .file(format!("/binaryen-version_{version}/bin/wasm-opt")) -} - -/// Install chrome and chromedriver -fn chrome(client: &Query, container: &Container) -> Container { - let chrome_version = "138.0.7204.92"; - let archive_driver = "chromedriver-linux64"; - let archive_chrome = "chrome-linux64"; - - let download_driver = format!( - "https://storage.googleapis.com/chrome-for-testing-public/{chrome_version}/linux64/{archive_driver}.zip" - ); - let download_chrome = format!( - "https://storage.googleapis.com/chrome-for-testing-public/{chrome_version}/linux64/{archive_chrome}.zip" - ); - - let base = base(client).with_exec(vec!["apt", "install", "-y", "curl", "unzip"]); - let chromedriver = base - .with_exec(vec![ - "curl".into(), - "-sSl".into(), - download_driver, - "-o".into(), - format!("/tmp/{archive_driver}.zip"), - ]) - .with_exec(vec![ - "unzip".into(), - format!("/tmp/{archive_driver}.zip"), - "-d".into(), - "/tmp/".into(), - ]) - .file(format!("/tmp/{archive_driver}/chromedriver")); - - let chrome = base - .with_exec(vec![ - "curl".into(), - "-sSl".into(), - download_chrome, - "-o".into(), - format!("/tmp/{archive_chrome}.zip"), - ]) - .with_exec(vec![ - "unzip".into(), - format!("/tmp/{archive_chrome}.zip"), - "-d".into(), - "/tmp/".into(), - ]); - - let chrome_devs = chrome.file(format!("/tmp/{archive_chrome}/deb.deps")); - let chrome_dir = chrome.directory(format!("/tmp/{archive_chrome}")); - - container - .with_file("/tmp/chrome.deps", chrome_devs) - .with_exec(vec![ - "sh", - "-c", - r#" - while read pkg; do - apt-get satisfy -y --no-install-recommends "${pkg}"; - done < /tmp/chrome.deps;"#, - ]) - .with_file("/bin/chromedriver", chromedriver) - .with_directory("/opt/chrome", chrome_dir) - .with_exec(vec!["ln", "-s", "/opt/chrome/chrome", "/bin/chrome"]) -} - -/// Install a tool with binstall and return a bin folder -pub fn binstall(client: &Query, tool: &'static str) -> Directory { - rust(client) - .with_exec(vec!["cargo", "install", "cargo-binstall"]) - .with_exec(vec![ - "cargo", - "binstall", - "-y", - tool, - "--install-path", - "/result", - ]) - .directory("/result") -} diff --git a/dagger_pipeline/src/fix.rs b/dagger_pipeline/src/fix.rs deleted file mode 100644 index c2441a3..0000000 --- a/dagger_pipeline/src/fix.rs +++ /dev/null @@ -1,45 +0,0 @@ -//! Various fixes that will be exported back to the host. - -use crate::base_images::binstall; -use crate::prelude::*; - -/// Apply rustfmt fixes -pub fn fmt(client: &Query, source: Directory) -> Directory { - crate::base_images::rust(client) - .with_directory("/app", source) - .with_workdir("/app") - .with_exec(vec!["cargo", "+nightly", "fmt"]) - .directory("/app") -} - -/// Apply typo fixes -pub fn typos(client: &Query, source: Directory) -> Result { - Ok(crate::base_images::base(client) - .with_directory("/bin", binstall(client, "typos-cli")) - .with_directory("/app", source) - .with_workdir("/app") - .with_exec_any(vec!["typos", "-w"])? - .directory("/app")) -} - -/// Update snapshots -pub fn snapshots(client: &Query, source: Directory) -> Directory { - crate::base_images::rust(client) - .with_directory("/bin", binstall(client, "cargo-insta")) - .with_directory("/bin", binstall(client, "cargo-nextest")) - .with_directory("/app", source) - .with_mounted_cache("/app/target", client.cache_volume("rust-target")) - .with_workdir("/app/crates/natrix") - .with_exec(vec![ - "cargo", - "insta", - "test", - "--accept", - "--unreferenced", - "delete", - "--test-runner", - "nextest", - "--all-features", - ]) - .directory("/app") -} diff --git a/dagger_pipeline/src/main.rs b/dagger_pipeline/src/main.rs deleted file mode 100644 index 8825836..0000000 --- a/dagger_pipeline/src/main.rs +++ /dev/null @@ -1,180 +0,0 @@ -//! Run the CI pipeline using dagger - -mod base_images; -mod fix; -mod report; -mod targets; - -use clap::Parser; -use eyre::eyre; -use prelude::*; - -use crate::targets::TestStatus; - -/// Generate a test report, or simply run the tests -#[derive(clap::Parser)] -struct TestCommand { - /// How many jobs to run in parallel. - /// If not specified defaults to 1 - #[arg(short, long)] - jobs: Option, - /// Output to a tui instead - #[arg(short, long)] - tui: bool, -} - -/// Run a dagger pipeline too generate test reports. -#[derive(clap::Parser)] -enum Cli { - /// Generate a test report, or simply run the tests - Tests(TestCommand), - /// Apply various fixes - Fix, - /// Build and open the mdbook - Book, - /// Run benchmark - Bench, -} - -/// Common items -mod prelude { - use dagger_sdk::HostDirectoryOpts; - pub use dagger_sdk::{Container, ContainerWithExecOptsBuilder, Directory, Query, ReturnType}; - pub use eyre::Result; - - /// Result of executing a command in a container - #[derive(Debug)] - pub struct ExecutionResult { - /// Exit code of the command - pub exit_code: isize, - /// Standard output of the command - pub stdout: String, - /// Standard error of the command - pub stderr: String, - } - - /// Extension trait for dagger containers - pub trait ContainerExtension { - /// Copy in the workspace and setup target cache - fn with_workspace(&self, client: &Query) -> Container; - - /// Execute a command with default options (`ReturnType::Any`) - fn with_exec_any(&self, args: Vec>) -> Result; - - /// Get the full execution result (exit code, stdout, stderr) from the current container - async fn get_result(&self) -> Result; - } - - impl ContainerExtension for Container { - fn with_workspace(&self, client: &Query) -> Container { - let workspace = client.host().directory_opts( - ".", - HostDirectoryOpts { - exclude: Some(vec!["target", "*/dist", "docs/book", ".jj"]), - include: None, - no_cache: None, - }, - ); - self.with_directory("/app", workspace) - .with_workdir("/app") - .with_mounted_cache("/app/target", client.cache_volume("rust-target")) - } - - fn with_exec_any(&self, args: Vec>) -> Result { - Ok(self.with_exec_opts( - args, - ContainerWithExecOptsBuilder::default() - .expect(ReturnType::Any) - .build()?, - )) - } - - async fn get_result(&self) -> Result { - let (exit_code, stdout, stderr) = - tokio::try_join!(self.exit_code(), self.stdout(), self.stderr(),)?; - - Ok(ExecutionResult { - exit_code, - stdout, - stderr, - }) - } - } -} - -#[tokio::main] -async fn main() -> Result<()> { - let arguments = Cli::parse(); - - dagger_sdk::connect(async move |client| { - match arguments { - Cli::Tests(arguments) => { - let reports = report::run_all_tests(&client, &arguments).await?; - if arguments.tui { - let total = reports.len(); - let mut pass = 0u16; - let mut skip = 0u16; - let mut fail = 0u16; - - for report in reports { - match report.status { - TestStatus::Passed => { - pass = pass.saturating_add(1); - } - TestStatus::Skipped => { - skip = skip.saturating_add(1); - } - TestStatus::Failed => { - fail = fail.saturating_add(1); - println!("FAIL {}", report.name); - - if let Some(message) = report.status_details { - println!("{}", message.message); - println!("{}", message.trace.unwrap_or_default()); - } - } - } - } - - println!("RESULTS: {pass}/{total} ({fail} failed, {skip} skipped)"); - - if fail != 0 { - return Err(eyre!("Tests failed")); - } - } else { - let report = report::generate_allure_report(&client, reports).await?; - report::serve_dist(&client, report).await?; - } - } - Cli::Fix => { - let source = client.host().directory_opts( - ".", - dagger_sdk::HostDirectoryOpts { - exclude: Some(vec!["target", "*/dist", "docs/book", ".jj"]), - include: None, - no_cache: None, - }, - ); - let source = fix::typos(&client, source)?; - let source = fix::fmt(&client, source); - let source = fix::snapshots(&client, source); - source.export(".").await?; - } - Cli::Book => { - let book = base_images::book(&client) - .with_workspace(&client) - .with_workdir("./docs") - .with_exec(vec!["mdbook", "build"]) - .directory("./book"); - report::serve_dist(&client, book).await?; - } - Cli::Bench => { - let result = targets::benchmark(&client).await?; - print!("{result}"); - } - } - Ok(()) - }) - .await - .map_err(Into::into) -} diff --git a/dagger_pipeline/src/report.rs b/dagger_pipeline/src/report.rs deleted file mode 100644 index 1b58a22..0000000 --- a/dagger_pipeline/src/report.rs +++ /dev/null @@ -1,193 +0,0 @@ -//! Construct CI report. - -use std::pin::Pin; - -use dagger_sdk::{ContainerWithExecOptsBuilder, PortForward, ReturnType, ServiceUpOpts}; -use futures::{StreamExt, stream}; -use itertools::Itertools; - -use crate::TestCommand; -use crate::prelude::*; -use crate::targets::{IntegrationTestMode, TestResult}; - -/// Run all tests and return a directory of allure reports -pub async fn run_all_tests(client: &Query, arguments: &TestCommand) -> Result> { - // Create all possible test futures with their names - let all_tests = all_tests(client, arguments); - - let mut tasks: Vec>>> = vec![]; - let mut need_sequential: Vec>>> = vec![]; - - // Filter tests based on arguments - for (future, is_sequential) in all_tests { - if is_sequential { - need_sequential.push(future); - } else { - tasks.push(future); - } - } - - let mut result = Vec::new(); - let mut stream = stream::iter(tasks).buffer_unordered(arguments.jobs.unwrap_or(1)); - while let Some(task) = stream.next().await { - result.extend(task?); - } - - for task in need_sequential { - result.extend(task.await?); - } - - Ok(result) -} - -/// Return a vector of all tests -fn all_tests<'q>( - client: &'q Query, - arguments: &'q TestCommand, -) -> Vec<( - Pin>> + 'q>>, - bool, -)> { - let all_tests: Vec<(Pin>>, bool)> = vec![ - // (future, is_sequential) - (Box::pin(crate::targets::rustfmt(client)), false), - (Box::pin(crate::targets::typos(client)), false), - (Box::pin(crate::targets::native_tests(client)), false), - (Box::pin(crate::targets::wasm_unit_tests(client)), false), - (Box::pin(crate::targets::clippy_workspace(client)), false), - ( - Box::pin(crate::targets::clippy_minimal_versions(client)), - false, - ), - (Box::pin(crate::targets::clippy_natrix(client)), false), - (Box::pin(crate::targets::test_docs(client)), false), - ( - Box::pin(crate::targets::cargo_deny(client, "./crates/natrix")), - false, - ), - ( - Box::pin(crate::targets::cargo_deny(client, "./crates/natrix-cli")), - false, - ), - (Box::pin(crate::targets::unused_deps(client)), false), - ( - Box::pin(crate::targets::test_project_gen(client, "stable")), - false, - ), - ( - Box::pin(crate::targets::test_project_gen(client, "nightly")), - false, - ), - (Box::pin(crate::targets::test_book_links(client)), false), - (Box::pin(crate::targets::test_book_examples(client)), true), - ( - Box::pin(crate::targets::integration_test( - client, - IntegrationTestMode::Dev, - arguments, - )), - false, - ), - ( - Box::pin(crate::targets::integration_test( - client, - IntegrationTestMode::Release, - arguments, - )), - false, - ), - ( - Box::pin(crate::targets::integration_test( - client, - IntegrationTestMode::Build, - arguments, - )), - false, - ), - ]; - all_tests -} - -/// Generate the final report -pub async fn generate_allure_report(client: &Query, results: Vec) -> Result { - let mut reports = client.directory(); - // HACK: Dagger doesnt like you creating 100+ files in one call. - // So we chunk it up. - for chunk in &results.into_iter().chunks(50) { - let mut chunked = client.directory(); - for result in chunk { - chunked = chunked.with_directory(".", result.into_file(client)?); - } - - reports = reports.with_directory(".", chunked.sync().await?); - } - - let result = client - .container() - .from("andgineer/allure") - .with_directory("/reports", reports) - .with_mounted_cache("/history-cache/", client.cache_volume("allure-history")) - .with_exec_opts( - vec!["mv", "-v", "/history-cache/history", "/reports/history"], - ContainerWithExecOptsBuilder::default() - .expect(ReturnType::Any) - .build()?, - ) - .with_exec(vec![ - "allure", - "generate", - "--name", - "Natrix CI", - "/reports", - ]) - .with_exec(vec![ - "mv", - "-v", - "/allure-report/history", - "/history-cache/history", - ]) - .directory("/allure-report"); - - Ok(result) -} - -/// Serve the report -pub async fn serve_dist(client: &Query, dist: Directory) -> Result<()> { - let container = client - .container() - .from("nginx:alpine") - .with_directory("/usr/share/nginx/html", dist) - .with_exposed_port(80); - container.sync().await?; - let service = container.as_service(); - - let server = async move { - let res = service - .up_opts(ServiceUpOpts { - ports: Some(vec![PortForward { - backend: 80, - frontend: 8000, - protocol: dagger_sdk::NetworkProtocol::Tcp, - }]), - random: None, - }) - .await; - if res.is_err() { - service - .up_opts(ServiceUpOpts { - ports: None, - random: Some(true), - }) - .await?; - } - - Ok::<(), eyre::Report>(()) - }; - - let handle = tokio::spawn(server); - println!("=========== RESULT GENERATED ============"); - println!("VISIT ABOVE LINK TO SEE"); - let _ = handle.await; - - Ok(()) -} diff --git a/dagger_pipeline/src/targets.rs b/dagger_pipeline/src/targets.rs deleted file mode 100644 index c47cd48..0000000 --- a/dagger_pipeline/src/targets.rs +++ /dev/null @@ -1,990 +0,0 @@ -//! Actual targets - -use std::collections::{HashMap, HashSet}; - -use dagger_sdk::Service; -use serde::{Deserialize, Serialize}; - -use crate::TestCommand; -use crate::prelude::*; - -/// Unit Test suite name -const UNIT_TESTS: &str = "Unit Tests"; -/// Linters test suite name -const LINTERS: &str = "Linters"; -/// End to end tests suite name -const END_TO_END_TESTS: &str = "End To End Tests"; - -/// Test status -#[derive(Serialize)] -#[serde(rename_all = "lowercase")] -pub enum TestStatus { - /// Test passed - Passed, - /// Test failed - Failed, - /// Test skipped - Skipped, -} - -/// Test event result types -#[derive(Deserialize, Debug)] -#[serde(rename_all = "lowercase")] -enum TestEventResult { - /// Test passed - Ok, - /// Test failed - Failed, - /// Test ignored - Ignored, -} - -/// Test event types -#[derive(Deserialize, Debug)] -enum TestEvent { - /// Test started (ignored in processing) - #[serde(rename = "started")] - Started, - /// Test completed with result - #[serde(untagged)] - Result(TestEventResult), -} - -/// Label types -#[derive(Serialize, Clone)] -#[serde(tag = "name", content = "value")] -enum LabelType { - /// Suite label - #[serde(rename = "suite")] - Suite(String), - /// Sub-suite label - #[serde(rename = "subSuite")] - SubSuite(String), - /// The severity of the test - #[serde(rename = "severity")] - Severity(Severity), -} - -/// The severity of the test -#[derive(Serialize, Clone)] -#[serde(rename_all = "lowercase")] -#[expect( - dead_code, - reason = "This represents the full range of valid values of the format." -)] -enum Severity { - /// This is very simple to fix - Trivial, - /// This is just a minor issue - Minor, - /// This is specific feature not working - Normal, - /// This is a core component not working - Critical, - /// You cant commit without this - Blocker, -} - -/// Lib test output -#[derive(Deserialize, Debug)] -struct TestLine { - /// Test event type - event: TestEvent, - /// Name - name: String, - /// The stdout - stdout: Option, -} - -/// Status details for failed tests -#[derive(Serialize)] -pub struct StatusDetails { - /// Error message - pub message: String, - /// Optional trace information - #[serde(skip_serializing_if = "Option::is_none")] - pub trace: Option, -} - -/// Test step -#[derive(Serialize)] -struct Step { - /// Step name - name: String, - /// Step status - status: TestStatus, - /// Optional status details for failed steps - #[serde(skip_serializing_if = "Option::is_none", rename = "statusDetails")] - status_details: Option, -} - -/// Test result for allure reporting -#[derive(Serialize)] -pub(crate) struct TestResult { - /// Unique test identifier - uuid: String, - /// Test name - pub name: String, - /// Test status (passed/failed) - pub status: TestStatus, - /// Optional status details for failed tests - #[serde(skip_serializing_if = "Option::is_none", rename = "statusDetails")] - pub status_details: Option, - /// Test labels - labels: Vec, - /// Optional test steps - #[serde(skip_serializing_if = "Option::is_none")] - steps: Option>, -} - -impl TestResult { - /// Convert test result to a directory containing the result file - pub(crate) fn into_file(self, client: &Query) -> Result { - let content = serde_json::to_string(&self)?; - let filename = format!("{}-result.json", self.uuid); - Ok(client.directory().with_new_file(filename, content)) - } -} - -/// Parse libtest JSON output and create test result directory -fn parse_libtest_json(output: &str, labels: &[LabelType], prefix: &str) -> Vec { - // HACK: It seems that instead of reporting "ignored" events for skipped tests - // nextest instead emits a "Started" event and then just never finish them. - let mut not_finished = HashSet::new(); - - let mut result = Vec::new(); - for line in output.lines() { - if let Ok(json) = serde_json::from_str::(line) { - let event_result = match json.event { - TestEvent::Started => { - not_finished.insert(json.name); - continue; - } - TestEvent::Result(result) => result, - }; - not_finished.remove(&json.name); - - let status_details = match event_result { - TestEventResult::Ok => None, - TestEventResult::Failed | TestEventResult::Ignored => Some(StatusDetails { - message: json.stdout.unwrap_or_default(), - trace: None, - }), - }; - - let test_result = TestResult { - uuid: uuid::Uuid::new_v4().to_string(), - name: json - .name - .strip_prefix(prefix) - .unwrap_or(&json.name) - .to_string(), - status: match event_result { - TestEventResult::Ok => TestStatus::Passed, - TestEventResult::Failed => TestStatus::Failed, - TestEventResult::Ignored => TestStatus::Skipped, - }, - status_details, - labels: labels.to_owned(), - steps: None, - }; - - result.push(test_result); - } - } - - for not_finished in not_finished { - let test_result = TestResult { - uuid: uuid::Uuid::new_v4().to_string(), - name: not_finished - .strip_prefix(prefix) - .unwrap_or(¬_finished) - .to_string(), - status: TestStatus::Skipped, - labels: labels.to_owned(), - status_details: None, - steps: None, - }; - - result.push(test_result); - } - - result -} - -/// Generic linter configuration -struct LinterConfig { - /// Name of the linter test - name: String, - /// Command to run - command: Vec<&'static str>, - /// Working directory to run in - workdir: Option<&'static str>, - /// Whether to use rust image or busybox - use_rust_image: bool, - /// Tools to install via binstall - needs_binstall: Vec<&'static str>, - /// Whether to capture stderr or stdout - capture_stderr: bool, -} - -impl Default for LinterConfig { - fn default() -> Self { - Self { - name: String::new(), - command: Vec::new(), - workdir: None, - use_rust_image: true, - needs_binstall: Vec::new(), - capture_stderr: true, - } - } -} - -/// Run a generic linter and return test result directory -async fn run_linter(client: &Query, config: LinterConfig) -> Result> { - let mut container = if config.use_rust_image { - crate::base_images::rust(client) - } else { - crate::base_images::base(client) - }; - - for tool in &config.needs_binstall { - container = container.with_directory("/bin", crate::base_images::binstall(client, tool)); - } - - container = container.with_workspace(client); - - if let Some(workdir) = config.workdir { - container = container.with_workdir(workdir); - } - - let result = container.with_exec_any(config.command)?; - - let exec_result = result.get_result().await?; - let status = if exec_result.exit_code == 0 { - None - } else { - let (output, other) = if config.capture_stderr { - (exec_result.stderr, exec_result.stdout) - } else { - (exec_result.stdout, exec_result.stderr) - }; - Some(StatusDetails { - message: output, - trace: Some(other), - }) - }; - - let test_result = TestResult { - uuid: uuid::Uuid::new_v4().to_string(), - name: config.name, - status: if exec_result.exit_code == 0 { - TestStatus::Passed - } else { - TestStatus::Failed - }, - status_details: status, - labels: vec![ - LabelType::Suite(LINTERS.to_string()), - LabelType::Severity(Severity::Minor), - ], - steps: None, - }; - - Ok(vec![test_result]) -} - -/// Run the native nextest tests -pub async fn native_tests(client: &Query) -> Result> { - let result = crate::base_images::rust(client) - .with_directory( - "/bin", - crate::base_images::binstall(client, "cargo-nextest"), - ) - .with_workspace(client) - .with_workdir("./crates/natrix") - .with_env_variable("NEXTEST_EXPERIMENTAL_LIBTEST_JSON", "1") - .with_exec_any(vec![ - "cargo", - "nextest", - "run", - "--color", - "never", - "--all-features", - "--offline", - "--no-fail-fast", - "--message-format", - "libtest-json", - "--message-format-version", - "0.1", - ])? - .stdout() - .await?; - - let result = parse_libtest_json( - &result, - &[ - LabelType::Suite(UNIT_TESTS.to_string()), - LabelType::SubSuite("Native".to_string()), - LabelType::Severity(Severity::Normal), - ], - "natrix::natrix$", - ); - Ok(result) -} - -/// Wasm unit tests -pub async fn wasm_unit_tests(client: &Query) -> Result> { - let output = crate::base_images::wasm(client) - .with_workspace(client) - .with_workdir("./crates/natrix") - .with_exec_any(vec![ - "cargo", - "test", - "--tests", - "--target", - "wasm32-unknown-unknown", - "--features", - "_internal_testing", - "--all-features", - ])? - .stdout() - .await?; - - Ok(parse_wasmbindgen_test_output(&output)) -} - -/// Extract the result of a `wasm-pack test` run -fn parse_wasmbindgen_test_output(output: &str) -> Vec { - let mut traces = HashMap::new(); - - let mut hit_first = false; - let mut current_name = String::new(); - let mut current_output = String::new(); - - for line in output.lines() { - if line.starts_with("----") { - let parts = line.split_whitespace().collect::>(); - if let [_, name, _, _] = parts[..] { - if hit_first { - let mut new_name = name.to_string(); - std::mem::swap(&mut new_name, &mut current_name); - traces.insert(new_name, std::mem::take(&mut current_output)); - } else { - current_name = name.to_string(); - hit_first = true; - } - } - } - - if line.starts_with("test result") { - traces.insert(current_name, current_output); - break; - } - - if hit_first { - current_output.push_str(line); - current_output.push('\n'); - } - } - - let mut test_results = Vec::new(); - for line in output.lines() { - if line.starts_with("test ") { - let parts = line.split_whitespace().collect::>(); - if let Some(["test", name, "...", result]) = &parts.get(..4) { - // When a test is ignored it has extra stuff at the end - // If not its always 4 parts. - // This check prevents false positives. - if !result.starts_with("ignored") && parts.len() != 4 { - continue; - } - - let id = uuid::Uuid::new_v4().to_string(); - - let status_details = if *result == "ok" { - None - } else { - traces.get(*name).map(|output| StatusDetails { - message: output.clone(), - trace: None, - }) - }; - - let test_result = TestResult { - uuid: id, - name: name - .strip_prefix("actual_tests::") - .unwrap_or(name) - .to_string(), - status: if *result == "ok" { - TestStatus::Passed - } else if result.starts_with("ignored") { - TestStatus::Skipped - } else { - TestStatus::Failed - }, - status_details, - labels: vec![ - LabelType::Suite(UNIT_TESTS.to_string()), - LabelType::SubSuite("Web".to_string()), - LabelType::Severity(Severity::Normal), - ], - steps: None, - }; - - test_results.push(test_result); - } - } - } - - let all_output = TestResult { - uuid: uuid::Uuid::new_v4().to_string(), - name: String::from("[[ALL OUTPUT]]"), - status: TestStatus::Passed, - status_details: Some(StatusDetails { - message: output.into(), - trace: None, - }), - labels: vec![ - LabelType::Suite(UNIT_TESTS.to_string()), - LabelType::SubSuite("Web".to_string()), - LabelType::Severity(Severity::Trivial), - ], - steps: None, - }; - test_results.push(all_output); - - test_results -} - -/// Run rustfmt on the workspace -pub async fn rustfmt(client: &Query) -> Result> { - run_linter( - client, - LinterConfig { - name: "Rust-fmt".to_string(), - command: vec!["cargo", "+nightly", "fmt", "--check"], - capture_stderr: false, - ..Default::default() - }, - ) - .await -} - -/// Run typos on the workspace -pub async fn typos(client: &Query) -> Result> { - run_linter( - client, - LinterConfig { - name: "Spell Checking".to_string(), - command: vec!["typos", "--color", "never", "--format", "brief"], - use_rust_image: false, - needs_binstall: vec!["typos-cli"], - capture_stderr: false, - ..Default::default() - }, - ) - .await -} - -/// Run clippy on the workspace -pub async fn clippy_workspace(client: &Query) -> Result> { - run_linter( - client, - LinterConfig { - name: "Clippy All".to_string(), - command: vec![ - "cargo", - "+nightly", - "clippy", - "--all-features", - "--tests", - "--", - "-Dwarnings", - ], - ..Default::default() - }, - ) - .await -} - -/// Run clippy on the workspace with minimal version -pub async fn clippy_minimal_versions(client: &Query) -> Result> { - run_linter( - client, - LinterConfig { - name: "Clippy Minimal".to_string(), - command: vec![ - "cargo", - "+nightly", - "minimal-versions", - "--direct", - "clippy", - "--all-features", - "--tests", - "--", - "-Dwarnings", - ], - needs_binstall: vec!["cargo-minimal-versions", "cargo-hack"], - ..Default::default() - }, - ) - .await -} - -/// Run clippy hack on natrix -pub async fn clippy_natrix(client: &Query) -> Result> { - run_linter( - client, - LinterConfig { - name: "Clippy hack Natrix".to_string(), - command: vec![ - "cargo", - "hack", - "clippy", - "--each-feature", - "--tests", - "--", - "-Dwarnings", - ], - workdir: Some("./crates/natrix"), - needs_binstall: vec!["cargo-hack"], - ..Default::default() - }, - ) - .await -} - -/// Run `cargo-deny` on the given folder -pub async fn cargo_deny(client: &Query, folder: &'static str) -> Result> { - run_linter( - client, - LinterConfig { - name: format!("Cargo deny ({folder})"), - command: vec!["cargo", "deny", "check", "--exclude-dev"], - workdir: Some(folder), - needs_binstall: vec!["cargo-deny"], - ..Default::default() - }, - ) - .await -} - -/// Run `cargo-udeps` on the given folder -pub async fn unused_deps(client: &Query) -> Result> { - run_linter( - client, - LinterConfig { - name: "Unused dependencies".to_string(), - needs_binstall: vec!["cargo-udeps", "cargo-hack"], - command: vec![ - "cargo", - "+nightly", - "hack", - "udeps", - "--each-feature", - "--all-targets", - ], - capture_stderr: false, - ..Default::default() - }, - ) - .await -} - -/// Build the cli -pub fn cli(client: &Query) -> Directory { - let file = crate::base_images::rust(client) - .with_workspace(client) - .with_exec(vec![ - "cargo", - "build", - "--profile", - "dev", - "-p", - "natrix-cli", - ]) - .with_exec(vec!["mv", "./target/debug/natrix", "/tmp/natrix"]) - .file("/tmp/natrix"); - client.directory().with_file("natrix", file) -} - -/// Test that the natrix project generator works -pub async fn test_project_gen(client: &Query, toolchain: &'static str) -> Result> { - let container = crate::base_images::wasm(client) - .with_exec(vec!["rustup", "default", toolchain]) - .with_directory("/bin", cli(client)) - .with_env_variable("NATRIX_PATH", "/app/crates/natrix") - .with_exec_any(vec![ - "natrix", - "new", - "project", - if toolchain == "stable" { - "--stable" - } else { - "--" - }, - ])? - .with_workspace(client) - .with_workdir("/project") - .with_mounted_cache( - "/project/target", - client.cache_volume(format!("project-gen-test-target-{toolchain}")), - ); - - let mut success = true; - let mut steps = Vec::with_capacity(3); - - let gen_result = container.get_result().await?; - if gen_result.exit_code == 0 { - steps.push(Step { - name: "Generate project".to_string(), - status: TestStatus::Passed, - status_details: None, - }); - - let build = container.with_exec_any(vec!["natrix", "build"])?; - let test = container.with_exec_any(vec!["wasm-pack", "test", "--headless", "--chrome"])?; - - let (build_result, test_result) = tokio::try_join!(build.get_result(), test.get_result())?; - - if build_result.exit_code == 0 { - steps.push(Step { - name: "Build project".to_string(), - status: TestStatus::Passed, - status_details: None, - }); - } else { - success = false; - steps.push(Step { - name: "Build project".to_string(), - status: TestStatus::Failed, - status_details: Some(StatusDetails { - message: build_result.stderr, - trace: Some(build_result.stdout), - }), - }); - } - if test_result.exit_code == 0 { - steps.push(Step { - name: "Test project".to_string(), - status: TestStatus::Passed, - status_details: None, - }); - } else { - success = false; - steps.push(Step { - name: "Test project".to_string(), - status: TestStatus::Failed, - status_details: Some(StatusDetails { - message: test_result.stderr, - trace: Some(test_result.stdout), - }), - }); - } - } else { - success = false; - steps.push(Step { - name: "Generate project".to_string(), - status: TestStatus::Failed, - status_details: Some(StatusDetails { - message: gen_result.stderr, - trace: Some(gen_result.stdout), - }), - }); - } - - let test_result = TestResult { - uuid: uuid::Uuid::new_v4().to_string(), - name: format!("Project gen ({toolchain})"), - status: if success { - TestStatus::Passed - } else { - TestStatus::Failed - }, - status_details: None, - labels: vec![ - LabelType::Suite(END_TO_END_TESTS.to_string()), - LabelType::Severity(Severity::Critical), - ], - steps: Some(steps), - }; - - Ok(vec![test_result]) -} - -/// Run the cargo doc tests -pub async fn test_docs(client: &Query) -> Result> { - let output = crate::base_images::rust(client) - .with_workspace(client) - .with_exec_any(vec![ - "cargo", - "+nightly", - "test", - "--all-features", - "--doc", - "--no-fail-fast", - "--", - "-Z", - "unstable-options", - "--format", - "json", - ])? - .stdout() - .await?; - - Ok(parse_libtest_json( - &output, - &[ - LabelType::Suite(UNIT_TESTS.to_string()), - LabelType::SubSuite("Documentation".to_string()), - LabelType::Severity(Severity::Minor), - ], - "", - )) -} - -/// Test the links in the mdbooks -/// INVARIANT: Should not run in parallel as contains timeouts -pub async fn test_book_links(client: &Query) -> Result> { - let result = crate::base_images::book(client) - .with_exec_any(vec!["mdbook", "build"])? - .get_result() - .await?; - - let status = if result.exit_code == 0 { - None - } else { - Some(StatusDetails { - message: result.stderr, - trace: None, - }) - }; - - let result = TestResult { - uuid: uuid::Uuid::new_v4().to_string(), - status: if result.exit_code == 0 { - TestStatus::Passed - } else { - TestStatus::Failed - }, - name: "Book Links".to_string(), - status_details: status, - labels: vec![LabelType::Suite(LINTERS.to_string())], - steps: None, - }; - Ok(vec![result]) -} - -/// Run the example tests in the book -/// INVARIANT: This test is extremely flaky in terms of cache state. -/// So should not be run in parallel. -/// INVARIANT: `test_book_links` needs to have been run before hand to prime cache. -pub async fn test_book_examples(client: &Query) -> Result> { - let result = crate::base_images::book(client) - .with_exec_any(vec!["sh", "-c", "rm -r ../target/debug/deps/*natrix*"])? - .with_exec_any(vec![ - "sh", - "-c", - "rm -r ../target/debug/deps/*wasm_bindgen_test*", - ])? - .with_exec(vec![ - "cargo", - "build", - "-p", - "natrix", - "--all-features", - "--tests", - ]) - .with_exec_any(vec!["mdbook", "test", "-L", "../target/debug/deps"])? - .get_result() - .await?; - - let status = if result.exit_code == 0 { - None - } else { - Some(StatusDetails { - message: result.stderr, - trace: None, - }) - }; - - let result = TestResult { - uuid: uuid::Uuid::new_v4().to_string(), - status: if result.exit_code == 0 { - TestStatus::Passed - } else { - TestStatus::Failed - }, - name: "Book Examples".to_string(), - status_details: status, - labels: vec![ - LabelType::Suite(UNIT_TESTS.to_string()), - LabelType::Severity(Severity::Normal), - ], - steps: None, - }; - Ok(vec![result]) -} - -/// A service that spins up `natrix dev` in the integration tests directory. -/// The server runs on port 3000 -fn natrix_dev(client: &Query, profile: &str) -> Service { - crate::base_images::wasm(client) - .with_directory("/bin", cli(client)) - .with_workspace(client) - .with_workdir("./ci/integration_tests") - .with_entrypoint(vec![ - "natrix", - "dev", - "--profile", - profile, - "--port", - "3000", - "--allow-external", - "--no-reload", - ]) - .with_exposed_port(3000) - .as_service() -} - -/// A service running a chromedriver, with the given serve mounted under the hostname `page` -/// The chromedriver runs on port 8000 -fn chrome_driver_with_page(client: &Query, page: Service) -> Service { - crate::base_images::wasm(client) - .with_service_binding("page.local", page) - .with_entrypoint(vec![ - "chromedriver", - "--port=8000", - "--allowed-ips=", - "--allowed-origins=*", - "--remote-debugging-pipe", - "--user-data-dir=/tmp/chrome", - ]) - .with_exposed_port(8000) - .as_service() -} - -/// Returns a nginx server with a natrix build -fn natrix_build(client: &Query) -> Service { - let page = crate::base_images::wasm(client) - .with_directory("/bin", cli(client)) - .with_workspace(client) - .with_workdir("./ci/integration_tests") - .with_exec(vec!["natrix", "build"]) - .directory("./dist"); - - client - .container() - .from("nginx:alpine") - .with_directory("/usr/share/nginx/html/dist", page) - .with_exposed_port(80) - .as_service() -} - -/// The integration test mode -#[derive(Debug, Copy, Clone, PartialEq, Eq)] -pub enum IntegrationTestMode { - /// `natrix dev` - Dev, - /// `natrix dev --release` - Release, - /// `natrix build` - Build, -} - -/// Run the integration tests against `natrix dev` -/// INVARIANT: This should not run in parallel as it has timeouts that could be affected by CPU -/// churn -pub async fn integration_test( - client: &Query, - mode: IntegrationTestMode, - arguments: &TestCommand, -) -> Result> { - let page = match mode { - IntegrationTestMode::Dev => natrix_dev(client, "dev"), - IntegrationTestMode::Release => natrix_dev(client, "release"), - IntegrationTestMode::Build => natrix_build(client), - }; - let chrome = chrome_driver_with_page(client, page.clone()); - - let mut command = vec![ - "cargo".to_string(), - "nextest".to_string(), - "run".to_string(), - "-j".to_string(), - arguments.jobs.unwrap_or(1).to_string(), - "--no-fail-fast".to_string(), - "--message-format".to_string(), - "libtest-json".to_string(), - "--message-format-version".to_string(), - "0.1".to_string(), - ]; - if mode == IntegrationTestMode::Build { - command.extend(["--features".to_string(), "build_test".to_string()]); - } - - let output = crate::base_images::rust(client) - .with_service_binding("chrome.local", chrome.clone()) - .with_directory( - "/bin", - crate::base_images::binstall(client, "cargo-nextest"), - ) - .with_workspace(client) - .with_workdir("./ci/integration_tests") - .with_env_variable("NEXTEST_EXPERIMENTAL_LIBTEST_JSON", "1") - .with_exec_any(command)? - .stdout() - .await?; - - chrome.stop().await?; - page.stop().await?; - - Ok(parse_libtest_json( - &output, - &[ - LabelType::Suite(END_TO_END_TESTS.to_string()), - LabelType::SubSuite(format!("Integration {mode:?}")), - LabelType::Severity(Severity::Critical), - ], - "integration_tests::integration_tests$", - )) -} - -/// Run benchmarks -pub async fn benchmark(client: &Query) -> Result { - let result = crate::base_images::wasm(client) - .with_exec(vec!["rustup", "default", "nightly"]) - .with_workspace(client) - .with_workdir("./ci/benchmark") - .with_env_variable("WASM_BINDGEN_TEST_TIMEOUT", "120") - .with_exec(vec![ - "cargo", - "build", - "--tests", - "--release", - "--target", - "wasm32-unknown-unknown", - ]) - .with_exec_any(vec![ - "cargo", - "test", - "--release", - "--target", - "wasm32-unknown-unknown", - ])? - .get_result() - .await?; - - Ok(result - .stdout - .lines() - .map(str::trim) - .skip_while(|line| !line.starts_with("---NATRIX_BENCHMARK_START")) - .skip(1) - .take_while(|line| !line.starts_with("---NATRIX_BENCHMARK_END")) - .collect::>() - .join("\n")) -} diff --git a/justfile b/justfile index ca1887f..e69de29 100644 --- a/justfile +++ b/justfile @@ -1,20 +0,0 @@ -# Run full CI pipeline with optional job count -test jobs="1": - dagger --quiet run cargo run -p dagger_pipeline -- tests --jobs {{jobs}} - -# Run full CI pipeline with optional job count, just print out the result -test_tui jobs="1": - dagger --quiet run cargo run -p dagger_pipeline -- tests --jobs {{jobs}} --tui - -# Apply automatic fixes -fix: - dagger --quiet run cargo run -p dagger_pipeline -- fix - -# Open mdbook -book: - dagger --quiet run cargo run -p dagger_pipeline -- book - -# Run benchmarks -bench: - dagger --quiet run cargo run -p dagger_pipeline -- bench - diff --git a/main.snek b/main.snek new file mode 100644 index 0000000..e504188 --- /dev/null +++ b/main.snek @@ -0,0 +1 @@ +export DEFAULT = 10; From 0787e7c7650f12a25f8e3898ba93ab741bf1060d Mon Sep 17 00:00:00 2001 From: Viv Date: Mon, 28 Sep 2026 10:53:45 +0200 Subject: [PATCH 3/7] implement serpentine pipeline --- .gitignore | 1 + Cargo.lock | 47 ++++++++++++++- Cargo.toml | 3 - ci/integration_tests/Cargo.toml | 1 + ci/integration_tests_dependency/Cargo.toml | 2 + ci/snek/book.snek | 21 +++++++ ci/snek/core.snek | 39 +++++++++++++ ci/snek/integration_test.snek | 67 ++++++++++++++++++++++ ci/snek/lints.snek | 48 ++++++++++++++++ ci/snek/main.snek | 6 ++ ci/snek/unit_tests.snek | 17 ++++++ crates/natrix-cli/deny.toml | 7 +-- crates/natrix-cli/src/build/wasm_js.rs | 26 ++++++++- crates/natrix/Cargo.toml | 5 -- crates/natrix/deny.toml | 1 + crates/natrix/src/css/values/colors.rs | 2 +- crates/natrix/src/css/values/units.rs | 2 +- crates/natrix/src/dom/attributes.rs | 4 +- crates/natrix/src/error_handling.rs | 4 +- crates/natrix/src/lib.rs | 4 +- crates/natrix/src/type_macros.rs | 3 +- docs/book.toml | 12 ++-- docs/src/async-components.md | 8 +-- docs/src/cli-and-config.md | 2 +- docs/src/deployment-other.md | 4 +- docs/src/features.md | 6 +- docs/src/html.md | 30 +++++----- docs/src/panics.md | 2 +- docs/src/reactivity.md | 10 ++-- docs/src/ref.md | 16 +++--- docs/src/render-functions.md | 6 +- docs/src/state.md | 8 +-- docs/src/testing.md | 4 +- flake.lock | 8 +-- flake.nix | 58 +++++++++++++------ justfile | 2 + main.snek | 1 - 37 files changed, 386 insertions(+), 101 deletions(-) create mode 100644 ci/snek/book.snek create mode 100644 ci/snek/core.snek create mode 100644 ci/snek/integration_test.snek create mode 100644 ci/snek/lints.snek create mode 100644 ci/snek/main.snek create mode 100644 ci/snek/unit_tests.snek delete mode 100644 main.snek diff --git a/.gitignore b/.gitignore index 3329fa9..2f76411 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ target book dist .direnv +.jj diff --git a/Cargo.lock b/Cargo.lock index 3f7fe00..de09bcc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -855,6 +855,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" + [[package]] name = "http" version = "1.5.0" @@ -1221,6 +1227,23 @@ version = "2.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" +[[package]] +name = "is-terminal" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_ci" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" + [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -1432,7 +1455,6 @@ dependencies = [ "pin-project", "proptest", "proptest-derive", - "rustversion", "ryu", "serde", "simple_logger", @@ -1603,6 +1625,10 @@ name = "owo-colors" version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c45bb4a6ae1280ec0803b1ef9d3455eb50f01efbbe1447ab020f1d54fba9d8" +dependencies = [ + "supports-color 2.1.0", + "supports-color 3.0.2", +] [[package]] name = "oxc" @@ -2759,6 +2785,25 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "supports-color" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89" +dependencies = [ + "is-terminal", + "is_ci", +] + +[[package]] +name = "supports-color" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" +dependencies = [ + "is_ci", +] + [[package]] name = "syn" version = "1.0.109" diff --git a/Cargo.toml b/Cargo.toml index 87f9bcc..8c7d619 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,9 +26,6 @@ private_bounds = { level = "allow"} unfulfilled_lint_expectations = "warn" unsafe_code = "deny" -# https://github.com/proptest-rs/proptest/issues/447 -non_local_definitions = "allow" - [workspace.lints.clippy] pedantic = {level = "warn", priority = 1} todo = "deny" diff --git a/ci/integration_tests/Cargo.toml b/ci/integration_tests/Cargo.toml index f97063c..6f14540 100644 --- a/ci/integration_tests/Cargo.toml +++ b/ci/integration_tests/Cargo.toml @@ -27,3 +27,4 @@ build_test = [] __natrix_internal_bundle = ["natrix/_internal_bundle"] __natrix_internal_no_ssg = ["natrix/_internal_no_ssg"] +[lints] diff --git a/ci/integration_tests_dependency/Cargo.toml b/ci/integration_tests_dependency/Cargo.toml index 87d7593..93e9537 100644 --- a/ci/integration_tests_dependency/Cargo.toml +++ b/ci/integration_tests_dependency/Cargo.toml @@ -6,3 +6,5 @@ publish = false [dependencies] natrix = {path = "../../crates/natrix"} + +[lints] diff --git a/ci/snek/book.snek b/ci/snek/book.snek new file mode 100644 index 0000000..be0ec29 --- /dev/null +++ b/ci/snek/book.snek @@ -0,0 +1,21 @@ +import "./core.snek" as core; +import "@/rust.snek" as rust; + +base = rust::stable + > rust::WithBinstall("mdbook") + > rust::WithBinstall("mdbook-rustdoc-links"); + +export links = base + > rust::Chef(core::source_code, "cargo doc") + > WorkingDir("./docs") + > Exec("mdbook build"); + +export examples = base + > rust::Chef(core::source_code, "cargo build -p natrix --all-features --tests") + // Ensure there is only one copy of natrix in the target folder + > Exec("rm -f target/debug/deps/*natrix*") + > Exec("cargo build -p natrix --all-features --tests") + > WorkingDir("./docs") + > Exec("mdbook test -L ../target/debug/deps"); + +export all_book = All(links, examples); diff --git a/ci/snek/core.snek b/ci/snek/core.snek new file mode 100644 index 0000000..959a9f5 --- /dev/null +++ b/ci/snek/core.snek @@ -0,0 +1,39 @@ +import "@/rust.snek" as rust; + +export source_code = FromHost("."); +export debian = Image("debian:bookworm-slim"); + +chrome_version = "154.0.8037.57"; +download = debian + > Exec("apt update") + > Exec("apt install -y curl unzip"); + +def DownloadZip(kind) { + return download + > Exec(Join( + "curl -sSl https://storage.googleapis.com/chrome-for-testing-public/", + chrome_version, "/linux64/", kind, ".zip", + " -o ", "/tmp/output.zip" + )) + > Exec("unzip /tmp/output.zip -d /tmp/"); +} + +chromedriver = DownloadZip("chromedriver-linux64") > Export("/tmp/chromedriver-linux64/chromedriver"); +chrome = DownloadZip("chrome-linux64") > Export("/tmp/chrome-linux64/"); + +export wasm = rust::nightly + > Exec("apt update") + > Exec("apt install -y binaryen") + > Exec("rustup target add wasm32-unknown-unknown") + > Exec("rustup component add rust-src") + > rust::WithBinstall("wasm-bindgen-cli", "wasm-bindgen") + > rust::WithBinstall("wasm-bindgen-cli", "wasm-bindgen-test-runner") + > rust::WithBinstall("wasm-pack") + > With(chromedriver, "/bin/chromedriver") + > With(chrome, "/opt/chrome") + > Exec(" + while read pkg; do + apt-get satisfy -y --no-install-recommends \"${pkg}\"; + done < /opt/chrome/deb.deps; + ") + > Exec("ln -s /opt/chrome/chrome /bin/chrome"); diff --git a/ci/snek/integration_test.snek b/ci/snek/integration_test.snek new file mode 100644 index 0000000..0cff78c --- /dev/null +++ b/ci/snek/integration_test.snek @@ -0,0 +1,67 @@ +import "./core.snek" as core; +import "@/rust.snek" as rust; + +cli = rust::stable + > rust::WithChef(core::source_code, "cargo build --package natrix-cli") + > Export("./target/debug/natrix"); + +def WithCli(container) { + return With(container, cli, "/bin/natrix"); +} + +def ProjectGen(base, flags) { + project = base + > WithCli() + > With(core::source_code, "/install") + > Env("NATRIX_PATH", "/install/crates/natrix") + > WorkingDir("/") + > Exec(Join("natrix new project", flags)) + > WorkingDir("/project"); + + build = project > Exec("natrix build"); + test = project > Exec("wasm-pack test --headless --chrome"); + + return All(build, test); +} + +def NatrixDev(profile) { + return core::wasm + > WithCli() + > rust::Chef(core::source_code, Join("cargo build --package integration_tests --target wasm32-unknown-unknown --profile ", profile)) + > WorkingDir("./ci/integration_tests") + > ToService(Join("natrix dev --port 3000 --allow-external --no-reload --profile ", profile)) + > HealthCheck("curl localhost:3000", 120); +} + +def NatrixBuild() { + dist = core::wasm + > WithCli() + > rust::Chef(core::source_code, "cargo build --package integration_tests --target wasm32-unknown-unknown --profile release") + > WorkingDir("./ci/integration_tests") + > Exec("natrix build") + > Export("./dist"); + + return ImageService("nginx:alpine") > With(dist, "/usr/share/nginx/html/dist"); +} + +def ChromeDriver(page) { + return core::wasm + > WithService(page, "page.local") + > ToService("chromedriver --port=8000 --allowed-ips= --allowed-origins=* --remote-debugging-pipe --user-data-dir=/tmp/chrome"); +} + +def IntegrationTest(page, flags) { + return rust::stable + > rust::WithBinstall("cargo-nextest") + > rust::Chef(core::source_code, Join("cargo nextest run -p integration_tests", flags, " || true")) + > WithService(ChromeDriver(page), "chrome.local") + > Exec(Join("cargo nextest run -j 1 --fail-fast -p integration_tests ", flags)); +} + +export all_integration = All( + ProjectGen(core::wasm > Exec("rustup default stable"), " --stable"), + ProjectGen(core::wasm, ""), + IntegrationTest(NatrixDev("dev"), ""), + IntegrationTest(NatrixDev("release"), ""), + IntegrationTest(NatrixBuild(), "--features build_test") +); diff --git a/ci/snek/lints.snek b/ci/snek/lints.snek new file mode 100644 index 0000000..25ad231 --- /dev/null +++ b/ci/snek/lints.snek @@ -0,0 +1,48 @@ +import "./core.snek" as core; +import "@/rust.snek" as rust; + +export rustfmt = rust::FmtCheck(core::source_code, rust::nightly); +export typos = core::debian + > rust::WithBinstall("typos-cli", "typos") + > WorkingDir("/app") + > With(core::source_code, ".") + > Exec("typos"); + +// TODO: Add more lints +export clippy_native = rust::stable + > Exec("rustup component add clippy") + > rust::WithBinstall("cargo-hack") + > rust::WithChef(core::source_code, "cargo hack clippy --each-feature --all --all-targets -- -Dwarnings"); + +export clippy_wasm = core::wasm + > Exec("rustup component add clippy") + > rust::WithBinstall("cargo-hack") + > rust::WithChef(core::source_code, "cargo hack clippy --each-feature --package natrix --target wasm32-unknown-unknown -- -Dwarnings"); + +export minimal_versions = rust::nightly + > rust::WithBinstall("cargo-minimal-versions") + > rust::WithBinstall("cargo-hack") // used by minimal-versions internally + > rust::Chef(core::source_code, "cargo minimal-versions check --package natrix --direct --all-features") + > Exec("cargo check --package natrix --all-features"); + +// TODO: Make more strict +def CargoDeny(crate) { + return rust::stable + > rust::WithBinstall("cargo-deny") + > With(core::source_code, ".") + > WorkingDir("./crates") + > WorkingDir(crate) + > Exec("cargo deny check"); +} + + +export all_lints = All( + rustfmt, + typos, + clippy_native, + clippy_wasm, + minimal_versions + // FIX: Upgrade stuff that requires that. + // CargoDeny("natrix"), + // CargoDeny("natrix-cli") +); diff --git a/ci/snek/main.snek b/ci/snek/main.snek new file mode 100644 index 0000000..77a5c0a --- /dev/null +++ b/ci/snek/main.snek @@ -0,0 +1,6 @@ +import "./unit_tests.snek" as unit; +import "./integration_test.snek" as integration; +import "./lints.snek" as lint; +import "./book.snek" as book; + +export DEFAULT = All(unit::all_unit, integration::all_integration, lint::all_lints, book::all_book); diff --git a/ci/snek/unit_tests.snek b/ci/snek/unit_tests.snek new file mode 100644 index 0000000..7915656 --- /dev/null +++ b/ci/snek/unit_tests.snek @@ -0,0 +1,17 @@ +import "./core.snek" as core; +import "@/rust.snek" as rust; + +native_test_base = rust::stable + > rust::Chef(core::source_code, "cargo test --all-features && cargo test --all-features --package natrix"); + +export native_tests = native_test_base + > rust::WithBinstall("cargo-nextest") + > Exec("cargo nextest run --package natrix --all-features --no-fail-fast --offline"); + +export doc_tests = native_test_base + > Exec("cargo test --doc --all-features --offline"); + +export wasm_tests = core::wasm + > rust::WithChef(core::source_code, "cargo test --tests --target wasm32-unknown-unknown --package natrix --all-features"); + +export all_unit = All(native_tests, doc_tests, wasm_tests); diff --git a/crates/natrix-cli/deny.toml b/crates/natrix-cli/deny.toml index ee6d213..2e16fd7 100644 --- a/crates/natrix-cli/deny.toml +++ b/crates/natrix-cli/deny.toml @@ -1,8 +1,6 @@ [graph] -targets = [ - "x86_64-unknown-linux", -] all-features = true +exclude-dev = true [advisories] ignore = [ @@ -20,7 +18,8 @@ allow = [ "ISC", "CC0-1.0", "BSD-3-Clause", - "BSL-1.0" + "BSL-1.0", + "Unicode-3.0" ] [bans] diff --git a/crates/natrix-cli/src/build/wasm_js.rs b/crates/natrix-cli/src/build/wasm_js.rs index 7152871..c9ca931 100644 --- a/crates/natrix-cli/src/build/wasm_js.rs +++ b/crates/natrix-cli/src/build/wasm_js.rs @@ -5,6 +5,8 @@ use std::io::{BufRead, BufReader}; use std::path::{Path, PathBuf}; use std::{fs, process}; +use oxc::span::GetSpan; + use super::{BINDGEN_OUTPUT_NAME, MACRO_OUTPUT_DIR}; use crate::options::BuildProfile; use crate::prelude::*; @@ -45,6 +47,24 @@ impl<'a> oxc::ast_visit::VisitMut<'a> for RenameVisitor<'a> { it.property = new_identifier; } } + + fn visit_property_key(&mut self, it: &mut oxc::ast::ast::PropertyKey<'a>) { + oxc::ast_visit::walk_mut::walk_property_key(self, it); + + let Some(current_name) = it.static_name() else { + return; + }; + if let Some(new_name) = self.mapping.0.get(&*current_name) { + let new_name = self.allocator.alloc_str(new_name); + + let builder = oxc::ast::AstBuilder { + allocator: self.allocator, + }; + let new_identifier = builder.identifier_name(it.span(), new_name); + + *it = oxc::ast::ast::PropertyKey::StaticIdentifier(builder.alloc(new_identifier)); + } + } } /// Run wasmbindgen to generate the glue @@ -282,9 +302,11 @@ pub(crate) fn optimize_wasm(wasm_file: &PathBuf) -> Result { - format!("rgb({red} {green} {blue}/{alpha})",) + format!("rgb({red} {green} {blue}/{alpha})") } Self::Hsl { hue, diff --git a/crates/natrix/src/css/values/units.rs b/crates/natrix/src/css/values/units.rs index 37eb378..07ba434 100644 --- a/crates/natrix/src/css/values/units.rs +++ b/crates/natrix/src/css/values/units.rs @@ -79,7 +79,7 @@ macro_rules! define_length_enum { // - one usize in 0..VARIANT_COUNT // and map to the corresponding variant. #[cfg(all(test, not(target_arch = "wasm32")))] - #[expect(clippy::arithmetic_side_effects, unused_assignments, reason="Tests")] + #[expect(clippy::arithmetic_side_effects, reason="Tests")] impl proptest::arbitrary::Arbitrary for Length { type Parameters = (); type Strategy = proptest::strategy::BoxedStrategy; diff --git a/crates/natrix/src/dom/attributes.rs b/crates/natrix/src/dom/attributes.rs index 4ffb6ef..7d41c95 100644 --- a/crates/natrix/src/dom/attributes.rs +++ b/crates/natrix/src/dom/attributes.rs @@ -797,8 +797,8 @@ impl ToAttribute for AutoComplete { } if let Some(detail) = detail { match detail { - DetailTokenPart::Contact(recpient, kind) => { - result.push_str(recpient.render()); + DetailTokenPart::Contact(recipient, kind) => { + result.push_str(recipient.render()); result.push(' '); result.push_str(kind.render()); } diff --git a/crates/natrix/src/error_handling.rs b/crates/natrix/src/error_handling.rs index 999210f..997be18 100644 --- a/crates/natrix/src/error_handling.rs +++ b/crates/natrix/src/error_handling.rs @@ -65,7 +65,9 @@ macro_rules! log_or_panic { }; } -pub(crate) use {log_or_panic, log_or_panic_assert, log_or_panic_result}; +pub(crate) use log_or_panic; +pub(crate) use log_or_panic_assert; +pub(crate) use log_or_panic_result; #[cfg(test)] mod tests { diff --git a/crates/natrix/src/lib.rs b/crates/natrix/src/lib.rs index e332abd..dafb4f1 100644 --- a/crates/natrix/src/lib.rs +++ b/crates/natrix/src/lib.rs @@ -82,9 +82,11 @@ pub use reactivity::mount::mount; /// Public exports of internal data structures for `natrix_macros` (and `macro_rules`) to use in generated code. #[doc(hidden)] pub mod macro_ref { + pub use const_base; + pub use const_sha1; #[cfg(feature = "_internal_collect_css")] pub use inventory; - pub use {const_base, const_sha1, log}; + pub use log; pub use super::css; pub use super::dom::element::Element; diff --git a/crates/natrix/src/type_macros.rs b/crates/natrix/src/type_macros.rs index 6cb1f8e..2067a9e 100644 --- a/crates/natrix/src/type_macros.rs +++ b/crates/natrix/src/type_macros.rs @@ -41,4 +41,5 @@ macro_rules! numerics { }; } -pub(crate) use {numerics, strings}; +pub(crate) use numerics; +pub(crate) use strings; diff --git a/docs/book.toml b/docs/book.toml index b27a08b..7bac385 100644 --- a/docs/book.toml +++ b/docs/book.toml @@ -1,7 +1,6 @@ [book] authors = ["Viv"] language = "en" -multilingual = false src = "src" title = "Natrix" @@ -11,11 +10,10 @@ edition = "2024" [output.html.playground] runnable = false -[preprocessor.callouts] -[preprocessor.rustdoc-link] -manifest-dir = "../crates/natrix" +[preprocessor.rustdoc-links] after = ["links"] -cargo-features = ["all"] -cache-dir = "../target/doc-cache" +renderers = ["html"] fail-on-warnings = "always" -#rust-analyzer-timeout = 300 # 5 minutes + +[preprocessor.rustdoc-links.build] +all-features = true diff --git a/docs/src/async-components.md b/docs/src/async-components.md index 6a03e9c..e6240a0 100644 --- a/docs/src/async-components.md +++ b/docs/src/async-components.md @@ -1,19 +1,19 @@ # Async Async is a really important part of any web application, as it's how you do IO and talk to other services or your backend. -Natrix provides [`AsyncCtxHandle`](reactivity::AsyncCtxHandle), via the [`.use_async`](prelude::EventCtx::use_async) Method. +Natrix provides [`AsyncCtxHandle`](natrix::reactivity::AsyncCtxHandle), via the [`.use_async`](natrix::prelude::EventCtx::use_async) Method. ## What is a `AsyncCtxHandle`? Internally natrix stores the state as a `Rc>`, `AsyncCtxHandle` is a wrapper around a [`Weak<...>`](std::rc::Weak) version of the same state, that exposes a limited safe api to allow you to borrow the state at arbitrary points in the code. -The main method on a async handle is the [`.update`](reactivity::AsyncCtxHandle::update) method, which allows you to borrow the state mutably. This returns a `Option<...>`, if this returns [`None`](std::option::Option::None), then the root element is dropped and you should in most case return/cancel the current task. +The main method on a async handle is the [`.update`](natrix::reactivity::AsyncCtxHandle::update) method, which allows you to borrow the state mutably. This returns a `Option<...>`, if this returns [`None`], then the root element is dropped and you should in most case return/cancel the current task. -On borrowing (via [`.update`](reactivity::AsyncCtxHandle::update)) the framework will clear the reactive state of signals, and will trigger a reactive update on closure return. (i.e the framework will keep the UI in sync with changes). But this also means you should not borrow this in a loop, and should prefer to borrow it for the maximum amount of time that doesn't hold it across a yield point. +On borrowing (via [`.update`](natrix::reactivity::AsyncCtxHandle::update)) the framework will clear the reactive state of signals, and will trigger a reactive update on closure return. (i.e the framework will keep the UI in sync with changes). But this also means you should not borrow this in a loop, and should prefer to borrow it for the maximum amount of time that doesn't hold it across a yield point. ## `.use_async` -The [`.use_async`](prelude::EventCtx::use_async) method takes a async closure and schedules it to run with a [`AsyncCtxhandle`](reactivity::AsyncCtxHandle) borrowed from the state. The closure should return `Option<()>`, This is to allow use of `?` to return early if the render tree is dropped. +The [`.use_async`](natrix::prelude::EventCtx::use_async) method takes a async closure and schedules it to run with a [`AsyncCtxhandle`](natrix::reactivity::AsyncCtxHandle) borrowed from the state. The closure should return `Option<()>`, This is to allow use of `?` to return early if the render tree is dropped. ```rust # extern crate natrix; diff --git a/docs/src/cli-and-config.md b/docs/src/cli-and-config.md index 8ad9a86..69a2b7e 100644 --- a/docs/src/cli-and-config.md +++ b/docs/src/cli-and-config.md @@ -86,7 +86,7 @@ This configures all asset URLs to be prefixed with the specified path. > Always include a leading slash in your `base_path` value. ### SSG -By default natrix extracts metadata from your application, importantly for this to work your application must call [`mount`](reactivity::mount::mount), and should not access any browser apis before or after it. +By default natrix extracts metadata from your application, importantly for this to work your application must call [`mount`](natrix::reactivity::mount::mount), and should not access any browser apis before or after it. If your application does not use `mount` you should set this option to `false`. This will force css to be injected at runtime instead, and more importantly will not attempt to build and call your binary during bundling. diff --git a/docs/src/deployment-other.md b/docs/src/deployment-other.md index c38ba91..ffdc13a 100644 --- a/docs/src/deployment-other.md +++ b/docs/src/deployment-other.md @@ -1,7 +1,7 @@ # Usage in other frameworks -The [`mount_at`](reactivity::mount::mount_at) function can be used to mount a natrix element at a custom location. -This function will return a [`RenderResult`](reactivity::mount::RenderResult) that should be kept alive until the element is unmounted. +The [`mount_at`](natrix::reactivity::mount::mount_at) function can be used to mount a natrix element at a custom location. +This function will return a [`RenderResult`](natrix::reactivity::mount::RenderResult) that should be kept alive until the element is unmounted. And ideally dropped when the element is unmounted. > [!IMPORTANT] diff --git a/docs/src/features.md b/docs/src/features.md index 83156fa..23a5b43 100644 --- a/docs/src/features.md +++ b/docs/src/features.md @@ -12,13 +12,13 @@ The intent is that even if a library uses all the below features it should not b * `async` ### `console_log` -Automatically sets up [`console_log`](https://crates.io/crates/console_log) on [`mount`](reactivity::mount::mount). +Automatically sets up [`console_log`](https://crates.io/crates/console_log) on [`mount`](natrix::reactivity::mount::mount). ### `async` -Enables the use of [`ctx.use_async`](prelude::EventCtx::use_async) +Enables the use of [`ctx.use_async`](natrix::prelude::EventCtx::use_async) ### `async_utils` -Enables the various async wrappers for browser apis in [`async_utils`](async_utils) +Enables the various async wrappers for browser apis in [`async_utils`](natrix::async_utils) ### `test_utils` Various testing utilities, this should be enabled via a `[dev-dependencies]`. diff --git a/docs/src/html.md b/docs/src/html.md index 99201ee..c938675 100644 --- a/docs/src/html.md +++ b/docs/src/html.md @@ -3,9 +3,9 @@ Html elements are the building blocks of web pages. While other rust frameworks aim for a JSX-like syntax, this library uses a more traditional approach. The goal is to provide a simple and efficient way to create HTML elements without the need for complex syntax, we use the idomatic rust builder pattern. -Natrix uses a single [`HtmlElement`](dom::html_elements::HtmlElement) struct to represent all HTML elements. But exposes helper functions for each tag. -These are found along side the `HtmlElement` struct in the [`html_elements`](dom::html_elements) module. -Which will most commonly be used via the `e` alias in the [`prelude`](prelude) module. +Natrix uses a single [`HtmlElement`](natrix::dom::html_elements::HtmlElement) struct to represent all HTML elements. But exposes helper functions for each tag. +These are found along side the `HtmlElement` struct in the [`html_elements`](natrix::dom::html_elements) module. +Which will most commonly be used via the `e` alias in the [`prelude`](natrix::prelude) module. ```rust,no_run # extern crate natrix; @@ -15,7 +15,7 @@ e::div() # ; ``` -If you need to construct a element with a tag not found in the library you can use [`HtmlElement::new`](dom::html_elements::HtmlElement::new). +If you need to construct a element with a tag not found in the library you can use [`HtmlElement::new`](natrix::dom::html_elements::HtmlElement::new). ```rust,no_run # extern crate natrix; @@ -27,7 +27,7 @@ e::HtmlElement::new("custom_tag") ## Children -Children are added using the [`.child`](dom::html_elements::HtmlElement::child) method. This method takes a single child element and adds it to the parent element. +Children are added using the [`.child`](natrix::dom::html_elements::HtmlElement::child) method. This method takes a single child element and adds it to the parent element. ```rust,no_run # extern crate natrix; @@ -40,11 +40,11 @@ e::div() ``` > [!TIP] -> the [`.text`](dom::html_elements::HtmlElement::text) method is a alias for [`.child`](dom::html_elements::HtmlElement::child) +> the [`.text`](natrix::dom::html_elements::HtmlElement::text) method is a alias for [`.child`](natrix::dom::html_elements::HtmlElement::child) -Child elements can be any type that implements the [`Element`](dom::element::Element) trait, including other [`HtmlElement`](dom::html_elements::HtmlElement) instances, and stdlib types like [`String`](std::string::String), [`&str`](std::primitive::str), [`i32`](std::primitive::i32), as well as containers such as [`Option`](std::option::Option) and [`Result`](std::result::Result). +Child elements can be any type that implements the [`Element`](natrix::dom::element::Element) trait, including other [`HtmlElement`](natrix::dom::html_elements::HtmlElement) instances, and stdlib types like [`String`], [`&str`](std::primitive::str), [`i32`], as well as containers such as [`Option`] and [`Result`]. -Child elements can also be reactive as closures implement the [`Element`](dom::element::Element) trait. +Child elements can also be reactive as closures implement the [`Element`](natrix::dom::element::Element) trait. ```rust # extern crate natrix; @@ -74,7 +74,7 @@ e::div() ``` ## `format_elements` -You can use the [`format_elements`](format_elements) macro to get `format!` like ergonomics for elements. +You can use the [`format_elements`](natrix::format_elements) macro to get `format!` like ergonomics for elements. ```rust # extern crate natrix; # use natrix::prelude::*; @@ -138,7 +138,7 @@ e::h1().children(natrix::format_elements!( ## Attributes -Attributes are set using the [`.attr`](dom::html_elements::HtmlElement::attr) method. This method takes a key and a value, and sets the attribute on the element. +Attributes are set using the [`.attr`](natrix::dom::html_elements::HtmlElement::attr) method. This method takes a key and a value, and sets the attribute on the element. ```rust,no_run # extern crate natrix; @@ -177,8 +177,8 @@ e::div() # ; ``` -Attributes can be set by anything that implements the [`ToAttribute`](dom::ToAttribute) trait, this includes numerics, [`Option`](std::option::Option), and [`bool`](std::primitive::bool), and others. -Attributes can also be reactive as closures implement the [`ToAttribute`](dom::ToAttribute) trait. +Attributes can be set by anything that implements the [`ToAttribute`](natrix::dom::ToAttribute) trait, this includes numerics, [`Option`], and [`bool`], and others. +Attributes can also be reactive as closures implement the [`ToAttribute`](natrix::dom::ToAttribute) trait. ```rust,no_run # extern crate natrix; @@ -199,7 +199,7 @@ e::button() # } ``` -Importantly for the attribute helpers [`AttributeKind`](dom::attributes::ToAttribute::AttributeKind) determines what kind of values are allowed for that helper. Important a attribute kind of for example `bool` also supports `Option`, a closure returning `bool`, etc. For example this wont compile: +Importantly for the attribute helpers [`AttributeKind`](natrix::dom::attributes::ToAttribute::AttributeKind) determines what kind of values are allowed for that helper. Important a attribute kind of for example `bool` also supports `Option`, a closure returning `bool`, etc. For example this wont compile: ```rust,compile_fail # extern crate natrix; # use natrix::prelude::*; @@ -211,7 +211,7 @@ e::a() ## Classes -The [`.class`](dom::html_elements::HtmlElement::class) method is _not_ a alias for [`.attr`](dom::html_elements::HtmlElement::attr), it will add the class to the element, and not replace it. This is because the `class` attribute is a special case in HTML, and is used to apply CSS styles to elements. The [`.class`](dom::html_elements::HtmlElement::class) method will add the class to the element, and not replace any existing ones. +The [`.class`](natrix::dom::html_elements::HtmlElement::class) method is _not_ a alias for [`.attr`](natrix::dom::html_elements::HtmlElement::attr), it will add the class to the element, and not replace it. This is because the `class` attribute is a special case in HTML, and is used to apply CSS styles to elements. The [`.class`](natrix::dom::html_elements::HtmlElement::class) method will add the class to the element, and not replace any existing ones. ```rust,no_run # extern crate natrix; @@ -227,7 +227,7 @@ e::div() # ; ``` -Classes can also be reactive as closures implement the [`ToClass`](dom::ToClass) trait. +Classes can also be reactive as closures implement the [`ToClass`](natrix::dom::ToClass) trait. ```rust # extern crate natrix; diff --git a/docs/src/panics.md b/docs/src/panics.md index 1a5c7e5..78e9de4 100644 --- a/docs/src/panics.md +++ b/docs/src/panics.md @@ -19,7 +19,7 @@ The framework makes liberal use of debug only panics, but is very careful about ### Very unlikely - **Window or Document Not Found** - If the window or document is not found, natrix will panic. -- **Mount Not Found** - if [`mount`](reactivity::mount::mount) fails to find the standard natrix mount point it will error. +- **Mount Not Found** - if [`mount`](natrix::reactivity::mount::mount) fails to find the standard natrix mount point it will error. ### User Errors - **User Panics** - This one should be obvious. diff --git a/docs/src/reactivity.md b/docs/src/reactivity.md index 833858b..91c0ca5 100644 --- a/docs/src/reactivity.md +++ b/docs/src/reactivity.md @@ -16,7 +16,7 @@ Lets go into some more detail about what this does. Both `RenderCtx` and `EventC > type R<'s, 'r> = RenderCtx<'s, 'r, App>; > ``` -The callbacks return a value that implements [`Element`](dom::element::Element), internally the framework will register which fields you accessed. +The callbacks return a value that implements [`Element`](natrix::dom::element::Element), internally the framework will register which fields you accessed. And when those fields change, the framework will recall the callback and update the element with the result. Natrix does **_not_** use a virtual dom, meaning when a callback is re-called the framework will swap out the entire associated element. @@ -35,7 +35,7 @@ Natrix _only_ makes the following guarantees about when a callback will be calle Thats it, natrix does not make any guarantees about the order of sibling callbacks. ## Returning different kinds of elements. -Sometimes two branches returns different kinds of elements, this can be solved using `Result`, or by pre-rendering them using [`.render`](dom::element::Element::render). Which produces the internal result of a element render (which itself implements `Element` for this exact purpose) +Sometimes two branches returns different kinds of elements, this can be solved using `Result`, or by pre-rendering them using [`.render`](natrix::dom::element::Element::render). Which produces the internal result of a element render (which itself implements `Element` for this exact purpose) ```rust # extern crate natrix; @@ -58,7 +58,7 @@ e::div() ``` > [!TIP] -> For handling multiple types of html elements, theres [`.generic()`](dom::html_elements::HtmlElement::generic), which returns `HtmlElement`, i.e erases the dom tag, allowing you to for example construct different tags in a `if`, and then later call methods on it. Ofc doing this means only global attribute helpers can be used, but you can always use `.attr` directly. +> For handling multiple types of html elements, theres [`.generic()`](natrix::dom::html_elements::HtmlElement::generic), which returns `HtmlElement`, i.e erases the dom tag, allowing you to for example construct different tags in a `if`, and then later call methods on it. Ofc doing this means only global attribute helpers can be used, but you can always use `.attr` directly. ## Signal-based Reactivity @@ -86,7 +86,7 @@ The reactivity system automatically tracks when `ctx.value` is accessed and will ## Computed values What if you have something that depends on a computed value? if you did `if *ctx.value > 2` then that reactive closure would re-run whenever `.value` changes. -This is where [`ctx.watch`](prelude::RenderCtx::watch) comes in, this caches the result of the computation and only re-runs the parent closure if the calculated value changes. +This is where [`ctx.watch`](natrix::prelude::RenderCtx::watch) comes in, this caches the result of the computation and only re-runs the parent closure if the calculated value changes. ```rust # extern crate natrix; @@ -186,7 +186,7 @@ Specifically `ctx.guard(...)` on a lens for `Option` will return a `Option) -> Ref + 'static) -> impl Element { ``` ### `Getter` -the [`Getter`](access::Getter) trait is a alias for the most common form of getter. +the [`Getter`](natrix::access::Getter) trait is a alias for the most common form of getter. `impl Getter` is `impl Fn(Ref) -> Ref + Clone + 'static`, ```rust @@ -45,7 +45,7 @@ fn counter(value: impl Getter) -> impl Element { ### `.call_read`/`.call_mut` Calling these closures directly would require unwrapping on the result, even tho all valid closures should return a know variant. -For this we provide the [`RefClosure`](access::RefClosure) trait, which provides the `.call_read` and `.call_mut` methods +For this we provide the [`RefClosure`](natrix::access::RefClosure) trait, which provides the `.call_read` and `.call_mut` methods which wrap your reference in the appropriate variant and unwraps on the result. ```rust @@ -62,11 +62,11 @@ fn counter(value: impl Getter) -> impl Element { } ``` `RefClosure` is implemented for most closures that take a `Ref` and return a type *containing* a `Ref`. -More specifically, if the return type implements [`Downgrade`](access::Downgrade). +More specifically, if the return type implements [`Downgrade`](natrix::access::Downgrade). For example using `.call_read` with a closure returning `Option>` will yield a `Option<&T>` ### `.map` -the [`.map`](access::Ref::map) method takes two closures, a read and a write one, and apply them to the `Ref` depending on the current variant. +the [`.map`](natrix::access::Ref::map) method takes two closures, a read and a write one, and apply them to the `Ref` depending on the current variant. ```rust # extern crate natrix; # use natrix::prelude::*; @@ -116,13 +116,13 @@ The `field!` macro also support a expression as the value, but this requires usi `field!((user_getter(ctx)).favorite_book.title)` ### `Deref` -Naturally you will often hit `Signal` in your access chains, [`.deref`](access::Ref::deref) can be used if the value implements both `Deref` and `DerefMut`, which `Signal` does. Or for example if you have a `String` and a component wants `Ref`. +Naturally you will often hit `Signal` in your access chains, [`.deref`](natrix::access::Ref::deref) can be used if the value implements both `Deref` and `DerefMut`, which `Signal` does. Or for example if you have a `String` and a component wants `Ref`. ### `.project` -Often it can be useful to transform from `Ref>` to `Option>`, this is where [`.project`](access::Ref::project) and the [`Project`](access::Project) trait come in. +Often it can be useful to transform from `Ref>` to `Option>`, this is where [`.project`](natrix::access::Ref::project) and the [`Project`](natrix::access::Project) trait come in. They allow you to do these transformations in your getters, for example if a function wants `Option>` and you have a `Ref>` you can use `.project()`. -This is very often used with [`.guard_*`](prelude::RenderCtx::guard_option). +This is very often used with [`.guard_*`](natrix::prelude::RenderCtx::guard_option). ### `with!` Often we dont want to add `Copy` bounds to the getters without reason, but cloning gets annoying. You usually find yourself needing to do: diff --git a/docs/src/render-functions.md b/docs/src/render-functions.md index e4a5fca..7fb84d7 100644 --- a/docs/src/render-functions.md +++ b/docs/src/render-functions.md @@ -79,7 +79,7 @@ Now only the name part will update when `user_name` changes, not the entire gree ## Event Handlers -You can pass event handlers to render functions using the [`EventHandler`](dom::events::EventHandler) trait: +You can pass event handlers to render functions using the [`EventHandler`](natrix::dom::events::EventHandler) trait: ```rust # extern crate natrix; @@ -138,8 +138,8 @@ fn render_app() -> impl Element { ## Generic state access. What if you want a more reusable component, lets say a slider? For this rust just uses closures, kinda. -Pure rust closures dont allow for combined read and mut paths, so natrix uses [`Ref`](access::Ref), see the [Getters Chapther](ref.md) for detailed docs on them. -[`Getter`](access::Getter) is a ergonomic "Alias Trait" for closures that take a `Ref` as the first argument, are cloneable, and are `'static`, all of which basically all closures in natrix need or might need at some point (and basically all closures will be), it saves you from having to write longer bounds, as well as needing to propagate a `Clone` bound after refactors as `Clone` is the default with `Getter`. +Pure rust closures dont allow for combined read and mut paths, so natrix uses [`Ref`](natrix::access::Ref), see the [Getters Chapther](ref.md) for detailed docs on them. +[`Getter`](natrix::access::Getter) is a ergonomic "Alias Trait" for closures that take a `Ref` as the first argument, are cloneable, and are `'static`, all of which basically all closures in natrix need or might need at some point (and basically all closures will be), it saves you from having to write longer bounds, as well as needing to propagate a `Clone` bound after refactors as `Clone` is the default with `Getter`. ```rust # extern crate natrix; diff --git a/docs/src/state.md b/docs/src/state.md index 5664d1a..3154d53 100644 --- a/docs/src/state.md +++ b/docs/src/state.md @@ -1,6 +1,6 @@ # State -State in natrix usually refers to stuff implementing the [`State`](reactivity::State) trait. +State in natrix usually refers to stuff implementing the [`State`](natrix::reactivity::State) trait. This trait is a **marker** trait, and is intended to be implemented by the `State` derive macro, which will insert bounds to assert that all your fields are also `State`. ```rust @@ -46,7 +46,7 @@ Now you get fine-grained reactivity on the `book` fields. > [!IMPORTANT] > Never directly overwrite a `State`. Doing this will not trigger reactive updates. and will break your app. -> Use [`.set`](prelude::State::set) instead. +> Use [`.set`](natrix::prelude::State::set) instead. > ```rust > # extern crate natrix; > # use natrix::prelude::*; @@ -65,7 +65,7 @@ Now you get fine-grained reactivity on the `book` fields. > This also includes overwriting any `State` struct directly, like `ctx.book = Book::...` ## `Signal` -the [`Signal`](prelude::Signal) is the core reactive primitive in natrix, and implements read and write tracking on derefrencing. +the [`Signal`](natrix::prelude::Signal) is the core reactive primitive in natrix, and implements read and write tracking on derefrencing. ```rust # extern crate natrix; @@ -87,7 +87,7 @@ fn render() -> impl Element { ``` ## `ProjectableSignal` -The [`ProjectableSignal`](reactivity::signal::ProjectableSignal) allows you to use fine-grained reactivity over certain wrapper types that dont implement the required tracking internally, such as most enums. When you have a `Ref` to the value you can use [`.project_signal`](access::Ref::project_signal) to get a projected `Ref` to the inner value. +The [`ProjectableSignal`](natrix::reactivity::signal::ProjectableSignal) allows you to use fine-grained reactivity over certain wrapper types that dont implement the required tracking internally, such as most enums. When you have a `Ref` to the value you can use [`.project_signal`](natrix::access::Ref::project_signal) to get a projected `Ref` to the inner value. ```rust # extern crate natrix; diff --git a/docs/src/testing.md b/docs/src/testing.md index 220ff72..68167b3 100644 --- a/docs/src/testing.md +++ b/docs/src/testing.md @@ -1,9 +1,9 @@ # Testing Testing is a important part of any project. Natrix doesnt have a dedicated testing framework, instead we recommend you use [wasm-pack](https://rustwasm.github.io/wasm-pack/) to run your tests. -But natrix does provide the [`test_utils`](crate::test_utils) module to help with testing, which is enabled with the `test_utils` feature flag. +But natrix does provide the [`test_utils`](natrix::test_utils) module to help with testing, which is enabled with the `test_utils` feature flag. -The primary functions are [`mount_test`](crate::test_utils::mount_test) and [`get`](crate::test_utils::get). +The primary functions are [`mount_test`](natrix::test_utils::mount_test) and [`get`](natrix::test_utils::get). ## Example diff --git a/flake.lock b/flake.lock index 5ac8637..712a4f6 100644 --- a/flake.lock +++ b/flake.lock @@ -68,16 +68,16 @@ ] }, "locked": { - "lastModified": 1790461918, - "narHash": "sha256-vy506LetXQKb5krmK62+br1itoS7TgJrjnrSVQfJwhU=", + "lastModified": 1790617751, + "narHash": "sha256-ffctC5Ptu02y2qDlSPHG1tCYlRoPSmc88szA+CNLuWA=", "owner": "Serpent-Tools", "repo": "serpentine", - "rev": "94a7424fb6e8e14d5ad198b2847ea5b0b52ff28b", + "rev": "576003e54f13d1032141e2337c9814479c911ff2", "type": "github" }, "original": { "owner": "Serpent-Tools", - "ref": "v1.0.1", + "ref": "v1.0.2", "repo": "serpentine", "type": "github" } diff --git a/flake.nix b/flake.nix index d03ff6f..8185a03 100644 --- a/flake.nix +++ b/flake.nix @@ -8,7 +8,7 @@ inputs.nixpkgs.follows = "nixpkgs"; }; serpentine = { - url = "github:Serpent-Tools/serpentine/v1.0.1"; + url = "github:Serpent-Tools/serpentine/v1.0.2"; inputs.nixpkgs.follows = "nixpkgs"; }; }; @@ -43,26 +43,46 @@ ); in { - devShells = forAllSystems (pkgs: { - default = pkgs.mkShell { - packages = [ - (pkgs.fenix.latest.withComponents [ - "cargo" - "clippy" - "rustc" + devShells = forAllSystems ( + pkgs: + let + wasm-bindgen-cli = pkgs.buildWasmBindgenCli rec { + src = pkgs.fetchCrate { + pname = "wasm-bindgen-cli"; + version = "0.2.129"; + hash = "sha256-pcecKQd7E8Opw6bkFoE569epUi7gh5qpQF1e5PJY6V8="; + }; + cargoDeps = pkgs.rustPlatform.fetchCargoVendor { + inherit src; + inherit (src) pname version; + hash = "sha256-vmUrWVU7kPJJxO5qIVeAkwQyWDELO1Z4Z5gitz2kco8="; + }; + }; + in + { + default = pkgs.mkShell { + packages = [ + (pkgs.fenix.combine [ + (pkgs.fenix.latest.withComponents [ + "cargo" + "clippy" + "rustc" - "rust-analyzer" - "rustfmt" + "rust-analyzer" + "rustfmt" - "rust-src" - ]) - pkgs.serpentine - pkgs.just + "rust-src" + ]) + pkgs.fenix.targets.wasm32-unknown-unknown.latest.rust-std + ]) + pkgs.serpentine + pkgs.just - pkgs.wasm-bindgen-cli_0_2_100 - pkgs.binaryen - ]; - }; - }); + wasm-bindgen-cli + pkgs.binaryen + ]; + }; + } + ); }; } diff --git a/justfile b/justfile index e69de29..cb699e9 100644 --- a/justfile +++ b/justfile @@ -0,0 +1,2 @@ +ci: + serpentine run --pipeline ./ci/snek/main.snek --jobs 4 diff --git a/main.snek b/main.snek deleted file mode 100644 index e504188..0000000 --- a/main.snek +++ /dev/null @@ -1 +0,0 @@ -export DEFAULT = 10; From df858a67f2d2921f67244311b27a165b11fdfc96 Mon Sep 17 00:00:00 2001 From: Viv Date: Mon, 28 Sep 2026 21:44:04 +0200 Subject: [PATCH 4/7] make cargo-deny pass --- Cargo.lock | 37 +++----------------------- Cargo.toml | 4 +++ ci/snek/book.snek | 7 ++--- ci/snek/integration_test.snek | 4 +-- ci/snek/lints.snek | 7 +++-- ci/snek/main.snek | 3 +++ crates/natrix-cli/Cargo.toml | 4 +-- crates/natrix-cli/deny.toml | 7 ----- crates/natrix-cli/src/build/assets.rs | 5 +--- crates/natrix-cli/src/build/wasm_js.rs | 5 +--- crates/natrix/Cargo.toml | 2 +- crates/natrix/deny.toml | 4 +++ crates/natrix_macros/Cargo.toml | 2 +- crates/natrix_macros/src/lib.rs | 20 +++++--------- crates/natrix_shared/Cargo.toml | 5 ++-- crates/natrix_shared/src/lib.rs | 13 +++------ justfile | 9 ++++++- 17 files changed, 50 insertions(+), 88 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index de09bcc..5d62b21 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -146,26 +146,6 @@ dependencies = [ "vsimd", ] -[[package]] -name = "bincode" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" -dependencies = [ - "bincode_derive", - "serde", - "unty", -] - -[[package]] -name = "bincode_derive" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09" -dependencies = [ - "virtue", -] - [[package]] name = "bit-set" version = "0.8.0" @@ -1500,14 +1480,15 @@ dependencies = [ "natrix_shared", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] name = "natrix_shared" version = "0.3.0" dependencies = [ - "bincode", + "serde", + "serde_json", ] [[package]] @@ -3225,12 +3206,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "unty" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" - [[package]] name = "url" version = "2.5.8" @@ -3277,12 +3252,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "virtue" -version = "0.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" - [[package]] name = "vsimd" version = "0.8.0" diff --git a/Cargo.toml b/Cargo.toml index 8c7d619..e65d1c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,10 @@ exclude = [ "ci/benchmark", ] +[workspace.dependencies] +serde = { version = "1.0.229", default-features = false } +serde_json = { version = "1.0.151", default-features = false, features = ["std"] } + [profile.release] opt-level = "z" codegen-units = 1 diff --git a/ci/snek/book.snek b/ci/snek/book.snek index be0ec29..dd89d5f 100644 --- a/ci/snek/book.snek +++ b/ci/snek/book.snek @@ -5,10 +5,11 @@ base = rust::stable > rust::WithBinstall("mdbook") > rust::WithBinstall("mdbook-rustdoc-links"); -export links = base +export book = base > rust::Chef(core::source_code, "cargo doc") > WorkingDir("./docs") - > Exec("mdbook build"); + > Exec("mdbook build") + > Export("./book"); export examples = base > rust::Chef(core::source_code, "cargo build -p natrix --all-features --tests") @@ -18,4 +19,4 @@ export examples = base > WorkingDir("./docs") > Exec("mdbook test -L ../target/debug/deps"); -export all_book = All(links, examples); +export all_book = All(book, examples); diff --git a/ci/snek/integration_test.snek b/ci/snek/integration_test.snek index 0cff78c..5b02f29 100644 --- a/ci/snek/integration_test.snek +++ b/ci/snek/integration_test.snek @@ -26,8 +26,8 @@ def ProjectGen(base, flags) { def NatrixDev(profile) { return core::wasm - > WithCli() > rust::Chef(core::source_code, Join("cargo build --package integration_tests --target wasm32-unknown-unknown --profile ", profile)) + > WithCli() > WorkingDir("./ci/integration_tests") > ToService(Join("natrix dev --port 3000 --allow-external --no-reload --profile ", profile)) > HealthCheck("curl localhost:3000", 120); @@ -35,8 +35,8 @@ def NatrixDev(profile) { def NatrixBuild() { dist = core::wasm - > WithCli() > rust::Chef(core::source_code, "cargo build --package integration_tests --target wasm32-unknown-unknown --profile release") + > WithCli() > WorkingDir("./ci/integration_tests") > Exec("natrix build") > Export("./dist"); diff --git a/ci/snek/lints.snek b/ci/snek/lints.snek index 25ad231..2bc61da 100644 --- a/ci/snek/lints.snek +++ b/ci/snek/lints.snek @@ -41,8 +41,7 @@ export all_lints = All( typos, clippy_native, clippy_wasm, - minimal_versions - // FIX: Upgrade stuff that requires that. - // CargoDeny("natrix"), - // CargoDeny("natrix-cli") + minimal_versions, + CargoDeny("natrix"), + CargoDeny("natrix-cli") ); diff --git a/ci/snek/main.snek b/ci/snek/main.snek index 77a5c0a..0968ee1 100644 --- a/ci/snek/main.snek +++ b/ci/snek/main.snek @@ -4,3 +4,6 @@ import "./lints.snek" as lint; import "./book.snek" as book; export DEFAULT = All(unit::all_unit, integration::all_integration, lint::all_lints, book::all_book); +export FAST = All(unit::all_unit, lint::all_lints, book::all_book); + +export BOOK = ToHost(book::book, "./target/book"); diff --git a/crates/natrix-cli/Cargo.toml b/crates/natrix-cli/Cargo.toml index d89ebd6..faf1620 100644 --- a/crates/natrix-cli/Cargo.toml +++ b/crates/natrix-cli/Cargo.toml @@ -37,8 +37,8 @@ tungstenite = { version = "0.27.0" } ignore = "0.4.23" # Serialization -serde = { version = "1.0.219", features = ["derive"] } -serde_json = "1.0.143" +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true [[bin]] diff --git a/crates/natrix-cli/deny.toml b/crates/natrix-cli/deny.toml index 2e16fd7..c99a157 100644 --- a/crates/natrix-cli/deny.toml +++ b/crates/natrix-cli/deny.toml @@ -2,19 +2,12 @@ all-features = true exclude-dev = true -[advisories] -ignore = [ - { id="RUSTSEC-2024-0436", reason="Used by lightningcss"} -] - [licenses] allow = [ "MIT", "Zlib", "Apache-2.0", "MPL-2.0", - "Unicode-3.0", - "Unicode-DFS-2016", "ISC", "CC0-1.0", "BSD-3-Clause", diff --git a/crates/natrix-cli/src/build/assets.rs b/crates/natrix-cli/src/build/assets.rs index 03fc61e..a4e884d 100644 --- a/crates/natrix-cli/src/build/assets.rs +++ b/crates/natrix-cli/src/build/assets.rs @@ -57,10 +57,7 @@ pub(crate) fn collect_asset_manifest(asset_files: Vec) -> Result Result { base_path: config.base_path.to_string(), invalidate, }; - let settings = natrix_shared::macros::bincode::encode_to_vec( - settings, - natrix_shared::macros::bincode_config(), - )?; + let settings = natrix_shared::macros::serde_json::to_vec(&settings)?; let settings = data_encoding::BASE64_NOPAD.encode(&settings); let mut command = process::Command::new("cargo"); diff --git a/crates/natrix/Cargo.toml b/crates/natrix/Cargo.toml index 4a0ae5a..6e48b51 100644 --- a/crates/natrix/Cargo.toml +++ b/crates/natrix/Cargo.toml @@ -45,7 +45,7 @@ console_log = { version = "1.0.0", optional = true, features = ["color"] } simple_logger = { version = "5.0.0", features = ["stderr"], default-features = false, optional = true } # Serialization (Optional) -serde = { version = "1.0.219", optional = true, default-features = false, features = ["derive"] } +serde = { workspace = true, optional = true, default-features = false, features = ["derive"] } [features] default_app = ["console_log", "async"] diff --git a/crates/natrix/deny.toml b/crates/natrix/deny.toml index cd5c6f6..cbb7b8b 100644 --- a/crates/natrix/deny.toml +++ b/crates/natrix/deny.toml @@ -16,3 +16,7 @@ allow = [ [bans] multiple-versions = "deny" wildcards = "deny" +skip = [ + # https://github.com/taiki-e/pin-project/pull/367 + { crate = "syn@2.0.119", reason = "Some dependencies have not updated to syn v3." } +] diff --git a/crates/natrix_macros/Cargo.toml b/crates/natrix_macros/Cargo.toml index 8195385..144ac32 100644 --- a/crates/natrix_macros/Cargo.toml +++ b/crates/natrix_macros/Cargo.toml @@ -24,7 +24,7 @@ natrix_shared = { path = "../natrix_shared", version = "0.3.0", features = ["mac # Proc Macros proc-macro2 = { version = "1.0.101", default-features = false } quote = { version = "1.0.40", default-features = false, features = ["proc-macro"] } -syn = { version = "2.0.106", default-features = false, features = ["full", "printing", "parsing", "proc-macro"] } +syn = { version = "3.0.6", default-features = false, features = ["full", "printing", "parsing", "proc-macro"] } # Utilities data-encoding = { version = "2.9.0", default-features = false, features = ["alloc"] } diff --git a/crates/natrix_macros/src/lib.rs b/crates/natrix_macros/src/lib.rs index a4fe936..1c0bfad 100644 --- a/crates/natrix_macros/src/lib.rs +++ b/crates/natrix_macros/src/lib.rs @@ -78,7 +78,7 @@ static FILE_COUNTER: AtomicU32 = AtomicU32::new(0); /// Emit a file to the target directory fn emit_file( - content: natrix_shared::macros::MacroEmisson, + content: &natrix_shared::macros::MacroEmisson, settings: &natrix_shared::macros::Settings, ) { let first_use = FIRST_USE_IN_CRATE.fetch_and(false, Ordering::AcqRel); @@ -110,11 +110,8 @@ fn emit_file( clippy::expect_used, reason = "We dont have any of the types that could cause errors" )] - let encoded = natrix_shared::macros::bincode::encode_to_vec( - content, - natrix_shared::macros::bincode_config(), - ) - .expect("Failed to encode asset information"); + let encoded = natrix_shared::macros::serde_json::to_vec(&content) + .expect("Failed to encode asset information"); #[expect( clippy::expect_used, @@ -192,12 +189,9 @@ pub fn asset(file_path: proc_macro::TokenStream) -> proc_macro::TokenStream { .expect("Corrupt base64 in settings var"); #[expect(clippy::expect_used, reason = "We should have a valid bincode config")] - let (settings, _): (natrix_shared::macros::Settings, _) = - natrix_shared::macros::bincode::decode_from_slice( - &settings, - natrix_shared::macros::bincode_config(), - ) - .expect("Failed to decode settings"); + let settings: natrix_shared::macros::Settings = + natrix_shared::macros::serde_json::from_slice(&settings) + .expect("Failed to decode settings"); let url = format!("{}/{target}", settings.base_path); @@ -207,7 +201,7 @@ pub fn asset(file_path: proc_macro::TokenStream) -> proc_macro::TokenStream { emitted_path: target, }; - emit_file(asset, &settings); + emit_file(&asset, &settings); result } diff --git a/crates/natrix_shared/Cargo.toml b/crates/natrix_shared/Cargo.toml index 49c9d2c..442cadb 100644 --- a/crates/natrix_shared/Cargo.toml +++ b/crates/natrix_shared/Cargo.toml @@ -9,7 +9,8 @@ description = "Shared code for Natrix framework." workspace = true [dependencies] -bincode = { version = "2.0.1", optional = true } +serde = { workspace = true, features = ["derive", "std"], optional = true } +serde_json = { workspace = true, optional = true } [features] -macros = ["dep:bincode"] +macros = ["dep:serde", "dep:serde_json"] diff --git a/crates/natrix_shared/src/lib.rs b/crates/natrix_shared/src/lib.rs index 8ce252b..9f1eada 100644 --- a/crates/natrix_shared/src/lib.rs +++ b/crates/natrix_shared/src/lib.rs @@ -9,12 +9,11 @@ pub const MACRO_SETTINGS: &str = "NATRIX_MACRO_SETTINGS"; /// Code used for macros and bundler #[cfg(feature = "macros")] pub mod macros { - pub use bincode; + pub use serde_json; /// The asset format // IMPORTANT: Macro assumes encoding this cant fail - // - #[derive(bincode::Decode, bincode::Encode)] + #[derive(serde::Serialize, serde::Deserialize)] pub enum MacroEmisson { /// An asset that needs bundling Asset { @@ -26,7 +25,7 @@ pub mod macros { } /// The settings for the macros - #[derive(bincode::Decode, bincode::Encode)] + #[derive(serde::Serialize, serde::Deserialize)] pub struct Settings { /// The output dir for the macros pub output_dir: std::path::PathBuf, @@ -35,10 +34,4 @@ pub mod macros { /// A attribute to be used for invalidating the macro outputs pub invalidate: u64, } - - /// the bincode config to use - #[must_use] - pub fn bincode_config() -> impl bincode::config::Config { - bincode::config::standard() - } } diff --git a/justfile b/justfile index cb699e9..c3fba52 100644 --- a/justfile +++ b/justfile @@ -1,2 +1,9 @@ +fast: + serpentine run --pipeline ./ci/snek/main.snek --entry-point FAST --jobs 8 + ci: - serpentine run --pipeline ./ci/snek/main.snek --jobs 4 + serpentine run --pipeline ./ci/snek/main.snek --jobs 8 + +book: + serpentine run --pipeline ./ci/snek/main.snek --entry-point BOOK + xdg-open ./target/book/index.html From 2441baff42050a49e216f6491abb42a9eb52729b Mon Sep 17 00:00:00 2001 From: Viv Date: Mon, 28 Sep 2026 22:21:30 +0200 Subject: [PATCH 5/7] add github action --- .github/workflows/test.yml | 16 ++++++++++++++++ Cargo.lock | 6 +++--- ci/snek/integration_test.snek | 2 +- ci/snek/lints.snek | 2 +- crates/natrix-cli/src/build/mod.rs | 6 ++---- crates/natrix-cli/src/build/wasm_js.rs | 6 +++--- crates/natrix-cli/src/dev_server.rs | 2 +- crates/natrix-cli/src/main.rs | 3 ++- crates/natrix-cli/src/project_gen.rs | 4 +--- crates/natrix-cli/src/utils.rs | 7 +++++-- 10 files changed, 35 insertions(+), 19 deletions(-) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..fd859e1 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,16 @@ +name: Tests +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} +on: + push: + branches: [main] + pull_request: +jobs: + ci: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: Serpent-Tools/serpentine-action@64c3c3d1efb5fe2555a0e3cb4534ce203a9ba144 # v1.0.0 + with: + pipeline: ./ci/snek/main.snek diff --git a/Cargo.lock b/Cargo.lock index 5d62b21..d1a9797 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1215,7 +1215,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2992,9 +2992,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.5" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" +checksum = "c9cc2678c2cdd569ef8215e2afd7954ada2ae20b4fdd2c5fe6139a3b02d105db" dependencies = [ "rustls", "tokio", diff --git a/ci/snek/integration_test.snek b/ci/snek/integration_test.snek index 5b02f29..561c6f8 100644 --- a/ci/snek/integration_test.snek +++ b/ci/snek/integration_test.snek @@ -53,7 +53,7 @@ def ChromeDriver(page) { def IntegrationTest(page, flags) { return rust::stable > rust::WithBinstall("cargo-nextest") - > rust::Chef(core::source_code, Join("cargo nextest run -p integration_tests", flags, " || true")) + > rust::Chef(core::source_code, Join("cargo nextest run -p integration_tests ", flags, " || true")) > WithService(ChromeDriver(page), "chrome.local") > Exec(Join("cargo nextest run -j 1 --fail-fast -p integration_tests ", flags)); } diff --git a/ci/snek/lints.snek b/ci/snek/lints.snek index 2bc61da..ec18bd8 100644 --- a/ci/snek/lints.snek +++ b/ci/snek/lints.snek @@ -23,7 +23,7 @@ export minimal_versions = rust::nightly > rust::WithBinstall("cargo-minimal-versions") > rust::WithBinstall("cargo-hack") // used by minimal-versions internally > rust::Chef(core::source_code, "cargo minimal-versions check --package natrix --direct --all-features") - > Exec("cargo check --package natrix --all-features"); + > Exec("cargo minimal-versions check --package natrix --direct --all-features"); // TODO: Make more strict def CargoDeny(crate) { diff --git a/crates/natrix-cli/src/build/mod.rs b/crates/natrix-cli/src/build/mod.rs index 9946bc1..2b26763 100644 --- a/crates/natrix-cli/src/build/mod.rs +++ b/crates/natrix-cli/src/build/mod.rs @@ -23,13 +23,11 @@ const CSS_OUTPUT_NAME: &str = "styles.css"; /// Build a project pub(crate) fn build(config: &options::BuildConfig) -> Result { if !utils::is_natrix_version_matching()? { - uwuln!( - "Cli version does not match natrix version.", red.bold - ); + uwuln!("Cli version does not match natrix version.", red.bold); } print!("🧹 "); - uwuln!("Cleaning dist",bright_black); + uwuln!("Cleaning dist", bright_black); let _ = fs::remove_dir_all(&config.dist); if config.invalidate_cache { diff --git a/crates/natrix-cli/src/build/wasm_js.rs b/crates/natrix-cli/src/build/wasm_js.rs index 6581c8a..92ba167 100644 --- a/crates/natrix-cli/src/build/wasm_js.rs +++ b/crates/natrix-cli/src/build/wasm_js.rs @@ -180,9 +180,9 @@ pub(crate) fn build_wasm(config: &options::BuildConfig) -> Result { rustc_flags.push_str("-Zfmt-debug=none -Zlocation-detail=none -Zshare-generics=y"); } else { uwuln!( - "⚠️ Using stable rust, nightly rust allows for better optimizations and smaller wasm files", - yellow.bold - ); + "⚠️ Using stable rust, nightly rust allows for better optimizations and smaller wasm files", + yellow.bold + ); } command.env("RUSTFLAGS", rustc_flags); } diff --git a/crates/natrix-cli/src/dev_server.rs b/crates/natrix-cli/src/dev_server.rs index 3206419..8021987 100644 --- a/crates/natrix-cli/src/dev_server.rs +++ b/crates/natrix-cli/src/dev_server.rs @@ -175,7 +175,7 @@ pub(crate) fn spawn_server( uwu!(ip, bright_red); uwu!(":", bright_red); uwu!(&port.to_string(), bright_red); - + let live_reload_text = if let Some(live_reload_url) = live_reload { format!(" (with live-reload via {live_reload_url})") } else { diff --git a/crates/natrix-cli/src/main.rs b/crates/natrix-cli/src/main.rs index cb9f5f0..d6fb81f 100644 --- a/crates/natrix-cli/src/main.rs +++ b/crates/natrix-cli/src/main.rs @@ -5,7 +5,8 @@ use clap::Parser; /// Reusable imports mod prelude { pub use anyhow::{Context, Result, anyhow}; - pub use owo_colors::{OwoColorize, Stream::Stdout}; + pub use owo_colors::OwoColorize; + pub use owo_colors::Stream::Stdout; } /// Helper macro to chain multiple styles and colors from ``owo_colors`` (and println! it), checks if colors are supported. diff --git a/crates/natrix-cli/src/project_gen.rs b/crates/natrix-cli/src/project_gen.rs index a27c58f..22bf17b 100644 --- a/crates/natrix-cli/src/project_gen.rs +++ b/crates/natrix-cli/src/project_gen.rs @@ -45,9 +45,7 @@ dist uwu!("Project created ", bright_green); uwu!(root.display(), cyan); println!(); - uwuln!( - "Run `natrix dev` to start the dev server", bright_blue - ); + uwuln!("Run `natrix dev` to start the dev server", bright_blue); Ok(()) } diff --git a/crates/natrix-cli/src/utils.rs b/crates/natrix-cli/src/utils.rs index 3e35e83..76b7273 100644 --- a/crates/natrix-cli/src/utils.rs +++ b/crates/natrix-cli/src/utils.rs @@ -15,8 +15,11 @@ use crate::prelude::*; /// Create a spinner with the given msg pub(crate) fn create_spinner(msg: &str) -> Result { let spinner = ProgressBar::new_spinner().with_style( - ProgressStyle::with_template(&format!("{{spinner:.red}} {} {{msg}}", uwu_style!(msg, bright_blue)))? - .tick_chars("⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏-"), + ProgressStyle::with_template(&format!( + "{{spinner:.red}} {} {{msg}}", + uwu_style!(msg, bright_blue) + ))? + .tick_chars("⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏-"), ); spinner.enable_steady_tick(Duration::from_millis(100)); Ok(spinner) From 785a7abf1906b786c37e657301402ca3fda3865f Mon Sep 17 00:00:00 2001 From: Viv Date: Tue, 29 Sep 2026 00:22:23 +0200 Subject: [PATCH 6/7] add serpentine instructions to contribution guide --- CONTRIBUTING.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 858446e..f2521a9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,6 +20,10 @@ We also have a [Nix](https://nixos.org/) flake to setup a working dev environmen ## Development Workflow +Natrix uses [Serpentine](https://github.com/Serpent-Tools/serpentine) for CI and local testing, the serpentine pipeline is stored in `./ci/snek/`, for easier use you can use the `justfile` targets, +`fast` runs unit testing and linters, while `ci` runs the slower integration tests as well. + +the full pipeline will always be run in CI so dont worry about running the entire thing locally if it takes a while for you. ### Quick Development Iteration From 8b249419e22d1c169fdfa37378d1cabd161aae6f Mon Sep 17 00:00:00 2001 From: Viv Date: Tue, 29 Sep 2026 00:22:23 +0200 Subject: [PATCH 7/7] add benchmarks --- ci/benchmark/Cargo.lock | 296 ++++++++++++++++++++++++++++------------ flake.nix | 1 + justfile | 6 + 3 files changed, 216 insertions(+), 87 deletions(-) diff --git a/ci/benchmark/Cargo.lock b/ci/benchmark/Cargo.lock index 801242c..da4eac6 100644 --- a/ci/benchmark/Cargo.lock +++ b/ci/benchmark/Cargo.lock @@ -3,34 +3,31 @@ version = 4 [[package]] -name = "benchmark" -version = "0.1.0" +name = "async-trait" +version = "0.1.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ - "log", - "natrix", - "pastey", - "wasm-bindgen-test", - "web-sys", + "proc-macro2", + "quote", + "syn 3.0.6", ] [[package]] -name = "bincode" -version = "2.0.1" +name = "autocfg" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" -dependencies = [ - "bincode_derive", - "serde", - "unty", -] +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] -name = "bincode_derive" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09" +name = "benchmark" +version = "0.1.0" dependencies = [ - "virtue", + "log", + "natrix", + "pastey", + "wasm-bindgen-test", + "web-sys", ] [[package]] @@ -39,6 +36,12 @@ version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + [[package]] name = "cc" version = "1.2.33" @@ -50,9 +53,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "const-sha1" @@ -99,6 +102,25 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "itoa" version = "1.0.15" @@ -107,25 +129,38 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" dependencies = [ - "once_cell", + "cfg-if", + "futures-util", "wasm-bindgen", ] +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "log" -version = "0.4.27" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "minicov" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" +checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d" dependencies = [ "cc", "walkdir", @@ -143,9 +178,9 @@ dependencies = [ "log", "natrix_macros", "natrix_shared", + "nohash", "pastey", "pin-project", - "rustversion", "ryu", "smallvec", "wasm-bindgen", @@ -161,14 +196,40 @@ dependencies = [ "natrix_shared", "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "natrix_shared" version = "0.3.0" dependencies = [ - "bincode", + "serde", + "serde_json", +] + +[[package]] +name = "nohash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0f889fb66f7acdf83442c35775764b51fed3c606ab9cee51500dbde2cf528ca" + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", ] [[package]] @@ -177,6 +238,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + [[package]] name = "pastey" version = "0.1.1" @@ -200,14 +267,26 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "proc-macro2" -version = "1.0.100" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "802989b9fe1b674bc996ac7bed7b3012090a9b4cbfa0fe157ee3ea97e93e4ccd" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -244,22 +323,45 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.219" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", ] [[package]] @@ -268,6 +370,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + [[package]] name = "smallvec" version = "1.15.1" @@ -286,28 +394,36 @@ dependencies = [ ] [[package]] -name = "typewit" -version = "1.12.1" +name = "syn" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97e72ba082eeb9da9dc68ff5a2bf727ef6ce362556e8d29ec1aed3bd05e7d86a" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] -name = "unicode-ident" -version = "1.0.18" +name = "tokio" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "pin-project-lite", +] [[package]] -name = "unty" -version = "0.0.4" +name = "typewit" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" +checksum = "97e72ba082eeb9da9dc68ff5a2bf727ef6ce362556e8d29ec1aed3bd05e7d86a" [[package]] -name = "virtue" -version = "0.0.18" +name = "unicode-ident" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "walkdir" @@ -321,48 +437,33 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" dependencies = [ - "cfg-if", "js-sys", - "once_cell", + "tokio", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -370,55 +471,70 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn", - "wasm-bindgen-backend", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.50" +version = "0.3.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" +checksum = "ae7499dfd45780a0a91d7ee6bb9ac51970a4479a41a89da443fdda5a39547d42" dependencies = [ + "async-trait", + "cast", "js-sys", + "libm", "minicov", + "nu-ansi-term", + "num-traits", + "oorandom", + "serde", + "serde_json", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", + "wasm-bindgen-test-shared", ] [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.50" +version = "0.3.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" +checksum = "3b84b5ac638bfb168196a1a461fcc8f46a294a18b1b6be52133b4e0db122cc9f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] +[[package]] +name = "wasm-bindgen-test-shared" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f692aa943ccd88363733b77063f32cfed5bc6cbea8e6e8b251b302f881606fe" + [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" dependencies = [ "js-sys", "wasm-bindgen", @@ -505,3 +621,9 @@ name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/flake.nix b/flake.nix index 8185a03..610bdc9 100644 --- a/flake.nix +++ b/flake.nix @@ -80,6 +80,7 @@ wasm-bindgen-cli pkgs.binaryen + pkgs.chromedriver ]; }; } diff --git a/justfile b/justfile index c3fba52..b6a7b47 100644 --- a/justfile +++ b/justfile @@ -7,3 +7,9 @@ ci: book: serpentine run --pipeline ./ci/snek/main.snek --entry-point BOOK xdg-open ./target/book/index.html + +bench: + cd ./ci/benchmark/ && cargo test --release --target wasm32-unknown-unknown + +bench_visual: + cd ./ci/benchmark/ && NO_HEADLESS=1 cargo test --release --target wasm32-unknown-unknown