From 9c993fe9367b5e62c509484d7d0d49d5f4efcd17 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Fri, 27 Sep 2024 11:26:17 -0400 Subject: [PATCH] Migrate to tracel-xtask --- .github/workflows/ci.yml | 57 +- Cargo.lock | 554 +++++++++--------- Cargo.toml | 3 + _typos.toml | 3 + .../src/cli_commands/package/mod.rs | 2 +- .../src/cli_commands/run/local/training.rs | 4 +- .../src/cli_commands/run/remote/training.rs | 2 +- .../src/generation/crate_gen/backend.rs | 4 +- xtask/Cargo.toml | 7 +- xtask/src/commands/check.rs | 209 ------- xtask/src/commands/ci.rs | 187 ------ xtask/src/commands/mod.rs | 15 - xtask/src/commands/pull_request_checks.rs | 20 - xtask/src/commands/test.rs | 208 ------- xtask/src/logging.rs | 67 --- xtask/src/main.rs | 45 +- xtask/src/test.rs | 0 xtask/src/utils/cargo.rs | 88 --- xtask/src/utils/mod.rs | 64 -- xtask/src/utils/process.rs | 30 - xtask/src/utils/prompt.rs | 12 - xtask/src/utils/time.rs | 15 - xtask/src/utils/workspace.rs | 90 --- 23 files changed, 330 insertions(+), 1356 deletions(-) create mode 100644 _typos.toml delete mode 100644 xtask/src/commands/check.rs delete mode 100644 xtask/src/commands/ci.rs delete mode 100644 xtask/src/commands/mod.rs delete mode 100644 xtask/src/commands/pull_request_checks.rs delete mode 100644 xtask/src/commands/test.rs delete mode 100644 xtask/src/logging.rs delete mode 100644 xtask/src/test.rs delete mode 100644 xtask/src/utils/cargo.rs delete mode 100644 xtask/src/utils/mod.rs delete mode 100644 xtask/src/utils/process.rs delete mode 100644 xtask/src/utils/prompt.rs delete mode 100644 xtask/src/utils/time.rs delete mode 100644 xtask/src/utils/workspace.rs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f083d8d..d06b5bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,44 +7,39 @@ env: on: pull_request: {} + jobs: - crates: + checks: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@master + - name: Setup Rust + uses: tracel-ai/github-actions/setup-rust@v1 with: - components: clippy, rustfmt - toolchain: stable - - uses: Swatinem/rust-cache@v2 - - name: Format - run: cargo xtask ci --target crates format - - name: Lint - run: cargo xtask ci --target crates lint + rust-toolchain: stable + cache-key: stable-linux + # -------------------------------------------------------------------------------- - name: Audit - run: cargo xtask ci --target crates audit - - name: Unit Tests - run: cargo xtask ci --target crates unit-tests - - name: Integration Tests - run: cargo xtask ci --target crates integration-tests - - name: Documentation Tests - run: cargo xtask ci --target crates doc-tests - examples: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@master - with: - components: clippy, rustfmt - toolchain: stable - - uses: Swatinem/rust-cache@v2 + run: cargo xtask check audit + # -------------------------------------------------------------------------------- - name: Format - run: cargo xtask ci --target examples format + shell: bash + env: + # work around for colors + # see: https://github.com/rust-lang/rustfmt/issues/3385 + TERM: xterm-256color + run: cargo xtask check format + # -------------------------------------------------------------------------------- - name: Lint - run: cargo xtask ci --target examples lint + run: cargo xtask check lint + # -------------------------------------------------------------------------------- + - name: Typos + uses: tracel-ai/github-actions/check-typos@v1 + # -------------------------------------------------------------------------------- - name: Unit Tests - run: cargo xtask ci --target examples unit-tests + run: cargo xtask test unit + # -------------------------------------------------------------------------------- - name: Integration Tests - run: cargo xtask ci --target examples integration-tests + run: cargo xtask test integration + # -------------------------------------------------------------------------------- - name: Documentation Tests - run: cargo xtask ci --target examples doc-tests + run: cargo xtask doc tests diff --git a/Cargo.lock b/Cargo.lock index fd73ff7..8793b6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] @@ -17,6 +17,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aes" version = "0.8.4" @@ -121,9 +127,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "arbitrary" @@ -148,7 +154,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -186,9 +192,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "av1-grain" @@ -215,17 +221,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.8.0", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -284,9 +290,9 @@ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bitstream-io" -version = "2.5.0" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcde5f311c85b8ca30c2e4198d4326bc342c76541590106f5fa4a50946ea499" +checksum = "b81e1519b0d82120d2fd469d5bfb2919a9361c48b02d82d04befc1cdd2002452" [[package]] name = "block" @@ -310,7 +316,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", - "regex-automata", + "regex-automata 0.4.7", "serde", ] @@ -437,7 +443,7 @@ dependencies = [ "derive-new", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -554,9 +560,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" dependencies = [ "bytemuck_derive", ] @@ -569,7 +575,7 @@ checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -586,9 +592,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "bytesize" @@ -641,7 +647,7 @@ dependencies = [ "rand", "rand_distr", "rayon", - "safetensors 0.4.4", + "safetensors 0.4.5", "thiserror", "yoke", "zip 1.1.4", @@ -703,9 +709,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.13" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48" +checksum = "9540e661f81799159abee814118cc139a2004b3a3aa3ea37724a1b66530b90e0" dependencies = [ "jobserver", "libc", @@ -746,9 +752,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.16" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" +checksum = "b0956a43b323ac1afaffc053ed5c4b7c1f1800bacd1683c353aabbb752515dd3" dependencies = [ "clap_builder", "clap_derive", @@ -756,9 +762,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "4d72166dd41634086d5803a47eb71ae740e61d84709c36f3c34110173db3961b" dependencies = [ "anstream", "anstyle", @@ -768,14 +774,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -923,9 +929,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -1109,7 +1115,7 @@ dependencies = [ "derive-new", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -1189,7 +1195,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -1200,16 +1206,17 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] name = "dashmap" -version = "5.5.3" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ "cfg-if", + "crossbeam-utils", "hashbrown 0.14.5", "lock_api", "once_cell", @@ -1239,7 +1246,7 @@ checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -1250,7 +1257,18 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", ] [[package]] @@ -1293,7 +1311,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -1344,14 +1362,14 @@ dependencies = [ [[package]] name = "enum-as-inner" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -1434,7 +1452,7 @@ dependencies = [ "flume", "half", "lebe", - "miniz_oxide", + "miniz_oxide 0.7.4", "rayon-core", "smallvec", "zune-inflate", @@ -1460,24 +1478,24 @@ checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fdeflate" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" dependencies = [ "simd-adler32", ] [[package]] name = "filetime" -version = "0.2.24" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", @@ -1487,13 +1505,13 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.31" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "libz-sys", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -1538,7 +1556,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -1618,7 +1636,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -1793,7 +1811,7 @@ checksum = "913dce4c5f06c2ea40fc178c06f777ac89fc6b1383e90c254fafb1abe4ba3c82" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", "uuid", ] @@ -1822,9 +1840,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "gix" @@ -1884,7 +1902,7 @@ dependencies = [ "gix-utils", "itoa", "thiserror", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -1966,7 +1984,7 @@ dependencies = [ "smallvec", "thiserror", "unicode-bom", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -2194,7 +2212,7 @@ dependencies = [ "itoa", "smallvec", "thiserror", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -2304,7 +2322,7 @@ dependencies = [ "gix-validate", "memmap2", "thiserror", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -2379,9 +2397,9 @@ dependencies = [ [[package]] name = "gix-tempfile" -version = "14.0.1" +version = "14.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006acf5a613e0b5cf095d8e4b3f48c12a60d9062aa2b2dd105afaf8344a5600c" +checksum = "046b4927969fa816a150a0cda2e62c80016fe11fb3c3184e4dddf4e542f108aa" dependencies = [ "dashmap", "gix-fs", @@ -2489,15 +2507,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] @@ -2734,11 +2752,11 @@ dependencies = [ "serde_json", "sha2", "strum", - "syn 2.0.75", + "syn 2.0.77", "syn-serde", "tar", "toml", - "toml_edit 0.22.20", + "toml_edit", "unicase", "url", "walkdir", @@ -2752,17 +2770,11 @@ dependencies = [ "quote", "serde", "strum", - "syn 2.0.75", + "syn 2.0.77", "syn-serde", "uuid", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -2867,9 +2879,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http", @@ -2900,9 +2912,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" dependencies = [ "bytes", "futures-channel", @@ -2913,7 +2925,6 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] @@ -2936,15 +2947,15 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.22" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" dependencies = [ "crossbeam-deque", "globset", "log", "memchr", - "regex-automata", + "regex-automata 0.4.7", "same-file", "walkdir", "winapi-util", @@ -2991,9 +3002,9 @@ checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" [[package]] name = "indexmap" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -3038,7 +3049,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -3049,9 +3060,9 @@ checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "is_terminal_polyfill" @@ -3184,9 +3195,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libfuzzer-sys" @@ -3206,7 +3217,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -3239,9 +3250,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.19" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc53a7799a7496ebc9fd29f31f7df80e83c9bda5299768af5f9e59eeea74647" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "pkg-config", @@ -3303,6 +3314,15 @@ dependencies = [ "libc", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "matrixmultiply" version = "0.3.9" @@ -3339,9 +3359,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ "libc", "stable_deref_trait", @@ -3384,6 +3404,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mio" version = "0.8.11" @@ -3544,7 +3573,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -3605,7 +3634,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -3657,9 +3686,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.3" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] @@ -3693,7 +3722,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -3737,9 +3766,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -3805,26 +3834,6 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.75", -] - [[package]] name = "pin-project-lite" version = "0.2.14" @@ -3839,9 +3848,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "png" @@ -3853,7 +3862,7 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.7.4", ] [[package]] @@ -3864,9 +3873,9 @@ checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "d30538d42559de6b034bc76fd6dd4c38961b1ee5c6c56e3808c50128fdbc22ce" [[package]] name = "powerfmt" @@ -3891,21 +3900,21 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ "proc-macro2", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit", ] [[package]] @@ -3939,7 +3948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" dependencies = [ "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -3971,9 +3980,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -4165,9 +4174,9 @@ checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "355ae415ccd3a04315d3f8246e86d67689ea74d88d915576e1589a351062a13b" dependencies = [ "bitflags 2.6.0", ] @@ -4191,8 +4200,17 @@ checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -4203,9 +4221,15 @@ checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.4", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.4" @@ -4226,9 +4250,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.6" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f6ddd79dc661ade721873783d159ec87d91d556ce92933e342bae8b87c48c0" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "base64", "bytes", @@ -4270,9 +4294,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f86ae463694029097b846d8f99fd5536740602ae00022c0c50c5600720b2f71" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" dependencies = [ "bytemuck", ] @@ -4339,7 +4363,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.75", + "syn 2.0.77", "unicode-ident", ] @@ -4371,18 +4395,18 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -4393,9 +4417,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" dependencies = [ "log", "once_cell", @@ -4424,9 +4448,9 @@ checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -4457,9 +4481,9 @@ dependencies = [ [[package]] name = "safetensors" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7725d4d98fa515472f43a6e2bbf956c48e06b89bb50593a040e5945160214450" +checksum = "44560c11236a6130a46ce36c836a62936dc81ebf8c36a37947423571be0e55b6" dependencies = [ "serde", "serde_json", @@ -4486,11 +4510,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4523,9 +4547,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -4548,9 +4572,9 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.208" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -4587,13 +4611,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.208" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -4607,9 +4631,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.125" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", "memchr", @@ -4629,9 +4653,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -4801,7 +4825,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -4837,11 +4861,11 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -4863,9 +4887,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.75" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -4882,7 +4906,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -4902,7 +4926,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -4936,9 +4960,9 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bc6ee10a9b4fcf576e9b0819d95ec16f4d2c02d39fd83ac1c8789785c4a42" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.6.0", "core-foundation", @@ -4962,7 +4986,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr", - "heck 0.5.0", + "heck", "pkg-config", "toml", "version-compare", @@ -4984,9 +5008,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" +checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" dependencies = [ "filetime", "libc", @@ -5050,22 +5074,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -5148,9 +5172,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.3" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", @@ -5170,7 +5194,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -5196,9 +5220,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -5216,7 +5240,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.20", + "toml_edit", ] [[package]] @@ -5230,26 +5254,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.20" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.18", + "winnow", ] [[package]] @@ -5267,27 +5280,6 @@ dependencies = [ "zip 0.6.6", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - [[package]] name = "tower-service" version = "0.3.3" @@ -5303,6 +5295,36 @@ dependencies = [ "heat-sdk-cli-macros", ] +[[package]] +name = "tracel-xtask" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fabbb1dfc79ef5c077fe4228f623b48f91bb7d7a6197c4cb5de05f5eec30842" +dependencies = [ + "anyhow", + "clap", + "derive_more", + "env_logger", + "log", + "rand", + "regex", + "serde_json", + "strum", + "tracel-xtask-macros", + "tracing-subscriber", +] + +[[package]] +name = "tracel-xtask-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccbf1b9a397363ab9d55bddc3c5c32da7952b3376dcb3b2c0bcdddf72eae9239" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "tracing" version = "0.1.40" @@ -5334,7 +5356,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -5364,10 +5386,14 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ + "matchers", "nu-ansi-term", + "once_cell", + "regex", "sharded-slab", "smallvec", "thread_local", + "tracing", "tracing-core", "tracing-log", ] @@ -5432,24 +5458,24 @@ checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-truncate" @@ -5464,15 +5490,15 @@ dependencies = [ [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "untrusted" @@ -5541,7 +5567,7 @@ checksum = "ee1cd046f83ea2c4e920d6ee9f7c3537ef928d75dce5d84a87c2c5d6b3999a3a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -5626,7 +5652,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", "wasm-bindgen-shared", ] @@ -5660,7 +5686,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5693,9 +5719,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.3" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" dependencies = [ "rustls-pki-types", ] @@ -6048,18 +6074,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.40" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.6.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -6073,26 +6090,23 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] name = "xml-rs" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" +checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" [[package]] name = "xtask" -version = "0.1.0" +version = "1.0.0" dependencies = [ - "anyhow", - "clap", - "env_logger", "log", "rstest", - "serde_json", "strum", + "tracel-xtask", ] [[package]] @@ -6115,7 +6129,7 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", "synstructure", ] @@ -6137,7 +6151,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", ] [[package]] @@ -6157,7 +6171,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.77", "synstructure", ] diff --git a/Cargo.toml b/Cargo.toml index d9034d1..da044d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,5 +45,8 @@ syn = { version = "2.0.71", features = ["extra-traits","full"] } thiserror = "1.0.30" uuid = { version = "1.9.1", features = ["v4","fast-rng","macro-diagnostics", "serde"] } +### For xtask crate ### +tracel-xtask = { version = "~1.1" } + [profile.dev] debug = 0 # Speed up compilation time and not necessary. diff --git a/_typos.toml b/_typos.toml new file mode 100644 index 0000000..3c73344 --- /dev/null +++ b/_typos.toml @@ -0,0 +1,3 @@ +[default.extend-words] +# Don't correct "arange" which is intentional +rela = "rela" diff --git a/crates/heat-sdk-cli/src/cli_commands/package/mod.rs b/crates/heat-sdk-cli/src/cli_commands/package/mod.rs index 1c3856b..66add77 100644 --- a/crates/heat-sdk-cli/src/cli_commands/package/mod.rs +++ b/crates/heat-sdk-cli/src/cli_commands/package/mod.rs @@ -29,7 +29,7 @@ pub struct PackageArgs { #[clap( short = 'e', long = "endpoint", - help = "The Heat API enpoint.", + help = "The Heat API endpoint.", default_value = "http://127.0.0.1:9001" )] pub heat_endpoint: String, diff --git a/crates/heat-sdk-cli/src/cli_commands/run/local/training.rs b/crates/heat-sdk-cli/src/cli_commands/run/local/training.rs index 136eb3b..2d2802f 100644 --- a/crates/heat-sdk-cli/src/cli_commands/run/local/training.rs +++ b/crates/heat-sdk-cli/src/cli_commands/run/local/training.rs @@ -129,11 +129,11 @@ pub(crate) fn handle_command( match res { Ok(()) => { - print_info!("All experiments have run succesfully!."); + print_info!("All experiments have run successfully!."); } Err(e) => { return Err(anyhow::anyhow!(format!( - "An error has occured while running experiments: {}", + "An error has occurred while running experiments: {}", e ))); } diff --git a/crates/heat-sdk-cli/src/cli_commands/run/remote/training.rs b/crates/heat-sdk-cli/src/cli_commands/run/remote/training.rs index 3ccaf56..b2b1ebb 100644 --- a/crates/heat-sdk-cli/src/cli_commands/run/remote/training.rs +++ b/crates/heat-sdk-cli/src/cli_commands/run/remote/training.rs @@ -41,7 +41,7 @@ pub struct RemoteTrainingRunArgs { #[clap( short = 'e', long = "endpoint", - help = "The Heat API enpoint.", + help = "The Heat API endpoint.", default_value = "http://127.0.0.1:9001" )] pub heat_endpoint: String, diff --git a/crates/heat-sdk-cli/src/generation/crate_gen/backend.rs b/crates/heat-sdk-cli/src/generation/crate_gen/backend.rs index ada70db..02982a3 100644 --- a/crates/heat-sdk-cli/src/generation/crate_gen/backend.rs +++ b/crates/heat-sdk-cli/src/generation/crate_gen/backend.rs @@ -27,7 +27,7 @@ impl BackendType { } BackendType::Ndarray => { quote! { - burn::backend::ndarray::NdArrayDevice::default() + burn::backend::ndarray::AndArrayDevice::default() } } } @@ -42,7 +42,7 @@ impl BackendType { quote! {burn::backend::libtorch::LibTorch} } BackendType::Ndarray => { - quote! {burn::backend::ndarray::NdArray} + quote! {burn::backend::ndarray::AndArray} } } } diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index 0f748db..7a787ca 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -1,17 +1,14 @@ [package] name = "xtask" -version = "0.1.0" +version = "1.0.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -anyhow = { workspace = true } -clap = { workspace = true } -env_logger = { workspace = true } log = { workspace = true } -serde_json = { workspace = true } strum = { workspace = true } +tracel-xtask = { workspace = true } [dev-dependencies] rstest = { workspace = true } diff --git a/xtask/src/commands/check.rs b/xtask/src/commands/check.rs deleted file mode 100644 index 2e474b2..0000000 --- a/xtask/src/commands/check.rs +++ /dev/null @@ -1,209 +0,0 @@ -use std::process::Command; - -use anyhow::{anyhow, Ok, Result}; -use clap::{Args, Subcommand}; -use strum::{Display, EnumIter, EnumString, IntoEnumIterator}; - -use crate::{ - endgroup, group, - utils::{ - cargo::ensure_cargo_crate_is_installed, - prompt::ask_once, - workspace::{get_workspace_members, WorkspaceMemberType}, - }, -}; - -use super::Target; - -#[derive(Args)] -pub(crate) struct CheckCmdArgs { - /// Target to check for. - #[arg(short, long, value_enum)] - target: Target, - #[command(subcommand)] - command: CheckCommand, -} - -#[derive(EnumString, EnumIter, Display, Clone, PartialEq, Subcommand)] -#[strum(serialize_all = "lowercase")] -enum CheckCommand { - /// Run audit command. - Audit, - /// Run format command. - Format, - /// Run ling command. - Lint, - /// Run all the checks. - All, -} - -pub(crate) fn handle_command(args: CheckCmdArgs, answer: Option) -> anyhow::Result<()> { - match args.command { - CheckCommand::Audit => run_audit(&args.target, answer), - CheckCommand::Format => run_format(&args.target, answer), - CheckCommand::Lint => run_lint(&args.target, answer), - CheckCommand::All => { - let answer = ask_once( - "This will run all the checks with autofix on all members of the workspace.", - ); - CheckCommand::iter() - .filter(|c| *c != CheckCommand::All) - .try_for_each(|c| { - handle_command( - CheckCmdArgs { - command: c, - target: args.target.clone(), - }, - Some(answer), - ) - }) - } - } -} - -pub(crate) fn run_audit(target: &Target, mut answer: Option) -> anyhow::Result<()> { - match target { - Target::Crates | Target::Examples => { - if answer.is_none() { - answer = Some(ask_once( - "This will run the audit check with autofix mode enabled.", - )); - }; - if answer.unwrap() { - ensure_cargo_crate_is_installed("cargo-audit", Some("fix"), false)?; - group!("Audit: Crates and Examples"); - info!("Command line: cargo audit fix"); - let status = Command::new("cargo") - .args(["audit", "-q", "--color", "always", "fix"]) - .status() - .map_err(|e| anyhow!("Failed to execute cargo audit: {}", e))?; - if !status.success() { - return Err(anyhow!("Audit check execution failed")); - } - endgroup!(); - } - } - Target::All => { - let answer = ask_once("This will run audit checks on all targets."); - Target::iter() - .filter(|p| *p != Target::All && *p != Target::Examples) - .try_for_each(|p| run_audit(&p, Some(answer)))?; - } - } - Ok(()) -} - -fn run_format(target: &Target, mut answer: Option) -> Result<()> { - match target { - Target::Crates | Target::Examples => { - let members = match target { - Target::Crates => get_workspace_members(WorkspaceMemberType::Crate), - Target::Examples => get_workspace_members(WorkspaceMemberType::Example), - _ => unreachable!(), - }; - - if answer.is_none() { - answer = Some(ask_once(&format!( - "This will run format checks on all {} of the workspace.", - if *target == Target::Crates { - "crates" - } else { - "examples" - } - ))); - } - - if answer.unwrap() { - for member in members { - group!("Format: {}", member.name); - info!("Command line: cargo fmt -p {}", &member.name); - let status = Command::new("cargo") - .args(["fmt", "-p", &member.name]) - .status() - .map_err(|e| anyhow!("Failed to execute cargo fmt: {}", e))?; - if !status.success() { - return Err(anyhow!( - "Format check execution failed for {}", - &member.name - )); - } - endgroup!(); - } - } - } - Target::All => { - if answer.is_none() { - answer = Some(ask_once( - "This will run format check on all members of the workspace.", - )); - } - if answer.unwrap() { - Target::iter() - .filter(|t| *t != Target::All) - .try_for_each(|t| run_format(&t, answer))?; - } - } - } - Ok(()) -} - -fn run_lint(target: &Target, mut answer: Option) -> anyhow::Result<()> { - match target { - Target::Crates | Target::Examples => { - let members = match target { - Target::Crates => get_workspace_members(WorkspaceMemberType::Crate), - Target::Examples => get_workspace_members(WorkspaceMemberType::Example), - _ => unreachable!(), - }; - - if answer.is_none() { - answer = Some(ask_once(&format!( - "This will run lint fix on all {} of the workspace.", - if *target == Target::Crates { - "crates" - } else { - "examples" - } - ))); - } - - if answer.unwrap() { - for member in members { - group!("Lint: {}", member.name); - info!( - "Command line: cargo clippy --no-deps --fix --allow-dirty -p {}", - &member.name - ); - let status = Command::new("cargo") - .args([ - "clippy", - "--no-deps", - "--fix", - "--allow-dirty", - "-p", - &member.name, - ]) - .status() - .map_err(|e| anyhow!("Failed to execute cargo clippy: {}", e))?; - if !status.success() { - return Err(anyhow!("Lint fix execution failed for {}", &member.name)); - } - endgroup!(); - } - } - } - Target::All => { - if answer.is_none() { - answer = Some(ask_once( - "This will run lint fix on all members of the workspace.", - )); - } - if answer.unwrap() { - Target::iter() - .filter(|t| *t != Target::All) - .try_for_each(|t| run_lint(&t, answer))?; - } - } - } - Ok(()) -} diff --git a/xtask/src/commands/ci.rs b/xtask/src/commands/ci.rs deleted file mode 100644 index a15b146..0000000 --- a/xtask/src/commands/ci.rs +++ /dev/null @@ -1,187 +0,0 @@ -use std::process::Command; - -use anyhow::{anyhow, Ok, Result}; -use clap::{Args, Subcommand}; -use strum::{Display, EnumIter, EnumString, IntoEnumIterator}; - -use crate::{ - endgroup, group, - utils::{ - cargo::ensure_cargo_crate_is_installed, - workspace::{get_workspace_members, WorkspaceMemberType}, - }, -}; - -use super::{ - test::{run_documentation, run_integration, run_unit}, - Target, -}; - -#[derive(Args)] -pub(crate) struct CICmdArgs { - /// Target to check for. - #[arg(short, long, value_enum)] - pub target: Target, - #[command(subcommand)] - pub command: CICommand, -} - -#[derive(EnumString, EnumIter, Display, Clone, PartialEq, Subcommand)] -#[strum(serialize_all = "lowercase")] -pub(crate) enum CICommand { - /// Run audit command. - Audit, - /// Run format command. - Format, - /// Run lint command. - Lint, - /// Run unit tests. - UnitTests, - /// Run integration tests. - IntegrationTests, - /// Run documentation tests. - DocTests, - /// Run all tests. - AllTests, - /// Run all the checks. - All, -} - -pub(crate) fn handle_command(args: CICmdArgs) -> anyhow::Result<()> { - match args.command { - CICommand::Audit => run_audit(&args.target), - CICommand::Format => run_format(&args.target), - CICommand::Lint => run_lint(&args.target), - CICommand::UnitTests => run_unit_tests(&args.target), - CICommand::IntegrationTests => run_integration_tests(&args.target), - CICommand::DocTests => run_doc_tests(&args.target), - CICommand::AllTests => run_all_tests(&args.target), - CICommand::All => CICommand::iter() - .filter(|c| *c != CICommand::All && *c != CICommand::AllTests) - .try_for_each(|c| { - handle_command(CICmdArgs { - command: c, - target: args.target.clone(), - }) - }), - } -} - -fn run_audit(target: &Target) -> anyhow::Result<()> { - match target { - Target::Crates | Target::Examples => { - group!("Audit: Crates and Examples"); - ensure_cargo_crate_is_installed("cargo-audit", Some("fix"), false)?; - info!("Command line: cargo audit"); - let status = Command::new("cargo") - .args(["audit", "-q", "--color", "always"]) - .status() - .map_err(|e| anyhow!("Failed to execute cargo audit: {}", e))?; - if !status.success() { - return Err(anyhow!("Audit check execution failed")); - } - endgroup!(); - } - Target::All => { - Target::iter() - .filter(|t| *t != Target::All && *t != Target::Examples) - .try_for_each(|t| run_audit(&t))?; - } - } - Ok(()) -} - -fn run_format(target: &Target) -> Result<()> { - match target { - Target::Crates | Target::Examples => { - let members = match target { - Target::Crates => get_workspace_members(WorkspaceMemberType::Crate), - Target::Examples => get_workspace_members(WorkspaceMemberType::Example), - _ => unreachable!(), - }; - - for member in members { - group!("Format: {}", member.name); - info!("Command line: cargo fmt --check -p {}", &member.name); - let status = Command::new("cargo") - .args(["fmt", "--check", "-p", &member.name]) - .status() - .map_err(|e| anyhow!("Failed to execute cargo fmt: {}", e))?; - if !status.success() { - return Err(anyhow!( - "Format check execution failed for {}", - &member.name - )); - } - endgroup!(); - } - } - Target::All => { - Target::iter() - .filter(|t| *t != Target::All) - .try_for_each(|t| run_format(&t))?; - } - } - Ok(()) -} - -fn run_lint(target: &Target) -> anyhow::Result<()> { - match target { - Target::Crates | Target::Examples => { - let members = match target { - Target::Crates => get_workspace_members(WorkspaceMemberType::Crate), - Target::Examples => get_workspace_members(WorkspaceMemberType::Example), - _ => unreachable!(), - }; - - for member in members { - group!("Lint: {}", member.name); - info!( - "Command line: cargo clippy --no-deps -p {} -- --deny warnings", - &member.name - ); - let status = Command::new("cargo") - .args([ - "clippy", - "--no-deps", - "-p", - &member.name, - "--", - "--deny", - "warnings", - ]) - .status() - .map_err(|e| anyhow!("Failed to execute cargo clippy: {}", e))?; - if !status.success() { - return Err(anyhow!("Lint fix execution failed for {}", &member.name)); - } - endgroup!(); - } - } - Target::All => { - Target::iter() - .filter(|t| *t != Target::All) - .try_for_each(|t| run_lint(&t))?; - } - } - Ok(()) -} - -fn run_unit_tests(target: &Target) -> anyhow::Result<()> { - run_unit(&target) -} - -fn run_integration_tests(target: &Target) -> anyhow::Result<()> { - run_integration(&target) -} - -fn run_doc_tests(target: &Target) -> anyhow::Result<()> { - run_documentation(&target) -} - -fn run_all_tests(target: &Target) -> anyhow::Result<()> { - run_unit_tests(&target)?; - run_integration_tests(&target)?; - run_doc_tests(&target)?; - Ok(()) -} diff --git a/xtask/src/commands/mod.rs b/xtask/src/commands/mod.rs deleted file mode 100644 index 2b49c3c..0000000 --- a/xtask/src/commands/mod.rs +++ /dev/null @@ -1,15 +0,0 @@ -pub(crate) mod check; -pub(crate) mod ci; -pub(crate) mod pull_request_checks; -pub(crate) mod test; - -use clap::ValueEnum; -use strum::{Display, EnumIter, EnumString}; - -#[derive(EnumString, EnumIter, Display, Clone, PartialEq, ValueEnum)] -#[strum(serialize_all = "lowercase")] -pub(crate) enum Target { - All, - Crates, - Examples, -} diff --git a/xtask/src/commands/pull_request_checks.rs b/xtask/src/commands/pull_request_checks.rs deleted file mode 100644 index 415eecc..0000000 --- a/xtask/src/commands/pull_request_checks.rs +++ /dev/null @@ -1,20 +0,0 @@ -use strum::IntoEnumIterator; - -use super::{ - ci::{self, CICmdArgs, CICommand}, - test::run_guide, -}; - -pub(crate) fn handle_command() -> anyhow::Result<()> { - CICommand::iter() - // Skip audit command - .filter(|c| *c != CICommand::All && *c != CICommand::AllTests && *c != CICommand::Audit) - .try_for_each(|c| { - ci::handle_command(CICmdArgs { - target: super::Target::All, - command: c.clone(), - }) - })?; - // Execute the guide example - run_guide() -} diff --git a/xtask/src/commands/test.rs b/xtask/src/commands/test.rs deleted file mode 100644 index 7917594..0000000 --- a/xtask/src/commands/test.rs +++ /dev/null @@ -1,208 +0,0 @@ -use std::process::Command; - -use anyhow::{anyhow, Ok, Result}; -use clap::{Args, Subcommand}; -use strum::{Display, EnumIter, EnumString, IntoEnumIterator}; - -use crate::{ - endgroup, group, - utils::workspace::{get_workspace_members, WorkspaceMember, WorkspaceMemberType}, -}; - -use super::Target; - -const PROJECT_PATH: &str = "test/Default-Project"; -const API_KEY: &str = "dcaf7eb9-5acc-47d7-8b93-ca0fbb234096"; - -#[derive(Args)] -pub(crate) struct TestCmdArgs { - /// Target to test for. - #[arg(short, long, value_enum)] - target: Target, - #[command(subcommand)] - command: TestCommand, -} - -#[derive(EnumString, EnumIter, Display, Clone, PartialEq, Subcommand)] -#[strum(serialize_all = "lowercase")] -enum TestCommand { - /// Run unit tests. - Unit, - /// Run integration tests. - Integration, - /// Run documentation tests. - Documentation, - /// Run guide test against Heat dev stack. - Guide, - /// Run all the checks. - All, -} - -pub(crate) fn handle_command(args: TestCmdArgs) -> anyhow::Result<()> { - match args.command { - TestCommand::Unit => run_unit(&args.target), - TestCommand::Integration => run_integration(&args.target), - TestCommand::Documentation => run_documentation(&args.target), - TestCommand::Guide => run_guide(), - TestCommand::All => TestCommand::iter() - .filter(|c| *c != TestCommand::All) - .try_for_each(|c| { - handle_command(TestCmdArgs { - command: c, - target: args.target.clone(), - }) - }), - } -} - -pub(crate) fn run_guide() -> Result<()> { - group!("Guide Test"); - info!("Command line: cargo run --release --bin guide -- --key \"...\" --project \"...\""); - let status = Command::new("cargo") - .args([ - "run", - "--release", - "--bin", - "guide", - "--", - "--key", - API_KEY, - "--project", - PROJECT_PATH, - ]) - .status() - .map_err(|e| anyhow!("Failed to execute guide example: {}", e))?; - if !status.success() { - return Err(anyhow!("Failed to execute guide example")); - } - endgroup!(); - Ok(()) -} - -pub(crate) fn run_unit(target: &Target) -> Result<()> { - match target { - Target::Crates | Target::Examples => { - let members = match target { - Target::Crates => get_workspace_members(WorkspaceMemberType::Crate), - Target::Examples => get_workspace_members(WorkspaceMemberType::Example), - _ => unreachable!(), - }; - - for member in members { - run_unit_test(&member)?; - } - } - Target::All => { - Target::iter() - .filter(|t| *t != Target::All) - .try_for_each(|t| run_unit(&t))?; - } - } - Ok(()) -} - -fn run_unit_test(member: &WorkspaceMember) -> Result<(), anyhow::Error> { - group!("Unit Tests: {}", member.name); - info!("Command line: cargo test --lib --bins -p {}", &member.name); - let status = Command::new("cargo") - .args(["test", "--lib", "--bins", "-p", &member.name]) - .status() - .map_err(|e| anyhow!("Failed to execute unit test: {}", e))?; - if !status.success() { - return Err(anyhow!("Failed to execute unit test for {}", &member.name)); - } - endgroup!(); - Ok(()) -} - -pub(crate) fn run_documentation(target: &Target) -> Result<()> { - match target { - Target::Crates | Target::Examples => { - let members = match target { - Target::Crates => get_workspace_members(WorkspaceMemberType::Crate), - Target::Examples => get_workspace_members(WorkspaceMemberType::Example), - _ => unreachable!(), - }; - - for member in members { - run_doc_test(&member)?; - } - } - Target::All => { - Target::iter() - .filter(|t| *t != Target::All) - .try_for_each(|t| run_documentation(&t))?; - } - } - Ok(()) -} - -fn run_doc_test(member: &WorkspaceMember) -> Result<(), anyhow::Error> { - group!("Doc Tests: {}", member.name); - info!("Command line: cargo test --doc -p {}", &member.name); - let status = Command::new("cargo") - .args(["test", "--doc", "-p", &member.name]) - .status() - .map_err(|e| anyhow!("Failed to execute documentation test: {}", e))?; - if !status.success() { - return Err(anyhow!( - "Failed to execute documentation test for {}", - &member.name - )); - } - endgroup!(); - Ok(()) -} - -pub(crate) fn run_integration(target: &Target) -> anyhow::Result<()> { - match target { - Target::Crates | Target::Examples => { - let members = match target { - Target::Crates => get_workspace_members(WorkspaceMemberType::Crate), - Target::Examples => get_workspace_members(WorkspaceMemberType::Example), - _ => unreachable!(), - }; - - for member in members { - run_integration_test(&member)?; - } - } - Target::All => { - Target::iter() - .filter(|t| *t != Target::All) - .try_for_each(|t| run_integration(&t))?; - } - } - Ok(()) -} - -fn run_integration_test(member: &WorkspaceMember) -> Result<()> { - group!("Integration Tests: {}", &member.name); - info!( - "Command line: cargo test --test \"test_*\" -p {}", - &member.name - ); - let output = Command::new("cargo") - .args(["test", "--test", "test_*", "-p", &member.name]) - .output() - .map_err(|e| anyhow!("Failed to execute integration test: {}", e))?; - - if !output.status.success() { - let stderr = String::from_utf8_lossy(&output.stderr); - if stderr.contains("no test target matches pattern") { - warn!( - "No tests found matching the pattern `test_*` for {}", - &member.name - ); - endgroup!(); - return Ok(()); - } - return Err(anyhow!( - "Failed to execute integration test for {}: {}", - &member.name, - stderr - )); - } - endgroup!(); - Ok(()) -} diff --git a/xtask/src/logging.rs b/xtask/src/logging.rs deleted file mode 100644 index 672f229..0000000 --- a/xtask/src/logging.rs +++ /dev/null @@ -1,67 +0,0 @@ -use std::io::Write; - -/// Initialise and create a `env_logger::Builder` which follows the -/// GitHub Actions logging syntax when running on CI. -pub fn init_logger() -> env_logger::Builder { - let mut builder = env_logger::Builder::from_default_env(); - builder.target(env_logger::Target::Stdout); - - // Find and setup the correct log level - builder.filter(None, get_log_level()); - builder.write_style(env_logger::WriteStyle::Always); - - // Custom Formatter for Github Actions - if std::env::var("CI").is_ok() { - builder.format(|buf, record| match record.level().as_str() { - "DEBUG" => writeln!(buf, "::debug:: {}", record.args()), - "WARN" => writeln!(buf, "::warning:: {}", record.args()), - "ERROR" => { - writeln!(buf, "::error:: {}", record.args()) - } - _ => writeln!(buf, "{}", record.args()), - }); - } - - builder -} - -/// Determine the LogLevel for the logger -fn get_log_level() -> log::LevelFilter { - // DEBUG - match std::env::var("DEBUG") { - Ok(_value) => return log::LevelFilter::Debug, - Err(_err) => (), - } - // ACTIONS_RUNNER_DEBUG - match std::env::var("ACTIONS_RUNNER_DEBUG") { - Ok(_value) => return log::LevelFilter::Debug, - Err(_err) => (), - }; - - log::LevelFilter::Info -} - -/// Group Macro -#[macro_export] -macro_rules! group { - // group!() - ($($arg:tt)*) => { - let title = format!($($arg)*); - if std::env::var("CI").is_ok() { - log!(log::Level::Info, "::group::{}", title) - } else { - log!(log::Level::Info, "{}", title) - } - }; -} - -/// End Group Macro -#[macro_export] -macro_rules! endgroup { - // endgroup!() - () => { - if std::env::var("CI").is_ok() { - log!(log::Level::Info, "::endgroup::") - } - }; -} diff --git a/xtask/src/main.rs b/xtask/src/main.rs index e38ee90..f9769f0 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -1,53 +1,20 @@ -mod commands; -// mod dependencies; -mod logging; -// mod runchecks; -mod utils; -// mod vulnerabilities; - -use crate::{logging::init_logger, utils::time::format_duration}; -use clap::{Parser, Subcommand}; -use std::time::Instant; - #[macro_use] extern crate log; -#[derive(Parser)] -#[command(author, version, about, long_about = None)] -struct XtaskArgs { - #[command(subcommand)] - command: Command, -} +use std::time::Instant; +use tracel_xtask::prelude::*; -#[derive(Subcommand)] -enum Command { - /// Runs checks and fix issues (used for development purposes) - Check(commands::check::CheckCmdArgs), - /// Runs checks for Continous Integration - CI(commands::ci::CICmdArgs), - /// Runs tests. - Test(commands::test::TestCmdArgs), - /// Runs all tests and checks that should pass before opening a Pull Request. - PullRequestChecks, -} +#[macros::base_commands(Build, Bump, Check, Compile, Doc, Fix, Publish, Test, Validate)] +enum Command {} fn main() -> anyhow::Result<()> { - init_logger().init(); - let args = XtaskArgs::parse(); - let start = Instant::now(); - match args.command { - Command::Check(args) => commands::check::handle_command(args, None), - Command::CI(args) => commands::ci::handle_command(args), - Command::Test(args) => commands::test::handle_command(args), - Command::PullRequestChecks => commands::pull_request_checks::handle_command(), - }?; - + let args = init_xtask::()?; + dispatch_base_commands(args)?; let duration = start.elapsed(); info!( "\x1B[32;1mTime elapsed for the current execution: {}\x1B[0m", format_duration(&duration) ); - Ok(()) } diff --git a/xtask/src/test.rs b/xtask/src/test.rs deleted file mode 100644 index e69de29..0000000 diff --git a/xtask/src/utils/cargo.rs b/xtask/src/utils/cargo.rs deleted file mode 100644 index bc0e2ff..0000000 --- a/xtask/src/utils/cargo.rs +++ /dev/null @@ -1,88 +0,0 @@ -use std::{ - collections::HashMap, - path::Path, - process::{Command, Stdio}, -}; - -use crate::{endgroup, group}; - -use super::{process::run_process_command, Params}; - -/// Return a cargo command without executing it -pub fn cargo_command(command: &str, params: Params, envs: HashMap<&str, &str>) -> Command { - cargo_command_with_path::(command, params, envs, None) -} - -/// Run a cargo command with the passed directory as the current directory -pub fn cargo_command_with_path>( - command: &str, - params: Params, - envs: HashMap<&str, &str>, - path: Option

