diff --git a/CHANGELOG.md b/CHANGELOG.md index 09cb305..ff8fe39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.4.6 - 2022-07-01 + +* Add support for burn_in_tests generation. + ## 0.4.5 - 2022-07-01 * Randomize test order when creating all resmoke sub-tasks. diff --git a/Cargo.lock b/Cargo.lock index 3e05e5c..64835ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,9 +37,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.55" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "159bb86af3a200e19a068f4224eae4c8bb2d0fa054c7e5d1cacd5cef95e684cd" +checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" [[package]] name = "arrayvec" @@ -84,15 +84,25 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "atomicwrites" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb8f2cd6962fa53c0e2a9d3f97eaa7dbd1e3cbbeeb4745403515b42ae07b3ff6" +dependencies = [ + "tempfile", + "winapi", +] + [[package]] name = "atty" version = "0.2.14" @@ -112,9 +122,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" +checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" dependencies = [ "addr2line", "cc", @@ -150,9 +160,21 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" + +[[package]] +name = "bytecount" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f861d9ce359f56dbcb6e0c2a1cb84e52ad732cadb57b806adeb3c7668caccbd8" + +[[package]] +name = "bytecount" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" [[package]] name = "bytes" @@ -162,33 +184,43 @@ checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "camino" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23" +checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412" dependencies = [ "serde", ] [[package]] name = "cargo-nextest" -version = "0.9.8" +version = "0.9.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34e2e992480ba268fb3411368b1747385b2da112093b26127319077e54926964" +checksum = "618e9819d612e0992a5c70f0109e142038bdd541d915b3b14ba561af886ac6fd" dependencies = [ "camino", "cfg-if", "clap", "color-eyre", + "dialoguer", "duct", "enable-ansi-support", "env_logger", "guppy", + "itertools", "log", + "miette", + "nextest-filtering", "nextest-metadata", "nextest-runner", + "once_cell", "owo-colors", - "shellwords", + "pathdiff", + "semver", + "serde_json", + "shell-words", "supports-color", + "supports-unicode", + "thiserror", ] [[package]] @@ -218,12 +250,15 @@ name = "cc" version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +dependencies = [ + "jobserver", +] [[package]] name = "cfg-expr" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e068cb2806bbc15b439846dc16c5f89f8599f2c3e4d73d4449d38f9b2f0b6c5" +checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" dependencies = [ "smallvec", "target-lexicon", @@ -251,16 +286,16 @@ dependencies = [ [[package]] name = "clap" -version = "3.1.3" +version = "3.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f8c0e2a6b902acc18214e24a6935cdaf8a8e34231913d4404dcaee659f65a1" +checksum = "5b7b16274bb247b45177db843202209b12191b631a14a9d06e41b3777d6ecf14" dependencies = [ "atty", "bitflags", "clap_derive", + "clap_lex", "indexmap", - "lazy_static", - "os_str_bytes", + "once_cell", "strsim", "termcolor", "textwrap", @@ -268,9 +303,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.1.2" +version = "3.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d42c94ce7c2252681b5fed4d3627cc807b13dfc033246bd05d5b252399000e" +checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902" dependencies = [ "heck", "proc-macro-error", @@ -279,6 +314,15 @@ dependencies = [ "syn", ] +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + [[package]] name = "cmd_lib" version = "1.3.0" @@ -319,16 +363,33 @@ dependencies = [ [[package]] name = "config" -version = "0.11.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1b9d958c2b1368a663f05538fc1b5975adce1e19f435acceae987aceeeb369" +checksum = "3ea917b74b6edfb5024e3b55d3c8f710b5f4ed92646429601a42e96f0812b31b" dependencies = [ + "async-trait", "lazy_static", - "nom", + "nom 7.1.1", + "pathdiff", "serde", "toml", ] +[[package]] +name = "console" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "regex", + "terminal_size", + "unicode-width", + "winapi", +] + [[package]] name = "core-foundation" version = "0.9.3" @@ -345,11 +406,20 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-channel" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -368,32 +438,33 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00d6d2ea26e8b151d99093005cb442fb9a37aeaca582a03ec70946f49ab5ed9" +checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" dependencies = [ + "autocfg", "cfg-if", "crossbeam-utils", - "lazy_static", "memoffset", + "once_cell", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.7" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6" +checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" dependencies = [ "cfg-if", - "lazy_static", + "once_cell", ] [[package]] name = "ctrlc" -version = "3.2.1" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19c6cedffdc8c03a3346d723eb20bd85a13362bb96dc2ac000842c6381ec7bf" +checksum = "b37feaa84e6861e00a1f5e5aa8da3ee56d605c9992d33e082786754828e20865" dependencies = [ "nix", "winapi", @@ -401,9 +472,20 @@ dependencies = [ [[package]] name = "debug-ignore" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223089cd5a4e4491f0a0dddd9933f9575123160cf96ca2bb56a690046ecf1745" +checksum = "7e51694c5f8b91baf933e6429a3df4ff3e9f1160386d150790b97bef73337d1b" + +[[package]] +name = "dialoguer" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c8ae48e400addc32a8710c8d62d55cb84249a7d58ac4cd959daecfbaddc545" +dependencies = [ + "console", + "tempfile", + "zeroize", +] [[package]] name = "difflib" @@ -465,6 +547,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + [[package]] name = "encoding_rs" version = "0.8.31" @@ -503,9 +591,9 @@ dependencies = [ [[package]] name = "eyre" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9289ed2c0440a6536e65119725cf91fc2c6b5e513bfd2e36e1134d7cca6ca12f" +checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" dependencies = [ "indenter", "once_cell", @@ -513,9 +601,9 @@ dependencies = [ [[package]] name = "faccess" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e039175679baf763ddddf4f76900b92d4dae9411ee88cf42d2f11b976b09e07c" +checksum = "59ae66425802d6a903e268ae1a08b8c38ba143520f227a205edf4e9c7e3e26d5" dependencies = [ "bitflags", "libc", @@ -531,12 +619,34 @@ dependencies = [ "instant", ] +[[package]] +name = "filetime" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "winapi", +] + [[package]] name = "fixedbitset" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" +[[package]] +name = "flate2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" @@ -645,6 +755,12 @@ version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +[[package]] +name = "futures-timer" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" + [[package]] name = "futures-util" version = "0.3.21" @@ -665,13 +781,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] @@ -682,9 +798,9 @@ checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "guppy" -version = "0.13.0" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6570bfb78ea4e0c039bd212e353a3de840f5ef0fa5439356b5451f6e0df7678d" +checksum = "c7225e3bb8e09a1ef73283a85d589174997acd9f8c36fe72d16c1fe8b9483288" dependencies = [ "camino", "cargo_metadata", @@ -702,6 +818,7 @@ dependencies = [ "serde", "serde_json", "smallvec", + "static_assertions", "target-spec", ] @@ -726,15 +843,15 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.7.1", + "tokio-util", "tracing", ] [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" [[package]] name = "heck" @@ -762,9 +879,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", @@ -773,9 +890,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", @@ -784,9 +901,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6330e8a36bd8c859f3fa6d9382911fbb7147ec39807f63b923933a247240b9ba" +checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" [[package]] name = "httpdate" @@ -802,9 +919,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "humantime-serde" -version = "1.0.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac34a56cfd4acddb469cc7fff187ed5ac36f498ba085caf8bbc725e3ff474058" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" dependencies = [ "humantime", "serde", @@ -812,9 +929,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.18" +version = "0.14.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" +checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f" dependencies = [ "bytes", "futures-channel", @@ -885,14 +1002,26 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.8.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", "hashbrown", ] +[[package]] +name = "indicatif" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" +dependencies = [ + "console", + "lazy_static", + "number_prefix", + "regex", +] + [[package]] name = "instant" version = "0.1.12" @@ -904,9 +1033,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c" +checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" [[package]] name = "is_ci" @@ -925,15 +1054,24 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" + +[[package]] +name = "jobserver" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +dependencies = [ + "libc", +] [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" dependencies = [ "wasm-bindgen", ] @@ -959,30 +1097,31 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.121" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "linked-hash-map" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.14" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] @@ -1001,9 +1140,9 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" @@ -1014,47 +1153,73 @@ dependencies = [ "autocfg", ] +[[package]] +name = "miette" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c90329e44f9208b55f45711f9558cec15d7ef8295cc65ecd6d4188ae8edc58c" +dependencies = [ + "atty", + "backtrace", + "miette-derive", + "once_cell", + "owo-colors", + "supports-color", + "supports-hyperlinks", + "supports-unicode", + "terminal_size", + "textwrap", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b5bc45b761bcf1b5e6e6c4128cd93b84c218721a8d9b894aa0aff4ed180174c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "mime" version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" dependencies = [ "adler", - "autocfg", ] [[package]] name = "mio" -version = "0.8.0" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ "libc", "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys", ] [[package]] name = "mongo-task-generator" -version = "0.4.5" +version = "0.4.6" dependencies = [ "anyhow", "assert_cmd", @@ -1082,6 +1247,17 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "mukti-metadata" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eff38cdb6843983df19a14b015249acdbcf18516a0fee429631948165687644" +dependencies = [ + "semver", + "serde", + "thiserror", +] + [[package]] name = "native-tls" version = "0.2.10" @@ -1107,10 +1283,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b420f638f07fe83056b55ea190bb815f609ec5a35e7017884a10f78839c9e" [[package]] -name = "nextest-metadata" +name = "nextest-filtering" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2ec523dc9a91cdc7426da2919412b01c8316c3c5839daf97caf0b6f17139e7" +checksum = "7b64a300fbd2fe5e6a74a8a8c539daad8c5955676857d4e7d85359e0b2e0252e" +dependencies = [ + "guppy", + "miette", + "nom 7.1.1", + "nom-tracable", + "nom_locate 4.0.0", + "regex", + "regex-syntax", + "thiserror", +] + +[[package]] +name = "nextest-metadata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4559ade9436443fb922276a0783f6138cb0a7440feb09314862b88bd31c379" dependencies = [ "camino", "serde", @@ -1119,13 +1311,15 @@ dependencies = [ [[package]] name = "nextest-runner" -version = "0.3.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3f5c76cde801a5e0d6d8b908cc8490f95440de18c7e87966bde796fff326892" +checksum = "18aaff4a9ab95ab6d825b051d6029a28ef11b05115ff7302ed8eab3359cbdac1" dependencies = [ "aho-corasick", + "atomicwrites", "camino", "cargo_metadata", + "cfg-if", "chrono", "config", "crossbeam-channel", @@ -1134,33 +1328,47 @@ dependencies = [ "duct", "guppy", "home", + "http", "humantime-serde", "indent_write", + "indicatif", + "itertools", + "libc", + "log", + "mukti-metadata", + "nextest-filtering", "nextest-metadata", "num_cpus", "once_cell", "owo-colors", "quick-junit", "rayon", + "regex", + "self_update", + "semver", "serde", "serde_json", + "shell-words", "strip-ansi-escapes", + "tar", "target-spec", + "tempfile", + "thiserror", "toml", "twox-hash", + "windows", + "zstd", ] [[package]] name = "nix" -version = "0.23.1" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9" dependencies = [ "bitflags", - "cc", "cfg-if", "libc", - "memoffset", ] [[package]] @@ -1175,19 +1383,64 @@ dependencies = [ ] [[package]] -name = "ntapi" -version = "0.3.7" +name = "nom" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ - "winapi", + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nom-tracable" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e0d5ea9205a12f87381f7449d43a9ff1dd888af72ef01a858ecccd6d4182de" +dependencies = [ + "nom 7.1.1", + "nom-tracable-macros", + "nom_locate 1.0.0", + "nom_locate 4.0.0", +] + +[[package]] +name = "nom-tracable-macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a6ae7ea2ecde0ee81e0eb45ce5415f2d3b0ef3c30688b0e85d127d43e0f6913" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "nom_locate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f932834fd8e391fc7710e2ba17e8f9f8645d846b55aa63207e17e110a1e1ce35" +dependencies = [ + "bytecount 0.3.2", + "memchr", + "nom 5.1.2", +] + +[[package]] +name = "nom_locate" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37794436ca3029a3089e0b95d42da1f0b565ad271e4d3bb4bad0c7bb70b10605" +dependencies = [ + "bytecount 0.6.3", + "memchr", + "nom 7.1.1", ] [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -1195,9 +1448,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] @@ -1212,35 +1465,53 @@ dependencies = [ "libc", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "object" -version = "0.27.1" +version = "0.28.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" [[package]] name = "openssl" -version = "0.10.38" +version = "0.10.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95" +checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e" dependencies = [ "bitflags", "cfg-if", "foreign-types", "libc", "once_cell", + "openssl-macros", "openssl-sys", ] +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "openssl-probe" version = "0.1.5" @@ -1249,9 +1520,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.72" +version = "0.9.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" +checksum = "835363342df5fba8354c5b453325b110ffd54044e588c539cf2f20a8014e4cb1" dependencies = [ "autocfg", "cc", @@ -1272,27 +1543,24 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.0.0" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" -dependencies = [ - "memchr", -] +checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa" [[package]] name = "owo-colors" -version = "3.2.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20448fd678ec04e6ea15bbe0476874af65e98a01515d667aa49f1434dc44ebf4" +checksum = "decf7381921fea4dcb2549c5667eda59b3ec297ab7e2b5fc33eac69d2e7da87b" dependencies = [ "supports-color", ] [[package]] name = "parking_lot" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", "parking_lot_core", @@ -1300,9 +1568,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ "cfg-if", "libc", @@ -1339,9 +1607,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", @@ -1349,9 +1617,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -1424,22 +1692,23 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "quick-junit" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b67e2983c3a1c129640a674165ab8127066cfcecd3095befa182a77ffd93e00" +checksum = "a434ae380664312ac1a70faa7e18df6bd67b6f6213ea52f9597074dd5973e678" dependencies = [ "chrono", "indexmap", - "quick-xml", + "quick-xml 0.23.0", + "thiserror", ] [[package]] @@ -1451,11 +1720,20 @@ dependencies = [ "memchr", ] +[[package]] +name = "quick-xml" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9279fbdacaad3baf559d8cabe0acc3d06e30ea14931af31af79578ac0946decc" +dependencies = [ + "memchr", +] + [[package]] name = "quote" -version = "1.0.15" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" dependencies = [ "proc-macro2", ] @@ -1520,9 +1798,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" dependencies = [ "autocfg", "crossbeam-deque", @@ -1532,14 +1810,13 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.9.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "lazy_static", "num_cpus", ] @@ -1554,9 +1831,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ "bitflags", ] @@ -1574,9 +1851,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" dependencies = [ "aho-corasick", "memchr", @@ -1591,9 +1868,9 @@ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" [[package]] name = "remove_dir_all" @@ -1606,9 +1883,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" +checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" dependencies = [ "base64", "bytes", @@ -1637,7 +1914,8 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", - "tokio-util 0.6.9", + "tokio-util", + "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -1663,9 +1941,21 @@ dependencies = [ [[package]] name = "rstest" -version = "0.12.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d912f35156a3f99a66ee3e11ac2e0b3f34ac85a07e05263d05a7e2c8810d616f" +checksum = "e9c9dc66cc29792b663ffb5269be669f1613664e69ad56441fdb895c2347b930" +dependencies = [ + "futures", + "futures-timer", + "rstest_macros", + "rustc_version", +] + +[[package]] +name = "rstest_macros" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5015e68a0685a95ade3eee617ff7101ab6a3fc689203101ca16ebc16f2b89c66" dependencies = [ "cfg-if", "proc-macro2", @@ -1691,9 +1981,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.4" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" +checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" dependencies = [ "log", "ring", @@ -1703,27 +1993,27 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.3.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" +checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" dependencies = [ "base64", ] [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi", + "windows-sys", ] [[package]] @@ -1765,29 +2055,49 @@ dependencies = [ "libc", ] +[[package]] +name = "self_update" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88c865d17fb512577be02a09fd2fd96c31c7e46fe649205d84feefd8b2a332da" +dependencies = [ + "either", + "flate2", + "hyper", + "indicatif", + "log", + "quick-xml 0.22.0", + "regex", + "reqwest", + "semver", + "serde_json", + "tar", + "tempfile", +] + [[package]] name = "semver" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" +checksum = "a41d061efea015927ac527063765e73601444cdc344ba855bc7bd44578b25e1c" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -1796,9 +2106,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" dependencies = [ "itoa", "ryu", @@ -1819,9 +2129,9 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0" +checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc" dependencies = [ "indexmap", "ryu", @@ -1848,6 +2158,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + [[package]] name = "shellexpand" version = "2.1.0" @@ -1857,16 +2173,6 @@ dependencies = [ "dirs-next", ] -[[package]] -name = "shellwords" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e515aa4699a88148ed5ef96413ceef0048ce95b43fbc955a33bde0a70fcae6" -dependencies = [ - "lazy_static", - "regex", -] - [[package]] name = "shrub-rs" version = "0.5.0" @@ -1897,15 +2203,21 @@ checksum = "cc47a29ce97772ca5c927f75bac34866b16d64e07f330c3248e2d7226623901b" [[package]] name = "slab" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" [[package]] name = "smallvec" -version = "1.8.0" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc88c725d61fc6c3132893370cac4a0200e3fedf5da8331c570664b1987f5ca2" + +[[package]] +name = "smawk" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043" [[package]] name = "socket2" @@ -1954,28 +2266,57 @@ dependencies = [ "is_ci", ] +[[package]] +name = "supports-hyperlinks" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590b34f7c5f01ecc9d78dba4b3f445f31df750a67621cf31626f3b7441ce6406" +dependencies = [ + "atty", +] + +[[package]] +name = "supports-unicode" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8b945e45b417b125a8ec51f1b7df2f8df7920367700d1f98aedd21e5735f8b2" +dependencies = [ + "atty", +] + [[package]] name = "syn" -version = "1.0.86" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", +] + +[[package]] +name = "tar" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +dependencies = [ + "filetime", + "libc", + "xattr", ] [[package]] name = "target-lexicon" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fa7e55043acb85fca6b3c01485a2eeb6b69c5d21002e273c79e465f43b7ac1" +checksum = "c02424087780c9b71cc96799eaeddff35af2bc513278cda5c99fc1f5d026d3c1" [[package]] name = "target-spec" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a479a83ee0f97d90b2ba593c696968c94d781835117362d9fcd42ca34faa5f1" +checksum = "462215968f204588ef2d3499333d07729b692aa01f79f9b0925071127b3b353f" dependencies = [ "cfg-expr", "guppy-workspace-hack", @@ -2008,13 +2349,23 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" dependencies = [ "winapi-util", ] +[[package]] +name = "terminal_size" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "termtree" version = "0.2.4" @@ -2023,24 +2374,29 @@ checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" [[package]] name = "textwrap" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" +checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -2063,15 +2419,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", - "wasi", + "wasi 0.10.0+wasi-snapshot-preview1", "winapi", ] [[package]] name = "tinyvec" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -2084,9 +2440,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.17.0" +version = "1.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" +checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" dependencies = [ "bytes", "libc", @@ -2104,9 +2460,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" dependencies = [ "proc-macro2", "quote", @@ -2125,9 +2481,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.3" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ "rustls", "tokio", @@ -2136,23 +2492,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" dependencies = [ "bytes", "futures-core", @@ -2164,24 +2506,24 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" dependencies = [ "serde", ] [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.31" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f" +checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" dependencies = [ "cfg-if", "pin-project-lite", @@ -2191,9 +2533,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.19" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716" +checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" dependencies = [ "proc-macro2", "quote", @@ -2202,19 +2544,19 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.22" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" +checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" dependencies = [ - "lazy_static", + "once_cell", "valuable", ] [[package]] name = "tracing-log" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ "lazy_static", "log", @@ -2233,9 +2575,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e0ab7bdc962035a87fba73f3acca9b8a8d0034c2e6f60b84aeaaddddc155dce" +checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" dependencies = [ "ansi_term", "serde", @@ -2256,9 +2598,9 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "twox-hash" -version = "1.6.2" +version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee73e6e4924fe940354b8d4d98cad5231175d615cd855b758adc658c0aac6a0" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", "static_assertions", @@ -2266,24 +2608,39 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.7" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-ident" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + +[[package]] +name = "unicode-linebreak" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f" +dependencies = [ + "regex", +] [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "81dee68f85cab8cf68dec42158baf3a79a1cdc065a8b103025965d6ccb7f6cbd" dependencies = [ "tinyvec", ] [[package]] -name = "unicode-xid" -version = "0.2.2" +name = "unicode-width" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "untrusted" @@ -2373,11 +2730,17 @@ version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2385,9 +2748,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" dependencies = [ "bumpalo", "lazy_static", @@ -2400,9 +2763,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.30" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" +checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" dependencies = [ "cfg-if", "js-sys", @@ -2412,9 +2775,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2422,9 +2785,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" dependencies = [ "proc-macro2", "quote", @@ -2435,15 +2798,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" dependencies = [ "js-sys", "wasm-bindgen", @@ -2499,48 +2862,91 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c47017195a790490df51a3e27f669a7d4f285920d90d03ef970c5d886ef0af1" +dependencies = [ + "windows_aarch64_msvc 0.38.0", + "windows_i686_gnu 0.38.0", + "windows_i686_msvc 0.38.0", + "windows_x86_64_gnu 0.38.0", + "windows_x86_64_msvc 0.38.0", +] + [[package]] name = "windows-sys" -version = "0.32.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", ] [[package]] name = "windows_aarch64_msvc" -version = "0.32.0" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b12add87e2fb192fff3f4f7e4342b3694785d79f3a64e2c20d5ceb5ccbcfc3cd" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_gnu" -version = "0.32.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "4c98f2db372c23965c5e0f43896a8f0316dc0fbe48d1aa65bea9bdd295d43c15" [[package]] name = "windows_i686_msvc" -version = "0.32.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_i686_msvc" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf0569be0f2863ab6a12a6ba841fcfa7d107cbc7545a3ebd57685330db0a3ff" [[package]] name = "windows_x86_64_gnu" -version = "0.32.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "905858262c8380a36f32cb8c1990d7e7c3b7a8170e58ed9a98ca6d940b7ea9f1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "windows_x86_64_msvc" -version = "0.32.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "890c3c6341d441ffb38f705f47196e3665dc6dd79f6d72fa185d937326730561" [[package]] name = "winreg" @@ -2551,6 +2957,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "xattr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +dependencies = [ + "libc", +] + [[package]] name = "yaml-merge-keys" version = "0.5.1" @@ -2570,3 +2985,38 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] + +[[package]] +name = "zeroize" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07" + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.1+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" +dependencies = [ + "cc", + "libc", +] diff --git a/Cargo.toml b/Cargo.toml index fd9b3e5..fe469ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mongo-task-generator" -version = "0.4.5" +version = "0.4.6" repository = "https://github.com/mongodb/mongo-task-generator" authors = ["Decision Automation Group "] edition = "2018" @@ -29,7 +29,7 @@ tracing-subscriber = {version = "0.3", features = ["json", "fmt", "std"]} [dev-dependencies] assert_cmd = "2.0" cargo-nextest = "0.9" -rstest = "0.12" +rstest = "0.15" simple-error = "0.2" tempdir = "0.3" diff --git a/README.md b/README.md index 7e4b8cd..7a5cc88 100644 --- a/README.md +++ b/README.md @@ -127,11 +127,12 @@ graph TD C -->|Yes| D{task is fuzzer?} D -->|Yes| E[Generate Fuzzer based on task definition] E --> B - C -->|No| F[Lookup task runtime history from Evergreen] + D -->|No| F[Lookup task runtime history from Evergreen] F --> G{valid history obtained?} G --> |Yes| H[Split task by test runtimes] G --> |No| I[Split task by counts] H --> J[Generate resmoke suite config] + I -> J J --> |generated task definitions|B B --> |done|K[For each Build Variant] K --> L[Create task specs and display tasks in Build Variant] diff --git a/src/evergreen/evg_config.rs b/src/evergreen/evg_config.rs index 6e11f00..06571c5 100644 --- a/src/evergreen/evg_config.rs +++ b/src/evergreen/evg_config.rs @@ -1,4 +1,5 @@ use anyhow::Result; +use maplit::hashmap; use std::{collections::HashMap, path::Path, process::Command}; use shrub_rs::models::{project::EvgProject, task::EvgTask, variant::BuildVariant}; @@ -10,7 +11,7 @@ pub trait EvgConfigService: Sync + Send { fn get_build_variant_map(&self) -> HashMap; /// Get a map of task name to task definitions. - fn get_task_def_map(&self) -> HashMap; + fn get_task_def_map(&self) -> HashMap; /// Get a list of build variants with the required build variants at the start. fn sort_build_variants_by_required(&self) -> Vec; @@ -44,8 +45,12 @@ impl EvgConfigService for EvgProjectConfig { } /// Get a map of task name to task definitions. - fn get_task_def_map(&self) -> HashMap { - self.evg_project.task_def_map() + fn get_task_def_map(&self) -> HashMap { + let mut task_map = hashmap! {}; + for (k, v) in self.evg_project.task_def_map() { + task_map.insert(k, v.clone()); + } + task_map } /// Get a list of build variants with the required build variants at the start. diff --git a/src/evergreen_names.rs b/src/evergreen_names.rs index f65ab36..a8262bb 100644 --- a/src/evergreen_names.rs +++ b/src/evergreen_names.rs @@ -32,6 +32,8 @@ pub const GENERATE_RESMOKE_TASKS: &str = "generate resmoke tasks"; // Tasks /// Name of display task to hide all "_gen" tasks behind. pub const GENERATOR_TASKS: &str = "generator_tasks"; +/// Name of burn_in_tests task. +pub const BURN_IN_TESTS: &str = "burn_in_tests_gen"; // Vars /// Variable that indicates a task is a fuzzer. diff --git a/src/lib.rs b/src/lib.rs index 6057e06..402beb4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,10 +18,10 @@ use evergreen::{ evg_config_utils::{EvgConfigUtils, EvgConfigUtilsImpl}, evg_task_history::TaskHistoryServiceImpl, }; -use evergreen_names::{ENTERPRISE_MODULE, GENERATOR_TASKS, LARGE_DISTRO_EXPANSION}; +use evergreen_names::{BURN_IN_TESTS, ENTERPRISE_MODULE, GENERATOR_TASKS, LARGE_DISTRO_EXPANSION}; use evg_api_rs::EvgClient; use generate_sub_tasks_config::GenerateSubTasksConfig; -use resmoke::resmoke_proxy::ResmokeProxy; +use resmoke::{burn_in_proxy::BurnInProxy, resmoke_proxy::ResmokeProxy}; use services::config_extraction::{ConfigExtractionService, ConfigExtractionServiceImpl}; use shrub_rs::models::{ project::EvgProject, @@ -29,6 +29,7 @@ use shrub_rs::models::{ variant::{BuildVariant, DisplayTask}, }; use task_types::{ + burn_in_tests::{BurnInService, BurnInServiceImpl}, fuzzer_tasks::{GenFuzzerService, GenFuzzerServiceImpl}, generated_suite::GeneratedSuite, multiversion::MultiversionServiceImpl, @@ -105,12 +106,33 @@ impl ProjectInfo { } } +/// Configuration required to execute generating tasks. +pub struct ExecutionConfiguration<'a> { + /// Information about the project being generated under. + pub project_info: &'a ProjectInfo, + /// Path to the evergreen API authentication file. + pub evg_auth_file: &'a Path, + /// Should task splitting use the fallback method by default. + pub use_task_split_fallback: bool, + /// Command to execute resmoke. + pub resmoke_command: &'a str, + /// Directory to place generated configuration files. + pub target_directory: &'a Path, + /// Task generating the configuration. + pub generating_task: &'a str, + /// Location in S3 where generated configuration will be uploaded. + pub config_location: &'a str, + /// Should burn_in tasks be generated. + pub gen_burn_in: bool, +} + /// Collection of services needed to execution. #[derive(Clone)] pub struct Dependencies { evg_config_utils: Arc, gen_task_service: Arc, resmoke_config_actor: Arc>, + burn_in_service: Arc, } impl Dependencies { @@ -118,49 +140,39 @@ impl Dependencies { /// /// # Arguments /// - /// * `evg_auth_file` - Path to evergreen API auth file. - /// * `use_task_split_fallback` - Disable evergreen task-history queries and use task - /// splitting fallback. - /// * `resmoke_command` - Command to execute resmoke. - /// * `target_directory` - Directory to store generated configuration. - /// * `generating_task` - Name of task running the generation. + /// * `execution_config` - Information about how generation to take place. /// /// # Returns /// /// A set of dependencies to run against. - pub fn new( - project_info: &ProjectInfo, - evg_auth_file: &Path, - use_task_split_fallback: bool, - resmoke_command: &str, - target_directory: &Path, - generating_task: &str, - config_location: &str, - ) -> Result { + pub fn new(execution_config: ExecutionConfiguration) -> Result { let fs_service = Arc::new(FsServiceImpl::new()); - let discovery_service = Arc::new(ResmokeProxy::new(resmoke_command)); + let discovery_service = Arc::new(ResmokeProxy::new(execution_config.resmoke_command)); let multiversion_service = Arc::new(MultiversionServiceImpl::new(discovery_service.clone())?); - let evg_config_service = Arc::new(project_info.get_project_config()?); + let evg_config_service = Arc::new(execution_config.project_info.get_project_config()?); let evg_config_utils = Arc::new(EvgConfigUtilsImpl::new()); let gen_fuzzer_service = Arc::new(GenFuzzerServiceImpl::new(multiversion_service.clone())); let config_extraction_service = Arc::new(ConfigExtractionServiceImpl::new( evg_config_utils.clone(), - generating_task.to_string(), - config_location.to_string(), + execution_config.generating_task.to_string(), + execution_config.config_location.to_string(), )); - let evg_client = - Arc::new(EvgClient::from_file(evg_auth_file).expect("Cannot find evergreen auth file")); + let evg_client = Arc::new( + EvgClient::from_file(execution_config.evg_auth_file) + .expect("Cannot find evergreen auth file"), + ); let task_history_service = Arc::new(TaskHistoryServiceImpl::new( evg_client, HISTORY_LOOKBACK_DAYS, - project_info.evg_project.clone(), + execution_config.project_info.evg_project.clone(), )); let resmoke_config_actor = Arc::new(tokio::sync::Mutex::new(ResmokeConfigActorService::new( discovery_service.clone(), fs_service.clone(), - target_directory + execution_config + .target_directory .to_str() .expect("Unexpected target directory"), 32, @@ -168,31 +180,43 @@ impl Dependencies { let enterprise_dir = evg_config_service.get_module_dir(ENTERPRISE_MODULE); let gen_resmoke_config = GenResmokeConfig::new( MAX_SUB_TASKS_PER_TASK, - use_task_split_fallback, + execution_config.use_task_split_fallback, enterprise_dir, ); let gen_resmoke_task_service = Arc::new(GenResmokeTaskServiceImpl::new( task_history_service, discovery_service, resmoke_config_actor.clone(), - multiversion_service, + multiversion_service.clone(), fs_service, gen_resmoke_config, )); - let gen_sub_tasks_config = project_info.get_generate_sub_tasks_config()?; + let gen_sub_tasks_config = execution_config + .project_info + .get_generate_sub_tasks_config()?; let gen_task_service = Arc::new(GenerateTasksServiceImpl::new( evg_config_service, evg_config_utils.clone(), gen_fuzzer_service, + gen_resmoke_task_service.clone(), + config_extraction_service.clone(), + gen_sub_tasks_config, + execution_config.gen_burn_in, + )); + + let burn_in_discovery = Arc::new(BurnInProxy::new()); + let burn_in_service = Arc::new(BurnInServiceImpl::new( + burn_in_discovery, gen_resmoke_task_service, config_extraction_service, - gen_sub_tasks_config, + multiversion_service, )); Ok(Self { evg_config_utils, gen_task_service, resmoke_config_actor, + burn_in_service, }) } } @@ -319,6 +343,7 @@ struct GenerateTasksServiceImpl { gen_resmoke_service: Arc, config_extraction_service: Arc, gen_sub_tasks_config: Option, + gen_burn_in: bool, } impl GenerateTasksServiceImpl { @@ -339,6 +364,7 @@ impl GenerateTasksServiceImpl { gen_resmoke_service: Arc, config_extraction_service: Arc, gen_sub_tasks_config: Option, + gen_burn_in: bool, ) -> Self { Self { evg_config_service, @@ -347,6 +373,7 @@ impl GenerateTasksServiceImpl { gen_resmoke_service, config_extraction_service, gen_sub_tasks_config, + gen_burn_in, } } @@ -417,7 +444,7 @@ impl GenerateTasksService for GenerateTasksServiceImpl { ) -> Result>> { let build_variant_list = self.evg_config_service.sort_build_variants_by_required(); let build_variant_map = self.evg_config_service.get_build_variant_map(); - let task_map = self.evg_config_service.get_task_def_map(); + let task_map = Arc::new(self.evg_config_service.get_task_def_map()); let mut thread_handles = vec![]; @@ -429,6 +456,20 @@ impl GenerateTasksService for GenerateTasksServiceImpl { .evg_config_utils .is_enterprise_build_variant(build_variant); for task in &build_variant.tasks { + // Burn in tasks could be different for each build variant, so we will always + // handle them. + if task.name == BURN_IN_TESTS { + if self.gen_burn_in { + thread_handles.push(create_burn_in_worker( + deps, + task_map.clone(), + build_variant, + generated_tasks.clone(), + )); + } + continue; + } + // Skip tasks that have already been seen. let task_name = lookup_task_name(is_enterprise, &task.name); if seen_tasks.contains(&task_name) { @@ -526,7 +567,11 @@ impl GenerateTasksService for GenerateTasksServiceImpl { for task in &build_variant.tasks { let generated_tasks = generated_tasks.lock().unwrap(); - let task_name = lookup_task_name(is_enterprise, &task.name); + let task_name = if task.name == BURN_IN_TESTS { + format!("burn_in_tests-{}", build_variant.name) + } else { + lookup_task_name(is_enterprise, &task.name) + }; if let Some(generated_task) = generated_tasks.get(&task_name) { let distro = self.determine_distro( @@ -584,6 +629,10 @@ impl GenerateTasksService for GenerateTasksServiceImpl { /// /// Name to use for task. fn lookup_task_name(is_enterprise: bool, task_name: &str) -> String { + if task_name == BURN_IN_TESTS { + return task_name.to_string(); + } + if is_enterprise { format!("{}-{}", task_name, ENTERPRISE_MODULE) } else { @@ -631,12 +680,48 @@ fn create_task_worker( }) } +/// Spawn a tokio task to perform the burn_in_test generation work. +/// +/// # Arguments +/// +/// * `deps` - Service dependencies. +/// * `build_variant` - Build variant to query timing information from. +/// * `generated_tasks` - Map to stored generated tasks in. +/// +/// # Returns +/// +/// Handle to created tokio worker. +fn create_burn_in_worker( + deps: &Dependencies, + task_map: Arc>, + build_variant: &BuildVariant, + generated_tasks: Arc>, +) -> tokio::task::JoinHandle<()> { + let burn_in_service = deps.burn_in_service.clone(); + let build_variant = build_variant.clone(); + let generated_tasks = generated_tasks.clone(); + + tokio::spawn(async move { + let generated_task = burn_in_service + .generate_burn_in_suite(&build_variant.name, task_map) + .unwrap(); + + let task_name = format!("burn_in_tests-{}", build_variant.name); + + let mut generated_tasks = generated_tasks.lock().unwrap(); + generated_tasks.insert(task_name, generated_task); + }) +} + #[cfg(test)] mod tests { use maplit::hashset; use rstest::rstest; - use crate::task_types::{fuzzer_tasks::FuzzerGenTaskParams, resmoke_tasks::ResmokeGenParams}; + use crate::task_types::{ + fuzzer_tasks::FuzzerGenTaskParams, + resmoke_tasks::{ResmokeGenParams, SubSuite}, + }; use super::*; @@ -646,7 +731,7 @@ mod tests { todo!() } - fn get_task_def_map(&self) -> HashMap { + fn get_task_def_map(&self) -> HashMap { todo!() } @@ -678,6 +763,16 @@ mod tests { ) -> Result> { todo!() } + + fn build_resmoke_sub_task( + &self, + _sub_suite: &SubSuite, + _total_sub_suites: usize, + _params: &ResmokeGenParams, + _suite_override: Option, + ) -> EvgTask { + todo!() + } } fn build_mock_generate_tasks_service() -> GenerateTasksServiceImpl { @@ -693,6 +788,7 @@ mod tests { "config_location".to_string(), )), None, + false, ) } diff --git a/src/main.rs b/src/main.rs index 7eef1ef..13f8662 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,9 @@ use std::{ use anyhow::Result; use clap::Parser; -use mongo_task_generator::{generate_configuration, Dependencies, ProjectInfo}; +use mongo_task_generator::{ + generate_configuration, Dependencies, ExecutionConfiguration, ProjectInfo, +}; use serde::Deserialize; use tracing::{event, Level}; use tracing_subscriber::fmt::format; @@ -78,6 +80,10 @@ struct Args { /// File containing configuration for generating sub-tasks. #[clap(long, parse(from_os_str))] generate_sub_tasks_config: Option, + + /// Generate burn_in related tasks. + #[clap(long)] + burn_in: bool, } /// Configure logging for the command execution. @@ -101,16 +107,17 @@ async fn main() { &evg_expansions.project, gen_sub_tasks_config_file.as_ref(), ); - let deps = Dependencies::new( - &project_info, - &expand_path(&args.evg_auth_file), - args.use_task_split_fallback, - &args.resmoke_command, - &expand_path(&args.target_directory), - &evg_expansions.task_name, - &evg_expansions.config_location(), - ) - .unwrap(); + let execution_config = ExecutionConfiguration { + project_info: &project_info, + evg_auth_file: &expand_path(&args.evg_auth_file), + use_task_split_fallback: args.use_task_split_fallback, + resmoke_command: &args.resmoke_command, + target_directory: &expand_path(&args.target_directory), + generating_task: &evg_expansions.task_name, + config_location: &evg_expansions.config_location(), + gen_burn_in: args.burn_in, + }; + let deps = Dependencies::new(execution_config).unwrap(); let start = Instant::now(); let result = generate_configuration(&deps, &args.target_directory).await; diff --git a/src/resmoke/burn_in_proxy.rs b/src/resmoke/burn_in_proxy.rs new file mode 100644 index 0000000..8a7a6ff --- /dev/null +++ b/src/resmoke/burn_in_proxy.rs @@ -0,0 +1,78 @@ +use std::time::Instant; + +use anyhow::Result; +use serde::Deserialize; +use tracing::{event, Level}; + +use crate::resmoke::external_cmd::run_command; + +/// Task that burn_in discovered should be run. +#[derive(Debug, Clone, Deserialize)] +pub struct DiscoveredTask { + /// Name of task to run. + pub task_name: String, + /// List of tests to run as part of task. + pub test_list: Vec, +} + +/// List of tasks that should be run as part of burn_in. +#[derive(Debug, Clone, Deserialize)] +pub struct DiscoveredTaskList { + /// List of tasks that should be run as part of burn_in. + pub discovered_tasks: Vec, +} + +/// Interface to query information from burn_in_tests. +pub trait BurnInDiscovery: Send + Sync { + /// Discover what tasks/tests should be run as part of burn_in. + /// + /// # Arguments + /// + /// * `build_variant` - Build variant to query information about. + /// + /// # Returns + /// + /// A list of tasks/tests that were discovered by burn_in_tests. + fn discover_tasks(&self, build_variant: &str) -> Result>; +} + +pub struct BurnInProxy {} + +impl BurnInProxy { + pub fn new() -> Self { + BurnInProxy {} + } +} + +impl BurnInDiscovery for BurnInProxy { + /// Discover what tasks/tests should be run as part of burn_in. + /// + /// # Arguments + /// + /// * `build_variant` - Build variant to query information about. + /// + /// # Returns + /// + /// A list of tasks/tests that were discovered by burn_in_tests. + fn discover_tasks(&self, build_variant: &str) -> Result> { + let cmd = vec![ + "python", + "buildscripts/burn_in_tests.py", + "--build-variant", + build_variant, + "--yaml", + ]; + let start = Instant::now(); + + let cmd_output = run_command(&cmd)?; + + event!( + Level::INFO, + duration_ms = start.elapsed().as_millis() as u64, + "Burn In Discovery Finished" + ); + + let output: DiscoveredTaskList = serde_yaml::from_str(&cmd_output)?; + Ok(output.discovered_tasks) + } +} diff --git a/src/resmoke/external_cmd.rs b/src/resmoke/external_cmd.rs new file mode 100644 index 0000000..64a339c --- /dev/null +++ b/src/resmoke/external_cmd.rs @@ -0,0 +1,40 @@ +use std::process::{Command, Stdio}; + +use anyhow::{bail, Result}; +use tracing::{event, Level}; + +/// Run an external command and return the output. +/// +/// # Arguments +/// +/// * `command` - Command with arguments to run. +/// +/// # Return +/// +/// The output of the command. +pub fn run_command(command: &[&str]) -> Result { + let binary = command[0]; + let args = &command[1..]; + let cmd = Command::new(binary) + .args(args) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .spawn()? + .wait_with_output()?; + + if !cmd.status.success() { + let error_message = String::from_utf8_lossy(&cmd.stderr).to_string(); + + event!( + Level::ERROR, + binary = binary, + args = args.join(" "), + error_message = error_message, + "Command encountered an error", + ); + bail!("Command encountered an error") + } + + let output = String::from_utf8_lossy(&cmd.stdout); + Ok(output.to_string()) +} diff --git a/src/resmoke/mod.rs b/src/resmoke/mod.rs index e1239b4..06c314b 100644 --- a/src/resmoke/mod.rs +++ b/src/resmoke/mod.rs @@ -1,2 +1,5 @@ +pub mod burn_in_proxy; pub mod resmoke_proxy; pub mod resmoke_suite; + +mod external_cmd; diff --git a/src/task_types/burn_in_tests.rs b/src/task_types/burn_in_tests.rs new file mode 100644 index 0000000..ab71e52 --- /dev/null +++ b/src/task_types/burn_in_tests.rs @@ -0,0 +1,513 @@ +use anyhow::Result; +use shrub_rs::models::task::EvgTask; +use std::{collections::HashMap, sync::Arc}; + +use crate::{ + resmoke::burn_in_proxy::{BurnInDiscovery, DiscoveredTask}, + services::config_extraction::ConfigExtractionService, + task_types::resmoke_tasks::{GeneratedResmokeSuite, SubSuite}, +}; + +use super::{ + generated_suite::GeneratedSuite, + multiversion::MultiversionService, + resmoke_tasks::{GenResmokeTaskService, ResmokeGenParams}, +}; + +/// Options to pass to resmoke to enable burn_in repetition. +const BURN_IN_REPEAT_CONFIG: &str = + "--repeatTestsSecs=600 --repeatTestsMin=2 --repeatTestsMax=1000"; +/// How to label burn_in generated sub_tasks. +const BURN_IN_LABEL: &str = "burn_in"; + +/// A service for generating burn_in tasks. +pub trait BurnInService: Sync + Send { + /// Generate a burn_in_task for the given build variant. + /// + /// # Arguments + /// + /// * `build_variant` - Name of build variant to generate burn_in for. + /// * `task_map` - Map of task definitions found in the evergreen project configuration. + /// + /// # Returns + /// + /// A generated task for burn_in on the given build variant. + fn generate_burn_in_suite( + &self, + build_variant: &str, + task_map: Arc>, + ) -> Result>; +} + +pub struct BurnInServiceImpl { + /// Burn in discovery service. + burn_in_discovery: Arc, + + /// Service to generate resmoke tasks. + gen_resmoke_task_service: Arc, + + /// Service to extraction configuration from evergreen project data. + config_extraction_service: Arc, + + /// Service to get multiversion configuration. + multiversion_service: Arc, +} + +/// Information about a suite being generated in burn_in. +#[derive(Debug, Default)] +struct BurnInSuiteInfo<'a> { + /// Name of build variant being generated for. + build_variant: &'a str, + + /// Total number of tests being generated for suite. + total_tests: usize, + + /// Name of the task being generated. + task_name: &'a str, + + /// The multiversion name being generated. + multiversion_name: Option<&'a str>, + + /// Any multiversion tags that should be included. + multiversion_tags: Option, +} + +impl<'a> BurnInSuiteInfo<'a> { + /// Create the origin suite that should be used. + /// + /// # Arguments + /// + /// * `suite_name` - Name of suite being used. + fn build_origin_suite(&self, suite_name: &str) -> String { + self.multiversion_name.unwrap_or(suite_name).to_string() + } + + /// Create the task_name to use for this suite. + fn build_task_name(&self) -> &'a str { + self.multiversion_name.unwrap_or(self.task_name) + } + + /// Create the display name to use for this suite. + fn build_display_name(&self) -> String { + format!( + "{}:{}-{}", + BURN_IN_LABEL, + self.build_task_name(), + self.build_variant + ) + } +} + +impl BurnInServiceImpl { + /// Create a new instance of the burn_in_service. + /// + /// # Arguments + /// + /// * `burn_in_discovery` - Burn in discovery service. + /// * `gen_resmoke_task_service` - Service to generate resmoke tasks. + /// * `config_extraction_service` - Service to extraction configuration from evergreen project data. + /// * `multiversion_service` - Service to get multiversion configuration. + pub fn new( + burn_in_discovery: Arc, + gen_resmoke_task_service: Arc, + config_extraction_service: Arc, + multiversion_service: Arc, + ) -> Self { + BurnInServiceImpl { + burn_in_discovery, + gen_resmoke_task_service, + config_extraction_service, + multiversion_service, + } + } + + /// Build the burn_in tests for the given task. + /// + /// # Arguments + /// + /// * `discovered_task` - Task discovered to pull into resmoke. + /// * `task_def` - Evergreen project definition of task. + /// * `build_variant` - Name of build variant being generated for. + /// + /// # Returns + /// + /// List of sub_tasks to include as part of burn_in. + fn build_tests_for_task( + &self, + discovered_task: &DiscoveredTask, + task_def: &EvgTask, + build_variant: &str, + ) -> Result> { + let mut sub_suites = vec![]; + for (index, test) in discovered_task.test_list.iter().enumerate() { + let mut params = self + .config_extraction_service + .task_def_to_resmoke_params(task_def, false)?; + update_resmoke_params_for_burn_in(&mut params, test); + + if params.generate_multiversion_combos { + for (old_version, version_combination) in self + .multiversion_service + .multiversion_iter(¶ms.suite_name)? + { + let multiversion_name = self.multiversion_service.name_multiversion_suite( + ¶ms.suite_name, + &old_version, + &version_combination, + ); + let multiversion_tags = Some(old_version.clone()); + + let burn_in_suite_info = BurnInSuiteInfo { + build_variant, + total_tests: discovered_task.test_list.len(), + task_name: &discovered_task.task_name, + multiversion_name: Some(&multiversion_name), + multiversion_tags, + }; + + sub_suites.push(self.create_task(¶ms, index, test, &burn_in_suite_info)); + } + } else { + let burn_in_suite_info = BurnInSuiteInfo { + build_variant, + total_tests: discovered_task.test_list.len(), + task_name: &discovered_task.task_name, + multiversion_name: None, + multiversion_tags: None, + }; + sub_suites.push(self.create_task(¶ms, index, test, &burn_in_suite_info)) + } + } + + Ok(sub_suites) + } + + /// Create an individual execution task for burn_in. + /// + /// # Arguments + /// + /// * `params` - Configuration for how suite should be configured. + /// * `index` - Index of sub-task in list of sub-tasks being created for the task. + /// * `test` - Name of test to generate sub-suite for. + /// * `suite_info` - Information about the suite being generated. + /// + /// # Returns + /// + /// Shrub task representing the given sub-task. + fn create_task( + &self, + params: &ResmokeGenParams, + index: usize, + test: &str, + suite_info: &BurnInSuiteInfo, + ) -> EvgTask { + let origin_suite = suite_info.build_origin_suite(¶ms.suite_name); + + let sub_suite = SubSuite { + index: Some(index), + name: suite_info.build_display_name(), + test_list: vec![test.to_string()], + exclude_test_list: None, + origin_suite: origin_suite.clone(), + mv_exclude_tags: suite_info.multiversion_tags.clone(), + is_enterprise: false, + }; + + self.gen_resmoke_task_service.build_resmoke_sub_task( + &sub_suite, + suite_info.total_tests, + params, + Some(origin_suite), + ) + } +} + +impl BurnInService for BurnInServiceImpl { + /// Generate the burn_in_tests task for the given build_variant. + /// + /// # Arguments + /// + /// * `build_variant` - Name of build variant to generate burn_in_tests for. + /// * `task_map` - Map of task definitions in evergreen project configuration. + /// + /// # Returns + /// + /// A generated suite to use for generating burn_in_tests. + fn generate_burn_in_suite( + &self, + build_variant: &str, + task_map: Arc>, + ) -> Result> { + let mut sub_suites = vec![]; + let discovered_tasks = self.burn_in_discovery.discover_tasks(build_variant)?; + for discovered_task in discovered_tasks { + let task_name = &discovered_task.task_name; + if let Some(task_def) = task_map.get(task_name) { + sub_suites.extend(self.build_tests_for_task( + &discovered_task, + task_def, + build_variant, + )?); + } + } + + Ok(Box::new(GeneratedResmokeSuite { + task_name: "burn_in_tests".to_string(), + sub_suites, + use_large_distro: false, + })) + } +} + +/// Update the given resmoke parameters to include burn_in configuration for the given test. +/// +/// # Arguments +/// +/// * `params` - resmoke parameters to update. +/// * `test_name` - Name of test to run. +fn update_resmoke_params_for_burn_in(params: &mut ResmokeGenParams, test_name: &str) { + params.resmoke_args = format!( + "{} {} {}", + params.resmoke_args, BURN_IN_REPEAT_CONFIG, test_name + ); +} + +#[cfg(test)] +mod tests { + use async_trait::async_trait; + use shrub_rs::models::variant::BuildVariant; + + use crate::task_types::{ + fuzzer_tasks::FuzzerGenTaskParams, multiversion::MultiversionIterator, + }; + + use super::*; + + // build_origin_suite tests. + #[test] + fn test_build_origin_suite_should_use_suite_name_when_no_mv() { + let suite_name = "my suite"; + let suite_info = BurnInSuiteInfo { + ..Default::default() + }; + + assert_eq!(suite_info.build_origin_suite(suite_name), suite_name); + } + + #[test] + fn test_build_origin_suite_should_use_multiversion_name_when_provided() { + let suite_name = "my suite"; + let suite_info = BurnInSuiteInfo { + multiversion_name: Some("multiversion_suite"), + ..Default::default() + }; + + assert_eq!( + suite_info.build_origin_suite(suite_name), + "multiversion_suite" + ); + } + + // build_task_name tests. + #[test] + fn test_build_task_name_should_use_task_name_if_no_mv() { + let task_name = "my task"; + let suite_info = BurnInSuiteInfo { + task_name, + ..Default::default() + }; + + assert_eq!(suite_info.build_task_name(), task_name); + } + + #[test] + fn test_build_task_name_should_use_multiversion_name_when_provided() { + let task_name = "my task"; + let suite_info = BurnInSuiteInfo { + task_name, + multiversion_name: Some("multiversion_suite"), + ..Default::default() + }; + + assert_eq!(suite_info.build_task_name(), "multiversion_suite"); + } + + // build_display_name tests. + #[test] + fn test_display_name_should_include_all_components() { + let task_name = "my_task"; + let build_variant = "my_build_variant"; + let suite_info = BurnInSuiteInfo { + task_name, + build_variant, + ..Default::default() + }; + + let display_name = suite_info.build_display_name(); + + assert!(display_name.contains(BURN_IN_LABEL)); + assert!(display_name.contains(task_name)); + assert!(display_name.contains(build_variant)); + } + + // Mocks + struct MockBurnInDiscovery {} + impl BurnInDiscovery for MockBurnInDiscovery { + fn discover_tasks(&self, _build_variant: &str) -> Result> { + todo!() + } + } + + struct MockGenResmokeTasksService {} + #[async_trait] + impl GenResmokeTaskService for MockGenResmokeTasksService { + async fn generate_resmoke_task( + &self, + _params: &ResmokeGenParams, + _build_variant: &str, + ) -> Result> { + todo!() + } + + fn build_resmoke_sub_task( + &self, + _sub_suite: &SubSuite, + _total_sub_suites: usize, + _params: &ResmokeGenParams, + _suite_override: Option, + ) -> EvgTask { + EvgTask { + ..Default::default() + } + } + } + + struct MockConfigExtractionService { + pub is_multiversion: bool, + } + impl ConfigExtractionService for MockConfigExtractionService { + fn task_def_to_fuzzer_params( + &self, + _task_def: &EvgTask, + _build_variant: &BuildVariant, + ) -> Result { + todo!() + } + + fn task_def_to_resmoke_params( + &self, + _task_def: &EvgTask, + _is_enterprise: bool, + ) -> Result { + Ok(ResmokeGenParams { + generate_multiversion_combos: self.is_multiversion, + ..Default::default() + }) + } + } + + struct MockMultiversionService { + old_version: Vec, + version_combos: Vec, + } + impl MultiversionService for MockMultiversionService { + fn get_version_combinations(&self, _suite_name: &str) -> Result> { + todo!() + } + + fn multiversion_iter(&self, _suite_name: &str) -> Result { + Ok(MultiversionIterator::new( + &self.old_version, + &self.version_combos, + )) + } + + fn name_multiversion_suite( + &self, + base_name: &str, + _old_version: &str, + _version_combination: &str, + ) -> String { + base_name.to_string() + } + + fn exclude_tags_for_task(&self, _task_name: &str, _mv_mode: Option) -> String { + todo!() + } + } + + fn build_mocked_service() -> BurnInServiceImpl { + BurnInServiceImpl::new( + Arc::new(MockBurnInDiscovery {}), + Arc::new(MockGenResmokeTasksService {}), + Arc::new(MockConfigExtractionService { + is_multiversion: false, + }), + Arc::new(MockMultiversionService { + old_version: vec![], + version_combos: vec![], + }), + ) + } + + fn build_mv_mocked_service( + old_version: Vec, + version_combos: Vec, + ) -> BurnInServiceImpl { + BurnInServiceImpl::new( + Arc::new(MockBurnInDiscovery {}), + Arc::new(MockGenResmokeTasksService {}), + Arc::new(MockConfigExtractionService { + is_multiversion: true, + }), + Arc::new(MockMultiversionService { + old_version, + version_combos, + }), + ) + } + + // build_tests_for_task tests. + #[test] + fn test_build_test_for_tasks_creates_task_for_each_test() { + let discovered_task = DiscoveredTask { + task_name: "my task".to_string(), + test_list: vec!["test_0.js".to_string(), "test_1.js".to_string()], + }; + let task_def = EvgTask { + ..Default::default() + }; + let build_variant = "my_build_variant"; + let burn_in_service = build_mocked_service(); + + let tasks = burn_in_service + .build_tests_for_task(&discovered_task, &task_def, build_variant) + .unwrap(); + + assert_eq!(tasks.len(), discovered_task.test_list.len()); + } + + #[test] + fn test_build_test_for_tasks_creates_task_for_each_multiversion_iteration_and_test() { + let discovered_task = DiscoveredTask { + task_name: "my task".to_string(), + test_list: vec!["test_0.js".to_string(), "test_1.js".to_string()], + }; + let task_def = EvgTask { + ..Default::default() + }; + let build_variant = "my_build_variant"; + let old_version = vec!["lts".to_string(), "continuous".to_string()]; + let version_combos = vec!["new_old_new".to_string(), "old_new_old".to_string()]; + let burn_in_service = build_mv_mocked_service(old_version.clone(), version_combos.clone()); + + let tasks = burn_in_service + .build_tests_for_task(&discovered_task, &task_def, build_variant) + .unwrap(); + + assert_eq!( + tasks.len(), + discovered_task.test_list.len() * old_version.len() * version_combos.len() + ); + } +} diff --git a/src/task_types/mod.rs b/src/task_types/mod.rs index 23b8fd0..b17a315 100644 --- a/src/task_types/mod.rs +++ b/src/task_types/mod.rs @@ -1,3 +1,4 @@ +pub mod burn_in_tests; pub mod fuzzer_tasks; pub mod generated_suite; pub mod multiversion; diff --git a/src/task_types/resmoke_tasks.rs b/src/task_types/resmoke_tasks.rs index ca6a233..889aa8f 100644 --- a/src/task_types/resmoke_tasks.rs +++ b/src/task_types/resmoke_tasks.rs @@ -85,6 +85,7 @@ impl ResmokeGenParams { suite_file: &str, sub_suite: &SubSuite, exclude_tags: &str, + suite_override: Option, ) -> HashMap { let mut run_test_vars: HashMap = hashmap! {}; if let Some(pass_through_vars) = &self.pass_through_vars { @@ -92,10 +93,16 @@ impl ResmokeGenParams { } let resmoke_args = self.build_resmoke_args(exclude_tags, &sub_suite.origin_suite); + let suite = if let Some(suite_override) = suite_override { + suite_override + } else { + format!("generated_resmoke_config/{}.yml", suite_file) + }; + run_test_vars.extend(hashmap! { REQUIRE_MULTIVERSION_SETUP.to_string() => ParamValue::from(self.require_multiversion_setup), RESMOKE_ARGS.to_string() => ParamValue::from(resmoke_args.as_str()), - SUITE_NAME.to_string() => ParamValue::from(format!("generated_resmoke_config/{}.yml", suite_file).as_str()), + SUITE_NAME.to_string() => ParamValue::from(suite.as_str()), GEN_TASK_CONFIG_LOCATION.to_string() => ParamValue::from(self.config_location.as_str()), }); @@ -144,7 +151,7 @@ impl ResmokeGenParams { format!( "--originSuite={} {} {} {}", - origin_suite, self.resmoke_args, repeat_arg, suffix + origin_suite, repeat_arg, suffix, self.resmoke_args ) } @@ -259,6 +266,24 @@ pub trait GenResmokeTaskService: Sync + Send { params: &ResmokeGenParams, build_variant: &str, ) -> Result>; + + /// Build a shrub task to execute a split sub-task. + /// + /// # Arguments + /// + /// * `sub_suite` - Sub task to create task for. + /// * `params` - Parameters for how task should be generated. + /// + /// # Returns + /// + /// A shrub task to execute the given sub-suite. + fn build_resmoke_sub_task( + &self, + sub_suite: &SubSuite, + total_sub_suites: usize, + params: &ResmokeGenParams, + suite_override: Option, + ) -> EvgTask; } #[derive(Debug, Clone)] @@ -594,46 +619,6 @@ impl GenResmokeTaskServiceImpl { Ok(mv_sub_suites) } - /// Build a shrub task to execute a split sub-task. - /// - /// # Arguments - /// - /// * `sub_suite` - Sub task to create task for. - /// * `params` - Parameters for how task should be generated. - /// - /// # Returns - /// - /// A shrub task to execute the given sub-suite. - fn build_resmoke_sub_task( - &self, - sub_suite: &SubSuite, - total_sub_suites: usize, - params: &ResmokeGenParams, - ) -> EvgTask { - let exclude_tags = self - .multiversion_service - .exclude_tags_for_task(¶ms.task_name, sub_suite.mv_exclude_tags.clone()); - let suite_file = name_generated_task( - &sub_suite.name, - sub_suite.index, - total_sub_suites, - params.is_enterprise, - ); - - let run_test_vars = params.build_run_test_vars(&suite_file, sub_suite, &exclude_tags); - - EvgTask { - name: suite_file, - commands: Some(resmoke_commands( - RUN_GENERATED_TESTS, - run_test_vars, - params.require_multiversion_setup, - )), - depends_on: params.get_dependencies(), - ..Default::default() - } - } - /// Create sub-suites based on the given information. /// /// # Arguments @@ -739,11 +724,53 @@ impl GenResmokeTaskService for GenResmokeTaskServiceImpl { task_name: params.task_name.clone(), sub_suites: sub_suites .into_iter() - .map(|s| self.build_resmoke_sub_task(&s, sub_task_total, params)) + .map(|s| self.build_resmoke_sub_task(&s, sub_task_total, params, None)) .collect(), use_large_distro: params.use_large_distro, })) } + + /// Build a shrub task to execute a split sub-task. + /// + /// # Arguments + /// + /// * `sub_suite` - Sub task to create task for. + /// * `params` - Parameters for how task should be generated. + /// + /// # Returns + /// + /// A shrub task to execute the given sub-suite. + fn build_resmoke_sub_task( + &self, + sub_suite: &SubSuite, + total_sub_suites: usize, + params: &ResmokeGenParams, + suite_override: Option, + ) -> EvgTask { + let exclude_tags = self + .multiversion_service + .exclude_tags_for_task(¶ms.task_name, sub_suite.mv_exclude_tags.clone()); + let suite_file = name_generated_task( + &sub_suite.name, + sub_suite.index, + total_sub_suites, + params.is_enterprise, + ); + + let run_test_vars = + params.build_run_test_vars(&suite_file, sub_suite, &exclude_tags, suite_override); + + EvgTask { + name: suite_file, + commands: Some(resmoke_commands( + RUN_GENERATED_TESTS, + run_test_vars, + params.require_multiversion_setup, + )), + depends_on: params.get_dependencies(), + ..Default::default() + } + } } /// Create a list of commands to run a resmoke task in evergreen. @@ -810,7 +837,7 @@ mod tests { ..Default::default() }; - let test_vars = params.build_run_test_vars("my_suite_0", &sub_suite, ""); + let test_vars = params.build_run_test_vars("my_suite_0", &sub_suite, "", None); assert_eq!(test_vars.len(), 4); assert!(!test_vars.contains_key("resmoke_jobs_max")); @@ -837,7 +864,7 @@ mod tests { ..Default::default() }; - let test_vars = params.build_run_test_vars("my_suite_0", &sub_suite, ""); + let test_vars = params.build_run_test_vars("my_suite_0", &sub_suite, "", None); assert_eq!(test_vars.len(), 5); assert_eq!( @@ -868,7 +895,8 @@ mod tests { ..Default::default() }; - let test_vars = params.build_run_test_vars("my_suite_0", &sub_suite, "tag_0,tag_1,tag_2"); + let test_vars = + params.build_run_test_vars("my_suite_0", &sub_suite, "tag_0,tag_1,tag_2", None); assert_eq!(test_vars.len(), 5); assert_eq!( @@ -877,7 +905,7 @@ mod tests { ); assert_eq!( test_vars.get("resmoke_args").unwrap(), - &ParamValue::from("--originSuite=my_origin_suite resmoke args --tagFile=generated_resmoke_config/multiversion_exclude_tags.yml --excludeWithAnyTags=tag_0,tag_1,tag_2") + &ParamValue::from("--originSuite=my_origin_suite --tagFile=generated_resmoke_config/multiversion_exclude_tags.yml --excludeWithAnyTags=tag_0,tag_1,tag_2 resmoke args") ); } @@ -897,7 +925,7 @@ mod tests { ..Default::default() }; - let test_vars = params.build_run_test_vars("my_suite_0", &sub_suite, ""); + let test_vars = params.build_run_test_vars("my_suite_0", &sub_suite, "", None); assert_eq!(test_vars.len(), 5); assert_eq!( @@ -928,7 +956,7 @@ mod tests { ..Default::default() }; - let test_vars = params.build_run_test_vars("my_suite_0", &sub_suite, ""); + let test_vars = params.build_run_test_vars("my_suite_0", &sub_suite, "", None); assert_eq!(test_vars.len(), 5); assert_eq!(