diff --git a/.github/actions/setup_rust_cargo/action.yaml b/.github/actions/setup_rust_cargo/action.yaml index f2531e3e..2a2191ee 100644 --- a/.github/actions/setup_rust_cargo/action.yaml +++ b/.github/actions/setup_rust_cargo/action.yaml @@ -9,6 +9,16 @@ runs: with: targets: wasm32-unknown-unknown + - name: Install protoc + shell: bash + run: | + if [ -f /opt/homebrew/bin/brew ]; then + /opt/homebrew/bin/brew install protobuf + elif [ -f /usr/bin/apt ]; then + sudo /usr/bin/apt update + sudo /usr/bin/apt install -y protobuf-compiler + fi + - uses: actions/cache@v4 with: path: | diff --git a/.github/workflows/pyo3.yml b/.github/workflows/pyo3.yml index 937a4a35..09dc86d4 100644 --- a/.github/workflows/pyo3.yml +++ b/.github/workflows/pyo3.yml @@ -22,6 +22,7 @@ jobs: linux: runs-on: ${{ matrix.platform.runner }} strategy: + fail-fast: false matrix: platform: - runner: ubuntu-latest @@ -52,12 +53,22 @@ jobs: if [ -f /usr/bin/yum ]; then # quay.io/pypa/manylinux2014_x86_64:latest /usr/bin/yum -y upgrade - /usr/bin/yum -y install perl-IPC-Cmd perl-List-MoreUtils openssl-devel python3-pip + /usr/bin/yum -y install perl-IPC-Cmd perl-List-MoreUtils openssl-devel python3-pip unzip /usr/bin/ln -s /usr/bin/pip3 /usr/bin/pip elif [ -f /usr/bin/apt ]; then # ghcr.io/rust-cross/manylinux2014-cross:aarch64 /usr/bin/apt update - /usr/bin/apt install -y pkg-config libssl-dev + /usr/bin/apt install -y pkg-config libssl-dev unzip + fi + + if [ "$(uname -m)" == "aarch64" ]; then + curl -L https://github.com/protocolbuffers/protobuf/releases/download/v29.1/protoc-29.1-linux-aarch_64.zip -o protoc.zip + unzip protoc.zip + export PROTOC=$(pwd)/bin/protoc + else + curl -L https://github.com/protocolbuffers/protobuf/releases/download/v29.1/protoc-29.1-linux-x86_64.zip -o protoc.zip + unzip protoc.zip + export PROTOC=$(pwd)/bin/protoc fi - name: Upload wheels uses: actions/upload-artifact@v4 diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index a213f660..3b0eb6e8 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -62,10 +62,37 @@ actions: - trunk-check-pre-push - trunk-fmt-pre-commit - trunk-upgrade-available +downloads: + - name: protoc + downloads: + - os: + linux: linux + macos: osx + cpu: + x86_64: x86_64 + arm_64: aarch_64 + url: https://github.com/protocolbuffers/protobuf/releases/download/v${version}/protoc-${version}-${os}-${cpu}.zip + - os: + windows: windows + cpu: + x86_64: x86_64 + url: https://github.com/protocolbuffers/protobuf/releases/download/v29.1/protoc-29.1-win64.zip tools: + definitions: + - name: protoc + download: protoc + known_good_version: 29.1 + shims: [protoc] + environment: + - name: PATH + list: ["${tool}/bin"] + health_checks: + - command: protoc --version + parse_regex: libprotoc (\d+\.\d+) runtimes: - ruby - node enabled: - gh@2.62.0 - pnpm@9.14.2 + - protoc@29.1 diff --git a/Cargo.lock b/Cargo.lock index 2225f380..eb02cf4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 4 +version = 3 [[package]] name = "addr2line" @@ -101,9 +101,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" [[package]] name = "api" @@ -177,9 +177,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb8f1d480b0ea3783ab015936d2a55c87e219676f0c0b7dec61494043f21857" +checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" dependencies = [ "futures-core", "futures-io", @@ -338,7 +338,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -355,17 +355,17 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49c41b948da08fb481a94546cd874843adc1142278b0af4badf9b1b78599d68d" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core", "axum-macros", "bytes", "futures-util", - "http", - "http-body", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", "hyper", "hyper-util", @@ -380,7 +380,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tokio", "tower", "tower-layer", @@ -397,13 +397,13 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http", - "http-body", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", "tracing", @@ -417,7 +417,7 @@ checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -435,12 +435,35 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bazel-bep" +version = "0.2.2" +source = "git+https://github.com/TylerJang27/bazel-bep.git?rev=e51c546960067b9fe98ae35ae00bc53302973a9e#e51c546960067b9fe98ae35ae00bc53302973a9e" +dependencies = [ + "pbjson", + "pbjson-build", + "pbjson-types", + "prost 0.13.4", + "prost-build 0.13.4", + "prost-types 0.13.4", + "serde", + "serde_json", + "tonic", + "tonic-build", +] + [[package]] name = "bindgen" version = "0.69.5" @@ -458,7 +481,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -554,9 +577,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "camino" @@ -569,9 +592,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -592,9 +615,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" dependencies = [ "jobserver", "libc", @@ -649,9 +672,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -659,9 +682,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", @@ -678,14 +701,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "clap_lex" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cli-tests" @@ -694,6 +717,7 @@ dependencies = [ "api", "assert_cmd", "assert_matches", + "bazel-bep", "bundle", "chrono", "codeowners", @@ -809,6 +833,7 @@ name = "context" version = "0.1.0" dependencies = [ "anyhow", + "bazel-bep", "chrono", "gix", "js-sys", @@ -880,6 +905,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -913,12 +948,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -966,7 +1001,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1020,12 +1055,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1059,9 +1094,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ "event-listener 5.3.1", "pin-project-lite", @@ -1133,6 +1168,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flate2" version = "1.0.35" @@ -1251,7 +1292,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1358,39 +1399,39 @@ dependencies = [ [[package]] name = "gix-actor" -version = "0.33.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59226ef06661c756e664b46b1d3b2c198f6adc5407a484c086d0171108a70027" +checksum = "32b24171f514cef7bb4dfb72a0b06dacf609b33ba8ad2489d4c4559a03b7afb3" dependencies = [ "bstr", "gix-date", "gix-utils", "itoa", - "thiserror 1.0.69", + "thiserror 2.0.4", "winnow", ] [[package]] name = "gix-chunk" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28b58ba04f0c004722344390af9dbc85888fbb84be1981afb934da4114d4cf" +checksum = "c6ffbeb3a5c0b8b84c3fe4133a6f8c82fa962f4caefe8d0762eced025d3eb4f7" dependencies = [ - "thiserror 1.0.69", + "thiserror 2.0.4", ] [[package]] name = "gix-commitgraph" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41db900b189e62dc61575f06fdf1a3b6901d264a99be9d32b286af6b2e3984e1" +checksum = "a8da6591a7868fb2b6dabddea6b09988b0b05e0213f938dbaa11a03dd7a48d85" dependencies = [ "bstr", "gix-chunk", "gix-features", "gix-hash", "memmap2", - "thiserror 1.0.69", + "thiserror 2.0.4", ] [[package]] @@ -1416,27 +1457,27 @@ dependencies = [ [[package]] name = "gix-config-value" -version = "0.14.9" +version = "0.14.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3de3fdca9c75fa4b83a76583d265fa49b1de6b088ebcd210749c24ceeb74660" +checksum = "49aaeef5d98390a3bcf9dbc6440b520b793d1bf3ed99317dc407b02be995b28e" dependencies = [ "bitflags 2.6.0", "bstr", "gix-path", "libc", - "thiserror 1.0.69", + "thiserror 2.0.4", ] [[package]] name = "gix-date" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d10d543ac13c97292a15e8e8b7889cd006faf739777437ed95362504b8fe81a0" +checksum = "691142b1a34d18e8ed6e6114bc1a2736516c5ad60ef3aa9bd1b694886e3ca92d" dependencies = [ "bstr", "itoa", "jiff", - "thiserror 1.0.69", + "thiserror 2.0.4", ] [[package]] @@ -1469,9 +1510,9 @@ dependencies = [ [[package]] name = "gix-features" -version = "0.39.0" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e0eb9efdf96c35c0bed7596d1bef2d4ce6360a1d09738001f9d3e402aa7ba3e" +checksum = "7d85d673f2e022a340dba4713bed77ef2cf4cd737d2f3e0f159d45e0935fd81f" dependencies = [ "crc32fast", "flate2", @@ -1482,7 +1523,7 @@ dependencies = [ "once_cell", "prodash", "sha1_smol", - "thiserror 1.0.69", + "thiserror 2.0.4", "walkdir", ] @@ -1499,9 +1540,9 @@ dependencies = [ [[package]] name = "gix-glob" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "254b5101cf7facc00d9b5ff564cf46302ca76695cca23d33bc958a707b6fc857" +checksum = "aaf69a6bec0a3581567484bf99a4003afcaf6c469fd4214352517ea355cf3435" dependencies = [ "bitflags 2.6.0", "bstr", @@ -1511,12 +1552,12 @@ dependencies = [ [[package]] name = "gix-hash" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "952c3a29f1bc1007cc901abce7479943abfa42016db089de33d0a4fa3c85bfe8" +checksum = "0b5eccc17194ed0e67d49285e4853307e4147e95407f91c1c3e4a13ba9f4e4ce" dependencies = [ "faster-hex", - "thiserror 1.0.69", + "thiserror 2.0.4", ] [[package]] @@ -1532,13 +1573,13 @@ dependencies = [ [[package]] name = "gix-lock" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5102acdf4acae2644e38dbbd18cdfba9597a218f7d85f810fe5430207e03c2de" +checksum = "1cd3ab68a452db63d9f3ebdacb10f30dba1fa0d31ac64f4203d395ed1102d940" dependencies = [ "gix-tempfile", "gix-utils", - "thiserror 1.0.69", + "thiserror 2.0.4", ] [[package]] @@ -1602,26 +1643,26 @@ dependencies = [ [[package]] name = "gix-path" -version = "0.10.12" +version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c04e5a94fdb56b1e91eb7df2658ad16832428b8eeda24ff1a0f0288de2bce554" +checksum = "afc292ef1a51e340aeb0e720800338c805975724c1dfbd243185452efd8645b7" dependencies = [ "bstr", "gix-trace", "home", "once_cell", - "thiserror 1.0.69", + "thiserror 2.0.4", ] [[package]] name = "gix-quote" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f89f9a1525dcfd9639e282ea939f5ab0d09d93cf2b90c1fc6104f1b9582a8e49" +checksum = "64a1e282216ec2ab2816cd57e6ed88f8009e634aec47562883c05ac8a7009a63" dependencies = [ "bstr", "gix-utils", - "thiserror 1.0.69", + "thiserror 2.0.4", ] [[package]] @@ -1691,9 +1732,9 @@ dependencies = [ [[package]] name = "gix-sec" -version = "0.10.9" +version = "0.10.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2007538eda296445c07949cf04f4a767307d887184d6b3e83e2d636533ddc6e" +checksum = "a8b876ef997a955397809a2ec398d6a45b7a55b4918f2446344330f778d14fd6" dependencies = [ "bitflags 2.6.0", "gix-path", @@ -1739,14 +1780,14 @@ dependencies = [ [[package]] name = "gix-url" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e7c297c3265015c133a2c02199610b6e1373a09dc4be057d0c1b5285737f06" +checksum = "e09f97db3618fb8e473d7d97e77296b50aaee0ddcd6a867f07443e3e87391099" dependencies = [ "bstr", "gix-features", "gix-path", - "thiserror 1.0.69", + "thiserror 2.0.4", "url", ] @@ -1762,12 +1803,12 @@ dependencies = [ [[package]] name = "gix-validate" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e187b263461bc36cea17650141567753bc6207d036cedd1de6e81a52f277ff68" +checksum = "cd520d09f9f585b34b32aba1d0b36ada89ab7fefb54a8ca3fe37fc482a750937" dependencies = [ "bstr", - "thiserror 1.0.69", + "thiserror 2.0.4", ] [[package]] @@ -1809,9 +1850,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -1819,12 +1860,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "hermit-abi" version = "0.4.0" @@ -1859,15 +1894,37 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.1" @@ -1875,7 +1932,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.2.0", ] [[package]] @@ -1886,8 +1943,8 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http", - "http-body", + "http 1.2.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -1911,15 +1968,15 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" dependencies = [ "bytes", "futures-channel", "futures-util", - "http", - "http-body", + "http 1.2.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -1936,7 +1993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", - "http", + "http 1.2.0", "hyper", "hyper-util", "rustls", @@ -1972,8 +2029,8 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http", - "http-body", + "http 1.2.0", + "http-body 1.0.1", "hyper", "pin-project-lite", "socket2", @@ -2120,7 +2177,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2146,12 +2203,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.15.1", + "hashbrown 0.15.2", ] [[package]] @@ -2198,15 +2255,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jiff" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d9d414fc817d3e3d62b2598616733f76c4cc74fbac96069674739b881295c8" +checksum = "db69f08d4fb10524cacdb074c10b296299d71274ddbc830a8ee65666867002e9" dependencies = [ "jiff-tzdb-platform", "windows-sys 0.59.0", @@ -2238,10 +2295,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -2255,7 +2313,7 @@ dependencies = [ "fake", "humantime", "quick-junit", - "quick-xml 0.37.0", + "quick-xml 0.37.1", "rand", ] @@ -2282,9 +2340,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.162" +version = "0.2.167" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" [[package]] name = "libgit2-sys" @@ -2302,9 +2360,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -2355,9 +2413,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "litemap" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -2398,7 +2456,7 @@ checksum = "5968c820e2960565f647819f5928a42d6e874551cab9d88d75e3e0660d7f71e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2470,11 +2528,10 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", "wasi", "windows-sys 0.52.0", @@ -2486,6 +2543,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fafa6961cabd9c63bcd77a45d7e3b7f3b552b70417831fb0f56db717e72407e" +[[package]] +name = "multimap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" + [[package]] name = "native-tls" version = "0.2.12" @@ -2498,7 +2561,7 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "tempfile", ] @@ -2647,7 +2710,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2680,9 +2743,9 @@ dependencies = [ [[package]] name = "os_info" -version = "3.8.2" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" +checksum = "e5ca711d8b83edbb00b44d504503cd247c9c0bd8b0fa2694f2a1a3d8165379ce" dependencies = [ "log", "serde", @@ -2727,12 +2790,59 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "pbjson" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e6349fa080353f4a597daffd05cb81572a9c031a6d4fff7e504947496fcc68" +dependencies = [ + "base64 0.21.7", + "serde", +] + +[[package]] +name = "pbjson-build" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eea3058763d6e656105d1403cb04e0a41b7bbac6362d413e7c33be0c32279c9" +dependencies = [ + "heck", + "itertools 0.13.0", + "prost 0.13.4", + "prost-types 0.13.4", +] + +[[package]] +name = "pbjson-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e54e5e7bfb1652f95bc361d76f3c780d8e526b134b85417e774166ee941f0887" +dependencies = [ + "bytes", + "chrono", + "pbjson", + "pbjson-build", + "prost 0.13.4", + "prost-build 0.13.4", + "serde", +] + [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap", +] + [[package]] name = "pin-project" version = "1.1.7" @@ -2750,7 +2860,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2790,7 +2900,7 @@ checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.4.0", + "hermit-abi", "pin-project-lite", "rustix", "tracing", @@ -2799,15 +2909,15 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "portable-atomic-util" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90a7d5beecc52a491b54d6dd05c7a45ba1801666a5baad9fdbfc6fef8d2d206c" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" dependencies = [ "portable-atomic", ] @@ -2869,11 +2979,21 @@ dependencies = [ "output_vt100", ] +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn 2.0.90", +] + [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -2888,6 +3008,111 @@ dependencies = [ "parking_lot", ] +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive 0.12.6", +] + +[[package]] +name = "prost" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" +dependencies = [ + "bytes", + "prost-derive 0.13.4", +] + +[[package]] +name = "prost-build" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" +dependencies = [ + "bytes", + "heck", + "itertools 0.12.1", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost 0.12.6", + "prost-types 0.12.6", + "regex", + "syn 2.0.90", + "tempfile", +] + +[[package]] +name = "prost-build" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f3e5beed80eb580c68e2c600937ac2c4eedabdfd5ef1e5b7ea4f3fba84497b" +dependencies = [ + "heck", + "itertools 0.13.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost 0.13.4", + "prost-types 0.13.4", + "regex", + "syn 2.0.90", + "tempfile", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "prost-derive" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost 0.12.6", +] + +[[package]] +name = "prost-types" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc" +dependencies = [ + "prost 0.13.4", +] + [[package]] name = "pyo3" version = "0.22.6" @@ -2935,7 +3160,7 @@ dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2948,7 +3173,7 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2978,21 +3203,21 @@ checksum = "295a22fe8963404c42f3d62c78099dde32ec508a3e756b0dc86a1e7fa604eb34" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "quick-junit" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ffd2f9a162cfae131bed6d9d1ed60adced33be340a94f96952897d7cb0c240" +checksum = "3ed1a693391a16317257103ad06a88c6529ac640846021da7c435a06fffdacd7" dependencies = [ "chrono", "indexmap", "newtype-uuid", - "quick-xml 0.36.2", + "quick-xml 0.37.1", "strip-ansi-escapes", - "thiserror 1.0.69", + "thiserror 2.0.4", "uuid", ] @@ -3007,9 +3232,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.37.0" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbfb3ddf5364c9cfcd65549a1e7b801d0e8d1b14c1a1590a6408aa93cfbfa84" +checksum = "f22f29bdff3987b4d8632ef95fd6424ec7e4e0a57e2f4fc63e489e75357f6a03" dependencies = [ "memchr", ] @@ -3024,10 +3249,10 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "rustls", "socket2", - "thiserror 2.0.3", + "thiserror 2.0.4", "tokio", "tracing", ] @@ -3042,11 +3267,11 @@ dependencies = [ "getrandom", "rand", "ring", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.3", + "thiserror 2.0.4", "tinyvec", "tracing", "web-time", @@ -3132,7 +3357,7 @@ dependencies = [ "quote", "regex", "shell-words", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3194,13 +3419,13 @@ version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-core", "futures-util", - "http", - "http-body", + "http 1.2.0", + "http-body 1.0.1", "http-body-util", "hyper", "hyper-rustls", @@ -3222,7 +3447,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tokio", "tokio-native-tls", "tokio-rustls", @@ -3265,9 +3490,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustc_version" @@ -3280,9 +3505,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.40" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags 2.6.0", "errno", @@ -3293,9 +3518,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.16" +version = "0.23.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" +checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" dependencies = [ "once_cell", "ring", @@ -3307,15 +3532,14 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.0.1", ] [[package]] @@ -3370,9 +3594,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] @@ -3390,7 +3614,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1415a607e92bec364ea2cf9264646dcce0f91e6d65281bd6f2819cca3bf39c8" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", "core-foundation-sys", "libc", "security-framework-sys", @@ -3546,7 +3783,7 @@ checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3557,7 +3794,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3647,9 +3884,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3711,7 +3948,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3733,9 +3970,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -3750,9 +3987,9 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -3765,7 +4002,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3853,11 +4090,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +checksum = "2f49a1853cf82743e3b7950f77e0f4d622ca36cf4317cba00c767838bac8d490" dependencies = [ - "thiserror-impl 2.0.3", + "thiserror-impl 2.0.4", ] [[package]] @@ -3868,25 +4105,25 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "thiserror-impl" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +checksum = "8381894bb3efe0c4acac3ded651301ceee58a15d47c2e34885ed1908ad667061" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -3907,9 +4144,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -3942,9 +4179,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.1" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", @@ -3964,7 +4201,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3990,20 +4227,30 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -4046,6 +4293,40 @@ dependencies = [ "winnow", ] +[[package]] +name = "tonic" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +dependencies = [ + "async-trait", + "base64 0.21.7", + "bytes", + "http 0.2.12", + "http-body 0.4.6", + "percent-encoding", + "pin-project", + "prost 0.12.6", + "tokio", + "tokio-stream", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tonic-build" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889" +dependencies = [ + "prettyplease", + "proc-macro2", + "prost-build 0.12.6", + "quote", + "syn 2.0.90", +] + [[package]] name = "tower" version = "0.5.1" @@ -4076,20 +4357,32 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -4097,9 +4390,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "tracing-core", ] @@ -4122,7 +4415,7 @@ dependencies = [ "env_logger", "exitcode", "glob", - "http", + "http 1.2.0", "lazy_static", "log", "openssl", @@ -4166,7 +4459,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -4186,9 +4479,9 @@ checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" @@ -4225,11 +4518,11 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.10.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" dependencies = [ - "base64", + "base64 0.22.1", "log", "native-tls", "once_cell", @@ -4238,9 +4531,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -4366,9 +4659,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" dependencies = [ "cfg-if", "once_cell", @@ -4377,36 +4670,37 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "9dfaf8f50e5f293737ee323940c7d8b08a66a95a419223d9f41610ca08b0833d" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4414,22 +4708,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" [[package]] name = "wasm-streams" @@ -4446,9 +4740,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c" dependencies = [ "js-sys", "wasm-bindgen", @@ -4731,7 +5025,7 @@ dependencies = [ "anyhow", "chrono", "context", - "ctor 0.2.8", + "ctor 0.2.9", "flate2", "indexmap", "lazy_static", @@ -4746,9 +5040,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ "serde", "stable_deref_trait", @@ -4758,13 +5052,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure", ] @@ -4786,27 +5080,27 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "zerofrom" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure", ] @@ -4835,7 +5129,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] diff --git a/cli-tests/Cargo.toml b/cli-tests/Cargo.toml index 1ea62443..5725e369 100644 --- a/cli-tests/Cargo.toml +++ b/cli-tests/Cargo.toml @@ -7,6 +7,8 @@ edition = "2021" api = { path = "../api" } assert_cmd = "2.0.16" assert_matches = "1.5.0" +# Fork from 0.2.2 that adds serde serialize/deserialize via pbjson +bazel-bep = { git = "https://github.com/TylerJang27/bazel-bep.git", rev = "e51c546960067b9fe98ae35ae00bc53302973a9e" } bundle = { path = "../bundle" } chrono = "0.4.33" codeowners = { path = "../codeowners" } diff --git a/cli-tests/src/upload.rs b/cli-tests/src/upload.rs index 0a24c8bc..52dfb73c 100644 --- a/cli-tests/src/upload.rs +++ b/cli-tests/src/upload.rs @@ -1,7 +1,8 @@ use std::{fs, io::BufReader}; use crate::utils::{ - generate_mock_codeowners, generate_mock_git_repo, generate_mock_valid_junit_xmls, CARGO_RUN, + generate_mock_bazel_bep, generate_mock_codeowners, generate_mock_git_repo, + generate_mock_valid_junit_xmls, CARGO_RUN, }; use api::{ BundleUploadStatus, CreateRepoRequest, GetQuarantineBulkTestStatusRequest, @@ -11,7 +12,7 @@ use assert_cmd::Command; use assert_matches::assert_matches; use bundle::{BundleMeta, FileSetType}; use codeowners::CodeOwners; -use context::repo::RepoUrlParts as Repo; +use context::{junit::parser::JunitParser, repo::RepoUrlParts as Repo}; use predicates::prelude::*; use tempfile::tempdir; use test_utils::mock_server::{MockServerBuilder, RequestPayload}; @@ -187,6 +188,50 @@ async fn upload_bundle() { println!("{assert}"); } +#[tokio::test(flavor = "multi_thread")] +async fn upload_bundle_using_bep() { + let temp_dir = tempdir().unwrap(); + generate_mock_git_repo(&temp_dir); + generate_mock_bazel_bep(&temp_dir); + + let state = MockServerBuilder::new().spawn_mock_server().await; + + let args = &[ + "upload", + "--bazel-bep-path", + "./bep.json", + "--org-url-slug", + "test-org", + "--token", + "test-token", + ]; + + let assert = Command::new(CARGO_RUN.path()) + .current_dir(&temp_dir) + .env("TRUNK_PUBLIC_API_ADDRESS", &state.host) + .env("CI", "1") + .env("GITHUB_JOB", "test-job") + .args(args) + .assert() + .failure(); + + let requests = state.requests.lock().unwrap().clone(); + assert_eq!(requests.len(), 5); + + let tar_extract_directory = assert_matches!(&requests[3], RequestPayload::S3Upload(d) => d); + + let file = fs::File::open(tar_extract_directory.join("junit/0")).unwrap(); + let reader = BufReader::new(file); + + // Uploaded file is a junit, even when using BEP + let mut junit_parser = JunitParser::new(); + assert!(junit_parser.parse(reader).is_ok()); + assert!(junit_parser.errors().is_empty()); + + // HINT: View CLI output with `cargo test -- --nocapture` + println!("{assert}"); +} + #[tokio::test(flavor = "multi_thread")] async fn upload_bundle_empty_junit_paths() { let temp_dir = tempdir().unwrap(); diff --git a/cli-tests/src/utils.rs b/cli-tests/src/utils.rs index 781fa437..94b070af 100644 --- a/cli-tests/src/utils.rs +++ b/cli-tests/src/utils.rs @@ -1,3 +1,6 @@ +use bazel_bep::types::build_event_stream::{ + build_event::Payload, file::File::Uri, BuildEvent, File, TestResult, +}; use chrono::{TimeDelta, Utc}; use escargot::{CargoBuild, CargoRun}; use junit_mock::JunitMock; @@ -26,7 +29,7 @@ pub fn generate_mock_git_repo>(directory: T) { setup_repo_with_commit(directory).unwrap(); } -pub fn generate_mock_valid_junit_xmls>(directory: T) { +pub fn generate_mock_valid_junit_xmls>(directory: T) -> Vec { let mut jm_options = junit_mock::Options::default(); jm_options.global.timestamp = Utc::now() .fixed_offset() @@ -34,7 +37,35 @@ pub fn generate_mock_valid_junit_xmls>(directory: T) { let mut jm = JunitMock::new(junit_mock::Options::default()); let reports = jm.generate_reports(); jm.write_reports_to_file(directory.as_ref(), reports) - .unwrap(); + .unwrap() +} + +pub fn generate_mock_bazel_bep>(directory: T) { + let mock_junits = generate_mock_valid_junit_xmls(&directory); + + let build_events: Vec = mock_junits + .iter() + .map(|junit| { + let mut build_event = BuildEvent::default(); + let mut payload = TestResult::default(); + payload.test_action_output = vec![File { + name: junit.file_name().unwrap().to_str().unwrap().to_string(), + file: Some(Uri(junit.to_string_lossy().to_string())), + ..Default::default() + }]; + build_event.payload = Some(Payload::TestResult(payload)); + build_event + }) + .collect(); + + // bep JSON is a list of new-line separated JSON objects + let outputs_contents = build_events + .iter() + .map(|be| serde_json::to_string(be).unwrap()) + .collect::>() + .join("\n"); + let mut file = fs::File::create(&directory.as_ref().join("bep.json")).unwrap(); + file.write_all(outputs_contents.as_bytes()).unwrap(); } pub fn generate_mock_invalid_junit_xmls>(directory: T) { diff --git a/cli-tests/src/validate.rs b/cli-tests/src/validate.rs index c9bc97b5..40100fa8 100644 --- a/cli-tests/src/validate.rs +++ b/cli-tests/src/validate.rs @@ -26,6 +26,20 @@ fn validate_success() { println!("{assert}"); } +#[test] +fn validate_junit_and_bep() { + let temp_dir = tempdir().unwrap(); + + let assert = Command::new(CARGO_RUN.path()) + .current_dir(&temp_dir) + .args(&["validate", "--junit-paths", "./*", "--bazel-bep-path", "bep.json"]) + .assert() + .failure() + .stderr(predicate::str::contains("the argument '--junit-paths ' cannot be used with '--bazel-bep-path '")); + + println!("{assert}"); +} + #[test] fn validate_no_junits() { let temp_dir = tempdir().unwrap(); diff --git a/cli/src/main.rs b/cli/src/main.rs index 83858894..543362ff 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -5,10 +5,10 @@ use bundle::RunResult; use clap::{Args, Parser, Subcommand}; use codeowners::CodeOwners; use constants::{EXIT_FAILURE, SENTRY_DSN}; -use context::repo::BundleRepo; +use context::{bazel_bep::parser::BazelBepParser, repo::BundleRepo}; use trunk_analytics_cli::{ api_client::ApiClient, - runner::{run_quarantine, run_test_command}, + runner::{run_quarantine, run_test_command, JunitSpec}, upload::{run_upload, UploadArgs}, validate::validate, }; @@ -42,12 +42,19 @@ struct TestArgs { struct ValidateArgs { #[arg( long, - required = true, + required_unless_present = "bazel_bep_path", + conflicts_with = "bazel_bep_path", value_delimiter = ',', value_parser = clap::builder::NonEmptyStringValueParser::new(), help = "Comma-separated list of glob paths to junit files." )] junit_paths: Vec, + #[arg( + long, + required_unless_present = "junit_paths", + help = "Path to bazel build event protocol JSON file." + )] + bazel_bep_path: Option, #[arg(long, help = "Show warning-level log messages in output.")] show_warnings: bool, #[arg(long, help = "Value to override CODEOWNERS file or directory path.")] @@ -106,6 +113,7 @@ async fn run_test(test_args: TestArgs) -> anyhow::Result { } = test_args; let UploadArgs { junit_paths, + bazel_bep_path, org_url_slug, token, repo_root, @@ -127,13 +135,18 @@ async fn run_test(test_args: TestArgs) -> anyhow::Result { repo_head_commit_epoch.clone(), )?; - if junit_paths.is_empty() { + if junit_paths.is_empty() && bazel_bep_path.is_none() { return Err(anyhow::anyhow!("No junit paths provided.")); } let api_client = ApiClient::new(String::from(token))?; let codeowners = CodeOwners::find_file(&repo.repo_root, codeowners_path); + let junit_spec = if !junit_paths.is_empty() { + JunitSpec::Paths(junit_paths.clone()) + } else { + JunitSpec::BazelBep(bazel_bep_path.as_deref().unwrap_or_default().to_string()) + }; log::info!("running command: {:?}", command); let run_result = run_test_command( @@ -141,7 +154,7 @@ async fn run_test(test_args: TestArgs) -> anyhow::Result { &org_url_slug, command.first().unwrap(), command.iter().skip(1).collect(), - junit_paths, + junit_spec, team.clone(), &codeowners, ) @@ -206,11 +219,23 @@ async fn run(cli: Cli) -> anyhow::Result { Commands::Validate(validate_args) => { let ValidateArgs { junit_paths, + bazel_bep_path, show_warnings, codeowners_path, } = validate_args; + + let junit_file_paths = match bazel_bep_path { + Some(bazel_bep_path) => { + let mut parser = BazelBepParser::new(bazel_bep_path); + parser.parse()?; + parser.print_parsed_results(); + parser.uncached_xml_files() + } + None => junit_paths, + }; + print_cli_start_info(); - validate(junit_paths, show_warnings, codeowners_path).await + validate(junit_file_paths, show_warnings, codeowners_path).await } } } diff --git a/cli/src/runner.rs b/cli/src/runner.rs index 74fb5c37..069f2d7a 100644 --- a/cli/src/runner.rs +++ b/cli/src/runner.rs @@ -8,24 +8,45 @@ use bundle::{ }; use codeowners::CodeOwners; use constants::{EXIT_FAILURE, EXIT_SUCCESS}; -use context::{junit::parser::JunitParser, repo::BundleRepo}; +use context::{bazel_bep::parser::BazelBepParser, junit::parser::JunitParser, repo::BundleRepo}; use crate::api_client::ApiClient; +pub enum JunitSpec { + Paths(Vec), + BazelBep(String), +} + pub async fn run_test_command( repo: &BundleRepo, org_slug: &str, command: &String, args: Vec<&String>, - output_paths: &[String], + junit_spec: JunitSpec, team: Option, codeowners: &Option, ) -> anyhow::Result { let start = SystemTime::now(); let exit_code = run_test_and_get_exit_code(command, args).await?; log::info!("Command exit code: {}", exit_code); - let (file_sets, ..) = - build_filesets(&repo.repo_root, output_paths, team, codeowners, Some(start))?; + + let output_paths = match junit_spec { + JunitSpec::Paths(paths) => paths, + JunitSpec::BazelBep(bep_path) => { + let mut parser = BazelBepParser::new(bep_path.clone()); + parser.parse()?; + parser.print_parsed_results(); + parser.uncached_xml_files() + } + }; + + let (file_sets, ..) = build_filesets( + &repo.repo_root, + &output_paths, + team, + codeowners, + Some(start), + )?; let failures = if exit_code != EXIT_SUCCESS { extract_failed_tests(repo, org_slug, &file_sets).await } else { diff --git a/cli/src/upload.rs b/cli/src/upload.rs index 0a3e5dbe..70909251 100644 --- a/cli/src/upload.rs +++ b/cli/src/upload.rs @@ -18,7 +18,7 @@ use codeowners::CodeOwners; use constants::{EXIT_FAILURE, EXIT_SUCCESS}; #[cfg(target_os = "macos")] use context::repo::RepoUrlParts; -use context::{junit::parser::JunitParser, repo::BundleRepo}; +use context::{bazel_bep::parser::BazelBepParser, junit::parser::JunitParser, repo::BundleRepo}; use crate::{ api_client::ApiClient, @@ -30,14 +30,25 @@ use crate::{ pub struct UploadArgs { #[arg( long, - required_unless_present = junit_require(), + required_unless_present_any = [junit_require(), "bazel_bep_path"], + conflicts_with = "bazel_bep_path", value_delimiter = ',', value_parser = clap::builder::NonEmptyStringValueParser::new(), help = "Comma-separated list of glob paths to junit files." )] pub junit_paths: Vec, + #[arg( + long, + required_unless_present_any = [junit_require(), "junit_paths"], + help = "Path to bazel build event protocol JSON file." + )] + pub bazel_bep_path: Option, #[cfg(target_os = "macos")] - #[arg(long, required = false, help = "Path of xcresult directory")] + #[arg(long, + required_unless_present_any = ["junit_paths", "bazel_bep_path"], + conflicts_with_all = ["junit_paths", "bazel_bep_path"], + required = false, help = "Path of xcresult directory" + )] pub xcresult_path: Option, #[arg(long, help = "Organization url slug.")] pub org_url_slug: String, @@ -103,12 +114,10 @@ pub async fn run_upload( exec_start: Option, ) -> anyhow::Result { let UploadArgs { - #[cfg(target_os = "macos")] mut junit_paths, - #[cfg(target_os = "linux")] - junit_paths, #[cfg(target_os = "macos")] xcresult_path, + bazel_bep_path, org_url_slug, token, repo_root, @@ -142,6 +151,13 @@ pub async fn run_upload( let codeowners = codeowners.or_else(|| CodeOwners::find_file(&repo.repo_root, &codeowners_path)); + if let Some(bazel_bep_path) = bazel_bep_path { + let mut parser = BazelBepParser::new(bazel_bep_path); + parser.parse()?; + parser.print_parsed_results(); + junit_paths = parser.uncached_xml_files(); + } + let tags = parse_custom_tags(&tags)?; #[cfg(target_os = "macos")] let junit_temp_dir = tempfile::tempdir()?; diff --git a/context/Cargo.toml b/context/Cargo.toml index 2ff212f1..fbbe99d2 100644 --- a/context/Cargo.toml +++ b/context/Cargo.toml @@ -11,6 +11,8 @@ tempfile = "3.2.0" [dependencies] anyhow = "1.0.44" +# Fork from 0.2.2 that adds serde serialize/deserialize via pbjson +bazel-bep = { git = "https://github.com/TylerJang27/bazel-bep.git", rev = "e51c546960067b9fe98ae35ae00bc53302973a9e" } chrono = "0.4.33" gix = { version = "0.67.0", default-features = false, features = [ ], optional = true } diff --git a/context/src/bazel_bep/mod.rs b/context/src/bazel_bep/mod.rs new file mode 100644 index 00000000..67c567fa --- /dev/null +++ b/context/src/bazel_bep/mod.rs @@ -0,0 +1 @@ +pub mod parser; diff --git a/context/src/bazel_bep/parser.rs b/context/src/bazel_bep/parser.rs new file mode 100644 index 00000000..9fa19f30 --- /dev/null +++ b/context/src/bazel_bep/parser.rs @@ -0,0 +1,186 @@ +use anyhow::Ok; +use bazel_bep::types::build_event_stream::{build_event::Payload, file::File::Uri, BuildEvent}; +use serde_json::Deserializer; + +#[derive(Debug, Clone, Default)] +pub struct TestResult { + pub cached: bool, + pub xml_files: Vec, +} + +const FILE_URI_PREFIX: &str = "file://"; + +/// Uses proto spec +/// https://github.com/TylerJang27/bazel-bep/blob/master/proto/build_event_stream.proto based on +/// https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto +#[derive(Debug, Clone, Default)] +pub struct BazelBepParser { + bazel_bep_path: String, + test_results: Vec, + errors: Vec, +} + +impl BazelBepParser { + pub fn new(bazel_bep_path: String) -> Self { + Self { + bazel_bep_path, + ..Default::default() + } + } + + pub fn errors(&self) -> &Vec { + &self.errors + } + + pub fn uncached_xml_files(&self) -> Vec { + self.test_results + .iter() + .filter_map(|r| { + if r.cached { + return None; + } + Some(r.xml_files.clone()) + }) + .flatten() + .collect() + } + + pub fn print_parsed_results(&self) { + if !self.errors.is_empty() { + log::warn!("Errors parsing BEP file: {:?}", &self.errors); + } + + let (test_count, cached_count) = self.test_results.iter().fold( + (0, 0), + |(mut test_count, mut cached_count), test_result| { + test_count += test_result.xml_files.len(); + if test_result.cached { + cached_count += test_result.xml_files.len(); + } + (test_count, cached_count) + }, + ); + log::info!( + "Parsed {} ({} cached) test results from BEP file", + test_count, + cached_count + ); + } + + pub fn parse(&mut self) -> anyhow::Result<()> { + let file = std::fs::File::open(&self.bazel_bep_path)?; + let reader = std::io::BufReader::new(file); + + let (errors, test_results) = Deserializer::from_reader(reader) + .into_iter::() + .fold( + (Vec::::new(), Vec::::new()), + |(mut errors, mut test_results), parse_event| { + match parse_event { + Result::Err(ref err) => { + errors.push(format!("Error parsing build event: {}", err)); + } + Result::Ok(build_event) => { + if let Some(Payload::TestResult(test_result)) = build_event.payload { + let xml_files = test_result + .test_action_output + .into_iter() + .filter_map(|action_output| { + if action_output.name.ends_with(".xml") { + action_output.file.and_then(|f| { + if let Uri(uri) = f { + Some( + uri.strip_prefix(FILE_URI_PREFIX) + .unwrap_or(&uri) + .to_string(), + ) + } else { + None + } + }) + } else { + None + } + }) + .collect(); + + let cached = + if let Some(execution_info) = test_result.execution_info { + execution_info.cached_remotely || test_result.cached_locally + } else { + test_result.cached_locally + }; + + test_results.push(TestResult { cached, xml_files }); + } + } + } + + (errors, test_results) + }, + ); + + self.errors = errors; + self.test_results = test_results; + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::path::PathBuf; + + const SIMPLE_EXAMPLE: &str = "test_fixtures/bep_example"; + const EMPTY_EXAMPLE: &str = "test_fixtures/bep_empty"; + const PARTIAL_EXAMPLE: &str = "test_fixtures/bep_partially_valid"; + + fn get_test_file(file: &str) -> String { + PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()) + .join(file) + .to_str() + .unwrap() + .to_string() + } + + #[test] + fn test_parse_simple_bep() { + let input_file = get_test_file(SIMPLE_EXAMPLE); + let mut parser = BazelBepParser::new(input_file); + parser.parse().unwrap(); + + let empty_vec: Vec = Vec::new(); + assert_eq!( + parser.uncached_xml_files(), + vec!["/tmp/hello_test/test.xml"] + ); + assert_eq!(*parser.errors(), empty_vec); + } + + #[test] + fn test_parse_empty_bep() { + let input_file = get_test_file(EMPTY_EXAMPLE); + let mut parser = BazelBepParser::new(input_file); + parser.parse().unwrap(); + + let empty_vec: Vec = Vec::new(); + assert_eq!(parser.uncached_xml_files(), empty_vec); + assert_eq!(*parser.errors(), empty_vec); + } + + #[test] + fn test_parse_partial_bep() { + let input_file = get_test_file(PARTIAL_EXAMPLE); + let mut parser = BazelBepParser::new(input_file); + parser.parse().unwrap(); + + assert_eq!( + parser.uncached_xml_files(), + vec!["/tmp/hello_test/test.xml", "/tmp/client_test/test.xml"] + ); + assert_eq!( + *parser.errors(), + vec!["Error parsing build event: EOF while parsing a value at line 108 column 0"] + ); + } +} diff --git a/context/src/lib.rs b/context/src/lib.rs index 3cb8622a..617ec6fe 100644 --- a/context/src/lib.rs +++ b/context/src/lib.rs @@ -2,6 +2,7 @@ /* trunk-ignore(clippy/E0554) */ #![feature(round_char_boundary)] +pub mod bazel_bep; pub mod env; pub mod junit; pub mod repo; diff --git a/context/test_fixtures/bep_empty b/context/test_fixtures/bep_empty new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/context/test_fixtures/bep_empty @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/context/test_fixtures/bep_example b/context/test_fixtures/bep_example new file mode 100644 index 00000000..c631a101 --- /dev/null +++ b/context/test_fixtures/bep_example @@ -0,0 +1 @@ +{"id":{"testResult":{"label":"//trunk/hello_world/cc:hello_test","run":1,"shard":1,"attempt":1,"configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"testResult":{"testActionOutput":[{"name":"test.log","uri":"file:///tmp/hello_test/test.log"},{"name":"test.xml","uri":"file:///tmp/hello_test/test.xml"}],"testAttemptDurationMillis":"153","status":"PASSED","testAttemptStartMillisEpoch":"1733171237474","executionInfo":{},"testAttemptStart":"2024-12-02T20:27:17.474Z","testAttemptDuration":"0.153s"}} diff --git a/context/test_fixtures/bep_partially_valid b/context/test_fixtures/bep_partially_valid new file mode 100644 index 00000000..282895ad --- /dev/null +++ b/context/test_fixtures/bep_partially_valid @@ -0,0 +1,107 @@ +{"id":{"started":{}},"children":[{"progress":{}},{"unstructuredCommandLine":{}},{"structuredCommandLine":{"commandLineLabel":"original"}},{"structuredCommandLine":{"commandLineLabel":"canonical"}},{"structuredCommandLine":{"commandLineLabel":"tool"}},{"buildMetadata":{}},{"optionsParsed":{}},{"workspaceStatus":{}},{"pattern":{"pattern":["trunk/hello_world/cc:hello_test","trunk/hello_world/cc_grpc:*"]}},{"buildFinished":{}}],"started":{"uuid":"eaf705a1-c460-42ee-9806-86d3162f0891","startTimeMillis":"1733431512924","buildToolVersion":"7.4.0","optionsDescription":"","command":"test","workingDirectory":"/repos/trunk","workspaceDirectory":"/repos/trunk","serverPid":"4030542","startTime":"2024-12-05T20:45:12.924Z"}} +{"id":{"buildMetadata":{}},"buildMetadata":{}} +{"id":{"unstructuredCommandLine":{}},"unstructuredCommandLine":{"args":["test"]}} +{"id":{"optionsParsed":{}},"optionsParsed":{"startupOptions":["--max_idle_secs\u003d10800","--noshutdown_on_low_sys_mem","--connect_timeout_secs\u003d30","--output_user_root\u003d/.cache/bazel","--output_base\u003d/tmp/.cache/bazel/deadbeef","--failure_detail_out\u003d/tmp/.cache/bazel/deadbeef/failure_detail.rawproto","--expand_configs_in_place","--idle_server_tasks","--write_command_log","--nowatchfs","--nofatal_event_bus_exceptions","--nowindows_enable_symlinks","--noclient_debug","--host_jvm_args\u003d-DBAZEL_TRACK_SOURCE_DIRECTORIES\u003d1"],"explicitStartupOptions":["--host_jvm_args\u003d-DBAZEL_TRACK_SOURCE_DIRECTORIES\u003d1"],"cmdLine":[""],"explicitCmdLine":["--build_event_json_file\u003dbep.json","--nobuild_event_json_file_path_conversion"],"invocationPolicy":{}}} +{"id":{"structuredCommandLine":{"commandLineLabel":"original"}},"structuredCommandLine":{"commandLineLabel":"original","sections":[{"sectionLabel":"executable","chunkList":{"chunk":["bazel"]}},{"sectionLabel":"startup options","optionList":{"option":[{}]}},{"sectionLabel":"command","chunkList":{"chunk":["test"]}},{"sectionLabel":"command options","optionList":{}},{"sectionLabel":"residual","chunkList":{"chunk":["trunk/hello_world/cc:hello_test","trunk/hello_world/cc_grpc:*"]}}]}} +{"id":{"structuredCommandLine":{"commandLineLabel":"canonical"}},"structuredCommandLine":{"commandLineLabel":"canonical","sections":[{"sectionLabel":"executable","chunkList":{"chunk":["bazel"]}},{"sectionLabel":"startup options","optionList":{}},{"sectionLabel":"residual","chunkList":{"chunk":["trunk/hello_world/cc:hello_test","trunk/hello_world/cc_grpc:*"]}}]}} +{"id":{"structuredCommandLine":{"commandLineLabel":"tool"}},"structuredCommandLine":{}} +{"id":{"pattern":{"pattern":["trunk/hello_world/cc:hello_test","trunk/hello_world/cc_grpc:*"]}},"children":[{"targetConfigured":{"label":"//trunk/hello_world/cc:hello_test"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:BUILD"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:cc_grpc"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client.cc"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client.hh"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client_test"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client_test.cc"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client_test.dwp"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client_test.stripped"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server.cc"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server.hh"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server_test"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server_test.cc"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server_test.dwp"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server_test.stripped"}},{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:testing"}}],"expanded":{}} +{"id":{"progress":{}},"children":[{"progress":{"opaqueCount":1}},{"workspace":{}}],"progress":{"stderr":""}} +{"id":{"workspace":{}},"workspaceInfo":{"localExecRoot":"/tmp/.cache/bazel/deadbeef/execroot/_main"}} +{"id":{"progress":{"opaqueCount":1}},"children":[{"progress":{"opaqueCount":2}},{"configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}],"progress":{}} +{"id":{"configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}},"configuration":{"mnemonic":"k8-fastbuild","platformName":"k8","cpu":"k8","makeVariable":{}}} +{"id":{"progress":{"opaqueCount":2}},"children":[{"progress":{"opaqueCount":3}},{"configuration":{"id":"none"}}],"progress":{"stderr":""}} +{"id":{"configuration":{"id":"none"}},"configuration":{}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client.cc"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client.cc","configuration":{"id":"none"}}}],"configured":{"targetKind":"source file"}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server_test.cc"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server_test.cc","configuration":{"id":"none"}}}],"configured":{"targetKind":"source file"}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client_test.cc"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client_test.cc","configuration":{"id":"none"}}}],"configured":{"targetKind":"source file"}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server.hh"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server.hh","configuration":{"id":"none"}}}],"configured":{"targetKind":"source file"}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server.cc"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server.cc","configuration":{"id":"none"}}}],"configured":{"targetKind":"source file"}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:BUILD"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:BUILD","configuration":{"id":"none"}}}],"configured":{"targetKind":"source file"}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client.hh"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client.hh","configuration":{"id":"none"}}}],"configured":{"targetKind":"source file"}} +{"id":{"workspaceStatus":{}},"workspaceStatus":{"item":[{"key":"BUILD_EMBED_LABEL"},{"key":"BUILD_HOST","value":"host"},{"key":"BUILD_TIMESTAMP","value":"1733431518"},{"key":"BUILD_USER","value":"tyler"},{"key":"FORMATTED_DATE","value":"2024 Dec 05 20 45 18 Thu"}]}} +{"id":{"progress":{"opaqueCount":3}},"children":[{"progress":{"opaqueCount":4}},{"namedSet":{"id":"0"}}],"progress":{"stderr":"\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\u001b[35mWARNING: \u001b[0mtrunk/hello_world/cc_grpc/BUILD:3:17: //trunk/hello_world/cc_grpc:client_test.cc is a source file, nothing will be built for it. If you want to build a target that consumes this file, try --compile_one_dependency\n\u001b[32mAnalyzing:\u001b[0m 16 targets (3 packages loaded, 7 targets configured)\n currently loading: toolchain/cc\n\u001b[32m[0 / 1]\u001b[0m [Prepa] BazelWorkspaceStatusAction stable-status.txt\n\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\u001b[35mWARNING: \u001b[0mtrunk/hello_world/cc_grpc/BUILD:3:17: //trunk/hello_world/cc_grpc:server_test.cc is a source file, nothing will be built for it. If you want to build a target that consumes this file, try --compile_one_dependency\n\u001b[32mAnalyzing:\u001b[0m 16 targets (3 packages loaded, 7 targets configured)\n currently loading: toolchain/cc\n\u001b[32m[0 / 1]\u001b[0m [Prepa] BazelWorkspaceStatusAction stable-status.txt\n"}} +{"id":{"progress":{"opaqueCount":4}},"children":[{"progress":{"opaqueCount":5}},{"namedSet":{"id":"1"}}],"progress":{}} +{"id":{"progress":{"opaqueCount":5}},"children":[{"progress":{"opaqueCount":6}},{"namedSet":{"id":"2"}}],"progress":{"stderr":"\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\u001b[35mWARNING: \u001b[0mtrunk/hello_world/cc_grpc/BUILD: //trunk/hello_world/cc_grpc:BUILD is a source file, nothing will be built for it. If you want to build a target that consumes this file, try --compile_one_dependency\n\u001b[32mAnalyzing:\u001b[0m 16 targets (4 packages loaded, 7 targets configured)\n\u001b[32m[1 / 1]\u001b[0m no actions running\n"}} +{"id":{"namedSet":{"id":"2"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/BUILD","uri":"file:///repos/trunk/trunk/hello_world/cc_grpc/BUILD","digest":"d7ef90ffec0d4a5db300b97e14e9fa5f4853a0e26dd7e5f93e1f3c8ad07c5ce6","length":"278"}]}} +{"id":{"namedSet":{"id":"1"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/server_test.cc","uri":"file:///repos/trunk/trunk/hello_world/cc_grpc/server_test.cc","digest":"d91eb5c8d84f382ba262cae36713020b7aea53e548dc48646fe04d3f56a29853","length":"75"}]}} +{"id":{"namedSet":{"id":"0"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/client_test.cc","uri":"file:///repos/trunk/trunk/hello_world/cc_grpc/client_test.cc","digest":"2f9701b9c8ac93aa0d40f62d2161f52f43a958c3f63302c1b4802e5c8e68f04f","length":"3179"}]}} +{"id":{"progress":{"opaqueCount":6}},"children":[{"progress":{"opaqueCount":7}},{"namedSet":{"id":"3"}}],"progress":{"stderr":"\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\u001b[35mWARNING: \u001b[0mtrunk/hello_world/cc_grpc/BUILD:3:17: //trunk/hello_world/cc_grpc:server.hh is a source file, nothing will be built for it. If you want to build a target that consumes this file, try --compile_one_dependency\n\u001b[32mAnalyzing:\u001b[0m 16 targets (4 packages loaded, 7 targets configured)\n\u001b[32m[1 / 1]\u001b[0m no actions running\n"}} +{"id":{"namedSet":{"id":"3"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/server.hh","uri":"file:///repos/trunk/trunk/hello_world/cc_grpc/server.hh","digest":"c1e3ccd76367498e4204326d727c0443ac97615ec9636c0f7d6f1d070a92d09a","length":"1443"}]}} +{"id":{"progress":{"opaqueCount":7}},"children":[{"progress":{"opaqueCount":8}},{"namedSet":{"id":"4"}}],"progress":{"stderr":"\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\u001b[35mWARNING: \u001b[0mtrunk/hello_world/cc_grpc/BUILD:3:17: //trunk/hello_world/cc_grpc:client.cc is a source file, nothing will be built for it. If you want to build a target that consumes this file, try --compile_one_dependency\n\u001b[32mAnalyzing:\u001b[0m 16 targets (4 packages loaded, 7 targets configured)\n\u001b[32m[1 / 1]\u001b[0m no actions running\n"}} +{"id":{"namedSet":{"id":"4"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/client.cc","uri":"file:///repos/trunk/trunk/hello_world/cc_grpc/client.cc","digest":"4b94e31739be07cc295e3ce9a190c6f5e759716f1d20aad5c273fd0a72465e65","length":"1658"}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client_test.cc","configuration":{"id":"none"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"0"}]}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server.hh","configuration":{"id":"none"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"3"}]}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:BUILD","configuration":{"id":"none"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"2"}]}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client.cc","configuration":{"id":"none"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"4"}]}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server_test.cc","configuration":{"id":"none"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"1"}]}]}} +{"id":{"progress":{"opaqueCount":8}},"children":[{"progress":{"opaqueCount":9}},{"namedSet":{"id":"5"}}],"progress":{"stderr":"\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\u001b[35mWARNING: \u001b[0mtrunk/hello_world/cc_grpc/BUILD:3:17: //trunk/hello_world/cc_grpc:server.cc is a source file, nothing will be built for it. If you want to build a target that consumes this file, try --compile_one_dependency\n\u001b[32mAnalyzing:\u001b[0m 16 targets (4 packages loaded, 7 targets configured)\n\u001b[32m[1 / 1]\u001b[0m no actions running\n"}} +{"id":{"namedSet":{"id":"5"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/server.cc","uri":"file:///repos/trunk/trunk/hello_world/cc_grpc/server.cc","digest":"d9e7c14bc32b94efb53e985bfcf038747cb8f7db57de4255e1c8395dca9d33db","length":"535"}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server.cc","configuration":{"id":"none"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"5"}]}]}} +{"id":{"progress":{"opaqueCount":9}},"children":[{"progress":{"opaqueCount":10}},{"namedSet":{"id":"6"}}],"progress":{"stderr":"\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\u001b[35mWARNING: \u001b[0mtrunk/hello_world/cc_grpc/BUILD:3:17: //trunk/hello_world/cc_grpc:client.hh is a source file, nothing will be built for it. If you want to build a target that consumes this file, try --compile_one_dependency\n\u001b[32mAnalyzing:\u001b[0m 16 targets (4 packages loaded, 7 targets configured)\n\u001b[32m[1 / 1]\u001b[0m no actions running\n"}} +{"id":{"namedSet":{"id":"6"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/client.hh","uri":"file:///repos/trunk/trunk/hello_world/cc_grpc/client.hh","digest":"f67f4f459fc8c43d3ef2c0369d28a42706a2437f42a800373c6ea9741d96a193","length":"641"}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client.hh","configuration":{"id":"none"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"6"}]}]}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc:hello_test"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc:hello_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"configured":{"targetKind":"cc_test rule","testSize":"MEDIUM","tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"progress":{"opaqueCount":10}},"children":[{"progress":{"opaqueCount":11}},{"configuration":{"id":"16b67ce27e8b3c2826204d0631e7eb36e7f5991fc9a65793ef2ea9b41eb86539"}}],"progress":{"stderr":""}} +{"id":{"configuration":{"id":"16b67ce27e8b3c2826204d0631e7eb36e7f5991fc9a65793ef2ea9b41eb86539"}},"configuration":{"mnemonic":"k8-fastbuild","platformName":"k8","cpu":"k8","makeVariable":{"TRUNK_RELEASE":"0.0.0","METRICS_DATABASE_URL":"","IMAGE_TAG":"null","SENTRY_AUTH_TOKEN":"","TARGET_CPU":"k8","GENDIR":"bazel-out/k8-fastbuild/bin","FLAKY_TESTS_OVERRIDE_REPO_FULL_NAME":"","AWS_PROFILE":"","SERVICE_JEST_ARGS":"--testMatch\u003d**/__tests__/**/*.test.js","ANALYZE":"","BINDIR":"bazel-out/k8-fastbuild/bin","COMPILATION_MODE":"fastbuild","DATABASE_URL":"","absl":"1","SPDLOG_COMPILE_LEVEL":"SPDLOG_LEVEL_TRACE","SENTRY_LOG_LEVEL":"","AWS_ECR_URL":"null","FLAKY_TESTS_OVERRIDE_ORG_SLUG":""}}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:cc_grpc"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:cc_grpc","configuration":{"id":"16b67ce27e8b3c2826204d0631e7eb36e7f5991fc9a65793ef2ea9b41eb86539"}}}],"configured":{"targetKind":"cc_library rule","tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:testing"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:testing","configuration":{"id":"16b67ce27e8b3c2826204d0631e7eb36e7f5991fc9a65793ef2ea9b41eb86539"}}}],"configured":{"targetKind":"cc_library rule","tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client_test"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"configured":{"targetKind":"cc_test rule","testSize":"MEDIUM","tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client_test.stripped"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client_test.stripped","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"configured":{"targetKind":"generated file","tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:client_test.dwp"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client_test.dwp","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"configured":{"targetKind":"generated file","tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server_test"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"configured":{"targetKind":"cc_test rule","testSize":"MEDIUM","tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server_test.stripped"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server_test.stripped","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"configured":{"targetKind":"generated file","tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"targetConfigured":{"label":"//trunk/hello_world/cc_grpc:server_test.dwp"}},"children":[{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server_test.dwp","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"configured":{"targetKind":"generated file","tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"progress":{"opaqueCount":11}},"children":[{"progress":{"opaqueCount":12}},{"namedSet":{"id":"7"}}],"progress":{}} +{"id":{"namedSet":{"id":"7"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/client_test.dwp","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/client_test.dwp","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client_test.dwp","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"7"}]}],"importantOutput":[{"name":"trunk/hello_world/cc_grpc/client_test.dwp","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/client_test.dwp","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}]}} +{"id":{"progress":{"opaqueCount":12}},"children":[{"progress":{"opaqueCount":13}},{"namedSet":{"id":"8"}}],"progress":{"stderr":"\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\u001b[32mINFO: \u001b[0mAnalyzed 16 targets (430 packages loaded, 26155 targets configured).\n\u001b[32m[174 / 5,561]\u001b[0m checking cached actions\n\r\u001b[1A\u001b[K\u001b[32m[383 / 6,463]\u001b[0m checking cached actions\n"}} +{"id":{"namedSet":{"id":"8"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/server_test.dwp","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/server_test.dwp","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server_test.dwp","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"8"}]}],"importantOutput":[{"name":"trunk/hello_world/cc_grpc/server_test.dwp","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/server_test.dwp","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}]}} +{"id":{"progress":{"opaqueCount":13}},"children":[{"progress":{"opaqueCount":14}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":14}},"children":[{"progress":{"opaqueCount":15}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":15}},"children":[{"progress":{"opaqueCount":16}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":16}},"children":[{"progress":{"opaqueCount":17}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":17}},"children":[{"progress":{"opaqueCount":18}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":18}},"children":[{"progress":{"opaqueCount":19}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":19}},"children":[{"progress":{"opaqueCount":20}},{"namedSet":{"id":"9"}}],"progress":{"stderr":""}} +{"id":{"namedSet":{"id":"9"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc/hello_test","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc/hello_test","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"4dfb8957208705bd50aef0251a769271edbe12a5b63f961dd87256f8a3414244","length":"2689272"}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc:hello_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"children":[{"testResult":{"label":"//trunk/hello_world/cc:hello_test","run":1,"shard":1,"attempt":1,"configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},{"testSummary":{"label":"//trunk/hello_world/cc:hello_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"9"}]}],"tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__","medium","moderate","noflaky","nolocal"],"importantOutput":[{"name":"trunk/hello_world/cc/hello_test","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc/hello_test","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"4dfb8957208705bd50aef0251a769271edbe12a5b63f961dd87256f8a3414244","length":"2689272"}],"testTimeoutSeconds":"300","testTimeout":"300s"}} +{"id":{"progress":{"opaqueCount":20}},"children":[{"progress":{"opaqueCount":21}}],"progress":{"stderr":""}} +{"id":{"testResult":{"label":"//trunk/hello_world/cc:hello_test","run":1,"shard":1,"attempt":1,"configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"testResult":{"testActionOutput":[{"name":"test.log","uri":"file:///tmp/hello_test/test.log"},{"name":"test.xml","uri":"file:///tmp/hello_test/test.xml"}],"testAttemptDurationMillis":"153","cachedLocally":false,"status":"PASSED","testAttemptStartMillisEpoch":"1733171237474","executionInfo":{},"testAttemptStart":"2024-12-02T20:27:17.474Z","testAttemptDuration":"0.153s"}} +{"id":{"testSummary":{"label":"//trunk/hello_world/cc:hello_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"testSummary":{"totalRunCount":1,"passed":[{"uri":"file:///tmp/hello_test/test.log"}],"overallStatus":"PASSED","totalNumCached":1,"firstStartTimeMillis":"1733171237474","lastStopTimeMillis":"1733171237627","totalRunDurationMillis":"153","runCount":1,"totalRunDuration":"0.153s","firstStartTime":"2024-12-02T20:27:17.474Z","lastStopTime":"2024-12-02T20:27:17.627Z","attemptCount":1}} +{"id":{"progress":{"opaqueCount":21}},"children":[{"progress":{"opaqueCount":22}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":22}},"children":[{"progress":{"opaqueCount":23}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":23}},"children":[{"progress":{"opaqueCount":24}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":24}},"children":[{"progress":{"opaqueCount":25}}],"progress":{"stderr":""}} +{"id":{"progress":{"opaqueCount":25}},"children":[{"progress":{"opaqueCount":26}}],"progress":{"stderr":""}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:testing","configuration":{"id":"16b67ce27e8b3c2826204d0631e7eb36e7f5991fc9a65793ef2ea9b41eb86539"}}},"completed":{"success":true,"tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"]}} +{"id":{"progress":{"opaqueCount":26}},"children":[{"progress":{"opaqueCount":27}},{"namedSet":{"id":"10"}}],"progress":{"stderr":""}} +{"id":{"namedSet":{"id":"10"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/libcc_grpc.a","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/libcc_grpc.a","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"baad224e59b830b85da0ddff1357845c0174555a7815d5166e77e4b36f3f3af8","length":"583922"},{"name":"trunk/hello_world/cc_grpc/libcc_grpc.so","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/libcc_grpc.so","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"6497307912b4d4b8a9a841bb194c384f7d45b0260a90b9a8093692b36d254e86","length":"347344"}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:cc_grpc","configuration":{"id":"16b67ce27e8b3c2826204d0631e7eb36e7f5991fc9a65793ef2ea9b41eb86539"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"10"}]}],"tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"],"importantOutput":[{"name":"trunk/hello_world/cc_grpc/libcc_grpc.a","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/libcc_grpc.a","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"baad224e59b830b85da0ddff1357845c0174555a7815d5166e77e4b36f3f3af8","length":"583922"},{"name":"trunk/hello_world/cc_grpc/libcc_grpc.so","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/libcc_grpc.so","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"6497307912b4d4b8a9a841bb194c384f7d45b0260a90b9a8093692b36d254e86","length":"347344"}]}} +{"id":{"progress":{"opaqueCount":27}},"children":[{"progress":{"opaqueCount":28}},{"namedSet":{"id":"11"}}],"progress":{}} +{"id":{"progress":{"opaqueCount":28}},"children":[{"progress":{"opaqueCount":29}},{"namedSet":{"id":"12"}}],"progress":{}} +{"id":{"namedSet":{"id":"11"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/server_test","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/server_test","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"c3f62796176943c787bc89d2380a11cb5249f9c520ff1248f36e3123bd40cfe9","length":"4981448"}]}} +{"id":{"namedSet":{"id":"12"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/client_test","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/client_test","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"e666f897f5dd4747c254bee145f40bdc3a7787bdfd9ef87afdb15bab94b8ff73","length":"5536640"}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"children":[{"testResult":{"label":"//trunk/hello_world/cc_grpc:server_test","run":1,"shard":1,"attempt":1,"configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},{"testSummary":{"label":"//trunk/hello_world/cc_grpc:server_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"11"}]}],"tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__","medium","moderate","noflaky","nolocal"],"importantOutput":[{"name":"trunk/hello_world/cc_grpc/server_test","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/server_test","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"c3f62796176943c787bc89d2380a11cb5249f9c520ff1248f36e3123bd40cfe9","length":"4981448"}],"testTimeoutSeconds":"300","testTimeout":"300s"}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"children":[{"testResult":{"label":"//trunk/hello_world/cc_grpc:client_test","run":1,"shard":1,"attempt":1,"configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},{"testSummary":{"label":"//trunk/hello_world/cc_grpc:client_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}}],"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"12"}]}],"tag":["__CC_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__","medium","moderate","noflaky","nolocal"],"importantOutput":[{"name":"trunk/hello_world/cc_grpc/client_test","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/client_test","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"e666f897f5dd4747c254bee145f40bdc3a7787bdfd9ef87afdb15bab94b8ff73","length":"5536640"}],"testTimeoutSeconds":"300","testTimeout":"300s"}} +{"id":{"testResult":{"label":"//trunk/hello_world/cc_grpc:client_test","run":1,"shard":1,"attempt":1,"configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"testResult":{"testActionOutput":[{"name":"test.log","uri":"file:///tmp/client_test/test.log"},{"name":"test.xml","uri":"file:///tmp/client_test/test.xml"}],"testAttemptDurationMillis":"1753","cachedLocally":false,"status":"PASSED","testAttemptStartMillisEpoch":"1733172600347","executionInfo":{},"testAttemptStart":"2024-12-02T20:50:00.347Z","testAttemptDuration":"1.753s"}} +{"id":{"testResult":{"label":"//trunk/hello_world/cc_grpc:server_test","run":1,"shard":1,"attempt":1,"configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"testResult":{"testActionOutput":[{"name":"test.log","uri":"file:///tmp/server_test/test.log"},{"name":"test.xml","uri":"file:///tmp/server_test/test.xml"}],"testAttemptDurationMillis":"1637","cachedLocally":true,"status":"PASSED","testAttemptStartMillisEpoch":"1733172600347","executionInfo":{},"testAttemptStart":"2024-12-02T20:50:00.347Z","testAttemptDuration":"1.637s"}} +{"id":{"progress":{"opaqueCount":29}},"children":[{"progress":{"opaqueCount":30}},{"namedSet":{"id":"13"}}],"progress":{}} +{"id":{"namedSet":{"id":"13"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/server_test.stripped","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/server_test.stripped","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"0ae62e3d454c64d9701f9eaa6c67cffbf36fe23e813349e266081097026622c0","length":"4968056"}]}} +{"id":{"testSummary":{"label":"//trunk/hello_world/cc_grpc:client_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"testSummary":{"totalRunCount":1,"passed":[{"uri":"file:///tmp/client_test/test.log"}],"overallStatus":"PASSED","totalNumCached":1,"firstStartTimeMillis":"1733172600347","lastStopTimeMillis":"1733172602100","totalRunDurationMillis":"1753","runCount":1,"totalRunDuration":"1.753s","firstStartTime":"2024-12-02T20:50:00.347Z","lastStopTime":"2024-12-02T20:50:02.100Z","attemptCount":1}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:server_test.stripped","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"13"}]}],"importantOutput":[{"name":"trunk/hello_world/cc_grpc/server_test.stripped","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/server_test.stripped","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"0ae62e3d454c64d9701f9eaa6c67cffbf36fe23e813349e266081097026622c0","length":"4968056"}]}} +{"id":{"testSummary":{"label":"//trunk/hello_world/cc_grpc:server_test","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"testSummary":{"totalRunCount":1,"passed":[{"uri":"file:///tmp/server_test/test.log"}],"overallStatus":"PASSED","totalNumCached":1,"firstStartTimeMillis":"1733172600347","lastStopTimeMillis":"1733172601984","totalRunDurationMillis":"1637","runCount":1,"totalRunDuration":"1.637s","firstStartTime":"2024-12-02T20:50:00.347Z","lastStopTime":"2024-12-02T20:50:01.984Z","attemptCount":1}} +{"id":{"progress":{"opaqueCount":30}},"children":[{"progress":{"opaqueCount":31}},{"namedSet":{"id":"14"}}],"progress":{}} +{"id":{"namedSet":{"id":"14"}},"namedSetOfFiles":{"files":[{"name":"trunk/hello_world/cc_grpc/client_test.stripped","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/client_test.stripped","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"9a1dc4cff6f2f9a88b581826a6155d94f89758a6c1c058f47d6fda3a74ae81bf","length":"5522640"}]}} +{"id":{"targetCompleted":{"label":"//trunk/hello_world/cc_grpc:client_test.stripped","configuration":{"id":"505b27c8ff9839fd314110b87c91532df190ce138243ef37a6fd2ad06b7054e9"}}},"completed":{"success":true,"outputGroup":[{"name":"default","fileSets":[{"id":"14"}]}],"importantOutput":[{"name":"trunk/hello_world/cc_grpc/client_test.stripped","uri":"file:///tmp/.cache/bazel/deadbeef/execroot/_main/bazel-out/k8-fastbuild/bin/trunk/hello_world/cc_grpc/client_test.stripped","pathPrefix":["bazel-out","k8-fastbuild","bin"],"digest":"9a1dc4cff6f2f9a88b581826a6155d94f89758a6c1c058f47d6fda3a74ae81bf","length":"5522640"}]}} +{"id":{"progress":{"opaqueCount":31}},"children":[{"progress":{"opaqueCount":32}}],"progress":{"stdout":"//trunk/hello_world/cc:hello_test \u001b[0m\u001b[32m(cached) PASSED\u001b[0m in 0.2s\n","stderr":"\r\u001b[1A\u001b[K\r\u001b[1A\u001b[K\u001b[32mINFO: \u001b[0mFound 13 targets and 3 test targets...\n\u001b[32m[8,086 / 8,086]\u001b[0m 3 / 3 tests;\u001b[0m no actions running\u001b[0m; last test: \u001b[32m//trunk/hello_world/cc_grpc:server_test\u001b[0m\n\r\u001b[1A\u001b[K\u001b[32mINFO: \u001b[0mElapsed time: 52.268s, Critical Path: 7.39s\n\u001b[32m[8,086 / 8,086]\u001b[0m 3 / 3 tests;\u001b[0m no actions running\u001b[0m; last test: \u001b[32m//trunk/hello_world/cc_grpc:server_test\u001b[0m\n\r\u001b[1A\u001b[K\u001b[32mINFO: \u001b[0m5823 processes: 5820 remote cache hit, 1 internal, 2 linux-sandbox.\n\u001b[32m[8,086 / 8,086]\u001b[0m 3 / 3 tests;\u001b[0m no actions running\u001b[0m; last test: \u001b[32m//trunk/hello_world/cc_grpc:server_test\u001b[0m\n\r\u001b[1A\u001b[K\u001b[32mINFO: \u001b[0mBuild completed successfully, 5823 total actions\n\u001b[32mINFO:\u001b[0m \n\r\u001b[1A\u001b[K\u001b[32mINFO:\u001b[0m \n\r\u001b[1A\u001b[K"}} +{"id":{"progress":{"opaqueCount":32}},"children":[{"progress":{"opaqueCount":33}}],"progress":{"stdout":"//trunk/hello_world/cc_grpc:client_test \u001b[0m\u001b[32m(cached) PASSED\u001b[0m in 1.8s\n","stderr":"\u001b[32mINFO:\u001b[0m \n\r\u001b[1A\u001b[K"}} +{"id":{"progress":{"opaqueCount":33}},"children":[{"progress":{"opaqueCount":34}}],"progress":{"stdout":"//trunk/hello_world/cc_grpc:server_test \u001b[0m\u001b[32m(cached) PASSED\u001b[0m in 1.6s\n","stderr":"\u001b[32mINFO:\u001b[0m \n\r\u001b[1A\u001b[K"}} +{"id":{"progress":{"opaqueCount":34}},"children":[{"progress":{"opaqueCount":35}}],"progress":{"stdout":"\nExecuted 0 out of 3 tests: 3 tests pass.\n","stderr":"\u001b[32mINFO:\u001b[0m \n\r\u001b[1A\u001b[K"}} +{"id":{"progress":{"opaqueCount":35}},"children":[{"progress":{"opaqueCount":36}}],"progress":{"stdout":"There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.\n","stderr":"\u001b[32mINFO:\u001b[0m \n\r\u001b[1A\u001b[K"}} +{"id":{"buildFinished":{}},"children":[{"buildToolLogs":{}}],"finished":{"overallSuccess":true,"finishTimeMillis":"1733431565192","exitCode":{"name":"SUCCESS"},"finishTime":"2024-12-05T20:46:05.192Z"}} +{"id":{"progress":{"opaqueCount":36}},"children":[{"progress":{"opaqueCount":37}},{"buildMetrics":{}}],"progress":{"stderr":"\u001b[32mINFO:\u001b[0m \n"}} +{"id":{"buildMetrics":{}},"buildMetrics":{"actionSummary":{"actionsCreated":"11051","actionsExecuted":"5823","actionsCreatedNotIncludingAspects":"8554","actionData":[{"mnemonic":"CppCompile","actionsExecuted":"4854","firstStartedMs":"1733431522840","lastEndedMs":"1733431565077","systemTime":"0.410s","userTime":"5.035s"},{"mnemonic":"CppLink","actionsExecuted":"729","firstStartedMs":"1733431523104","lastEndedMs":"1733431565143"},{"mnemonic":"GenProto","actionsExecuted":"224","firstStartedMs":"1733431545138","lastEndedMs":"1733431553270"},{"mnemonic":"Genrule","actionsExecuted":"9","firstStartedMs":"1733431524926","lastEndedMs":"1733431548523"},{"mnemonic":"Action","actionsExecuted":"5","firstStartedMs":"1733431522403","lastEndedMs":"1733431548725"},{"mnemonic":"BazelWorkspaceStatusAction","actionsExecuted":"1","firstStartedMs":"1733431518382","lastEndedMs":"1733431518417"},{"mnemonic":"EmbedData","actionsExecuted":"1","firstStartedMs":"1733431545242","lastEndedMs":"1733431545301"}],"runnerCount":[{"name":"total","count":5823},{"name":"remote cache hit","count":5820,"execKind":"Remote"},{"name":"internal","count":1},{"name":"linux-sandbox","count":2,"execKind":"Local"}],"actionCacheStatistics":{"sizeInBytes":"4341720","saveTimeInMs":"5","hits":2274,"misses":5823,"missDetails":[{},{"reason":"DIFFERENT_DEPS"},{"reason":"DIFFERENT_ENVIRONMENT"},{"reason":"DIFFERENT_FILES","count":5822},{"reason":"CORRUPTED_CACHE_ENTRY"},{"reason":"NOT_CACHED"},{"reason":"UNCONDITIONAL_EXECUTION","count":1}]}},"memoryMetrics":{"garbageMetrics":[{"type":"CodeHeap \u0027profiled nmethods\u0027","garbageCollected":"45755520"},{"type":"G1 Old Gen","garbageCollected":"108355024"},{"type":"G1 Survivor Space","garbageCollected":"271919880"},{"type":"CodeHeap \u0027non-profiled nmethods\u0027","garbageCollected":"13981440"},{"type":"Compressed Class Space","garbageCollected":"12480"},{"type":"Metaspace","garbageCollected":"46216"},{"type":"G1 Eden Space","garbageCollected":"21869101048"}]},"targetMetrics":{"targetsConfigured":"26414","targetsConfiguredNotIncludingAspects":"26155"},"packageMetrics":{"packagesLoaded":"431"},"timingMetrics":{"cpuTimeInMs":"193760","wallTimeInMs":"50773","analysisPhaseTimeInMs":"3360","executionPhaseTimeInMs":"46773"},"cumulativeMetrics":{"numAnalyses":1,"numBuilds":1},"artifactMetrics":{"sourceArtifactsRead":{"sizeInBytes":"650449069","count":21670},"outputArtifactsSeen":{"sizeInBytes":"1852158528","count":13846},"outputArtifactsFromActionCache":{"sizeInBytes":"417912281","count":2277},"topLevelArtifacts":{"sizeInBytes":"2198924628","count":9183}},"buildGraphMetrics":{"actionLookupValueCount":23690,"actionCount":11051,"outputArtifactCount":17251,"postInvocationSkyframeNodeCount":265696,"actionLookupValueCountNotIncludingAspects":23431,"actionCountNotIncludingAspects":8554,"inputFileConfiguredTargetCount":21677,"outputFileConfiguredTargetCount":36,"otherConfiguredTargetCount":122},"workerPoolMetrics":{}}} +{"id":{"buildToolLogs":{}},"buildToolLogs":{"log":[{"name":"elapsed time","contents":""},{"name":"critical path","contents":""},{"name":"process stats","contents":""},{"name":"command.profile.gz","uri":"file:///tmp/.cache/bazel/deadbeef/command.profile.gz"}]}} +{"id":{"progress":