From b90355edbbb46b04e4183a878c0b230cb435e989 Mon Sep 17 00:00:00 2001 From: Dale Seo Date: Wed, 26 Nov 2025 14:44:27 -0500 Subject: [PATCH 1/3] release: v0.37.0 --- CHANGELOG.md | 16 + Cargo.lock | 413 ++++++++-------- Cargo.toml | 2 +- crates/rover-client/.schema/hash.id | 2 +- crates/rover-client/.schema/schema.graphql | 465 +++++++++++++++++- docs/source/ci-cd.mdx | 8 +- docs/source/getting-started.mdx | 4 +- installers/binstall/scripts/nix/install.sh | 2 +- .../binstall/scripts/windows/install.ps1 | 2 +- installers/npm/package-lock.json | 90 ++-- installers/npm/package.json | 2 +- src/command/template/queries.rs | 15 +- 12 files changed, 735 insertions(+), 286 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 646a65de1..cfca75457 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,22 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## 📚 Documentation --> +# [0.37.0] - 2025-12-01 + +## 🚀 Features + +- **Enable overriding MCP version in `rover dev` - @DaleSeo, PR #2784** + +## 🐛 Fixes + +- **Remove conditional header in VSCode file from MCP template processing - @gocamille, PR #2757** +- **Auto-configure MCP server endpoint with router's custom path- @naomijub, PR #2869** + +## 📚 Documentation + +- **change MCP's default port from 5000 to 8000 - @DaleSeo, PR #2749** + + # [0.36.2] - 2025-10-03 ## 🚀 Features diff --git a/Cargo.lock b/Cargo.lock index 4f8913010..788e5d1c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,9 +65,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -153,22 +153,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -179,15 +179,15 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "apollo-compiler" -version = "1.30.0" +version = "1.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e4c0116cde9e3e5679806cf91c464d9efb7f1e231abffc505e0f6d4b911260" +checksum = "a66f8eefe0ed21932dcc31eeca614cc8337bdc9ec7d4b2fb200b2a1539ba5c92" dependencies = [ "ahash 0.8.12", "apollo-parser 0.8.4", "ariadne 0.5.1", "futures", - "indexmap 2.12.0", + "indexmap 2.12.1", "rowan 0.16.1", "serde", "serde_json_bytes", @@ -218,9 +218,9 @@ dependencies = [ "either", "encoding_rs", "form_urlencoded", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "http", - "indexmap 2.12.0", + "indexmap 2.12.1", "itertools 0.14.0", "levenshtein", "line-col", @@ -275,7 +275,7 @@ dependencies = [ "apollo-parser 0.8.4", "debounced", "futures", - "indexmap 2.12.0", + "indexmap 2.12.1", "itertools 0.13.0", "lsp-types", "memoize", @@ -366,13 +366,12 @@ dependencies = [ [[package]] name = "assert_cmd" -version = "2.0.17" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd389a4b2970a01282ee455294913c0a43724daedcd1a24c3eb0ec1c1320b66" +checksum = "bcbb6924530aa9e0432442af08bbcafdad182db80d2e560da42a6d442535bf85" dependencies = [ "anstyle", "bstr", - "doc-comment", "libc", "predicates", "predicates-core", @@ -397,9 +396,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.32" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" +checksum = "0e86f6d3dc9dc4352edeea6b8e499e13e3f5dc3b964d7ca5fd411415a3498473" dependencies = [ "compression-codecs", "compression-core", @@ -427,7 +426,7 @@ dependencies = [ "futures-util", "handlebars", "http", - "indexmap 2.12.0", + "indexmap 2.12.1", "mime", "multer", "num-traits 0.2.19", @@ -471,7 +470,7 @@ dependencies = [ "proc-macro2", "quote", "strum 0.26.3", - "syn 2.0.108", + "syn 2.0.111", "thiserror 1.0.69", ] @@ -494,7 +493,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34ecdaff7c9cffa3614a9f9999bf9ee4c3078fe3ce4d6a6e161736b56febf2de" dependencies = [ "bytes", - "indexmap 2.12.0", + "indexmap 2.12.1", "serde", "serde_json", ] @@ -539,7 +538,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -550,7 +549,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -567,7 +566,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -584,7 +583,7 @@ checksum = "ebb4bd301db2e2ca1f5be131c24eb8ebf2d9559bc3744419e93baf8ddea7e670" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -805,7 +804,7 @@ dependencies = [ "proc-macro2", "quote", "str_inflector", - "syn 2.0.108", + "syn 2.0.111", "try_match", ] @@ -980,7 +979,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1020,9 +1019,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.31" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +checksum = "302266479cb963552d11bd042013a58ef1adc56768016c8b82b4199488f2d4ad" dependencies = [ "brotli", "compression-core", @@ -1032,9 +1031,9 @@ dependencies = [ [[package]] name = "compression-core" -version = "0.4.29" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" +checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" [[package]] name = "concolor" @@ -1156,9 +1155,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] @@ -1201,7 +1200,7 @@ dependencies = [ "proc-macro2", "quote", "strict", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1289,9 +1288,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -1303,7 +1302,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "718f6cd8c54ae5249fd42b0c86639df0100b8a86eea2e5f1b915cde2e1481453" dependencies = [ - "indexmap 2.12.0", + "indexmap 2.12.1", "lalrpop-util", "logos", ] @@ -1339,7 +1338,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1353,7 +1352,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1364,7 +1363,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1375,7 +1374,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1430,7 +1429,7 @@ checksum = "74ef43543e701c01ad77d3a5922755c6a1d71b22d942cb8042be4994b380caff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1441,7 +1440,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1462,7 +1461,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", "unicode-xid", ] @@ -1541,7 +1540,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1573,7 +1572,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1686,7 +1685,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1908,7 +1907,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -1958,9 +1957,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -2002,7 +2001,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -2158,7 +2157,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.12.0", + "indexmap 2.12.1", "slab", "tokio", "tokio-util", @@ -2205,9 +2204,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", @@ -2426,9 +2425,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" dependencies = [ "base64", "bytes", @@ -2474,9 +2473,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -2487,9 +2486,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -2500,11 +2499,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -2515,42 +2513,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -2587,9 +2581,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.24" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81776e6f9464432afcc28d03e52eb101c93b6f0566f52aef2427663e700f0403" +checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" dependencies = [ "crossbeam-deque", "globset", @@ -2613,12 +2607,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "serde", "serde_core", ] @@ -2669,9 +2663,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" dependencies = [ "memchr", "serde", @@ -2685,7 +2679,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2730,9 +2724,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -2820,9 +2814,9 @@ dependencies = [ [[package]] name = "lazy-regex" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" +checksum = "191898e17ddee19e60bccb3945aa02339e81edd4a8c50e21fd4d48cdecda7b29" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -2831,14 +2825,14 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" +checksum = "c35dc8b0da83d1a9507e12122c80dea71a9c7c613014347392483a83ea593e04" dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -2905,9 +2899,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.22" +version = "1.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" dependencies = [ "cc", "libc", @@ -2941,9 +2935,9 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litrs" @@ -2987,7 +2981,7 @@ dependencies = [ "proc-macro2", "quote", "regex-syntax", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -3156,7 +3150,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -3278,7 +3272,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3604,7 +3598,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" dependencies = [ "libc", - "windows-sys 0.45.0", + "windows-sys 0.61.2", ] [[package]] @@ -3678,9 +3672,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.3" +version = "2.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" +checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" dependencies = [ "memchr", "ucd-trie", @@ -3688,9 +3682,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.3" +version = "2.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" +checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f" dependencies = [ "pest", "pest_generator", @@ -3698,22 +3692,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.3" +version = "2.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" +checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] name = "pest_meta" -version = "2.8.3" +version = "2.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" +checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82" dependencies = [ "pest", "sha2", @@ -3727,7 +3721,7 @@ checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset", "hashbrown 0.15.5", - "indexmap 2.12.0", + "indexmap 2.12.1", "serde", "serde_derive", ] @@ -3749,7 +3743,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -3781,9 +3775,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -3796,9 +3790,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppmd-rust" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c834641d8ad1b348c9ee86dec3b9840d805acd5f24daa5f90c788951a52ff59b" +checksum = "d558c559f0450f16f2a27a1f017ef38468c1090c9ce63c8e51366232d53717b4" [[package]] name = "ppv-lite86" @@ -3877,7 +3871,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -3946,9 +3940,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.41" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -4096,7 +4090,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -4108,7 +4102,7 @@ dependencies = [ "ahash 0.8.12", "fluent-uri", "getrandom 0.3.4", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "parking_lot", "percent-encoding", "serde_json", @@ -4243,7 +4237,7 @@ dependencies = [ [[package]] name = "rover" -version = "0.36.2" +version = "0.37.0" dependencies = [ "anyhow", "apollo-federation-types", @@ -4518,7 +4512,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.108", + "syn 2.0.111", "unicode-ident", ] @@ -4572,14 +4566,14 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.34" +version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ "once_cell", "ring", @@ -4663,7 +4657,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -4715,7 +4709,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -4726,7 +4720,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -4735,7 +4729,7 @@ version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "indexmap 2.12.0", + "indexmap 2.12.1", "itoa", "memchr", "ryu", @@ -4751,7 +4745,7 @@ checksum = "a6a27c10711f94d1042b4c96d483556ec84371864e25d0e1cf3dc1024b0880b1" dependencies = [ "ahash 0.8.12", "bytes", - "indexmap 2.12.0", + "indexmap 2.12.1", "jsonpath-rust", "regex", "serde", @@ -4787,7 +4781,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -4830,7 +4824,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -4851,7 +4845,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.12.0", + "indexmap 2.12.1", "itoa", "ryu", "serde", @@ -4880,7 +4874,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -4912,7 +4906,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a10b07e1a5468f99462d90dc59924f8fc90da58d1694ba5dd1036107d3d4c9c" dependencies = [ "apollo-compiler", - "indexmap 2.12.0", + "indexmap 2.12.1", "serde_json", "serde_json_bytes", ] @@ -5010,9 +5004,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" dependencies = [ "libc", ] @@ -5204,7 +5198,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5216,7 +5210,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5238,9 +5232,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.108" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -5264,7 +5258,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5313,7 +5307,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix 1.1.2", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -5389,7 +5383,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5400,7 +5394,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5444,9 +5438,9 @@ checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -5491,7 +5485,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5561,7 +5555,7 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" dependencies = [ - "indexmap 2.12.0", + "indexmap 2.12.1", "serde_core", "serde_spanned", "toml_datetime", @@ -5585,7 +5579,7 @@ version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ - "indexmap 2.12.0", + "indexmap 2.12.1", "serde_core", "serde_spanned", "toml_datetime", @@ -5641,9 +5635,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" dependencies = [ "bitflags 2.10.0", "bytes", @@ -5694,7 +5688,7 @@ checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5737,7 +5731,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5798,7 +5792,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5834,7 +5828,7 @@ checksum = "b9c81686f7ab4065ccac3df7a910c4249f8c0f3fb70421d6ddec19b9311f63f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -5898,9 +5892,9 @@ checksum = "0b993bddc193ae5bd0d623b49ec06ac3e9312875fdae725a975c51db1cc1677f" [[package]] name = "unicode-ident" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-segmentation" @@ -6069,9 +6063,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", @@ -6080,25 +6074,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.108", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -6109,9 +6089,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6119,31 +6099,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.108", - "wasm-bindgen-backend", + "syn 2.0.111", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -6161,9 +6141,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" +checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" dependencies = [ "rustls-pki-types", ] @@ -6213,7 +6193,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6243,7 +6223,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -6254,7 +6234,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -6514,9 +6494,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -6545,9 +6525,9 @@ checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wsl" @@ -6612,11 +6592,10 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -6624,34 +6603,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -6671,7 +6650,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", "synstructure", ] @@ -6692,14 +6671,14 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -6708,9 +6687,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -6719,13 +6698,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.108", + "syn 2.0.111", ] [[package]] @@ -6743,7 +6722,7 @@ dependencies = [ "flate2", "getrandom 0.3.4", "hmac", - "indexmap 2.12.0", + "indexmap 2.12.1", "lzma-rust2", "memchr", "pbkdf2", @@ -6763,9 +6742,9 @@ checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" [[package]] name = "zopfli" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" dependencies = [ "bumpalo", "crc32fast", diff --git a/Cargo.toml b/Cargo.toml index 6dc7f22f9..f338269d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ license-file = "./LICENSE" name = "rover" readme = "README.md" repository = "https://github.com/apollographql/rover/" -version = "0.36.2" +version = "0.37.0" default-run = "rover" publish = false diff --git a/crates/rover-client/.schema/hash.id b/crates/rover-client/.schema/hash.id index 95369bd10..af1bf901f 100644 --- a/crates/rover-client/.schema/hash.id +++ b/crates/rover-client/.schema/hash.id @@ -1 +1 @@ -29aa43ecfa41c2f575aba70fbea127816cf0ad76054c57b204e2c681904366d8 \ No newline at end of file +7cfc6fc7fd4255fa06c1d8ec514bd83abffe97d718ff16440008eb9d53c7cf8b \ No newline at end of file diff --git a/crates/rover-client/.schema/schema.graphql b/crates/rover-client/.schema/schema.graphql index 52518aee6..8d9b14cfe 100644 --- a/crates/rover-client/.schema/schema.graphql +++ b/crates/rover-client/.schema/schema.graphql @@ -12,7 +12,7 @@ type Organization { apiKey(keyId: ID!): GraphOsKey """ - Returns a list of all active Operator, Subgraph, and SCIM API keys for the account. Org Admins can view all keys; Graph Admins can view only keys that they have created. + Returns a list of all active Operator, Subgraph, and SCIM API keys for the account. Org Admins can view all keys; Graph Admins can view only keys for graphs they administer. """ apiKeys(after: String, before: String, first: Int, last: Int): GraphOsKeyConnection! @@ -86,9 +86,17 @@ type OrganizationMutation { """Updates the name of an ApiKey""" renameKey(keyId: ID!, name: String!): GraphOsKey! + """ + Rotate an ApiKey by creating a new key and expiring the old one. Returns the new key + """ + rotateKey(expireOldKeyAt: Timestamp, keyId: ID!, newKeyName: String): GraphOsKey! + """Create or update a custom session length for an org""" setCustomSessionLength(sessionDurationInSeconds: Int!): Int! + """Updates the expiration of an ApiKey""" + setKeyExpiration(expiration: Timestamp!, keyId: ID!): GraphOsKey! + """Update a user's role within an organization""" updateUserRole(role: UserPermission!, userID: ID!): User createGraph(graphType: GraphType!, hiddenFromUninvitedNonAdmin: Boolean!, id: ID!, title: String!, variantCreationConfig: VariantCreationConfig): GraphCreationResult! @@ -1571,6 +1579,7 @@ union EditCommentResult = NotFoundError | ParentChangeProposalComment | ParentGe """GraphQL Error""" interface Error { + """The error message""" message: String! } @@ -2128,16 +2137,50 @@ type GraphArtifact { """The status of the Graph Artifact""" status: GraphArtifactStatus! + """The OCI tags applied to the Graph Artifact""" + tags( + """The cursor to start pagination after (for forward pagination)""" + after: String + + """ + The number of tags to return (for forward pagination), defaults to 10, maximum is 20 + """ + first: Int + ): GraphArtifactTagConnection! + """The last time the Graph Artifact was updated""" updatedAt: DateTime! } +"""A paginated connection for Graph Artifacts""" +type GraphArtifactConnection { + """The list of Graph Artifact edges containing nodes and cursors""" + edges: [GraphArtifactEdge!]! + + """Information about pagination state""" + pageInfo: PageInfo! + + """The total number of Graph Artifacts in the connection""" + totalCount: Int! +} + """Artifacts associated to a Graph Artifact""" type GraphArtifactContent { """The Build associated with the Graph Artifact""" build: Build } +"""An edge containing a Graph Artifact node and cursor for pagination""" +type GraphArtifactEdge { + """ + The cursor describing the location of the edge within the pagination result + """ + cursor: String! + + """The Graph Artifact that the edge represents""" + node: GraphArtifact! +} + """Error related to a graph artifact""" type GraphArtifactError { message: String! @@ -2163,6 +2206,112 @@ enum GraphArtifactStatus { GRAPH_ARTIFACT_PENDING } +"""A tag for a Graph Artifact""" +type GraphArtifactTag { + """The Graph the tag is associated with""" + graph: Graph! + + """The Graph Artifact the tag is associated with""" + graphArtifact: GraphArtifact! + + """The OCI tag history of the Graph Artifact""" + history( + """The cursor to start pagination after (for forward pagination)""" + after: String + + """ + The number of Graph Artifacts to return (for forward pagination), defaults to 10, maximum is 20 + """ + first: Int + ): GraphArtifactTagHistoryConnection! + + """ + The location where the graph artifact tag can be retrieved from the registry itself + """ + location: GraphArtifactLocation + + """The name of the Graph Artifact tag""" + tag: String! +} + +"""A paginated connection for Graph Artifact Tags""" +type GraphArtifactTagConnection { + """The list of Graph Artifact Tag edges containing nodes and cursors""" + edges: [GraphArtifactTagEdge!]! + + """Information about pagination state""" + pageInfo: PageInfo! + + """The total number of Graph Artifact Tags in the connection""" + totalCount: Int! +} + +"""An edge containing a Graph Artifact Tag node and cursor for pagination""" +type GraphArtifactTagEdge { + """ + The cursor describing the location of the edge within the pagination result + """ + cursor: String! + + """The Graph Artifact Tag that the edge represents""" + node: GraphArtifactTag! +} + +"""A paginated connection for Graph Artifact Tags history""" +type GraphArtifactTagHistoryConnection { + """ + The list of Graph Artifact Tag history edges containing nodes and cursors + """ + edges: [GraphArtifactTagHistoryEdge!]! + + """Information about pagination state""" + pageInfo: PageInfo! + + """ + The total number of Graph Artifact Tag history entries in the connection + """ + totalCount: Int! +} + +""" +An edge containing a Graph Artifact Tag history node and cursor for pagination +""" +type GraphArtifactTagHistoryEdge { + """ + The cursor describing the location of the edge within the pagination result + """ + cursor: String! + + """The Graph Artifact Tag history entry that the edge represents""" + node: GraphArtifactTagHistoryEntry! +} + +"""A single graph artifact tag history entry""" +type GraphArtifactTagHistoryEntry { + """When the change occurred""" + changedAt: DateTime! + + """The graph artifact to which the tag was assigned""" + graphArtifactAssigned: GraphArtifact! + + """ + The graph artifact from which the tag was removed. This will be null if it is a new tag + """ + graphArtifactUnassigned: GraphArtifact + + """The graph artifact tag that was effected as part of the history event""" + tag: GraphArtifactTag! +} + +"""The repository and tag names for a Graph Variant""" +type GraphArtifactTagLocation { + """The repository the tag is associated with""" + repository: String! + + """The name of the tag""" + tag: String! +} + """The timing details for the build step of a launch.""" type GraphCreationError { message: String! @@ -3867,7 +4016,7 @@ type OperationInsightsTimeseriesReportMetricValue { } """ -The metric and direction to use as the secondary sort order for the operation timeseries report. +The metric and direction to use as the secondary sort order for the operation timeseries report. The primary sort order will always be time. """ input OperationInsightsTimeseriesReportOrderByInput { """ @@ -4942,6 +5091,22 @@ input PublishProposalSubgraphsInput { summary: String! } +"""The result attempting to publish subgraphs with async build.""" +type PublishSubgraphsAsyncBuildResult { + """The Launch result part of this subgraph publish.""" + launch: Launch + + """ + The URL of the Studio page for this update's associated launch, if available. + """ + launchUrl: String + + """ + Human-readable text describing the launch result of the subgraph publish. + """ + launchCliCopy: String +} + input PublishSubgraphsSubgraphInput { activePartialSchema: PartialSchemaInput! name: String! @@ -4950,12 +5115,64 @@ input PublishSubgraphsSubgraphInput { """Queries defined by this subgraph""" type Query { + """Get the graph artifact associated with a given digest (SHA)""" + graphArtifactByDigest( + """The digest (SHA) of the graph artifact""" + digest: String! + + """The ID of the graph the graph artifact belongs to""" + graphID: ID! + ): GraphArtifact + """Get Graph Artifact by Graph Artifact ID""" graphArtifactById( - """The ID of the Graph Artifact""" + """The ID of the graph the graph artifact belongs to""" + graphID: ID! + + """The ID of the graph artifact""" id: ID! ): GraphArtifact + """Get the Graph Artifact associated with the provided tag""" + graphArtifactByTag( + """The ID of the graph this tag belongs to""" + graphID: ID! + + """The tag name of the Graph Artifact being requested""" + tag: String! + ): GraphArtifact + + """Get a specific graph artifact tag""" + graphArtifactTag( + """The ID of the graph where the tag resides""" + graphID: ID! + + """The name of the tag""" + tag: String! + ): GraphArtifactTag + + """Get the repository and tag name for the given variant""" + graphArtifactTagLocation(graphID: ID!, variantName: String!): GraphArtifactTagLocation + + """All the graph artifacts associated with a given graphId""" + graphArtifacts( + """The cursor to start pagination after (for forward pagination)""" + after: String + + """ + The number of artifacts to return (for forward pagination), defaults to 10, maximum is 20 + """ + first: Int + + """The cursor to start pagination after (for forward pagination)""" + graphID: ID! + + """ + The optional graph variant name, used to filter the results to a single variant + """ + variantName: String + ): GraphArtifactConnection! + """ Returns details of the authenticated `User` or `Graph` executing this query. If this is an unauthenticated query (i.e., no API key is provided), this field returns null. """ @@ -5482,7 +5699,7 @@ type SchemaCoordinateInsightsTimeseriesReportMetricValue { } """ -The metric and direction to use to order the schema coordinate timeseries report. +The metric and direction to use as the secondary sort order for the schema coordinate timeseries report. The primary sort order will always be time. """ input SchemaCoordinateInsightsTimeseriesReportOrderByInput { """The order column used for the metrics results.""" @@ -5755,6 +5972,56 @@ type Graph implements Identity { to: Timestamp! ): SchemaCoordinateInsightsTimeseriesReportResult! + """ + Returns a timeseries of subgraph and connector fetch metrics across a specified time range for this graph. Each + request from the router to a subgraph or connector service is counted as a fetch. A single GraphQL operation can + result in multiple fetches, depending on the operation shape and query plan. This will return specified metrics (fetch + count, avg latency, etc.) grouped by time and the specified dimensions (fetch service ID, fetch service name, client + name, etc.). This API is rate limited and only allows a small number of requests per minute, and will return a + RATE_LIMIT_EXCEEDED error if too many requests are made for a graph. If a request to this field times out, we + recommend that you try a shorter time range or fewer dimensions. + """ + subgraphInsightsTimeseriesReport( + """The dimensions to group by.""" + dimensions: [SubgraphInsightsTimeseriesReportDimension!]! + + """ + Filtering criteria for the results. Defaults to showing all unfiltered results. + """ + filters: SubgraphInsightsTimeseriesReportFilterInput + + """ + The starting timestamp for the report. Must be in the format: 2025-01-01T00:00:00Z (ISO 8601). + """ + from: Timestamp! + + """Maximum number of records to return (default: 100, max 10000).""" + limit: Int! = 100 + + """The metrics to be returned.""" + metrics: [SubgraphInsightsTimeseriesReportMetric!]! + + """ + The results will always be sorted by time, but this allows you to set a secondary sorting criteria for the results. + """ + orderBy: SubgraphInsightsTimeseriesReportOrderByInput + + """ + The resolution of the time groups for the report. This resolution will affect the range of times that can be used for the 'from' and + 'to' timestamps: + - For the MINUTE resolution, the total time between 'from' and 'to' must be no more than 1 day, and the 'from' time must be no earlier than 30 days ago. + - For the HOUR resolution, the total time between 'from' and 'to' must be no more than 7 days, and the 'from' time must be no earlier than 90 days ago. + - For the DAY and MONTH resolution, the 'from' time must be no earlier than 549 days ago (approx 18 months), and the 'to' time must be no later than 1 day ago. + If these criteria are not met, this will return an REQUEST_INVALID error. + """ + resolution: TimeseriesReportResolution! + + """ + The ending timestamp for the report. Must be in the format: 2025-01-01T08:00:00Z (ISO 8601). + """ + to: Timestamp! + ): SubgraphInsightsTimeseriesReportResult! + """The graph's name.""" title: String! @@ -5984,6 +6251,9 @@ type GraphMutation { """ publishSubgraphs(graphVariant: String!, revision: String!, subgraphInputs: [PublishSubgraphsSubgraphInput!]!, gitContext: GitContextInput, downstreamLaunchInitiation: DownstreamLaunchInitiation = ASYNC): SubgraphPublicationResult + """Publishes multiple subgraphs, running the build async.""" + publishSubgraphsAsyncBuild(graphVariant: String!, revision: String!, subgraphInputs: [PublishSubgraphsSubgraphInput!]!, gitContext: GitContextInput): PublishSubgraphsAsyncBuildResult + """ Removes a subgraph. If composition is successful, this will update running routers. """ @@ -6372,6 +6642,193 @@ input SubgraphInput { schemaRef: String } +""" +The named type and version of the clients to include or exclude in the subgraph and connector timeseries report. +""" +input SubgraphInsightsTimeseriesReportClientFilterInInput { + """The client name.""" + clientName: String + + """The client version.""" + clientVersion: String +} + +""" +Dimensions by which the subgraph and connector timeseries data can be grouped or filtered. +""" +enum SubgraphInsightsTimeseriesReportDimension { + """The client name that issued the request to the graph.""" + CLIENT_NAME + + """The version string of the client that issued the request to the graph.""" + CLIENT_VERSION + + """ + The identifier of the downstream subgraph or connector service that the router made a request to as part of its query plan execution. + """ + FETCH_SERVICE_ID + + """ + The name of the downstream subgraph or connector service that the router made a request to as part of its query plan execution. + """ + FETCH_SERVICE_NAME + + """The variant or version of the graph serving the request.""" + GRAPH_VARIANT + + """The unique identifier of the top-level operation executed.""" + OPERATION_ID + + """The name of the top-level operation executed, if provided.""" + OPERATION_NAME + + """The GraphQl operation type, e.g. QUERY, MUTATION, SUBSCRIPTION""" + OPERATION_TYPE +} + +""" +The type and value for a subgraph and connector insights timeseries report dimension. +""" +type SubgraphInsightsTimeseriesReportDimensionValue { + """The type of dimension this represents.""" + type: SubgraphInsightsTimeseriesReportDimension! + + """ + The string value of this dimension. Null for subgraphs without this dimension (e.g., unnamed operations). + """ + value: String +} + +""" +Lists of dimensions to include or exclude in the subgraph and connector timeseries report. Each list can have a maximum of 1000 entries. +""" +input SubgraphInsightsTimeseriesReportFilterInInput { + """Include or exclude certain clients""" + clients: [SubgraphInsightsTimeseriesReportClientFilterInInput] + + """ + Matches any subgraph or connector fetches targeting a subgraph or connector with an ID in this list. + """ + fetchServiceId: [String] + + """ + Matches any subgraph or connector fetches targeting a subgraph or connector with a name in this list. + """ + fetchServiceName: [String] + + """ + Matches any subgraph or connector fetches whose operation ID is in this list. + """ + operationId: [String] + + """ + Matches any subgraph or connector fetches whose operation name is in this list. + """ + operationName: [String] + + """ + Matches any subgraph or connector fetches requested from any variant in this list. + """ + variantName: [String] +} + +""" +The filters available when using the subgraph and connector timeseries report. +""" +input SubgraphInsightsTimeseriesReportFilterInput { + """ + Exclude subgraph or connector fetches that match a specified set of dimensions. If the same dimension exists in both 'include' and 'exclude', an REQUEST_INVALID error will be returned. + """ + exclude: SubgraphInsightsTimeseriesReportFilterInInput + + """ + Include subgraph or connector fetches that match a specified set of dimensions. + """ + include: SubgraphInsightsTimeseriesReportFilterInInput +} + +""" +Metrics available for subgraph and connector timeseries fetches, representing aggregated data +collected over the given time window for the selected dimensions. Each request from the router to a downstream subgraph +or connector service is counted as a fetch. +""" +enum SubgraphInsightsTimeseriesReportMetric { + """ + The total number of fetch requests sent from the router to the downstream subgraph or connector service as part of its query plan execution. + """ + FETCH_COUNT + + """The 50th percentile (median) latency of fetches (in milliseconds).""" + FETCH_LATENCY_P50_MS + + """The 90th percentile latency of fetch requests (in milliseconds).""" + FETCH_LATENCY_P90_MS + + """The 99th percentile latency of fetch requests (in milliseconds).""" + FETCH_LATENCY_P99_MS + + """ + The number of fetch requests that resulted in error responses from the downstream service. + """ + FETCH_WITH_ERRORS_COUNT +} + +""" +The type and value for subgraph and connector insights timeseries report metric. +""" +type SubgraphInsightsTimeseriesReportMetricValue { + """The type of metric this represents.""" + type: SubgraphInsightsTimeseriesReportMetric! + + """The floating point value of this metric.""" + value: Float! +} + +""" +The metric and direction to use as the secondary sort order for the subgraph and connector insights timeseries report. The primary sort order will always be time. +""" +input SubgraphInsightsTimeseriesReportOrderByInput { + """ + The ordering used for the metrics results. This metric must be included in the requested metrics. + """ + column: SubgraphInsightsTimeseriesReportMetric! + + """The direction used to order the results.""" + direction: Ordering! +} + +""" +The data that is returned by the subgraph and connector insights timeseries report. +""" +type SubgraphInsightsTimeseriesReportResult { + """ + A CSV representation of the results. This includes a header and rows that have a column for start and end timestamp and all requested dimensions and metrics. + """ + csv: String + + """ + The result records, with each row having a start and end timestamp and a set of dimensions and metrics. + """ + records: [SubgraphInsightsTimeseriesReportRow!]! +} + +""" +A single row of data that is returned by the subgraph and connector insights timeseries report. +""" +type SubgraphInsightsTimeseriesReportRow { + """The dimension values for this row, matching the requested dimensions.""" + dimensions: [SubgraphInsightsTimeseriesReportDimensionValue!]! + + """The exclusive end of the time bucket for this row.""" + endExclusiveTimestamp: Timestamp! + + """The metric values for this row, matching the requested metrics.""" + metrics: [SubgraphInsightsTimeseriesReportMetricValue!]! + + """The start of the time bucket for this row.""" + startTimestamp: Timestamp! +} + input SubgraphSdlCheckInput { name: String! sdl: GraphQLDocument! diff --git a/docs/source/ci-cd.mdx b/docs/source/ci-cd.mdx index 01238c448..7f9debc6f 100644 --- a/docs/source/ci-cd.mdx +++ b/docs/source/ci-cd.mdx @@ -53,7 +53,7 @@ jobs: name: Install command: | # download and install Rover - curl -sSL https://rover.apollo.dev/nix/v0.36.2 | sh + curl -sSL https://rover.apollo.dev/nix/v0.37.0 | sh # This allows the PATH changes to persist to the next `run` step echo 'export PATH=$HOME/.rover/bin:$PATH' >> $BASH_ENV @@ -216,7 +216,7 @@ jobs: - name: Install Rover run: | - curl -sSL https://rover.apollo.dev/nix/v0.36.2 | sh + curl -sSL https://rover.apollo.dev/nix/v0.37.0 | sh # Add Rover to the $GITHUB_PATH so it can be used in another step # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path @@ -311,10 +311,10 @@ Normally when installing, Rover adds the path of its executable to your `$PATH`. To avoid this issue, do one of the following: - Use the script, but reference `rover` by its full path (`$HOME/.rover/bin/rover`) -- Download the latest release via `cURL` and extract the binary. This downloads Rover `0.36.2` for Linux x86 architectures: +- Download the latest release via `cURL` and extract the binary. This downloads Rover `0.37.0` for Linux x86 architectures: ``` - curl -L https://github.com/apollographql/rover/releases/download/v0.36.2/rover-v0.36.2-x86_64-unknown-linux-gnu.tar.gz | tar --strip-components=1 -zxv + curl -L https://github.com/apollographql/rover/releases/download/v0.37.0/rover-v0.37.0-x86_64-unknown-linux-gnu.tar.gz | tar --strip-components=1 -zxv ``` #### Permission issues diff --git a/docs/source/getting-started.mdx b/docs/source/getting-started.mdx index 0692c4c25..5cee4b7e1 100644 --- a/docs/source/getting-started.mdx +++ b/docs/source/getting-started.mdx @@ -20,7 +20,7 @@ To install or upgrade to a **specific version** of Rover (recommended for CI env ```bash # Note the `v` prefixing the version number -curl -sSL https://rover.apollo.dev/nix/v0.36.2 | sh +curl -sSL https://rover.apollo.dev/nix/v0.37.0 | sh ``` If your machine doesn't have the `curl` command, you can get the latest version from the [`curl` downloads page](https://curl.se/download.html). @@ -43,7 +43,7 @@ To install or upgrade to a **specific version** of Rover (recommended for CI env ```bash # Note the `v` prefixing the version number -iwr 'https://rover.apollo.dev/win/v0.36.2' | iex +iwr 'https://rover.apollo.dev/win/v0.37.0' | iex ``` #### Installing from a binary mirror using the bash and PowerShell scripts diff --git a/installers/binstall/scripts/nix/install.sh b/installers/binstall/scripts/nix/install.sh index 55821d43c..2e1d7e415 100755 --- a/installers/binstall/scripts/nix/install.sh +++ b/installers/binstall/scripts/nix/install.sh @@ -20,7 +20,7 @@ BINARY_DOWNLOAD_PREFIX="${APOLLO_ROVER_BINARY_DOWNLOAD_PREFIX:="https://github.c # Rover version defined in root cargo.toml # Note: this line is built automatically # in build.rs. Don't touch it! -PACKAGE_VERSION="v0.36.2" +PACKAGE_VERSION="v0.37.0" download_binary_and_run_installer() { downloader --check diff --git a/installers/binstall/scripts/windows/install.ps1 b/installers/binstall/scripts/windows/install.ps1 index a3acfcc5c..05cfb6b97 100644 --- a/installers/binstall/scripts/windows/install.ps1 +++ b/installers/binstall/scripts/windows/install.ps1 @@ -14,7 +14,7 @@ # version found in Rover's Cargo.toml # Note: this line is built automatically # in build.rs. Don't touch it! -$package_version = 'v0.36.2' +$package_version = 'v0.37.0' function Install-Binary($rover_install_args) { $old_erroractionpreference = $ErrorActionPreference diff --git a/installers/npm/package-lock.json b/installers/npm/package-lock.json index 921ef3046..d355f0346 100644 --- a/installers/npm/package-lock.json +++ b/installers/npm/package-lock.json @@ -1,12 +1,12 @@ { "name": "@apollo/rover", - "version": "0.36.2", + "version": "0.37.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@apollo/rover", - "version": "0.36.2", + "version": "0.37.0", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -527,9 +527,9 @@ "license": "MIT" }, "node_modules/@emnapi/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.6.0.tgz", - "integrity": "sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", "dev": true, "license": "MIT", "optional": true, @@ -539,9 +539,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.6.0.tgz", - "integrity": "sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", "dev": true, "license": "MIT", "optional": true, @@ -1157,9 +1157,9 @@ } }, "node_modules/@types/node": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz", - "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1174,9 +1174,9 @@ "license": "MIT" }, "node_modules/@types/yargs": { - "version": "17.0.34", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.34.tgz", - "integrity": "sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "license": "MIT", "dependencies": { @@ -1682,9 +1682,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.20", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz", - "integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==", + "version": "2.8.31", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz", + "integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -1715,9 +1715,9 @@ } }, "node_modules/browserslist": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", - "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", "dev": true, "funding": [ { @@ -1735,10 +1735,10 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.19", - "caniuse-lite": "^1.0.30001751", - "electron-to-chromium": "^1.5.238", - "node-releases": "^2.0.26", + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", "update-browserslist-db": "^1.1.4" }, "bin": { @@ -1799,9 +1799,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001751", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", - "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "version": "1.0.30001757", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", + "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", "dev": true, "funding": [ { @@ -1872,9 +1872,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", - "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", + "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==", "dev": true, "license": "MIT" }, @@ -2172,9 +2172,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.240", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz", - "integrity": "sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==", + "version": "1.5.261", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.261.tgz", + "integrity": "sha512-cmyHEWFqEt3ICUNF93ShneOF47DHoSDbLb7E/AonsWcbzg95N+kPXeLNfkdzgTT/vEUcoW76fxbLBkeYtfoM8A==", "dev": true, "license": "ISC" }, @@ -2435,9 +2435,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -2562,9 +2562,9 @@ } }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { @@ -3550,9 +3550,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -3824,9 +3824,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.26", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", - "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, diff --git a/installers/npm/package.json b/installers/npm/package.json index 85db2121a..d0dbf62f0 100644 --- a/installers/npm/package.json +++ b/installers/npm/package.json @@ -1,6 +1,6 @@ { "name": "@apollo/rover", - "version": "0.36.2", + "version": "0.37.0", "description": "The new Apollo CLI", "main": "index.js", "bin": { diff --git a/src/command/template/queries.rs b/src/command/template/queries.rs index 9ce0bcce3..c00345abe 100644 --- a/src/command/template/queries.rs +++ b/src/command/template/queries.rs @@ -4,10 +4,9 @@ pub mod list_templates_for_language { #![allow(dead_code)] use std::result::Result; pub const OPERATION_NAME: &str = "ListTemplatesForLanguage"; - pub const QUERY: &str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}"; - use serde::{Deserialize, Serialize}; - + pub const QUERY : & str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}" ; use super::*; + use serde::{Deserialize, Serialize}; #[allow(dead_code)] type Boolean = bool; #[allow(dead_code)] @@ -95,10 +94,9 @@ pub mod get_template_by_id { #![allow(dead_code)] use std::result::Result; pub const OPERATION_NAME: &str = "GetTemplateById"; - pub const QUERY: &str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}"; - use serde::{Deserialize, Serialize}; - + pub const QUERY : & str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}" ; use super::*; + use serde::{Deserialize, Serialize}; #[allow(dead_code)] type Boolean = bool; #[allow(dead_code)] @@ -139,10 +137,9 @@ pub mod get_templates_for_language { #![allow(dead_code)] use std::result::Result; pub const OPERATION_NAME: &str = "GetTemplatesForLanguage"; - pub const QUERY: &str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}"; - use serde::{Deserialize, Serialize}; - + pub const QUERY : & str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}" ; use super::*; + use serde::{Deserialize, Serialize}; #[allow(dead_code)] type Boolean = bool; #[allow(dead_code)] From c920f729a49d2a45f06b5204e50e3d2b3d7ee3fd Mon Sep 17 00:00:00 2001 From: Dale Seo Date: Wed, 26 Nov 2025 14:57:03 -0500 Subject: [PATCH 2/3] chore: address format, clippy issues --- src/command/template/queries.rs | 15 +++++++++------ tests/e2e/config/auth.rs | 5 ++--- tests/e2e/config/clear.rs | 7 +++---- tests/e2e/config/list.rs | 5 ++--- tests/e2e/config/whoami.rs | 3 +-- tests/e2e/dev.rs | 3 +-- tests/e2e/graph/check.rs | 5 ++--- tests/e2e/graph/fetch.rs | 5 +---- tests/e2e/graph/introspect.rs | 5 ++--- tests/e2e/init/mod.rs | 3 +-- tests/e2e/install/plugin.rs | 13 ++++++------- tests/e2e/options/client_timeout.rs | 5 +---- tests/e2e/subgraph/check.rs | 5 ++--- tests/e2e/subgraph/fetch.rs | 5 ++--- tests/e2e/subgraph/introspect.rs | 5 ++--- tests/e2e/subgraph/lint.rs | 5 ++--- tests/e2e/subgraph/list.rs | 5 +---- tests/e2e/subgraph/publish.rs | 11 ++++------- tests/e2e/supergraph/compose.rs | 5 ++--- tests/e2e/supergraph/config.rs | 5 +---- tests/e2e/supergraph/fetch.rs | 5 ++--- tests/e2e/supergraph/print_json_schema.rs | 2 +- tests/integration/dev/arg_conflicts.rs | 7 +++---- tests/integration/dev/arg_validation.rs | 5 ++--- tests/integration/info/mod.rs | 3 +-- tests/integration/output/to_file.rs | 3 +-- tests/integration/schema/fetch.rs | 4 +--- tests/main.rs | 3 +-- 28 files changed, 59 insertions(+), 93 deletions(-) diff --git a/src/command/template/queries.rs b/src/command/template/queries.rs index c00345abe..9ce0bcce3 100644 --- a/src/command/template/queries.rs +++ b/src/command/template/queries.rs @@ -4,9 +4,10 @@ pub mod list_templates_for_language { #![allow(dead_code)] use std::result::Result; pub const OPERATION_NAME: &str = "ListTemplatesForLanguage"; - pub const QUERY : & str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}" ; - use super::*; + pub const QUERY: &str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}"; use serde::{Deserialize, Serialize}; + + use super::*; #[allow(dead_code)] type Boolean = bool; #[allow(dead_code)] @@ -94,9 +95,10 @@ pub mod get_template_by_id { #![allow(dead_code)] use std::result::Result; pub const OPERATION_NAME: &str = "GetTemplateById"; - pub const QUERY : & str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}" ; - use super::*; + pub const QUERY: &str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}"; use serde::{Deserialize, Serialize}; + + use super::*; #[allow(dead_code)] type Boolean = bool; #[allow(dead_code)] @@ -137,9 +139,10 @@ pub mod get_templates_for_language { #![allow(dead_code)] use std::result::Result; pub const OPERATION_NAME: &str = "GetTemplatesForLanguage"; - pub const QUERY : & str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}" ; - use super::*; + pub const QUERY: &str = "query ListTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n description\n repoUrl\n language\n }\n}\n\nquery GetTemplateById($id: ID!) {\n template(id: $id) {\n downloadUrl\n }\n}\n\nquery GetTemplatesForLanguage($language: Language) {\n templates(language: $language) {\n id\n name\n downloadUrl\n }\n}"; use serde::{Deserialize, Serialize}; + + use super::*; #[allow(dead_code)] type Boolean = bool; #[allow(dead_code)] diff --git a/tests/e2e/config/auth.rs b/tests/e2e/config/auth.rs index 475738c6c..46fc69698 100644 --- a/tests/e2e/config/auth.rs +++ b/tests/e2e/config/auth.rs @@ -1,11 +1,10 @@ -use assert_cmd::Command; use predicates::prelude::*; use rstest::rstest; #[rstest] #[ignore] fn e2e_test_rover_auth_help() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.arg("config") .arg("auth") .arg("--help") @@ -16,7 +15,7 @@ fn e2e_test_rover_auth_help() { #[rstest] #[ignore] fn e2e_test_rover_auth_fail_empty_api_key() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let result = cmd.arg("config").arg("auth").write_stdin("").assert(); result.stderr(predicate::str::contains("empty")); } diff --git a/tests/e2e/config/clear.rs b/tests/e2e/config/clear.rs index 855a48c50..053469257 100644 --- a/tests/e2e/config/clear.rs +++ b/tests/e2e/config/clear.rs @@ -1,6 +1,5 @@ use std::convert::TryFrom; -use assert_cmd::Command; use camino::Utf8PathBuf; use houston::{Config, Profile}; use predicates::prelude::*; @@ -20,7 +19,7 @@ fn e2e_test_rover_config_clear() { Profile::set_api_key(CUSTOM_PROFILE, &config, CUSTOM_API_KEY).unwrap(); // when one is added - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let result = cmd .env(RoverEnvKey::ConfigHome.to_string(), &temp_dir) .arg("config") @@ -29,7 +28,7 @@ fn e2e_test_rover_config_clear() { result.stdout(predicate::str::contains(CUSTOM_PROFILE)); // and then removed via `config clear` - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let result = cmd .env(RoverEnvKey::ConfigHome.to_string(), &temp_dir) .arg("config") @@ -38,7 +37,7 @@ fn e2e_test_rover_config_clear() { result.stderr("Successfully cleared all configuration.\n"); // then we should have no profiles - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let result = cmd .arg("config") .env(RoverEnvKey::ConfigHome.to_string(), &temp_dir) diff --git a/tests/e2e/config/list.rs b/tests/e2e/config/list.rs index 7cc519df9..27fe9f694 100644 --- a/tests/e2e/config/list.rs +++ b/tests/e2e/config/list.rs @@ -1,6 +1,5 @@ use std::convert::TryFrom; -use assert_cmd::Command; use camino::Utf8PathBuf; use houston::{Config, Profile}; use predicates::prelude::*; @@ -15,7 +14,7 @@ const CUSTOM_API_KEY: &str = "custom-api-key"; #[ignore] fn e2e_test_rover_config_list_empty() { let temp_dir = Utf8PathBuf::try_from(TempDir::new().unwrap().path().to_path_buf()).unwrap(); - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let result = cmd .arg("config") .env(RoverEnvKey::ConfigHome.to_string(), &temp_dir) @@ -31,7 +30,7 @@ fn e2e_test_rover_config_list_one_profile() { let config = Config::new(Some(temp_dir.clone()).as_ref(), None).unwrap(); Profile::set_api_key(CUSTOM_PROFILE, &config, CUSTOM_API_KEY).unwrap(); - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let result = cmd .env(RoverEnvKey::ConfigHome.to_string(), &temp_dir) .arg("config") diff --git a/tests/e2e/config/whoami.rs b/tests/e2e/config/whoami.rs index 0db916679..38e824c4d 100644 --- a/tests/e2e/config/whoami.rs +++ b/tests/e2e/config/whoami.rs @@ -1,4 +1,3 @@ -use assert_cmd::Command; use rstest::rstest; use serde::Deserialize; use serde_json::Value; @@ -25,7 +24,7 @@ fn e2e_test_rover_config_whoami() { .tempfile() .expect("Could not create output file"); - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args([ "config", "whoami", diff --git a/tests/e2e/dev.rs b/tests/e2e/dev.rs index a5c382052..b8240935c 100644 --- a/tests/e2e/dev.rs +++ b/tests/e2e/dev.rs @@ -1,6 +1,5 @@ use std::{env, process::Command, time::Duration}; -use assert_cmd::prelude::CommandCargoExt; use mime::APPLICATION_JSON; use portpicker::pick_unused_port; use reqwest::{Client, header::CONTENT_TYPE}; @@ -22,7 +21,7 @@ const ROVER_DEV_TIMEOUT: Duration = Duration::from_secs(45); #[once] #[allow(clippy::zombie_processes)] fn run_rover_dev(run_subgraphs_retail_supergraph: &RetailSupergraph) -> String { - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("rover")); let port = pick_unused_port().expect("No ports free"); let router_url = format!("http://localhost:{port}"); let client = Client::new(); diff --git a/tests/e2e/graph/check.rs b/tests/e2e/graph/check.rs index b5d8246d4..49068466d 100644 --- a/tests/e2e/graph/check.rs +++ b/tests/e2e/graph/check.rs @@ -1,6 +1,5 @@ -use std::{path::PathBuf, process::Command}; +use std::path::PathBuf; -use assert_cmd::prelude::CommandCargoExt; use regex::Regex; use rstest::rstest; use speculoos::{assert_that, boolean::BooleanAssertions}; @@ -25,7 +24,7 @@ async fn e2e_test_rover_graph_check( // WHEN // - the command is run - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args([ "graph", "check", diff --git a/tests/e2e/graph/fetch.rs b/tests/e2e/graph/fetch.rs index 5fdf0d8a1..1a8ef2d00 100644 --- a/tests/e2e/graph/fetch.rs +++ b/tests/e2e/graph/fetch.rs @@ -1,6 +1,3 @@ -use std::process::Command; - -use assert_cmd::prelude::CommandCargoExt; use regex::Regex; use rstest::rstest; use speculoos::{assert_that, boolean::BooleanAssertions}; @@ -18,7 +15,7 @@ async fn e2e_test_rover_graph_fetch(remote_supergraph_graphref: String) { // - rover graph fetch to stdout // WHEN // - the command is run - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args(["graph", "fetch", &remote_supergraph_graphref]); let output = cmd.output().expect("Could not run command"); diff --git a/tests/e2e/graph/introspect.rs b/tests/e2e/graph/introspect.rs index d74ac7ff2..e4ad82124 100644 --- a/tests/e2e/graph/introspect.rs +++ b/tests/e2e/graph/introspect.rs @@ -6,7 +6,6 @@ use std::{ time::Duration, }; -use assert_cmd::prelude::CommandCargoExt; use graphql_schema_diff::diff; use regex::Regex; use rstest::rstest; @@ -45,7 +44,7 @@ async fn e2e_test_rover_graph_introspect( .suffix(".json") .tempfile() .expect("Could not create output file"); - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args([ "graph", "introspect", @@ -90,7 +89,7 @@ async fn e2e_test_rover_graph_introspect_watch( .tempfile() .expect("Could not create output file"); // Create the Rover command to run the introspection in `--watch` mode - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("rover")); let mut child = cmd .args([ "graph", diff --git a/tests/e2e/init/mod.rs b/tests/e2e/init/mod.rs index f4eaed5c0..0b2d27fe0 100644 --- a/tests/e2e/init/mod.rs +++ b/tests/e2e/init/mod.rs @@ -1,9 +1,8 @@ -use assert_cmd::Command; use rstest::rstest; #[rstest] #[ignore] fn e2e_test_rover_init_help() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.arg("init").arg("--help").assert().success(); } diff --git a/tests/e2e/install/plugin.rs b/tests/e2e/install/plugin.rs index 7df19e175..9b0dd3dbc 100644 --- a/tests/e2e/install/plugin.rs +++ b/tests/e2e/install/plugin.rs @@ -1,6 +1,5 @@ -use std::{process::Command, str::from_utf8}; +use std::str::from_utf8; -use assert_cmd::prelude::CommandCargoExt; use assert_fs::TempDir; use camino::Utf8PathBuf; use regex::Regex; @@ -26,7 +25,7 @@ async fn e2e_test_rover_install_plugin(#[case] args: Vec<&str>, #[case] binary_n // - it's run let temp_dir = Utf8PathBuf::try_from(TempDir::new().unwrap().path().to_path_buf()).unwrap(); let bin_path = temp_dir.join(".rover/bin"); - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.env("APOLLO_HOME", temp_dir); cmd.args(args); let output = cmd.output().expect("Could not run command"); @@ -84,7 +83,7 @@ async fn e2e_test_rover_install_plugin_with_force_opt( .collect(); // FIRST INSTALLATION, NO FORCE - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.env("APOLLO_HOME", temp_dir.clone()); cmd.args(args_without_force_option.clone()); let output = cmd.output().expect("Could not run command"); @@ -105,7 +104,7 @@ async fn e2e_test_rover_install_plugin_with_force_opt( assert_that(&installed).is_true(); // SECOND INSTALLATION, NO FORCE, USES EXISTING BINARY - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.env("APOLLO_HOME", temp_dir.clone()); cmd.args(args_without_force_option.clone()); let output = cmd.output().expect("Could not run command"); @@ -125,7 +124,7 @@ async fn e2e_test_rover_install_plugin_with_force_opt( assert_that!(installed).is_true(); // THIRD INSTALLATION, USES FORCE, BINARY EXISTS - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.env("APOLLO_HOME", temp_dir.clone()); cmd.args(forced_args); let output = cmd.output().expect("Could not run command"); @@ -147,7 +146,7 @@ async fn e2e_test_rover_install_plugins_from_latest_plugin_config_file( ) { let temp_dir = Utf8PathBuf::try_from(TempDir::new().unwrap().path().to_path_buf()).unwrap(); let bin_path = temp_dir.join(".rover/bin"); - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let config_file_contents = std::fs::read_to_string("latest_plugin_versions.json") .expect("Should have been able to read the file"); diff --git a/tests/e2e/options/client_timeout.rs b/tests/e2e/options/client_timeout.rs index e2d218fb9..e2a9a28c4 100644 --- a/tests/e2e/options/client_timeout.rs +++ b/tests/e2e/options/client_timeout.rs @@ -1,6 +1,3 @@ -use std::process::Command; - -use assert_cmd::prelude::CommandCargoExt; use rstest::*; use crate::e2e::remote_supergraph_graphref; @@ -28,7 +25,7 @@ async fn e2e_test_rover_client_timeout_option( // WHEN // - a command supporting the --client-timeout option is invoked - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.env("APOLLO_REGISTRY_URL", fake_registry); cmd.args([ "subgraph", diff --git a/tests/e2e/subgraph/check.rs b/tests/e2e/subgraph/check.rs index 96f853367..14a525171 100644 --- a/tests/e2e/subgraph/check.rs +++ b/tests/e2e/subgraph/check.rs @@ -1,6 +1,5 @@ -use std::{path::PathBuf, process::Command}; +use std::path::PathBuf; -use assert_cmd::prelude::CommandCargoExt; use regex::Regex; use rstest::rstest; use speculoos::{assert_that, boolean::BooleanAssertions}; @@ -24,7 +23,7 @@ async fn e2e_test_rover_subgraph_check( // WHEN // - the command is run - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args([ "subgraph", "check", diff --git a/tests/e2e/subgraph/fetch.rs b/tests/e2e/subgraph/fetch.rs index ac8eca6ab..8c8ffe400 100644 --- a/tests/e2e/subgraph/fetch.rs +++ b/tests/e2e/subgraph/fetch.rs @@ -1,6 +1,5 @@ -use std::{fs::read_to_string, path::PathBuf, process::Command}; +use std::{fs::read_to_string, path::PathBuf}; -use assert_cmd::prelude::CommandCargoExt; use graphql_schema_diff::diff; use rstest::rstest; use speculoos::{assert_that, prelude::VecAssertions}; @@ -23,7 +22,7 @@ async fn e2e_test_rover_subgraph_fetch( .suffix(".graphql") .tempfile() .expect("Could not create output file"); - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args([ "subgraph", "fetch", diff --git a/tests/e2e/subgraph/introspect.rs b/tests/e2e/subgraph/introspect.rs index f6d169125..97efdf543 100644 --- a/tests/e2e/subgraph/introspect.rs +++ b/tests/e2e/subgraph/introspect.rs @@ -6,7 +6,6 @@ use std::{ time::Duration, }; -use assert_cmd::prelude::CommandCargoExt; use graphql_schema_diff::diff; use regex::Regex; use rstest::rstest; @@ -42,7 +41,7 @@ async fn e2e_test_rover_subgraph_introspect( .suffix(".json") .tempfile() .expect("Could not create output file"); - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args([ "subgraph", "introspect", @@ -88,7 +87,7 @@ async fn e2e_test_rover_subgraph_introspect_watch( .tempfile() .expect("Could not create output file"); // Create the Rover command to run the introspection in `--watch` mode - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("rover")); let mut child = cmd .args([ "subgraph", diff --git a/tests/e2e/subgraph/lint.rs b/tests/e2e/subgraph/lint.rs index 37238a64b..7ef8b6c66 100644 --- a/tests/e2e/subgraph/lint.rs +++ b/tests/e2e/subgraph/lint.rs @@ -1,6 +1,5 @@ -use std::{path::PathBuf, process::Command}; +use std::path::PathBuf; -use assert_cmd::prelude::CommandCargoExt; use rstest::rstest; use speculoos::assert_that; use tracing::error; @@ -21,7 +20,7 @@ async fn e2e_test_rover_subgraph_lint( .to_str() .expect("failed to get path to perfSubgraph00.graphql file"); - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args([ "subgraph", "lint", diff --git a/tests/e2e/subgraph/list.rs b/tests/e2e/subgraph/list.rs index 35861844d..1a1d03e96 100644 --- a/tests/e2e/subgraph/list.rs +++ b/tests/e2e/subgraph/list.rs @@ -1,6 +1,3 @@ -use std::process::Command; - -use assert_cmd::prelude::CommandCargoExt; use regex::Regex; use rstest::rstest; use speculoos::{assert_that, boolean::BooleanAssertions}; @@ -18,7 +15,7 @@ async fn e2e_test_rover_subgraph_list(remote_supergraph_graphref: String) { // - rover subgraph list to stdout // WHEN // - the command is run - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args(["subgraph", "list", &remote_supergraph_graphref]); let output = cmd.output().expect("Could not run command"); diff --git a/tests/e2e/subgraph/publish.rs b/tests/e2e/subgraph/publish.rs index b0e98af8f..055418ba4 100644 --- a/tests/e2e/subgraph/publish.rs +++ b/tests/e2e/subgraph/publish.rs @@ -1,6 +1,5 @@ -use std::{path::PathBuf, process::Command, str::from_utf8}; +use std::{path::PathBuf, str::from_utf8}; -use assert_cmd::prelude::CommandCargoExt; use rand::Rng; use rstest::rstest; use serde::Deserialize; @@ -51,8 +50,7 @@ async fn e2e_test_rover_subgraph_publish( info!("Using name {} for subgraph", &id); // Grab the initial list of subgraphs to check that what we want doesn't already exist - let mut subgraph_list_cmd = - Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut subgraph_list_cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); subgraph_list_cmd.args([ "subgraph", "list", @@ -76,7 +74,7 @@ async fn e2e_test_rover_subgraph_publish( // Construct a command to publish a new subgraph to a variant that's specifically for this // purpose info!("Creating subgraph with name {}", &id); - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args([ "subgraph", "publish", @@ -114,8 +112,7 @@ async fn e2e_test_rover_subgraph_publish( // left with subgraphs lying around. In the future we should move to something like // test-context (https://docs.rs/test-context/latest/test_context/) so that we get cleanup // for free. Until then we can manually clean up if it becomes necessary. - let mut subgraph_delete_cmd = - Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut subgraph_delete_cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); subgraph_delete_cmd.args([ "subgraph", "delete", diff --git a/tests/e2e/supergraph/compose.rs b/tests/e2e/supergraph/compose.rs index e2b30e0f0..4e2f3633f 100644 --- a/tests/e2e/supergraph/compose.rs +++ b/tests/e2e/supergraph/compose.rs @@ -1,6 +1,5 @@ use std::{env, process::Command}; -use assert_cmd::prelude::CommandCargoExt; use regex::RegexSet; use rstest::*; use tracing::error; @@ -17,7 +16,7 @@ async fn e2e_test_run_rover_supergraph_compose(retail_supergraph: &RetailSupergr // - a supergraph config yaml (fixture) // - retail supergraphs representing any set of subgraphs to be composed into a supergraph // (fixture) - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let mut args: Vec = vec![ "supergraph", "compose", @@ -81,7 +80,7 @@ async fn e2e_test_run_rover_supergraph_compose(retail_supergraph: &RetailSupergr async fn it_fails_without_a_config() { // GIVEN // - an invocation of `rover supergraph compose` without any config file - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("rover")); cmd.args(["supergraph", "compose"]); // WHEN diff --git a/tests/e2e/supergraph/config.rs b/tests/e2e/supergraph/config.rs index d95e53d82..72ccf3883 100644 --- a/tests/e2e/supergraph/config.rs +++ b/tests/e2e/supergraph/config.rs @@ -1,6 +1,3 @@ -use std::process::Command; - -use assert_cmd::cargo::CommandCargoExt; use rstest::rstest; use tracing::error; use tracing_test::traced_test; @@ -10,7 +7,7 @@ use tracing_test::traced_test; #[tokio::test(flavor = "multi_thread")] #[traced_test] async fn e2e_test_rover_supergraph_config_schema() { - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args(["supergraph", "config", "schema"]); let output = cmd.output().expect("Could not run command"); diff --git a/tests/e2e/supergraph/fetch.rs b/tests/e2e/supergraph/fetch.rs index 7cbef6bcc..db659881d 100644 --- a/tests/e2e/supergraph/fetch.rs +++ b/tests/e2e/supergraph/fetch.rs @@ -1,6 +1,5 @@ -use std::{fs::read_to_string, process::Command}; +use std::fs::read_to_string; -use assert_cmd::prelude::CommandCargoExt; use regex::Regex; use rstest::rstest; use tempfile::Builder; @@ -23,7 +22,7 @@ async fn e2e_test_rover_supergraph_fetch(remote_supergraph_graphref: String) { // WHEN // - invoked - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args([ "supergraph", "fetch", diff --git a/tests/e2e/supergraph/print_json_schema.rs b/tests/e2e/supergraph/print_json_schema.rs index abc04a531..89f9d044f 100644 --- a/tests/e2e/supergraph/print_json_schema.rs +++ b/tests/e2e/supergraph/print_json_schema.rs @@ -10,7 +10,7 @@ use tracing_test::traced_test; #[tokio::test(flavor = "multi_thread")] #[traced_test] async fn e2e_test_rover_supergraph_print_json_schema() { - let mut cmd = Command::cargo_bin("rover").expect("Could not find necessary binary"); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.args(["supergraph", "print-json-schema"]); let output = cmd.output().expect("Could not run command"); diff --git a/tests/integration/dev/arg_conflicts.rs b/tests/integration/dev/arg_conflicts.rs index 361e49b86..d2d29289e 100644 --- a/tests/integration/dev/arg_conflicts.rs +++ b/tests/integration/dev/arg_conflicts.rs @@ -1,9 +1,8 @@ -use assert_cmd::Command; use predicates::prelude::*; #[test] fn super_conflicts_with_url() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let assert = cmd .arg("dev") .arg("--supergraph-config=supergraph.yaml") @@ -17,7 +16,7 @@ fn super_conflicts_with_url() { #[test] fn super_conflicts_with_schema() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let assert = cmd .arg("dev") .arg("--supergraph-config=supergraph.yaml") @@ -31,7 +30,7 @@ fn super_conflicts_with_schema() { #[test] fn super_conflicts_with_name() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let assert = cmd .arg("dev") .arg("--supergraph-config=supergraph.yaml") diff --git a/tests/integration/dev/arg_validation.rs b/tests/integration/dev/arg_validation.rs index 2c186c704..2f32a9f55 100644 --- a/tests/integration/dev/arg_validation.rs +++ b/tests/integration/dev/arg_validation.rs @@ -1,9 +1,8 @@ -use assert_cmd::Command; use predicates::prelude::predicate; #[test] fn invalid_ip() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let assert = cmd .arg("dev") .arg("--supergraph-address=notanip") @@ -16,7 +15,7 @@ fn invalid_ip() { #[test] fn invalid_port() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let assert = cmd .arg("dev") .arg("--supergraph-port=notaport") diff --git a/tests/integration/info/mod.rs b/tests/integration/info/mod.rs index fe259b719..35797ddb3 100644 --- a/tests/integration/info/mod.rs +++ b/tests/integration/info/mod.rs @@ -1,10 +1,9 @@ -use assert_cmd::Command; use predicates::prelude::*; use rover::PKG_VERSION; #[test] fn it_prints_info() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); let result = cmd.arg("info").assert().success(); // the version should always be available in the `info` output diff --git a/tests/integration/output/to_file.rs b/tests/integration/output/to_file.rs index dfb1c268f..eb51360cb 100644 --- a/tests/integration/output/to_file.rs +++ b/tests/integration/output/to_file.rs @@ -1,6 +1,5 @@ use std::fs; -use assert_cmd::Command; use camino::Utf8PathBuf; use houston::{Config, Profile}; use rover::utils::env::RoverEnvKey; @@ -45,7 +44,7 @@ fn it_can_write_files_correctly_no_matter_the_input_path( fs::write(file, "foo bar bash").expect("Could not create existing directories"); } - let mut starter_cmd = Command::cargo_bin("rover").unwrap(); + let mut starter_cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); starter_cmd .env(RoverEnvKey::ConfigHome.to_string(), temp_config_dir_path) .args(vec![ diff --git a/tests/integration/schema/fetch.rs b/tests/integration/schema/fetch.rs index 58616dbe2..eb50294c1 100644 --- a/tests/integration/schema/fetch.rs +++ b/tests/integration/schema/fetch.rs @@ -1,8 +1,6 @@ -use assert_cmd::Command; - #[test] fn it_has_a_graph_fetch_command() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); cmd.arg("graph") .arg("fetch") .arg("--help") diff --git a/tests/main.rs b/tests/main.rs index 31b7d7532..9992702af 100644 --- a/tests/main.rs +++ b/tests/main.rs @@ -1,10 +1,9 @@ -use assert_cmd::Command; use predicates::prelude::*; mod integration; #[test] fn its_executable() { - let mut cmd = Command::cargo_bin("rover").unwrap(); + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("rover"); // running the CLI with no command returns the help message to stderr let result = cmd.assert(); From 85c350feaf019f9219ca5d6b38b2b0bfdff81d54 Mon Sep 17 00:00:00 2001 From: Dale Seo Date: Tue, 2 Dec 2025 11:11:03 -0500 Subject: [PATCH 3/3] fix: windows e2e tests --- .github/workflows/smoke-test.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/smoke-test.yml b/.github/workflows/smoke-test.yml index dcc35f2cb..7b7fe4e16 100644 --- a/.github/workflows/smoke-test.yml +++ b/.github/workflows/smoke-test.yml @@ -96,6 +96,21 @@ jobs: name: "Set permissions on artifacts correctly" run: | chmod -R +x ./${{ matrix.testing_target.binary_under_test }} + - name: "Create expected directory structure for test binary lookup" + shell: bash + run: | + mkdir -p target/${{ matrix.testing_target.binary_under_test }}/debug + cp -r ./${{ matrix.testing_target.binary_under_test }}/* target/${{ matrix.testing_target.binary_under_test }}/debug/ + - name: "Create symlink for Linux container path (compiled in Docker with different workspace)" + if: ${{ matrix.testing_target.binary_under_test == 'x86_64-unknown-linux-gnu' }} + run: | + # The Linux binary was compiled in Docker where workspace was /__w/rover/rover + # On Ubuntu runner, workspace is /home/runner/work/rover/rover + # Create a symlink so any baked-in paths from compilation resolve correctly + sudo mkdir -p /__w/rover + sudo ln -s ${{ github.workspace }} /__w/rover/rover + echo "Created symlink: /__w/rover/rover -> ${{ github.workspace }}" + ls -la /__w/rover/ - uses: volta-cli/action@v4 name: "Install volta" - name: Run Smoke Tests (Non-Windows) @@ -105,6 +120,7 @@ jobs: APOLLO_ROVER_DEV_COMPOSITION_VERSION: ${{ matrix.composition-version }} APOLLO_ROVER_DEV_ROUTER_VERSION: ${{ matrix.router-version }} APOLLO_ELV2_LICENSE: accept + CARGO_BIN_EXE_rover: ${{ github.workspace }}/${{ matrix.testing_target.binary_under_test }}/rover CARGO_MANIFEST_DIR: ${{ github.workspace }} APOLLO_KEY: ${{ secrets.APOLLO_KEY_ROVER_E2E_TESTS }} run: | @@ -116,6 +132,7 @@ jobs: env: APOLLO_ROVER_DEV_COMPOSITION_VERSION: ${{ matrix.composition-version }} APOLLO_ROVER_DEV_ROUTER_VERSION: ${{ matrix.router-version }} + APOLLO_ELV2_LICENSE: accept CARGO_BIN_EXE_rover: ${{ github.workspace }}\${{ matrix.testing_target.binary_under_test }}\rover.exe CARGO_MANIFEST_DIR: ${{ github.workspace }} APOLLO_KEY: ${{ secrets.APOLLO_KEY_ROVER_E2E_TESTS }}