, -) -> Command { - let mut cargo = Command::new("cargo"); - cargo - .env("CARGO_INCREMENTAL", "0") - .envs(&envs) - .arg(command) - .args(¶ms.params) - .stdout(Stdio::inherit()) // Send stdout directly to terminal - .stderr(Stdio::inherit()); // Send stderr directly to terminal - - if let Some(path) = path { - cargo.current_dir(path); - } - - cargo -} - -/// Run a cargo command -pub fn run_cargo( - command: &str, - params: Params, - envs: HashMap<&str, &str>, - error: &str, -) -> anyhow::Result<()> { - let mut cargo = cargo_command(command, params.clone(), envs); - run_process_command(&mut cargo, error) -} - -/// Ensure that a cargo crate is installed -pub fn ensure_cargo_crate_is_installed( - crate_name: &str, - features: Option<&str>, - locked: bool, -) -> anyhow::Result<()> { - if !is_cargo_crate_installed(crate_name) { - group!("Cargo: install crate '{}'", crate_name); - let mut args = vec![crate_name]; - if locked { - args.push("--locked"); - } - if let Some(features) = features { - if !features.is_empty() { - args.push("--features"); - args.push(&features); - } - } - run_cargo( - "install", - args.into(), - HashMap::new(), - &format!("crate '{}' should be installed", crate_name), - )?; - endgroup!(); - } - Ok(()) -} - -/// Returns true if the passed cargo crate is installed locally -fn is_cargo_crate_installed(crate_name: &str) -> bool { - let output = Command::new("cargo") - .arg("install") - .arg("--list") - .output() - .expect("Should get the list of installed cargo commands"); - let output_str = String::from_utf8_lossy(&output.stdout); - output_str.lines().any(|line| line.contains(crate_name)) -} diff --git a/xtask/src/utils/mod.rs b/xtask/src/utils/mod.rs deleted file mode 100644 index d771817..0000000 --- a/xtask/src/utils/mod.rs +++ /dev/null @@ -1,64 +0,0 @@ -use std::process::Command; - -pub(crate) mod cargo; -pub(crate) mod process; -pub(crate) mod prompt; -pub(crate) mod time; -pub(crate) mod workspace; - -#[derive(Clone)] -pub(crate) struct Params { - pub params: Vec, -} - -impl From<[&str; N]> for Params { - fn from(value: [&str; N]) -> Self { - Self { - params: value.iter().map(|v| v.to_string()).collect(), - } - } -} - -impl From<&str> for Params { - fn from(value: &str) -> Self { - Self { - params: vec![value.to_string()], - } - } -} - -impl From> for Params { - fn from(value: Vec<&str>) -> Self { - Self { - params: value.iter().map(|s| s.to_string()).collect(), - } - } -} - -impl std::fmt::Display for Params { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.write_str(self.params.join(" ").as_str()) - } -} - -impl> std::ops::Add for Params { - type Output = Params; - - fn add(mut self, rhs: Rhs) -> Self::Output { - let rhs: Params = rhs.into(); - self.params.extend(rhs.params); - self - } -} - -pub fn get_command_line_from_command(command: &Command) -> String { - let args: Vec = command - .get_args() - .map(|arg| format!("\"{}\"", arg.to_string_lossy().into_owned())) - .collect(); - format!( - "{} {}", - command.get_program().to_string_lossy(), - args.join(" ") - ) -} diff --git a/xtask/src/utils/process.rs b/xtask/src/utils/process.rs deleted file mode 100644 index 1686719..0000000 --- a/xtask/src/utils/process.rs +++ /dev/null @@ -1,30 +0,0 @@ -use std::process::{Child, Command}; - -use crate::utils::get_command_line_from_command; - -/// Spawn a process from passed command -pub fn run_process_command(command: &mut Command, error: &str) -> anyhow::Result<()> { - // Handle cargo child process - let command_line = get_command_line_from_command(command); - info!("{command_line}\n"); - let process = command.spawn().expect(error); - let error = format!( - "{} process should run flawlessly", - command.get_program().to_str().unwrap() - ); - handle_child_process(process, &error) -} - -/// Handle child process -pub fn handle_child_process(mut child: Child, error: &str) -> anyhow::Result<()> { - // Wait for the child process to finish - let status = child.wait().expect(error); - - // If exit status is not a success, terminate the process with an error - if !status.success() { - // Use the exit code associated to a command to terminate the process, - // if any exit code had been found, use the default value 1 - std::process::exit(status.code().unwrap_or(1)); - } - Ok(()) -} diff --git a/xtask/src/utils/prompt.rs b/xtask/src/utils/prompt.rs deleted file mode 100644 index 8e52593..0000000 --- a/xtask/src/utils/prompt.rs +++ /dev/null @@ -1,12 +0,0 @@ -use std::io::{self, Write}; - -pub(crate) fn ask_once(prompt: &str) -> bool { - print!("{}\nDo you want to proceed? (yes/no): ", prompt); - io::stdout().flush().expect("stdout should be flushed"); - - let mut input = String::new(); - io::stdin() - .read_line(&mut input) - .expect("should be able to read stdin line"); - input.trim().to_lowercase() == "yes" || input.trim().to_lowercase() == "y" -} diff --git a/xtask/src/utils/time.rs b/xtask/src/utils/time.rs deleted file mode 100644 index 6398c0e..0000000 --- a/xtask/src/utils/time.rs +++ /dev/null @@ -1,15 +0,0 @@ -use std::time::Duration; - -/// Print duration as HH:MM:SS format -pub(crate) fn format_duration(duration: &Duration) -> String { - let seconds = duration.as_secs(); - let minutes = seconds / 60; - let hours = minutes / 60; - let remaining_minutes = minutes % 60; - let remaining_seconds = seconds % 60; - - format!( - "{:02}:{:02}:{:02}", - hours, remaining_minutes, remaining_seconds - ) -} diff --git a/xtask/src/utils/workspace.rs b/xtask/src/utils/workspace.rs deleted file mode 100644 index aa96df7..0000000 --- a/xtask/src/utils/workspace.rs +++ /dev/null @@ -1,90 +0,0 @@ -use serde_json::Value; -use std::{path::Path, process::Command}; - -const MEMBER_PATH_PREFIX: &str = if cfg!(target_os = "windows") { - "path+file:///" -} else { - "path+file://" -}; - -pub(crate) enum WorkspaceMemberType { - Crate, - Example, -} - -#[derive(Debug)] -#[allow(dead_code)] -pub(crate) struct WorkspaceMember { - pub(crate) name: String, - pub(crate) path: String, -} - -impl WorkspaceMember { - fn new(name: String, path: String) -> Self { - Self { name, path } - } -} - -/// Get workspace crates -pub(crate) fn get_workspace_members(w_type: WorkspaceMemberType) -> Vec { - // Run `cargo metadata` command to get project metadata - let output = Command::new("cargo") - .arg("metadata") - .output() - .expect("Failed to execute command"); - // Parse the JSON output - let metadata: Value = serde_json::from_slice(&output.stdout).expect("Failed to parse JSON"); - // Extract workspaces from the metadata, excluding examples/ and xtask - let workspaces = metadata["workspace_members"] - .as_array() - .expect("Expected an array of workspace members") - .iter() - .filter_map(|member| { - let member_str = member.as_str()?; - let has_whitespace = member_str.chars().any(|c| c.is_whitespace()); - let (name, path) = if has_whitespace { - parse_workspace_member0(member_str)? - } else { - parse_workspace_member1(member_str)? - }; - match w_type { - WorkspaceMemberType::Crate if name != "xtask" && !path.contains("examples/") => { - Some(WorkspaceMember::new(name.to_string(), path.to_string())) - } - WorkspaceMemberType::Example if name != "xtask" && path.contains("examples/") => { - Some(WorkspaceMember::new(name.to_string(), path.to_string())) - } - _ => None, - } - }) - .collect(); - - workspaces -} - -/// Legacy cargo metadata format for member specs (rust < 1.77) -/// Example: -/// "backend-comparison 0.13.0 (path+file:///Users/username/burn/backend-comparison)" -fn parse_workspace_member0(specs: &str) -> Option<(String, String)> { - let parts: Vec<_> = specs.split_whitespace().collect(); - let (name, path) = (parts.first()?.to_owned(), parts.last()?.to_owned()); - // skip the first character because it is a '(' - let path = path - .chars() - .skip(1) - .collect::() - .replace(MEMBER_PATH_PREFIX, "") - .replace(')', ""); - Some((name.to_string(), path.to_string())) -} - -/// Cargo metadata format for member specs (rust >= 1.77) -/// Example: -/// "path+file:///Users/username/burn/backend-comparison#0.13.0" -fn parse_workspace_member1(specs: &str) -> Option<(String, String)> { - let no_prefix = specs.replace(MEMBER_PATH_PREFIX, "").replace(')', ""); - let path = Path::new(no_prefix.split_once('#')?.0); - let name = path.file_name()?.to_str()?; - let path = path.to_str()?; - Some((name.to_string(), path.to_string())) -}