diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 512f26b669..e9f0fc4cce 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -124,6 +124,28 @@ pub enum SortBy { } ``` +## Tests + +To run all tests, use: +```bash +pixi run test +``` +But if you have modified recipe data under the tests/data/channels directory, you need to update the test channel before running tests: +```bash +pixi run update-test-channel +``` +> [!NOTE] +> This task currently only works on unix systems. If you are on Windows, it is recommended to use [WSL](https://learn.microsoft.com/en-us/windows/wsl/install). + +For example, if you modified data for dummy_channel_1: +```bash +pixi run update-test-channel dummy_channel_1 +``` +After updating the test channel, run the tests again: +``` +pixi run test +``` + ## CLI documentation The CLI reference is automatically generated from the code documentation of CLI commands under `src/cli`. diff --git a/Cargo.lock b/Cargo.lock index 2ac831d225..35b28329d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -56,12 +56,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -273,7 +267,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix 1.0.8", + "rustix 1.1.2", "slab", "windows-sys 0.60.2", ] @@ -310,7 +304,7 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 1.0.8", + "rustix 1.1.2", ] [[package]] @@ -336,7 +330,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.0.8", + "rustix 1.1.2", "signal-hook-registry", "slab", "windows-sys 0.60.2", @@ -496,9 +490,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.104.0" +version = "1.105.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c488cd6abb0ec9811c401894191932e941c5f91dc226043edacd0afa1634bc" +checksum = "c99789e929b5e1d9a5aa3fa1d81317f3a789afc796141d11b0eaafd9d9f47e38" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1240,9 +1234,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.35" +version = "1.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" +checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54" dependencies = [ "find-msvc-tools", "jobserver", @@ -1280,17 +1274,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.0", ] [[package]] @@ -1305,9 +1298,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.46" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" +checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" dependencies = [ "clap_builder", "clap_derive", @@ -1315,9 +1308,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.46" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" +checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" dependencies = [ "anstream", "anstyle", @@ -1347,9 +1340,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.45" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck", "proc-macro2", @@ -1365,9 +1358,9 @@ checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "coalesced_map" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f51db9b94d9ca1f2075d1d1ea620ab431f90017a01955becb281e3ae4603a7" +checksum = "7cf5a7a58a9d5b914bddb0a3a2bd920af2be897114dc8128af022af81fc43b8b" dependencies = [ "dashmap", "tokio", @@ -1419,15 +1412,15 @@ dependencies = [ [[package]] name = "console" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" +checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" dependencies = [ "encode_unicode", "libc", "once_cell", "unicode-width 0.2.1", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -1656,12 +1649,13 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.4.7" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73" +checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3" dependencies = [ + "dispatch", "nix 0.30.1", - "windows-sys 0.59.0", + "windows-sys 0.61.0", ] [[package]] @@ -1938,9 +1932,15 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + [[package]] name = "displaydoc" version = "0.2.5" @@ -2110,12 +2110,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.0", ] [[package]] @@ -2211,9 +2211,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" [[package]] name = "fixedbitset" @@ -2304,7 +2304,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" dependencies = [ "fs-err", - "rustix 1.0.8", + "rustix 1.1.2", "tokio", "windows-sys 0.59.0", ] @@ -2476,7 +2476,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.5+wasi-0.2.4", "wasm-bindgen", ] @@ -2679,7 +2679,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.0", + "indexmap 2.11.1", "slab", "tokio", "tokio-util", @@ -2698,7 +2698,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.11.0", + "indexmap 2.11.1", "slab", "tokio", "tokio-util", @@ -3262,9 +3262,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" dependencies = [ "equivalent", "hashbrown 0.15.5", @@ -3277,7 +3277,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" dependencies = [ - "console 0.16.0", + "console 0.16.1", "portable-atomic", "unicode-width 0.2.1", "unit-prefix", @@ -3302,9 +3302,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.43.1" +version = "1.43.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "154934ea70c58054b556dd430b99a98c2a7ff5309ac9891597e339b5c28f4371" +checksum = "46fdb647ebde000f43b5b53f773c30cf9b0cb4300453208713fa38b2c70935a0" dependencies = [ "console 0.15.11", "globset", @@ -3352,11 +3352,11 @@ checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" [[package]] name = "is_executable" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a1b5bad6f9072935961dfbf1cced2f3d129963d091b6f69f007fe04e758ae2" +checksum = "baabb8b4867b26294d818bf3f651a454b6901431711abb96e296245888d6e8c4" dependencies = [ - "winapi", + "windows-sys 0.60.2", ] [[package]] @@ -3482,9 +3482,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" dependencies = [ "once_cell", "wasm-bindgen", @@ -3639,12 +3639,12 @@ dependencies = [ [[package]] name = "junction" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72bbdfd737a243da3dfc1f99ee8d6e166480f17ab4ac84d7c34aacd73fc7bd16" +checksum = "c52f6e1bf39a7894f618c9d378904a11dbd7e10fe3ec20d1173600e79b1408d8" dependencies = [ "scopeguard", - "windows-sys 0.52.0", + "windows-sys 0.60.2", ] [[package]] @@ -3658,7 +3658,7 @@ dependencies = [ "log", "secret-service", "security-framework 2.11.1", - "security-framework 3.3.0", + "security-framework 3.4.0", "windows-sys 0.60.2", "zbus", "zeroize", @@ -3730,7 +3730,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.53.3", ] [[package]] @@ -3741,9 +3741,9 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libmimalloc-sys" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88cd67e9de251c1781dbe2f641a1a3ad66eaae831b8a2c38fbdc5ddae16d4d" +checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870" dependencies = [ "cc", "libc", @@ -3777,9 +3777,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -3799,9 +3799,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru" @@ -3962,9 +3962,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.47" +version = "0.1.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1791cbe101e95af5764f06f20f6760521f7158f69dbf9d6baf941ee1bf6bc40" +checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8" dependencies = [ "libmimalloc-sys", ] @@ -3987,9 +3987,9 @@ dependencies = [ [[package]] name = "minijinja" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e60ac08614cc09062820e51d5d94c2fce16b94ea4e5003bb81b99a95f84e876" +checksum = "a9f264d75233323f4b7d2f03aefe8a990690cdebfbfe26ea86bcbaec5e9ac990" dependencies = [ "serde", ] @@ -4359,11 +4359,11 @@ dependencies = [ [[package]] name = "ordermap" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d6bff06e4a5dc6416bead102d3e63c480dd852ffbb278bf8cfeb4966b329609" +checksum = "0dcd63f1ae4b091e314a26627c467dd8810d674ba798abc0e566679955776c63" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "serde", ] @@ -4473,7 +4473,7 @@ checksum = "493dd224adc6163e40a1e58cefbeec27dabb69696017677406417b3516c800fa" dependencies = [ "fs-err", "fxhash", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "proptest", "tempfile", @@ -4506,7 +4506,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faee7227064121fcadcd2ff788ea26f0d8f2bd23a0574da11eca23bc935bcc05" dependencies = [ "boxcar", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.13.0", "once_cell", "pep440_rs", @@ -4579,54 +4579,10 @@ checksum = "54acf3a685220b533e437e264e4d932cfbdc4cc7ec0cd232ed73c08d03b8a7ca" dependencies = [ "fixedbitset", "hashbrown 0.15.5", - "indexmap 2.11.0", + "indexmap 2.11.1", "serde", ] -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn", - "unicase", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", - "unicase", -] - [[package]] name = "pin-project" version = "1.1.10" @@ -4682,7 +4638,7 @@ dependencies = [ "fs_extra", "futures", "http 1.3.1", - "indexmap 2.11.0", + "indexmap 2.11.1", "indicatif", "insta", "itertools 0.14.0", @@ -4828,7 +4784,7 @@ dependencies = [ "fs-err", "futures", "human_bytes", - "indexmap 2.11.0", + "indexmap 2.11.1", "indicatif", "insta", "is_executable", @@ -4912,7 +4868,7 @@ dependencies = [ "dunce", "fs-err", "futures", - "indexmap 2.11.0", + "indexmap 2.11.1", "insta", "itertools 0.14.0", "miette 7.6.0", @@ -5019,7 +4975,7 @@ dependencies = [ "http 1.3.1", "human_bytes", "humantime", - "indexmap 2.11.0", + "indexmap 2.11.1", "indicatif", "insta", "itertools 0.14.0", @@ -5168,7 +5124,7 @@ dependencies = [ "fancy_display", "fs-err", "futures", - "indexmap 2.11.0", + "indexmap 2.11.1", "indicatif", "insta", "is_executable", @@ -5224,7 +5180,7 @@ dependencies = [ "fancy_display", "fs-err", "glob", - "indexmap 2.11.0", + "indexmap 2.11.1", "insta", "itertools 0.14.0", "miette 7.6.0", @@ -5324,7 +5280,7 @@ dependencies = [ "console 0.15.11", "futures", "human_bytes", - "indexmap 2.11.0", + "indexmap 2.11.1", "indicatif", "itertools 0.14.0", "parking_lot", @@ -5377,7 +5333,7 @@ dependencies = [ name = "pixi_spec_containers" version = "0.1.0" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "pixi_spec", "rattler_conda_types", @@ -5441,7 +5397,7 @@ version = "0.1.0" dependencies = [ "digest", "hex", - "indexmap 2.11.0", + "indexmap 2.11.1", "insta", "itertools 0.14.0", "miette 7.6.0", @@ -5546,8 +5502,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" dependencies = [ "base64 0.22.1", - "indexmap 2.11.0", - "quick-xml 0.38.2", + "indexmap 2.11.1", + "quick-xml 0.38.3", "serde", "time", ] @@ -5562,7 +5518,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.0.8", + "rustix 1.1.2", "windows-sys 0.60.2", ] @@ -5632,7 +5588,7 @@ checksum = "5676d703dda103cbb035b653a9f11448c0a7216c7926bd35fcb5865475d0c970" dependencies = [ "autocfg", "equivalent", - "indexmap 2.11.0", + "indexmap 2.11.1", ] [[package]] @@ -5753,7 +5709,7 @@ name = "pubgrub" version = "0.3.0" source = "git+https://github.com/astral-sh/pubgrub?rev=06ec5a5f59ffaeb6cf5079c6cb184467da06c9db#06ec5a5f59ffaeb6cf5079c6cb184467da06c9db" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "log", "priority-queue", "rustc-hash", @@ -5769,11 +5725,8 @@ checksum = "60ebe4262ae91ddd28c8721111a0a6e9e58860e211fc92116c4bb85c98fd96ad" dependencies = [ "hex", "percent-encoding", - "phf", "serde", - "smartstring", "thiserror 2.0.16", - "unicase", ] [[package]] @@ -5826,7 +5779,7 @@ version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b0f6160dc48298b9260d9b958ad1d7f96f6cd0b9df200b22329204e09334663" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "pep440_rs", "pep508_rs", "serde", @@ -5851,9 +5804,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.38.2" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d200a41a7797e6461bd04e4e95c3347053a731c32c87f066f2f0dda22dbdbba8" +checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" dependencies = [ "memchr", ] @@ -6019,19 +5972,19 @@ dependencies = [ [[package]] name = "rattler" -version = "0.37.0" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9da8b28e5e7c9d401ecb080ef4058821a5ff20d0b7f9e1293f4e308b36c99812" +checksum = "8bde5385d34e38d403d24d141cff078d96f02acfe9880a52cf8a7ee651925ad3" dependencies = [ "anyhow", "clap", - "console 0.16.0", + "console 0.16.1", "digest", "dirs", "fs-err", "futures", "humantime", - "indexmap 2.11.0", + "indexmap 2.11.1", "indicatif", "itertools 0.14.0", "memchr", @@ -6064,9 +6017,9 @@ dependencies = [ [[package]] name = "rattler_cache" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e381b75c2a3e3b01cbc12acdd67472c4eec0369e4383c7a6f023842827c929" +checksum = "1a90d8113aad3c8bff55c59f37dc292ebed419fdd09242036c4d5be30fdccc9b" dependencies = [ "anyhow", "dashmap", @@ -6097,9 +6050,9 @@ dependencies = [ [[package]] name = "rattler_conda_types" -version = "0.39.1" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79740066d3471eb5872d931d6b6c4e1473db6eedf93e86533ea279a786dccb53" +checksum = "1f16f93c23cb051636dbe215be32da964969c4d8d416d6b5d4a50574f70ceb3b" dependencies = [ "chrono", "core-foundation 0.10.1", @@ -6109,7 +6062,7 @@ dependencies = [ "fxhash", "glob", "hex", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "lazy-regex", "nom 8.0.0", @@ -6156,14 +6109,14 @@ dependencies = [ [[package]] name = "rattler_lock" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6450fbe7185b3f3515a94f81b2311c0f9f7899856b2f471cc66336a1af575fd0" +checksum = "3b480fb1b37b095f8541ae86e3d18aa27aff8d4229bb3f3dcd9b90304e917199" dependencies = [ "chrono", "file_url", "fxhash", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "pep440_rs", "pep508_rs", @@ -6192,9 +6145,9 @@ dependencies = [ [[package]] name = "rattler_menuinst" -version = "0.2.24" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c9b97d9033f8c61bc2458f6afafe3874ac02ef1167ab2c786b0800644378615" +checksum = "5103aaeb791fdf9e1ac62b7573bb0fd165f21fe66bb46224c3a46b8078e70b66" dependencies = [ "chrono", "configparser", @@ -6222,11 +6175,12 @@ dependencies = [ [[package]] name = "rattler_networking" -version = "0.25.11" +version = "0.25.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0e2647706ecaf8f6a27ce1d3faaf44ae0f5ec713c1298ee874d77b8488a1122" +checksum = "cd5e48e1ecc33f1b73f9a6fc1a7755a298340fcaf5250034e5ee86388479d3ce" dependencies = [ "anyhow", + "async-once-cell", "async-trait", "aws-config", "aws-sdk-s3", @@ -6252,9 +6206,9 @@ dependencies = [ [[package]] name = "rattler_package_streaming" -version = "0.23.2" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0d34a6410e8055423a6e5b054661188fe72d810d18785e2554b27f1660819f" +checksum = "93a1867b2b10cc5a204e479dee7a02f29794db31a05e2cdff40bfd9652cbd54c" dependencies = [ "bzip2 0.6.0", "chrono", @@ -6304,9 +6258,9 @@ dependencies = [ [[package]] name = "rattler_repodata_gateway" -version = "0.24.2" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134f2f4a1dfc6d45ca5f09afb27070ab27e930bcd9bacb4e3c592fefed22fb1b" +checksum = "e05b845113ad91bc24d7023b201ff1f1b6600bc68ad723dc4495e2dd766c3c36" dependencies = [ "anyhow", "async-compression", @@ -6364,14 +6318,14 @@ dependencies = [ [[package]] name = "rattler_shell" -version = "0.24.10" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3129f7f87c873168ff981e5182e8c08a5ba7e47c0a2939ca078c919b31e93034" +checksum = "f3719c5f7eae3f4abd56ec6be280eecd50bdfd81670fde2fb3685911882e5e1f" dependencies = [ "anyhow", "enum_dispatch", "fs-err", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "rattler_conda_types", "rattler_pty", @@ -6385,9 +6339,9 @@ dependencies = [ [[package]] name = "rattler_solve" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325f2531cf5370dee31d20eaa7eba56766b9dc66442f8c2f4585979b44268311" +checksum = "23c63a7fb3e15b1885b6969fe36ec6d41989c007a69944b38f8da3af2cda37bf" dependencies = [ "chrono", "futures", @@ -6403,9 +6357,9 @@ dependencies = [ [[package]] name = "rattler_virtual_packages" -version = "2.1.4" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83025dab2cf654df31766801fb55be564e14ebdb4de60c27ace1a1820befcb3c" +checksum = "431de037688708d9c65b5442e7b994ce63d63c9daf96bc78bb5ae43f908fe05b" dependencies = [ "archspec", "libloading", @@ -6482,14 +6436,14 @@ dependencies = [ [[package]] name = "reflink-copy" -version = "0.1.26" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c81d000a2c524133cc00d2f92f019d399e57906c3b7119271a2495354fe895" +checksum = "23bbed272e39c47a095a5242218a67412a220006842558b03fe2935e8f3d7b92" dependencies = [ "cfg-if", "libc", - "rustix 1.0.8", - "windows 0.61.3", + "rustix 1.1.2", + "windows 0.62.0", ] [[package]] @@ -6651,7 +6605,7 @@ dependencies = [ "elsa", "event-listener", "futures", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "petgraph", "tracing", @@ -6700,7 +6654,7 @@ dependencies = [ "bytecheck", "bytes", "hashbrown 0.15.5", - "indexmap 2.11.0", + "indexmap 2.11.1", "munge", "ptr_meta", "rancor", @@ -6829,15 +6783,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.0", ] [[package]] @@ -6888,7 +6842,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.3.0", + "security-framework 3.4.0", ] [[package]] @@ -6934,7 +6888,7 @@ dependencies = [ "rustls-native-certs 0.8.1", "rustls-platform-verifier-android", "rustls-webpki 0.103.4", - "security-framework 3.3.0", + "security-framework 3.4.0", "security-framework-sys", "webpki-root-certs 0.26.11", "windows-sys 0.59.0", @@ -7002,11 +6956,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.0", ] [[package]] @@ -7064,9 +7018,9 @@ dependencies = [ [[package]] name = "scroll_derive" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22fc4f90c27b57691bbaf11d8ecc7cfbfe98a4da6dbe60226115d322aa80c06e" +checksum = "ed76efe62313ab6610570951494bdaa81568026e0318eaa55f167de70eeea67d" dependencies = [ "proc-macro2", "quote", @@ -7137,9 +7091,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" +checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640" dependencies = [ "bitflags", "core-foundation 0.10.1", @@ -7150,9 +7104,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -7254,7 +7208,7 @@ version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "itoa", "memchr", "ryu", @@ -7312,7 +7266,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.0", + "indexmap 2.11.1", "schemars 0.9.0", "schemars 1.0.4", "serde", @@ -7340,7 +7294,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "itoa", "ryu", "serde", @@ -7499,12 +7453,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - [[package]] name = "slab" version = "0.4.11" @@ -7529,17 +7477,6 @@ dependencies = [ "serde", ] -[[package]] -name = "smartstring" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" -dependencies = [ - "autocfg", - "static_assertions", - "version_check", -] - [[package]] name = "smawk" version = "0.3.2" @@ -7830,9 +7767,9 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" +checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" [[package]] name = "temp-env" @@ -7846,15 +7783,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.21.0" +version = "3.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" +checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.8", - "windows-sys 0.60.2", + "rustix 1.1.2", + "windows-sys 0.61.0", ] [[package]] @@ -7863,7 +7800,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 1.0.8", + "rustix 1.1.2", "windows-sys 0.60.2", ] @@ -7955,9 +7892,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.42" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca967379f9d8eb8058d86ed467d81d03e81acd45757e4ca341c24affbe8e8e3" +checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" dependencies = [ "deranged", "num-conv", @@ -7969,15 +7906,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9108bb380861b07264b950ded55a44a14a4adc68b9f5efd85aafc3aa4d40a68" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.23" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7182799245a7264ce590b349d90338f1c1affad93d2639aed5f8f69c090b334c" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -8119,7 +8056,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" dependencies = [ "foldhash", - "indexmap 2.11.0", + "indexmap 2.11.1", "serde", "serde_spanned 1.0.0", "toml_datetime 0.7.0", @@ -8162,7 +8099,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", @@ -8172,11 +8109,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.3" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17d3b47e6b7a040216ae5302712c94d1cf88c95b47efa80e2c59ce96c878267e" +checksum = "7211ff1b8f0d3adae1663b7da9ffe396eabe1ca25f0b0bee42b0da29a9ddce93" dependencies = [ - "indexmap 2.11.0", + "indexmap 2.11.1", "serde", "serde_spanned 1.0.0", "toml_datetime 0.7.0", @@ -8418,9 +8355,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-linebreak" @@ -8607,7 +8544,7 @@ dependencies = [ "tempfile", "thiserror 2.0.16", "tokio", - "toml_edit 0.23.3", + "toml_edit 0.23.4", "tracing", "uv-cache-key", "uv-configuration", @@ -8766,7 +8703,7 @@ name = "uv-console" version = "0.0.1" source = "git+https://github.com/astral-sh/uv?tag=0.8.5#ce37286814dbb802c422f0926487cfab7aefd2b7" dependencies = [ - "console 0.16.0", + "console 0.16.1", ] [[package]] @@ -8955,7 +8892,7 @@ dependencies = [ "junction", "path-slash", "percent-encoding", - "rustix 1.0.8", + "rustix 1.1.2", "same-file", "schemars 1.0.4", "serde", @@ -9171,7 +9108,7 @@ source = "git+https://github.com/astral-sh/uv?tag=0.8.5#ce37286814dbb802c422f092 dependencies = [ "arcstr", "boxcar", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "regex", "rustc-hash", @@ -9225,7 +9162,7 @@ version = "0.0.1" source = "git+https://github.com/astral-sh/uv?tag=0.8.5#ce37286814dbb802c422f0926487cfab7aefd2b7" dependencies = [ "hashbrown 0.15.5", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "jiff", "mailparse", @@ -9237,7 +9174,7 @@ dependencies = [ "serde", "serde-untagged", "thiserror 2.0.16", - "toml_edit 0.23.3", + "toml_edit 0.23.4", "tracing", "url", "uv-cache-key", @@ -9260,7 +9197,7 @@ dependencies = [ "dunce", "fs-err", "futures", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "once_cell", "owo-colors", @@ -9304,7 +9241,7 @@ dependencies = [ "uv-warnings", "which", "windows-registry", - "windows-result", + "windows-result 0.3.4", "windows-sys 0.59.0", ] @@ -9325,7 +9262,7 @@ source = "git+https://github.com/astral-sh/uv?tag=0.8.5#ce37286814dbb802c422f092 dependencies = [ "anyhow", "configparser", - "console 0.16.0", + "console 0.16.1", "fs-err", "futures", "rustc-hash", @@ -9389,7 +9326,7 @@ dependencies = [ "either", "futures", "hashbrown 0.15.5", - "indexmap 2.11.0", + "indexmap 2.11.1", "itertools 0.14.0", "jiff", "owo-colors", @@ -9405,7 +9342,7 @@ dependencies = [ "tokio", "tokio-stream", "toml 0.9.5", - "toml_edit 0.23.3", + "toml_edit 0.23.4", "tracing", "url", "uv-cache-key", @@ -9447,7 +9384,7 @@ dependencies = [ "uv-fs", "uv-static", "windows-registry", - "windows-result", + "windows-result 0.3.4", "windows-sys 0.59.0", ] @@ -9543,7 +9480,7 @@ name = "uv-virtualenv" version = "0.0.4" source = "git+https://github.com/astral-sh/uv?tag=0.8.5#ce37286814dbb802c422f0926487cfab7aefd2b7" dependencies = [ - "console 0.16.0", + "console 0.16.1", "fs-err", "itertools 0.14.0", "owo-colors", @@ -9585,7 +9522,7 @@ dependencies = [ "thiserror 2.0.16", "tokio", "toml 0.9.5", - "toml_edit 0.23.3", + "toml_edit 0.23.4", "tracing", "uv-build-backend", "uv-cache-key", @@ -9684,30 +9621,40 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.5+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" dependencies = [ - "wit-bindgen-rt", + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.0+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" +dependencies = [ + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" dependencies = [ "bumpalo", "log", @@ -9719,9 +9666,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" dependencies = [ "cfg-if", "js-sys", @@ -9732,9 +9679,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9742,9 +9689,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", @@ -9755,9 +9702,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" dependencies = [ "unicode-ident", ] @@ -9777,9 +9724,9 @@ dependencies = [ [[package]] name = "wasmtimer" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" dependencies = [ "futures", "js-sys", @@ -9806,9 +9753,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" dependencies = [ "js-sys", "wasm-bindgen", @@ -9859,7 +9806,7 @@ checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" dependencies = [ "env_home", "regex", - "rustix 1.0.8", + "rustix 1.1.2", "winsafe", ] @@ -9881,9 +9828,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ "windows-sys 0.48.0", ] @@ -9919,11 +9866,24 @@ version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-collections", + "windows-collections 0.2.0", "windows-core 0.61.2", - "windows-future", - "windows-link", - "windows-numerics", + "windows-future 0.2.1", + "windows-link 0.1.3", + "windows-numerics 0.2.0", +] + +[[package]] +name = "windows" +version = "0.62.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9579d0e6970fd5250aa29aba5994052385ff55cf7b28a059e484bb79ea842e42" +dependencies = [ + "windows-collections 0.3.0", + "windows-core 0.62.0", + "windows-future 0.3.0", + "windows-link 0.2.0", + "windows-numerics 0.3.0", ] [[package]] @@ -9935,6 +9895,15 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-collections" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a90dd7a7b86859ec4cdf864658b311545ef19dbcf17a672b52ab7cefe80c336f" +dependencies = [ + "windows-core 0.62.0", +] + [[package]] name = "windows-core" version = "0.59.0" @@ -9943,7 +9912,7 @@ checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" dependencies = [ "windows-implement 0.59.0", "windows-interface", - "windows-result", + "windows-result 0.3.4", "windows-strings 0.3.1", "windows-targets 0.53.3", ] @@ -9956,11 +9925,24 @@ checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement 0.60.0", "windows-interface", - "windows-link", - "windows-result", + "windows-link 0.1.3", + "windows-result 0.3.4", "windows-strings 0.4.2", ] +[[package]] +name = "windows-core" +version = "0.62.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" +dependencies = [ + "windows-implement 0.60.0", + "windows-interface", + "windows-link 0.2.0", + "windows-result 0.4.0", + "windows-strings 0.5.0", +] + [[package]] name = "windows-future" version = "0.2.1" @@ -9968,8 +9950,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", - "windows-link", - "windows-threading", + "windows-link 0.1.3", + "windows-threading 0.1.0", +] + +[[package]] +name = "windows-future" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2194dee901458cb79e1148a4e9aac2b164cc95fa431891e7b296ff0b2f1d8a6" +dependencies = [ + "windows-core 0.62.0", + "windows-link 0.2.0", + "windows-threading 0.2.0", ] [[package]] @@ -10011,6 +10004,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + [[package]] name = "windows-numerics" version = "0.2.0" @@ -10018,7 +10017,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-numerics" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ce3498fe0aba81e62e477408383196b4b0363db5e0c27646f932676283b43d8" +dependencies = [ + "windows-core 0.62.0", + "windows-link 0.2.0", ] [[package]] @@ -10027,8 +10036,8 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", - "windows-result", + "windows-link 0.1.3", + "windows-result 0.3.4", "windows-strings 0.4.2", ] @@ -10038,7 +10047,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -10047,7 +10065,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -10056,7 +10074,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -10104,6 +10131,15 @@ dependencies = [ "windows-targets 0.53.3", ] +[[package]] +name = "windows-sys" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +dependencies = [ + "windows-link 0.2.0", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -10156,7 +10192,7 @@ version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -10173,7 +10209,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-threading" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab47f085ad6932defa48855254c758cdd0e2f2d48e62a34118a268d8f345e118" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -10381,13 +10426,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" [[package]] name = "writeable" @@ -10411,7 +10453,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" dependencies = [ "libc", - "rustix 1.0.8", + "rustix 1.1.2", ] [[package]] @@ -10533,18 +10575,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", @@ -10637,7 +10679,7 @@ dependencies = [ "crossbeam-utils", "displaydoc", "flate2", - "indexmap 2.11.0", + "indexmap 2.11.1", "lzma-rs", "memchr", "thiserror 2.0.16", @@ -10656,7 +10698,7 @@ dependencies = [ "arbitrary", "crc32fast", "flate2", - "indexmap 2.11.0", + "indexmap 2.11.1", "memchr", "time", "zopfli", @@ -10700,9 +10742,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index e2bd4d6b3f..40d989b9ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -129,23 +129,23 @@ which = "8.0.0" # Rattler crates coalesced_map = "0.1.1" file_url = "0.2.6" -rattler = { version = "0.37.0", default-features = false } -rattler_cache = { version = "0.3.32", default-features = false } -rattler_conda_types = { version = "0.39.1", default-features = false, features = [ +rattler = { version = "0.37.3", default-features = false } +rattler_cache = { version = "0.3.34", default-features = false } +rattler_conda_types = { version = "0.39.2", default-features = false, features = [ "rayon", ] } rattler_digest = { version = "1.1.5", default-features = false } -rattler_lock = { version = "0.24.0", default-features = false } +rattler_lock = { version = "0.24.1", default-features = false } rattler_menuinst = { version = "0.2.23", default-features = false } -rattler_networking = { version = "0.25.11", default-features = false, features = [ +rattler_networking = { version = "0.25.13", default-features = false, features = [ "google-cloud-auth", "dirs", ] } rattler_package_streaming = { version = "0.23.0", default-features = false } -rattler_repodata_gateway = { version = "0.24.2", default-features = false } -rattler_shell = { version = "0.24.10", default-features = false } -rattler_solve = { version = "3.0.2", default-features = false } -rattler_virtual_packages = { version = "2.1.4", default-features = false } +rattler_repodata_gateway = { version = "0.24.4", default-features = false } +rattler_shell = { version = "0.25.0", default-features = false } +rattler_solve = { version = "3.0.3", default-features = false } +rattler_virtual_packages = { version = "2.1.5", default-features = false } simple_spawn_blocking = { version = "1.1.0", default-features = false } # Bumping this to a higher version breaks the Windows path handling. diff --git a/crates/pixi_core/src/activation.rs b/crates/pixi_core/src/activation.rs index d4587a889a..b79796e19c 100644 --- a/crates/pixi_core/src/activation.rs +++ b/crates/pixi_core/src/activation.rs @@ -96,7 +96,7 @@ impl Environment<'_> { } EnvironmentName::Default => self.workspace().display_name().to_string(), }; - let mut map = IndexMap::from_iter([ + let map = IndexMap::from_iter([ (format!("{ENV_PREFIX}NAME"), self.name().to_string()), ( format!("{ENV_PREFIX}PLATFORMS"), @@ -104,9 +104,6 @@ impl Environment<'_> { ), ("PIXI_PROMPT".to_string(), format!("({}) ", prompt)), ]); - - // Add the activation environment variables - map.extend(self.activation_env(Some(Platform::current()))); map } } @@ -114,7 +111,6 @@ impl Environment<'_> { /// Get the complete activator for the environment. /// This method will create an activator for the environment and add the activation scripts from the project. /// The activator will be created for the current platform and the default shell. -/// The activation scripts from the environment will be checked for existence and the extension will be checked for correctness. pub fn get_activator<'p>( environment: &'p Environment<'p>, shell: ShellEnum, @@ -162,11 +158,16 @@ pub fn get_activator<'p>( .activation_scripts .extend(additional_activation_scripts); - // Add the environment variables from the project. + // Add the environment variables from the project (pre-activation script vars). activator .env_vars .extend(get_static_environment_variables(environment)); + // Add environment variables that should be applied after activation scripts run. + activator + .post_activation_env_vars + .extend(environment.activation_env(Some(Platform::current()))); + Ok(activator) } @@ -492,8 +493,8 @@ mod tests { #[test] fn test_metadata_env() { - let multi_env_project = r#" - [project] + let multi_env_workspace = r#" + [workspace] name = "pixi" channels = ["conda-forge"] platforms = ["linux-64", "osx-64", "win-64"] @@ -506,7 +507,7 @@ mod tests { [environments] test = ["test"] "#; - let project = Workspace::from_str(Path::new("pixi.toml"), multi_env_project).unwrap(); + let project = Workspace::from_str(Path::new("pixi.toml"), multi_env_workspace).unwrap(); let default_env = project.default_environment(); let env = default_env.get_metadata_env(); @@ -517,40 +518,46 @@ mod tests { let test_env = project.environment("test").unwrap(); let env = test_env.get_metadata_env(); + let post_activation_env = test_env.activation_env(Some(Platform::current())); assert_eq!(env.get("PIXI_ENVIRONMENT_NAME").unwrap(), "test"); assert!(env.get("PIXI_PROMPT").unwrap().contains("pixi")); assert!(env.get("PIXI_PROMPT").unwrap().contains("test")); - assert!(env.get("TEST").unwrap().contains("123test123")); + assert!( + post_activation_env + .get("TEST") + .unwrap() + .contains("123test123") + ); } #[test] fn test_metadata_project_env() { - let project = r#" - [project] + let workspace = r#" + [workspace] name = "pixi" version = "0.1.0" channels = ["conda-forge"] platforms = ["linux-64", "osx-64", "win-64"] "#; - let project = Workspace::from_str(Path::new("pixi.toml"), project).unwrap(); - let env = project.get_metadata_env(); + let workspace = Workspace::from_str(Path::new("pixi.toml"), workspace).unwrap(); + let env = workspace.get_metadata_env(); assert_eq!( env.get("PIXI_PROJECT_NAME").unwrap(), - project.display_name() + workspace.display_name() ); assert_eq!( env.get("PIXI_PROJECT_ROOT").unwrap(), - project.root().to_str().unwrap() + workspace.root().to_str().unwrap() ); assert_eq!( env.get("PIXI_PROJECT_MANIFEST").unwrap(), - project.workspace.provenance.path.to_str().unwrap() + workspace.workspace.provenance.path.to_str().unwrap() ); assert_eq!( env.get("PIXI_PROJECT_VERSION").unwrap(), - &project + &workspace .workspace .value .workspace @@ -564,7 +571,7 @@ mod tests { #[test] fn test_metadata_project_env_order() { let project = r#" - [project] + [workspace] name = "pixi" channels = [""] platforms = ["linux-64", "osx-64", "win-64"] @@ -574,22 +581,20 @@ mod tests { ZZZ = "123test123" ZAB = "123test123" "#; - let project = Workspace::from_str(Path::new("pixi.toml"), project).unwrap(); - let env = get_static_environment_variables(&project.default_environment()); + let workspace = Workspace::from_str(Path::new("pixi.toml"), project).unwrap(); + let post_activation_env = workspace + .default_environment() + .activation_env(Some(Platform::current())); - // Make sure the user defined environment variables are at the end. + // Make sure the user defined environment variables are sorted by input order. assert!( - env.keys().position(|key| key == "PIXI_PROJECT_NAME") - < env.keys().position(|key| key == "ABC") + post_activation_env.keys().position(|key| key == "ABC") + < post_activation_env.keys().position(|key| key == "ZZZ") ); assert!( - env.keys().position(|key| key == "PIXI_PROJECT_NAME") - < env.keys().position(|key| key == "ZZZ") + post_activation_env.keys().position(|key| key == "ZZZ") + < post_activation_env.keys().position(|key| key == "ZAB") ); - - // Make sure the user defined environment variables are sorted by input order. - assert!(env.keys().position(|key| key == "ABC") < env.keys().position(|key| key == "ZZZ")); - assert!(env.keys().position(|key| key == "ZZZ") < env.keys().position(|key| key == "ZAB")); } #[test] @@ -612,8 +617,8 @@ mod tests { #[tokio::test] async fn test_run_activation_cache_based_on_lockfile() { let temp_dir = tempfile::tempdir().unwrap(); - let project = r#" - [project] + let workspace = r#" + [workspace] name = "pixi" channels = [] platforms = [] @@ -622,7 +627,7 @@ mod tests { TEST = "ACTIVATION123" "#; let project = - Workspace::from_str(temp_dir.path().join("pixi.toml").as_path(), project).unwrap(); + Workspace::from_str(temp_dir.path().join("pixi.toml").as_path(), workspace).unwrap(); let default_env = project.default_environment(); // Don't create cache, by not giving it a lockfile @@ -728,8 +733,8 @@ packages: #[tokio::test] async fn test_run_activation_cache_based_on_activation_env() { let temp_dir = tempfile::tempdir().unwrap(); - let project = r#" - [project] + let workspace = r#" + [workspace] name = "pixi" channels = [] platforms = [] @@ -738,7 +743,7 @@ packages: TEST = "ACTIVATION123" "#; let project = - Workspace::from_str(temp_dir.path().join("pixi.toml").as_path(), project).unwrap(); + Workspace::from_str(temp_dir.path().join("pixi.toml").as_path(), workspace).unwrap(); let default_env = project.default_environment(); let env = run_activation( &default_env, @@ -758,8 +763,8 @@ packages: tokio_fs::write(&cache_file, modified).await.unwrap(); // Check that the cache is invalidated when the activation.env changes. - let project = r#" - [project] + let workspace = r#" + [workspace] name = "pixi" channels = [] platforms = [] @@ -769,7 +774,7 @@ packages: TEST2 = "ACTIVATION1234" "#; let project = - Workspace::from_str(temp_dir.path().join("pixi.toml").as_path(), project).unwrap(); + Workspace::from_str(temp_dir.path().join("pixi.toml").as_path(), workspace).unwrap(); let default_env = project.default_environment(); let env = run_activation( &default_env, @@ -791,77 +796,4 @@ packages: "The new variable should be set" ); } - - // This test works, most of the times.., so this is a good test to run locally. - // But it is to flaky for CI unfortunately! - // #[tokio::test] - // async fn test_run_activation_based_on_existing_env(){ - // let temp_dir = tempfile::tempdir().unwrap(); - // let project = r#" - // [project] - // name = "pixi" - // channels = [] - // platforms = ["linux-64", "osx-64", "win-64", "osx-arm64"] - // - // [target.unix.activation.env] - // TEST_ENV_VAR = "${TEST_ENV_VAR}_and_some_more" - // - // [target.win.activation.env] - // TEST_ENV_VAR = "%TEST_ENV_VAR%_and_some_more" - // "#; - // let project = - // Project::from_str(temp_dir.path().join("pixi.toml").as_path(), project).unwrap(); - // let default_env = project.default_environment(); - // - // // Set the environment variable - // std::env::set_var("TEST_ENV_VAR", "test_value"); - // - // // Run the activation script - // let env = run_activation( - // &default_env, - // &CurrentEnvVarBehavior::Include, - // Some(&LockFile::default()), - // false, - // true, - // ).await.unwrap(); - // - // // Check that the environment variable is set correctly - // assert_eq!(env.get("TEST_ENV_VAR").unwrap(), "test_value_and_some_more"); - // - // // Modify the environment variable - // let cache_file = project.default_environment().activation_cache_file_path(); - // let contents = tokio_fs::read_to_string(&cache_file).await.unwrap(); - // let modified = contents.replace("test_value_and_some_more", "modified_cache"); - // tokio_fs::write(&cache_file, modified).await.unwrap(); - // - // // Run the activation script - // let env = run_activation( - // &default_env, - // &CurrentEnvVarBehavior::Include, - // Some(&LockFile::default()), - // false, - // true, - // ).await.unwrap(); - // - // // Check that the environment variable is taken from cache - // assert_eq!(env.get("TEST_ENV_VAR").unwrap(), "modified_cache"); - // - // // Reset the environment variable - // std::env::set_var("TEST_ENV_VAR", "different_test_value"); - // - // // Run the activation script - // let env = run_activation( - // &default_env, - // &CurrentEnvVarBehavior::Include, - // Some(&LockFile::default()), - // false, - // true, - // ).await.unwrap(); - // - // // Check that the environment variable reset, thus the cache was invalidated. - // assert_eq!(env.get("TEST_ENV_VAR").unwrap(), "different_test_value_and_some_more"); - // - // // Unset the environment variable - // std::env::remove_var("TEST_ENV_VAR"); - // } } diff --git a/crates/pixi_task/src/executable_task.rs b/crates/pixi_task/src/executable_task.rs index d30280a5a3..ae0f1ab021 100644 --- a/crates/pixi_task/src/executable_task.rs +++ b/crates/pixi_task/src/executable_task.rs @@ -383,18 +383,18 @@ fn get_output_writer_and_handle() -> (ShellPipeWriter, JoinHandle) { } /// Task specific environment variables. +/// +/// These are rendered as `export KEY=VALUE` statements and prepended to the +/// task script. At runtime they are interpreted by `deno_task_shell`, not by an +/// external OS shell, so `$VAR`-style expansion follows deno-task-shell’s +/// semantics. fn get_export_specific_task_env(task: &Task) -> String { // Append the environment variables if they don't exist let mut export = String::new(); if let Some(env) = task.env() { for (key, value) in env { - if value.contains(format!("${}", key).as_str()) || std::env::var(key.as_str()).is_err() - { - tracing::info!("Setting environment variable: {}=\"{}\"", key, value); - export.push_str(&format!("export \"{}={}\";\n", key, value)); - } else { - tracing::info!("Environment variable {} already set", key); - } + tracing::debug!("Setting environment variable: {}=\"{}\"", key, value); + export.push_str(&format!("export \"{}={}\";\n", key, value)); } } export diff --git a/docs/reference/environment_variables.md b/docs/reference/environment_variables.md index 1d1938dcbb..36a537cdc4 100644 --- a/docs/reference/environment_variables.md +++ b/docs/reference/environment_variables.md @@ -50,3 +50,117 @@ The following environment variables are set by Pixi, when using the `pixi run`, !!! note Even though the variables are environment variables these cannot be overridden. E.g. you can not change the root of the project by setting `PIXI_PROJECT_ROOT` in the environment. + +## Environment Variable Priority + +The following priority rule applies for environment variables: `task.env` > `activation.env` > `activation.scripts` > activation scripts of dependencies > outside environment variables. +Variables defined at a higher priority will override those defined at a lower priority. + +!!! warning + + In older versions of Pixi, this priority was not well-defined, and there are a number of known + deviations from the current priority which exist in some older versions. + Please see the warning in [the advanced tasks documentation](../workspace/advanced_tasks.md#environment-variables) + for further details and migration guidance. + +##### Example 1: `task.env` > `activation.env` + +In `pixi.toml`, we defined an environment variable `HELLO_WORLD` in both `tasks.hello` and `activation.env`. + +When we run `echo $HELLO_WORLD`, it will output: +``` +Hello world! +``` + +```toml title="pixi.toml" +[tasks.hello] +cmd = "echo $HELLO_WORLD" +env = { HELLO_WORLD = "Hello world!" } +[activation.env] +HELLO_WORLD = "Activate!" +``` + +##### Example 2: `activation.env` > `activation.scripts` + +In `pixi.toml`, we defined the same environment variable `DEBUG_MODE` in both `activation.env` and in the activation script file `setup.sh`. +When we run `echo Debug mode: $DEBUG_MODE`, it will output: +```bash +Debug mode: enabled +``` + +```toml title="pixi.toml" +[activation.env] +DEBUG_MODE = "enabled" + +[activation] +scripts = ["setup.sh"] +``` + +```bash title="setup.sh" +export DEBUG_MODE="disabled" +``` + +##### Example 3: `activation.scripts` > activation scripts of dependencies + +In `pixi.toml`, we have our local activation script and a dependency `my-package` that also sets environment variables through its activation scripts. +When we run `echo Library path: $LIB_PATH`, it will output: +``` +Library path: /my/lib +``` + +```toml title="pixi.toml" +[activation] +scripts = ["local_setup.sh"] + +[dependencies] +my-package = "*" # This package has its own activation scripts that set LIB_PATH="/dep/lib" +``` +```bash title="local_setup.sh" +export LIB_PATH="/my/lib" +``` + +##### Example 4: activation scripts of dependencies > outside environment variable + +If we have a dependency that sets `PYTHON_PATH` and the same variable is already set in the outside environment. +When we run `echo Python path: $PYTHON_PATH`, it will output: +```bash +Python path: /pixi/python +``` +``` +# Outside environment +export PYTHON_PATH="/system/python" +``` +```toml title="pixi.toml" +[dependencies] +python-utils = "*" # This package sets PYTHON_PATH="/pixi/python" in its activation scripts +``` + +##### Example 5: Complex Example - All priorities combined +In `pixi.toml`, we define the same variable `APP_CONFIG` across multiple levels: +```toml title="pixi.toml" +[tasks.start] +cmd = "echo Config: $APP_CONFIG" +env = { APP_CONFIG = "task-specific" } + +[activation.env] +APP_CONFIG = "activation-env" + +[activation] +scripts = ["app_setup.sh"] + +[dependencies] +config-loader = "*" # Sets APP_CONFIG="dependency-config" +``` +```bash title="app_setup.sh" +export APP_CONFIG="activation-script" +``` +```bash +# Outside environment +export APP_CONFIG="system-config" +``` + +Since `task.env` has the highest priority, when we run `pixi run start` it will output: + +``` +Config: task-specific +``` diff --git a/docs/workspace/advanced_tasks.md b/docs/workspace/advanced_tasks.md index 65fd09f1d2..fbf6b01792 100644 --- a/docs/workspace/advanced_tasks.md +++ b/docs/workspace/advanced_tasks.md @@ -324,33 +324,54 @@ Note: if you want to debug the globs you can use the `--verbose` flag to see whi pixi run -v start ``` -## Environment variables -You can set environment variables for a task. -These are seen as "default" values for the variables as you can overwrite them from the shell. +## Environment Variables -```toml title="pixi.toml" -[tasks] -echo = { cmd = "echo $ARGUMENT", env = { ARGUMENT = "hello" } } -``` -If you run `pixi run echo` it will output `hello`. -When you set the environment variable `ARGUMENT` before running the task, it will use that value instead. +You can set environment variables directly for a task, as well as by other means. +See [the environment variable priority documentation](../reference/environment_variables.md#environment-variable-priority) for full details of ways to set environment variables, +and how those ways interact with each other. -```shell -ARGUMENT=world pixi run echo -✨ Pixi task (echo in default): echo $ARGUMENT -world -``` +Notes on environment variables in tasks: +- Values set via `tasks..env` are interpreted by `deno_task_shell` when the task runs. Shell-style expansions like `env = { VAR = "$FOO" }` therefore work the same on all operating systems. + +!!! warning + + In older versions of Pixi, this priority was not well-defined, and there are a number of known + deviations from the current priority which exist in some older versions: + + - `activation.scripts` used to take priority over `activation.env` + - activation scripts of dependencies used to take priority over `activation.env` + - outside environment variables used to override variables set in `task.env` + + If you previously relied on a certain priority which no longer applies, you may need to change your + task definitions. -These variables are not shared over tasks, so you need to define these for every task you want to use them in. + For the specific case of overriding `task.env` with outside environment variables, this behaviour can + now be recreated using [task arguments](#task-arguments). For example, if you were previously using + a setup like: -!!! note "Extend instead of overwrite" - If you use the same environment variable in the value as in the key of the map you will also overwrite the variable. - For example overwriting a `PATH` ```toml title="pixi.toml" [tasks] - echo = { cmd = "echo $PATH", env = { PATH = "/tmp/path:$PATH" } } + echo = { cmd = "echo $ARGUMENT", env = { ARGUMENT = "hello" } } + ``` + + ```shell + ARGUMENT=world pixi run echo + ✨ Pixi task (echo in default): echo $ARGUMENT + world + ``` + + you can now recreate this behaviour like: + + ```toml title="pixi.toml" + [tasks] + echo = { cmd = "echo {{ ARGUMENT }}", args = [{"arg" = "ARGUMENT", "default" = "hello" }]} + ``` + + ```shell + pixi run echo world + ✨ Pixi task (echo): echo world + world ``` - This will output `/tmp/path:/usr/bin:/bin` instead of the original `/usr/bin:/bin`. ## Clean environment You can make sure the environment of a task is "Pixi only". @@ -376,6 +397,7 @@ This setting can also be set from the command line with `pixi run --clean-env TA To support the different OS's (Windows, OSX and Linux), Pixi integrates a shell that can run on all of them. This is [`deno_task_shell`](https://deno.land/manual@v1.35.0/tools/task_runner#built-in-commands). The task shell is a limited implementation of a bourne-shell interface. +Task command lines and the values of `tasks..env` are parsed and expanded by this shell. ### Built-in commands diff --git a/docs/workspace/environment.md b/docs/workspace/environment.md index 08fe446480..4447c8becf 100644 --- a/docs/workspace/environment.md +++ b/docs/workspace/environment.md @@ -42,6 +42,12 @@ It sets the `PATH` and some more environment variables. But more importantly it An example of this would be the [`libglib_activate.sh`](https://github.com/conda-forge/glib-feedstock/blob/52ba1944dffdb2d882d824d6548325155b58819b/recipe/scripts/activate.sh) script. Thus, just adding the `bin` directory to the `PATH` is not enough. +Shell used for activation: +- On Windows, Pixi executes activation under `cmd.exe`. +- On Linux and macOS, Pixi executes activation under `bash`. + +This affects both `[activation.env]` and `activation.scripts`: they are applied by the platform's shell during activation, before any task runs. + You can modify the activation with the `activation` table in the manifest, you can add more activation scripts or inject environment variables into the activation scripts. ```toml --8<-- "docs/source_files/pixi_tomls/activation.toml:activation" diff --git a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-a-0.1.0-hb0f4dca_0.conda b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-a-0.1.0-hb0f4dca_0.conda index 96bf4db59c..e8ed53e811 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-a-0.1.0-hb0f4dca_0.conda and b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-a-0.1.0-hb0f4dca_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-b-0.1.0-hb0f4dca_0.conda b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-b-0.1.0-hb0f4dca_0.conda index 1d45deb54f..a354eb5a27 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-b-0.1.0-hb0f4dca_0.conda and b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-b-0.1.0-hb0f4dca_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-c-0.1.0-hb0f4dca_0.conda b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-c-0.1.0-hb0f4dca_0.conda index f2309d2890..490e888e92 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-c-0.1.0-hb0f4dca_0.conda and b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-c-0.1.0-hb0f4dca_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-d-0.1.0-hb0f4dca_0.conda b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-d-0.1.0-hb0f4dca_0.conda index dc6d32c292..270a44194b 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-d-0.1.0-hb0f4dca_0.conda and b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-d-0.1.0-hb0f4dca_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-f-0.1.0-hb0f4dca_0.conda b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-f-0.1.0-hb0f4dca_0.conda index 81ba28575d..01b90a4c8c 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-f-0.1.0-hb0f4dca_0.conda and b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-f-0.1.0-hb0f4dca_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-g-0.1.0-hb0f4dca_0.conda b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-g-0.1.0-hb0f4dca_0.conda index 8568941612..5f47d0fb4d 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-g-0.1.0-hb0f4dca_0.conda and b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy-g-0.1.0-hb0f4dca_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy_e-0.1.0-hb0f4dca_0.conda b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy_e-0.1.0-hb0f4dca_0.conda index 572d6067e0..6a5dbe74aa 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/linux-64/dummy_e-0.1.0-hb0f4dca_0.conda and b/tests/data/channels/channels/dummy_channel_1/linux-64/dummy_e-0.1.0-hb0f4dca_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/linux-64/pixi-foobar-0.1.0-hb0f4dca_0.conda b/tests/data/channels/channels/dummy_channel_1/linux-64/pixi-foobar-0.1.0-hb0f4dca_0.conda index 0f43e798dc..c6d3caf975 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/linux-64/pixi-foobar-0.1.0-hb0f4dca_0.conda and b/tests/data/channels/channels/dummy_channel_1/linux-64/pixi-foobar-0.1.0-hb0f4dca_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/linux-64/repodata.json b/tests/data/channels/channels/dummy_channel_1/linux-64/repodata.json index 6de521f28b..d795b4b3ff 100644 --- a/tests/data/channels/channels/dummy_channel_1/linux-64/repodata.json +++ b/tests/data/channels/channels/dummy_channel_1/linux-64/repodata.json @@ -1 +1 @@ -{"info":{"subdir":"linux-64"},"packages":{},"packages.conda":{"dummy-a-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":["dummy-c"],"md5":"dcf5fc50ecc7af8c95599e41c4aa71e8","name":"dummy-a","platform":"linux","sha256":"8a4e574a4bebf4a534c311ddac4a083a94548e8d448d5da6adc2de17f8dc0edf","size":1403,"subdir":"linux-64","timestamp":1750924031224,"version":"0.1.0"},"dummy-b-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"e9b3444c479ae4dd6a22555c5df11fe8","name":"dummy-b","platform":"linux","sha256":"c4aafe28491d76dd8b6577b5271302e9d1d4b90d9fa18d5c7cae90747cf92681","size":1179,"subdir":"linux-64","timestamp":1750924031224,"version":"0.1.0"},"dummy-c-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"4ae3f5c8da6c8799bb0a0cf2162ed773","name":"dummy-c","platform":"linux","sha256":"62d8d58b4e817262fbc72f7f43d7e49c8cbb832349b849817e731fdf40466a26","size":1175,"subdir":"linux-64","timestamp":1750924031224,"version":"0.1.0"},"dummy-d-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":["dummy-x"],"md5":"67edbe2743fc68c7797b06d1552df856","name":"dummy-d","platform":"linux","sha256":"3993ab3c3f42c7717ef9a8e74d27d6ce683a1d0472e64d11cda6fafea40a486c","size":1184,"subdir":"linux-64","timestamp":1750924031224,"version":"0.1.0"},"dummy-f-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"9ba79381eb60607fd9428c687ea5f3e5","name":"dummy-f","platform":"linux","sha256":"04212cbd57721b60e40ec8a4f957854a9e323ed39727f7b6d8508658f265499d","size":1179,"subdir":"linux-64","timestamp":1750924031224,"version":"0.1.0"},"dummy-g-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":["dummy-b"],"md5":"05b64f1aa0c53c1dc135b5fa3ccbd733","name":"dummy-g","platform":"linux","sha256":"741d213b374ec40a3466bcf8204333277c774eafe5f890ee6bb1db289277bead","size":1188,"subdir":"linux-64","timestamp":1750924031224,"version":"0.1.0"},"dummy_e-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"4339286bf47db2b9f64899b3f60b72e2","name":"dummy_e","platform":"linux","sha256":"5b64dd603fcb85f2905cc4280f1af6cde12d7c28879e4823e4fdbb6cf9e90913","size":1254,"subdir":"linux-64","timestamp":1750924031224,"version":"0.1.0"},"pixi-foobar-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"6fce6575108f46a2359c8d3a4f9355e7","name":"pixi-foobar","platform":"linux","sha256":"d0d5abdf0f496e4ad12761d00a9141a83d01cc367bdeeb0ae5525bcd9466dfd6","size":1188,"subdir":"linux-64","timestamp":1750924031224,"version":"0.1.0"}},"repodata_version":2} +{"info":{"subdir":"linux-64"},"packages":{},"packages.conda":{"dummy-a-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":["dummy-c"],"md5":"3332487dc4e580591fa1a199606ce866","name":"dummy-a","platform":"linux","sha256":"53ac9a1577af2b3edef61f93cd8c50c7ee56aae50b5327f63e4dc28b76746630","size":1403,"subdir":"linux-64","timestamp":1757405814340,"version":"0.1.0"},"dummy-b-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"04da13088e16cf7dc525085109f261fd","name":"dummy-b","platform":"linux","sha256":"fe1f394bee638b9876cc3928cfdb3ed7432f01c225cc10839994085190908c17","size":1176,"subdir":"linux-64","timestamp":1757405814340,"version":"0.1.0"},"dummy-c-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"0b43019ffc68ade7d022555e2f4336de","name":"dummy-c","platform":"linux","sha256":"db0919192e63836b1035ca65e0a1296d27aba69b496a8ac0572771453f906e79","size":1170,"subdir":"linux-64","timestamp":1757405814340,"version":"0.1.0"},"dummy-d-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":["dummy-x"],"md5":"3014292c317218087db11594dbb29d6a","name":"dummy-d","platform":"linux","sha256":"3a460630ea08ef4c63b6541ac7f2ccf4bcf7ae75741f4e2b9dbcff9b28b2558a","size":1182,"subdir":"linux-64","timestamp":1757405814340,"version":"0.1.0"},"dummy-f-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"40236ff31fc54564b7e32e747aafdef4","name":"dummy-f","platform":"linux","sha256":"0d3b6de04222c1c556d277f0bfe7a71417b67db2a31dcfa68be5d49d1786c98c","size":1178,"subdir":"linux-64","timestamp":1757405814340,"version":"0.1.0"},"dummy-g-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":["dummy-b"],"md5":"19699a86384eb9ee41255be207c74565","name":"dummy-g","platform":"linux","sha256":"8a0ea729258cf01879b1b08c7d6ed5913648ae19cc42e03f7409273df8d6cc6c","size":1186,"subdir":"linux-64","timestamp":1757405814340,"version":"0.1.0"},"dummy_e-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"d40aac4b382043c68ba8ee5f367fe489","name":"dummy_e","platform":"linux","sha256":"3ab86b94867d3a5b7fe5f1d617cdf0589e2f1987e72b8979e6a6d809e6e50560","size":1253,"subdir":"linux-64","timestamp":1757405814340,"version":"0.1.0"},"pixi-foobar-0.1.0-hb0f4dca_0.conda":{"arch":"x86_64","build":"hb0f4dca_0","build_number":0,"depends":[],"md5":"003be74cc2249d0e42ad5cbe268a40ce","name":"pixi-foobar","platform":"linux","sha256":"ae9984081c3ff26192d3ad3b2a00f787f917e78d12cc9a794827017b0253288b","size":1320,"subdir":"linux-64","timestamp":1757405814340,"version":"0.1.0"}},"repodata_version":2} \ No newline at end of file diff --git a/tests/data/channels/channels/dummy_channel_1/noarch/repodata.json b/tests/data/channels/channels/dummy_channel_1/noarch/repodata.json index 8010a6626c..d6f6f3f3cc 100644 --- a/tests/data/channels/channels/dummy_channel_1/noarch/repodata.json +++ b/tests/data/channels/channels/dummy_channel_1/noarch/repodata.json @@ -1 +1 @@ -{"info":{"subdir":"noarch"},"packages":{},"packages.conda":{},"repodata_version":2} +{"info":{"subdir":"noarch"},"packages":{},"packages.conda":{},"repodata_version":2} \ No newline at end of file diff --git a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-a-0.1.0-h0dc7051_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-a-0.1.0-h0dc7051_0.conda index 15cbfd3fb3..a5cac9f6f6 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-a-0.1.0-h0dc7051_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-a-0.1.0-h0dc7051_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-b-0.1.0-h0dc7051_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-b-0.1.0-h0dc7051_0.conda index 2c5cbb8e5c..70206ee5d6 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-b-0.1.0-h0dc7051_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-b-0.1.0-h0dc7051_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-c-0.1.0-h0dc7051_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-c-0.1.0-h0dc7051_0.conda index 0cc3eb98d8..f00ee9ef2e 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-c-0.1.0-h0dc7051_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-c-0.1.0-h0dc7051_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-d-0.1.0-h0dc7051_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-d-0.1.0-h0dc7051_0.conda index 22261c3a27..c5da310be8 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-d-0.1.0-h0dc7051_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-d-0.1.0-h0dc7051_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-f-0.1.0-h0dc7051_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-f-0.1.0-h0dc7051_0.conda index d8cbaf2650..08a512f2e0 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-f-0.1.0-h0dc7051_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-f-0.1.0-h0dc7051_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-g-0.1.0-h0dc7051_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-g-0.1.0-h0dc7051_0.conda index c34c2d9691..c0022962a1 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-g-0.1.0-h0dc7051_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy-g-0.1.0-h0dc7051_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy_e-0.1.0-h0dc7051_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy_e-0.1.0-h0dc7051_0.conda index 605a1e8377..25414d6f9f 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-64/dummy_e-0.1.0-h0dc7051_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-64/dummy_e-0.1.0-h0dc7051_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-64/pixi-foobar-0.1.0-h0dc7051_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-64/pixi-foobar-0.1.0-h0dc7051_0.conda index ada73ffe63..6f0265d05a 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-64/pixi-foobar-0.1.0-h0dc7051_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-64/pixi-foobar-0.1.0-h0dc7051_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-64/repodata.json b/tests/data/channels/channels/dummy_channel_1/osx-64/repodata.json index 7238f66424..5e7926fca9 100644 --- a/tests/data/channels/channels/dummy_channel_1/osx-64/repodata.json +++ b/tests/data/channels/channels/dummy_channel_1/osx-64/repodata.json @@ -1 +1 @@ -{"info":{"subdir":"osx-64"},"packages":{},"packages.conda":{"dummy-a-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":["dummy-c"],"md5":"0fa6b0aff4e33fb1d2e1f51a83100f7e","name":"dummy-a","platform":"osx","sha256":"a161bcfa602c6628cc5a01a21764ae09a6ff5707f34064424850f17b40a60ea4","size":1400,"subdir":"osx-64","timestamp":1750924031761,"version":"0.1.0"},"dummy-b-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"f902000801b25764ec2e4c285ed27bfb","name":"dummy-b","platform":"osx","sha256":"79f241afe3abdb6f23da647b60b7cd63aaf5a999af030f043204769b411df4bb","size":1172,"subdir":"osx-64","timestamp":1750924031761,"version":"0.1.0"},"dummy-c-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"9b7b3bd8202ecb105002df6f34485b22","name":"dummy-c","platform":"osx","sha256":"bf8bccb74494f93cc7470a35c3d63bc4cb3995f6e982e2b254319e795d27b92f","size":1169,"subdir":"osx-64","timestamp":1750924031760,"version":"0.1.0"},"dummy-d-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":["dummy-x"],"md5":"420648d7ea0c6b0f24ca48f9448b819b","name":"dummy-d","platform":"osx","sha256":"42fc9b0ed09e3a1b6ae451f7a40119392f3b8b755f87a6765be28f4f8e805ef9","size":1181,"subdir":"osx-64","timestamp":1750924031760,"version":"0.1.0"},"dummy-f-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"e963734a29dc7a5b3e16dad2d321e3f2","name":"dummy-f","platform":"osx","sha256":"aacc54a54778097f9fa25afeed280b9d84101d1e1814976af30449eb0bdb6d9c","size":1172,"subdir":"osx-64","timestamp":1750924031760,"version":"0.1.0"},"dummy-g-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":["dummy-b"],"md5":"42cc31a84f5a560496b22da9ee63b770","name":"dummy-g","platform":"osx","sha256":"48e4d4352530f8ceef88c7b478fdd30b4426ca2d42947b26e7cbe0ae06e30c71","size":1186,"subdir":"osx-64","timestamp":1750924031760,"version":"0.1.0"},"dummy_e-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"56074754ca0b799edd729673c234f86a","name":"dummy_e","platform":"osx","sha256":"de53d5c93436d3e30c08c1ea591b54404590969e211826468887619203e1104f","size":1245,"subdir":"osx-64","timestamp":1750924031760,"version":"0.1.0"},"pixi-foobar-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"f002becc1f333f1ed8113b0f71e3706f","name":"pixi-foobar","platform":"osx","sha256":"7521d8a2dce0c0a0421f7620c8c74d6abc7689ab7311c23a33719c40db5fdaf2","size":1185,"subdir":"osx-64","timestamp":1750924031760,"version":"0.1.0"}},"repodata_version":2} +{"info":{"subdir":"osx-64"},"packages":{},"packages.conda":{"dummy-a-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":["dummy-c"],"md5":"65c3025e8df78e37a7da4b2cffc24ce8","name":"dummy-a","platform":"osx","sha256":"7b9909eb0f581f4c6b214853ba1ac937a17e23502641dd3983e4c77d36b85eed","size":1400,"subdir":"osx-64","timestamp":1757405821777,"version":"0.1.0"},"dummy-b-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"0ac1108534004cefac5719d4b1c2651a","name":"dummy-b","platform":"osx","sha256":"85e6acc401f7be1c44f855a37e6d81e69019f6bb7554053dbdbde02cfad01e45","size":1169,"subdir":"osx-64","timestamp":1757405821777,"version":"0.1.0"},"dummy-c-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"9ce1422e6dd51a1a1bd28b25cb0628a8","name":"dummy-c","platform":"osx","sha256":"86dd650de8b7a4ac4c40c4fb0f9d5d64ca3f297bce236b01d83710494e561093","size":1166,"subdir":"osx-64","timestamp":1757405821777,"version":"0.1.0"},"dummy-d-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":["dummy-x"],"md5":"8681dfff5dae59c0df24a1bb5fb0efa7","name":"dummy-d","platform":"osx","sha256":"38678e87af5410240f22c0e34aa5c2f1ec2f2f782d4dfd6b500dac64426899ff","size":1180,"subdir":"osx-64","timestamp":1757405821777,"version":"0.1.0"},"dummy-f-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"e1b940f0e9f9707ad94bfa9ebf5f45d4","name":"dummy-f","platform":"osx","sha256":"26970c3ffb262799425436566f51e1ffc53d527ff9dc4dc42041aab7c4935b83","size":1171,"subdir":"osx-64","timestamp":1757405821777,"version":"0.1.0"},"dummy-g-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":["dummy-b"],"md5":"47d6ce396b1edbc215157daf573caa33","name":"dummy-g","platform":"osx","sha256":"c309152f76053318603c238595eb3fe1f08fd230c9c72dd47a326074d35a10a9","size":1185,"subdir":"osx-64","timestamp":1757405821777,"version":"0.1.0"},"dummy_e-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"67cda4392d6d91ff77dc5c86eb9de646","name":"dummy_e","platform":"osx","sha256":"3cbe49bb0d455b46661b5d9f42fb0539a08cc343350766b7be58ea232e9d7758","size":1248,"subdir":"osx-64","timestamp":1757405821777,"version":"0.1.0"},"pixi-foobar-0.1.0-h0dc7051_0.conda":{"arch":"x86_64","build":"h0dc7051_0","build_number":0,"depends":[],"md5":"61a02e9881878a7bcf337936bb6db680","name":"pixi-foobar","platform":"osx","sha256":"f264bd2e6bd79d1fc5a1ddaf12772a66516b2ad9bcb95b161198e117eb671d96","size":1321,"subdir":"osx-64","timestamp":1757405821777,"version":"0.1.0"}},"repodata_version":2} \ No newline at end of file diff --git a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-a-0.1.0-h60d57d3_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-a-0.1.0-h60d57d3_0.conda index a10a3608eb..2ffee79fa7 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-a-0.1.0-h60d57d3_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-a-0.1.0-h60d57d3_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-b-0.1.0-h60d57d3_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-b-0.1.0-h60d57d3_0.conda index b0973fc62e..d91c853203 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-b-0.1.0-h60d57d3_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-b-0.1.0-h60d57d3_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-c-0.1.0-h60d57d3_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-c-0.1.0-h60d57d3_0.conda index 360a4420ef..5105686de1 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-c-0.1.0-h60d57d3_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-c-0.1.0-h60d57d3_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-d-0.1.0-h60d57d3_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-d-0.1.0-h60d57d3_0.conda index 0ff56640fa..27a64f684c 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-d-0.1.0-h60d57d3_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-d-0.1.0-h60d57d3_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-f-0.1.0-h60d57d3_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-f-0.1.0-h60d57d3_0.conda index b05dcad857..b5cdd2f0bb 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-f-0.1.0-h60d57d3_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-f-0.1.0-h60d57d3_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-g-0.1.0-h60d57d3_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-g-0.1.0-h60d57d3_0.conda index 526cf7bfa4..0e76e484b5 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-g-0.1.0-h60d57d3_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy-g-0.1.0-h60d57d3_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy_e-0.1.0-h60d57d3_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy_e-0.1.0-h60d57d3_0.conda index 90099e4eab..3c7e636ba5 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy_e-0.1.0-h60d57d3_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-arm64/dummy_e-0.1.0-h60d57d3_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-arm64/pixi-foobar-0.1.0-h60d57d3_0.conda b/tests/data/channels/channels/dummy_channel_1/osx-arm64/pixi-foobar-0.1.0-h60d57d3_0.conda index 0da1229349..6f1aa0101d 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/osx-arm64/pixi-foobar-0.1.0-h60d57d3_0.conda and b/tests/data/channels/channels/dummy_channel_1/osx-arm64/pixi-foobar-0.1.0-h60d57d3_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/osx-arm64/repodata.json b/tests/data/channels/channels/dummy_channel_1/osx-arm64/repodata.json index f5831bf896..d26d6a5b69 100644 --- a/tests/data/channels/channels/dummy_channel_1/osx-arm64/repodata.json +++ b/tests/data/channels/channels/dummy_channel_1/osx-arm64/repodata.json @@ -1 +1 @@ -{"info":{"subdir":"osx-arm64"},"packages":{},"packages.conda":{"dummy-a-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":["dummy-c"],"md5":"ddfe9f4c28c61def1271bd693cdd1699","name":"dummy-a","platform":"osx","sha256":"b83286e6f87d659d0aa7311c6c4f5e95e7c47b93992c4251c5ba0e04efbc8351","size":1401,"subdir":"osx-arm64","timestamp":1750924031491,"version":"0.1.0"},"dummy-b-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"f0092b57b74ab440e91de043c929bd53","name":"dummy-b","platform":"osx","sha256":"f524e864b4662d94b8a436bef9174cf12bb3b6086297a477f73eac9f8f3b4199","size":1178,"subdir":"osx-arm64","timestamp":1750924031491,"version":"0.1.0"},"dummy-c-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"260272b73706f0befc7df5fb41f8777b","name":"dummy-c","platform":"osx","sha256":"1aebcec86cf4f8726720c673b0fc1c9b57fb1a58dc6126c781541fb62b15f239","size":1174,"subdir":"osx-arm64","timestamp":1750924031491,"version":"0.1.0"},"dummy-d-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":["dummy-x"],"md5":"f4f6fd21ea679746de8cadc4de4c40ed","name":"dummy-d","platform":"osx","sha256":"2ddad220d05c7590afb7900dddf9527a5da8f9b1876f65f0452c5dae5790ff7b","size":1183,"subdir":"osx-arm64","timestamp":1750924031491,"version":"0.1.0"},"dummy-f-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"08713e776ec27ee9e6eed7d230e85ce8","name":"dummy-f","platform":"osx","sha256":"7acb281d2343e46d7bf1e617faacf7e95101213b77d2cab6307a4d62f47bcda1","size":1177,"subdir":"osx-arm64","timestamp":1750924031491,"version":"0.1.0"},"dummy-g-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":["dummy-b"],"md5":"0068822fc9edc5dabfa3bb6370d3508c","name":"dummy-g","platform":"osx","sha256":"fedcf1050e5a8139f33f3f8f3ff1192a1285ad62f92a51fcd66920cc64266096","size":1186,"subdir":"osx-arm64","timestamp":1750924031491,"version":"0.1.0"},"dummy_e-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"d728d0d1659c78ab3a6bc1649654a75b","name":"dummy_e","platform":"osx","sha256":"740fc99ab413702634d44ca1acbe4bd70c5bca7aafe4652e06866f4d46ac8df0","size":1251,"subdir":"osx-arm64","timestamp":1750924031491,"version":"0.1.0"},"pixi-foobar-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"3e5ca560effec6f65e53760d2df57fbe","name":"pixi-foobar","platform":"osx","sha256":"84bed3d12233f2e7c7ee9a6daf23a7c0b49a51fc2287f1e7d5c90d1ae70545c9","size":1188,"subdir":"osx-arm64","timestamp":1750924031490,"version":"0.1.0"}},"repodata_version":2} +{"info":{"subdir":"osx-arm64"},"packages":{},"packages.conda":{"dummy-a-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":["dummy-c"],"md5":"3f0e86a60ad781e75dce08132b2dc265","name":"dummy-a","platform":"osx","sha256":"0bdaa733510b26ed3c1244e23f71f482586c899c3ad425b44fee9aaf87871ccd","size":1401,"subdir":"osx-arm64","timestamp":1757405818069,"version":"0.1.0"},"dummy-b-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"f5e477b9ba0cbbb0606d29782b274e62","name":"dummy-b","platform":"osx","sha256":"a77aff84d2baa8aaf595210c6521d2f5f4971ca65219f596d7a060a424917e45","size":1179,"subdir":"osx-arm64","timestamp":1757405818069,"version":"0.1.0"},"dummy-c-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"a20ffd4000cc892c7e3aa4a64381f361","name":"dummy-c","platform":"osx","sha256":"28e18155d6ecfa47565fd05ec26fbec45872ad0fac0b597f594618dcb09e83f1","size":1174,"subdir":"osx-arm64","timestamp":1757405818069,"version":"0.1.0"},"dummy-d-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":["dummy-x"],"md5":"7725c150a5be24881088949ac70277cd","name":"dummy-d","platform":"osx","sha256":"cd3c548f73e3365f0a6a36ac39018726ed7416fc7c5747039259772fd1fdebdb","size":1183,"subdir":"osx-arm64","timestamp":1757405818069,"version":"0.1.0"},"dummy-f-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"a6595b74c71cce314459a10a5bc304e5","name":"dummy-f","platform":"osx","sha256":"31a2f4d62208d593d155066989de5b3775643d8e3c52b7a5eaa1b8d0b4d25204","size":1176,"subdir":"osx-arm64","timestamp":1757405818069,"version":"0.1.0"},"dummy-g-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":["dummy-b"],"md5":"e8e8a57db1018443c0fb75367b9b381b","name":"dummy-g","platform":"osx","sha256":"c6ce5716905898280cea146468f3f99afede36078a7bebfdb17399bcf7d8fd03","size":1188,"subdir":"osx-arm64","timestamp":1757405818069,"version":"0.1.0"},"dummy_e-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"d6bfa0506a28fef1973d573f57378454","name":"dummy_e","platform":"osx","sha256":"aed4e36710f81407320520cb4d0dfd73d2be82c97bedb937076a79f555104abd","size":1252,"subdir":"osx-arm64","timestamp":1757405818069,"version":"0.1.0"},"pixi-foobar-0.1.0-h60d57d3_0.conda":{"arch":"arm64","build":"h60d57d3_0","build_number":0,"depends":[],"md5":"ddfd65879c4869c7b62b2a12fba07b13","name":"pixi-foobar","platform":"osx","sha256":"ec3d3e82004e0ed6b68002d1540b8322c29535d0c97e09bcfc28f92473fc7fc0","size":1321,"subdir":"osx-arm64","timestamp":1757405818069,"version":"0.1.0"}},"repodata_version":2} \ No newline at end of file diff --git a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-a-0.1.0-h9490d1a_0.conda b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-a-0.1.0-h9490d1a_0.conda index 146fb5ff68..0e7b96e432 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-a-0.1.0-h9490d1a_0.conda and b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-a-0.1.0-h9490d1a_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-b-0.1.0-h9490d1a_0.conda b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-b-0.1.0-h9490d1a_0.conda index b732cdd7d1..6f2e00af62 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-b-0.1.0-h9490d1a_0.conda and b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-b-0.1.0-h9490d1a_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-c-0.1.0-h9490d1a_0.conda b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-c-0.1.0-h9490d1a_0.conda index c0bf3ed09c..8f68f0f249 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-c-0.1.0-h9490d1a_0.conda and b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-c-0.1.0-h9490d1a_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-d-0.1.0-h9490d1a_0.conda b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-d-0.1.0-h9490d1a_0.conda index 7f7cdf5ce4..a7345a7a02 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-d-0.1.0-h9490d1a_0.conda and b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-d-0.1.0-h9490d1a_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-f-0.1.0-h9490d1a_0.conda b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-f-0.1.0-h9490d1a_0.conda index 3cf3c301a5..9dce47a1a9 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-f-0.1.0-h9490d1a_0.conda and b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-f-0.1.0-h9490d1a_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-g-0.1.0-h9490d1a_0.conda b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-g-0.1.0-h9490d1a_0.conda index 1c27307da6..229457ccd1 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/win-64/dummy-g-0.1.0-h9490d1a_0.conda and b/tests/data/channels/channels/dummy_channel_1/win-64/dummy-g-0.1.0-h9490d1a_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/win-64/dummy_e-0.1.0-h9490d1a_0.conda b/tests/data/channels/channels/dummy_channel_1/win-64/dummy_e-0.1.0-h9490d1a_0.conda index 12644cad48..ad99f335ee 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/win-64/dummy_e-0.1.0-h9490d1a_0.conda and b/tests/data/channels/channels/dummy_channel_1/win-64/dummy_e-0.1.0-h9490d1a_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/win-64/pixi-foobar-0.1.0-h9490d1a_0.conda b/tests/data/channels/channels/dummy_channel_1/win-64/pixi-foobar-0.1.0-h9490d1a_0.conda index 701a3fee02..09a75e8324 100644 Binary files a/tests/data/channels/channels/dummy_channel_1/win-64/pixi-foobar-0.1.0-h9490d1a_0.conda and b/tests/data/channels/channels/dummy_channel_1/win-64/pixi-foobar-0.1.0-h9490d1a_0.conda differ diff --git a/tests/data/channels/channels/dummy_channel_1/win-64/repodata.json b/tests/data/channels/channels/dummy_channel_1/win-64/repodata.json index b193f3d62d..6923770f56 100644 --- a/tests/data/channels/channels/dummy_channel_1/win-64/repodata.json +++ b/tests/data/channels/channels/dummy_channel_1/win-64/repodata.json @@ -1 +1 @@ -{"info":{"subdir":"win-64"},"packages":{},"packages.conda":{"dummy-a-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":["dummy-c"],"md5":"ea9f73eb2ef58136286d7c367dd58601","name":"dummy-a","platform":"win","sha256":"009251c1554fe5bc52a67dbe18222f09270785f6cf144eb241eca4268b8f2bb4","size":1327,"subdir":"win-64","timestamp":1750924030965,"version":"0.1.0"},"dummy-b-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"5e83fd603e6a099852a35982e719f85f","name":"dummy-b","platform":"win","sha256":"05017030acdf44985cfefef343cd0e4bc8b6384cf06a79248f491857bba7bfda","size":1158,"subdir":"win-64","timestamp":1750924030965,"version":"0.1.0"},"dummy-c-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"55ea0261dd813a1b1e58cdd9c0b27acd","name":"dummy-c","platform":"win","sha256":"1b664ab047d54fe69f7a79e93e0eeb417aba03c95900ba11ad61c8ddd1fc13a1","size":1159,"subdir":"win-64","timestamp":1750924030965,"version":"0.1.0"},"dummy-d-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":["dummy-x"],"md5":"5b83aba7255b5db3f8111c053fb8e38a","name":"dummy-d","platform":"win","sha256":"b433e48409b67652d76342e4a0220df441c17b0353ce7aacd243fe9d47b10aa4","size":1175,"subdir":"win-64","timestamp":1750924030965,"version":"0.1.0"},"dummy-f-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"956dea0873bb6d1b1f738cb1cce49fd1","name":"dummy-f","platform":"win","sha256":"996cfb046d54c6a1053410a0dbecc92af9523409733a441b955b2f12992fc3de","size":1173,"subdir":"win-64","timestamp":1750924030965,"version":"0.1.0"},"dummy-g-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":["dummy-b"],"md5":"7a390954301bb361f89e4aaadc0ff807","name":"dummy-g","platform":"win","sha256":"30ff5cdd0a49739f0cf24e07377859a65d85df2c865b3f7dad19a2e1ef3d6e7c","size":1186,"subdir":"win-64","timestamp":1750924030965,"version":"0.1.0"},"dummy_e-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"9fba5ce4e0c0f7fa7598db85812e58af","name":"dummy_e","platform":"win","sha256":"e92d90411c4c03a011a295924be0b2f12eb52e4a66b5eb7233f0e2f26d403a8b","size":1158,"subdir":"win-64","timestamp":1750924030965,"version":"0.1.0"},"pixi-foobar-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"247b7d4ca10b56eea5e44ce13ed8f5ff","name":"pixi-foobar","platform":"win","sha256":"fe0ff16c84835716ff40d66838c504787a168cb952e8d0e5b2c4d7dd3b99e2fc","size":1187,"subdir":"win-64","timestamp":1750924030965,"version":"0.1.0"}},"repodata_version":2} +{"info":{"subdir":"win-64"},"packages":{},"packages.conda":{"dummy-a-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":["dummy-c"],"md5":"f49f058aac88b86e262fa5a074ddb2d6","name":"dummy-a","platform":"win","sha256":"fd7ab6daeb65bdd7ca8559d761aef118691e20e294d09b26030c0baa1dc59659","size":1326,"subdir":"win-64","timestamp":1757405810601,"version":"0.1.0"},"dummy-b-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"94467cef6b352cf1ca45b27e78ee0ce6","name":"dummy-b","platform":"win","sha256":"838a7c152550a877221d43c9c3c7a2581a601b540dce838572147ae46913fdff","size":1159,"subdir":"win-64","timestamp":1757405810601,"version":"0.1.0"},"dummy-c-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"a11f6ca3ce6a822359535e22b7e1695e","name":"dummy-c","platform":"win","sha256":"a3302a28c1bcc7aff84f313996816da5c720ccf88a0f9ce37e6b92872a278f32","size":1157,"subdir":"win-64","timestamp":1757405810601,"version":"0.1.0"},"dummy-d-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":["dummy-x"],"md5":"64f75cf902c13575dd182d3b7b2882ec","name":"dummy-d","platform":"win","sha256":"06c728bb65c86823cf39549a6274f59b185f4412712bb00d1664877aa9170183","size":1175,"subdir":"win-64","timestamp":1757405810601,"version":"0.1.0"},"dummy-f-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"550c896aeb54a5d37212446a8e00a77e","name":"dummy-f","platform":"win","sha256":"ea3fae613f4944550cada7785f0352948b10f064ee51c0e99097cd7242e0e488","size":1172,"subdir":"win-64","timestamp":1757405810601,"version":"0.1.0"},"dummy-g-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":["dummy-b"],"md5":"9749455682201d8df128d352251bff31","name":"dummy-g","platform":"win","sha256":"68e84c3f2321fcfdb2ed6f2d129740ff91a31fdad30b71625596ebc11f3e132e","size":1183,"subdir":"win-64","timestamp":1757405810601,"version":"0.1.0"},"dummy_e-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"1f2ea03e7fbdea22ee28a96865323f9f","name":"dummy_e","platform":"win","sha256":"7f9609eb287dc5de2335c69128f194536aefac0bba89487757dd715fb20d8edb","size":1157,"subdir":"win-64","timestamp":1757405810601,"version":"0.1.0"},"pixi-foobar-0.1.0-h9490d1a_0.conda":{"arch":"x86_64","build":"h9490d1a_0","build_number":0,"depends":[],"md5":"3ffd52e65515129743db4f3aae3e9160","name":"pixi-foobar","platform":"win","sha256":"9e8f3b94c3bb2e5683e080e596c269ef8d2a86ac42f8a706cae09c45aba961db","size":1313,"subdir":"win-64","timestamp":1757405810600,"version":"0.1.0"}},"repodata_version":2} \ No newline at end of file diff --git a/tests/data/channels/recipes/dummy_channel_1.yaml b/tests/data/channels/recipes/dummy_channel_1.yaml index 12fecbd7e7..af937d1301 100644 --- a/tests/data/channels/recipes/dummy_channel_1.yaml +++ b/tests/data/channels/recipes/dummy_channel_1.yaml @@ -142,7 +142,13 @@ outputs: then: - echo "@echo off" > $PREFIX/bin/pixi-foobar.bat - echo "echo %*" >> $PREFIX/bin/pixi-foobar.bat + - mkdir -p $PREFIX/etc/conda/activate.d + - echo "@echo off" > $PREFIX/etc/conda/activate.d/script.bat + - echo "set BAR_PATH=bar" >> $PREFIX/etc/conda/activate.d/script.bat else: - echo '#!/bin/sh' > $PREFIX/bin/pixi-foobar - echo 'echo "$@"' >> $PREFIX/bin/pixi-foobar - chmod +x $PREFIX/bin/pixi-foobar + - mkdir -p $PREFIX/etc/conda/activate.d + - echo '#!/bin/sh' > $PREFIX/etc/conda/activate.d/script.sh + - echo "export BAR_PATH='bar'" >> $PREFIX/etc/conda/activate.d/script.sh diff --git a/tests/integration_python/test_run_cli.py b/tests/integration_python/test_run_cli.py index 6156fbf6c7..588c997489 100644 --- a/tests/integration_python/test_run_cli.py +++ b/tests/integration_python/test_run_cli.py @@ -1,5 +1,6 @@ import json import os +import platform import shutil import signal import subprocess @@ -202,7 +203,7 @@ def test_run_with_activation(pixi: Path, tmp_pixi_workspace: Path) -> None: stdout_contains="test123", ) - # Validate that without experimental it does not use the cache + # Validate that without experimental caching it does not use the cache assert not tmp_pixi_workspace.joinpath(".pixi/activation-env-v0").exists() # Enable the experimental cache config @@ -1451,6 +1452,104 @@ def test_shell_quoting_run_commands(pixi: Path, tmp_pixi_workspace: Path) -> Non ) +def test_run_with_environment_variable_priority( + pixi: Path, tmp_pixi_workspace: Path, dummy_channel_1: str +) -> None: + manifest = tmp_pixi_workspace.joinpath("pixi.toml") + is_windows = platform.system() == "Windows" + script_extension = ".bat" if is_windows else ".sh" + script_manifest = tmp_pixi_workspace.joinpath(f"env_setup{script_extension}") + toml = f""" + [workspace] + name = "test" + channels = ["{dummy_channel_1}"] + platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] + [activation.env] + MY_ENV = "test123" + [target.unix.activation] + scripts = ["env_setup.sh"] + [target.win-64.activation] + scripts = ["env_setup.bat"] + [tasks.task] + cmd = "echo $MY_ENV" + env = {{ MY_ENV = "test456" }} + [tasks.foo] + cmd = "echo $MY_ENV" + [tasks.foobar] + cmd = "echo $FOO_PATH" + [tasks.bar] + cmd = "echo $BAR_PATH" + [tasks.outside] + cmd = "echo $OUTSIDE_ENV" + [dependencies] + pixi-foobar = "*" + """ + + manifest.write_text(toml) + # Generate platform-specific script content + if is_windows: + script_content = """@echo off + set "MY_ENV=activation script" + set "FOO_PATH=activation_script" + """ + else: + script_content = """#!/bin/bash + # Activation script for Unix-like systems + export MY_ENV="activation script" + export FOO_PATH="activation_script" + """ + script_manifest.write_text(script_content) + + # Test 1: task.env > activation.env - should use environment variable defined in specific tasks + verify_cli_command( + [pixi, "run", "--manifest-path", manifest, "task"], + stdout_contains="test456", + ) + + # Test 2: activation.env > activation.script - should use activation.env + verify_cli_command( + [pixi, "run", "--manifest-path", manifest, "foo"], + stdout_contains="test123", + ) + + # Test 3: activation.script > activation scripts from dependencies + verify_cli_command( + [pixi, "run", "--manifest-path", manifest, "foobar"], + stdout_contains="activation_script", + ) + + # Test 4: activation scripts from dependencies > outside environment variable + verify_cli_command( + [pixi, "run", "--manifest-path", manifest, "bar"], + stdout_contains="bar", + stdout_excludes="outside_env", + env={"BAR_PATH": "outside_env"}, + ) + + # Test 5: if nothing specified, use outside environment variable + verify_cli_command( + [pixi, "run", "--manifest-path", manifest, "outside"], + stdout_contains="outside_env", + env={"OUTSIDE_ENV": "outside_env"}, + ) + + # Test 6: activation.env > outside environment variable - should use activation.env + verify_cli_command( + [pixi, "run", "--manifest-path", manifest, "foo"], + stdout_contains="test123", + stdout_excludes="outside_env", + env={"MY_ENV": "outside_env"}, + ) + + # Test 7: task.env > outside environment variable - should use environment variable defined in specific tasks + verify_cli_command( + [pixi, "run", "--manifest-path", manifest, "task"], + stdout_contains="test456", + stdout_excludes="outside_env", + env={"MY_ENV": "outside_env"}, + ) + + @pytest.mark.skipif( sys.platform == "win32", reason="Signal handling is different on Windows", diff --git a/tests/integration_python/test_shell.py b/tests/integration_python/test_shell.py index 68199e1796..da45eb1992 100644 --- a/tests/integration_python/test_shell.py +++ b/tests/integration_python/test_shell.py @@ -1,7 +1,8 @@ from pathlib import Path +import json import platform -from .common import ExitCode, verify_cli_command +from .common import ALL_PLATFORMS, ExitCode, verify_cli_command def test_shell_hook_completions( @@ -66,3 +67,68 @@ def test_shell_hook_completions( [pixi, "shell-hook", "--manifest-path", tmp_pixi_workspace, "--shell", "fish"], stdout_contains=["for file in", "source", "share/fish/vendor_completions.d"], ) + + +def test_shell_activation_order(pixi: Path, tmp_pixi_workspace: Path) -> None: + """Validate that pixi shell env evaluation order matches the new rules. + + Expectations: + - Pre-activation metadata env vars are visible to activation scripts. + - Post-activation env (activation.env) overrides values set by scripts. + """ + is_windows = platform.system() == "Windows" + + # Create activation script that sets an override and uses metadata vars + scripts_dir = tmp_pixi_workspace.joinpath("scripts") + scripts_dir.mkdir(parents=True, exist_ok=True) + if is_windows: + script_name = "activate.bat" + script_content = ( + "@echo off\n" + "set VAR_OVERRIDE=from_script\n" + "set FROM_SCRIPT=%PIXI_PROJECT_NAME%:%CONDA_DEFAULT_ENV%\n" + ) + target_activation = "[feature.f.target.win-64.activation]" + else: + script_name = "activate.sh" + script_content = ( + "#!/usr/bin/env bash\n" + "export VAR_OVERRIDE=from_script\n" + 'export FROM_SCRIPT="$PIXI_PROJECT_NAME:$CONDA_DEFAULT_ENV"\n' + ) + target_activation = "[feature.f.target.unix.activation]" + + (scripts_dir / script_name).write_text(script_content) + + # Minimal manifest: add post-activation env override and point to the script + manifest = tmp_pixi_workspace.joinpath("pixi.toml") + toml = f""" + [workspace] + name = "order-test" + channels = [] + platforms = {ALL_PLATFORMS} + + [feature.f.activation] + env.VAR_OVERRIDE = "from_activation_env" + + {target_activation} + scripts = ["scripts/{script_name}"] + + [environments] + default = ["f"] + """ + manifest.write_text(toml) + + # Ask pixi to compute the environment for shell activation via shell-hook --json + out = verify_cli_command( + [pixi, "shell-hook", "--manifest-path", manifest, "--json"], + expected_exit_code=ExitCode.SUCCESS, + ) + + data = json.loads(out.stdout) + env = data["environment_variables"] + + # activation.env overrides activation script value + assert env.get("VAR_OVERRIDE") == "from_activation_env" + # activation script can see pre-activation metadata variables + assert env.get("FROM_SCRIPT") == "order-test:order-test"