From 70b8fd301b167ed6c90f4a532a2dc7aee29e29bf Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Tue, 6 Oct 2026 16:47:35 +0000 Subject: [PATCH] chore: Update docker images; link Conan-built tools with a static runtime (#8520) --- .github/actions/build-deps/action.yml | 10 +- .github/scripts/strategy-matrix/linux.json | 8 +- .github/workflows/build-nix-images.yml | 1 - .github/workflows/build-packaging-images.yml | 1 - .github/workflows/build-pre-commit-image.yml | 1 - .github/workflows/cargo-audit.yml | 2 +- .github/workflows/pre-commit.yml | 2 +- .github/workflows/publish-docs.yml | 2 +- .github/workflows/reusable-clang-tidy.yml | 2 +- .github/workflows/reusable-rust.yml | 6 +- .github/workflows/reusable-upload-recipe.yml | 2 +- bin/check-build-context-runtime.sh | 65 +++++++ bin/check-tools.sh | 1 + bin/pre-commit/Dockerfile | 2 +- conan.lock | 6 +- conan/profiles/default | 21 +++ conan/profiles/sanitizers | 3 + conanfile.py | 7 +- docs/build/nix.md | 20 +- nix/check-tools/macos.txt | 5 +- nix/check-tools/nix-ubuntu-amd64.txt | 183 ++++++++++--------- nix/check-tools/nix-ubuntu-arm64.txt | 183 ++++++++++--------- 22 files changed, 329 insertions(+), 204 deletions(-) create mode 100755 bin/check-build-context-runtime.sh diff --git a/.github/actions/build-deps/action.yml b/.github/actions/build-deps/action.yml index 044c264ef0..49eb7329d3 100644 --- a/.github/actions/build-deps/action.yml +++ b/.github/actions/build-deps/action.yml @@ -44,4 +44,12 @@ runs: --conf:all tools.build:jobs=${BUILD_NPROC} \ --conf:all tools.build:verbosity="${LOG_VERBOSITY}" \ --conf:all tools.compilation:verbosity="${LOG_VERBOSITY}" \ - . + --format=json \ + . >"${RUNNER_TEMP}/conan-graph.json" + + # Tools that run during the build may only load glibc from the Nix store, + # as their package ID survives a GCC runtime update. + - name: Check build-context packages for Nix store dependencies (Linux) + if: ${{ runner.os == 'Linux' }} + shell: bash + run: ./bin/check-build-context-runtime.sh "${RUNNER_TEMP}/conan-graph.json" diff --git a/.github/scripts/strategy-matrix/linux.json b/.github/scripts/strategy-matrix/linux.json index 0a935da8c8..371355d0c1 100644 --- a/.github/scripts/strategy-matrix/linux.json +++ b/.github/scripts/strategy-matrix/linux.json @@ -1,5 +1,5 @@ { - "image_tag": "sha-060957e", + "image_tag": "sha-ed96e60", "configs": { "ubuntu": [ { @@ -74,7 +74,7 @@ "extra_cmake_args": "-Dvalidator_keys=ON", "package": { "type": "deb", - "image": "ghcr.io/xrplf/xrpld/packaging-debian:sha-3a2d19f" + "image": "ghcr.io/xrplf/xrpld/packaging-debian:sha-e6055dd" } }, { @@ -86,7 +86,7 @@ "extra_cmake_args": "-Dvalidator_keys=ON -Dassert=ON", "package": { "type": "deb", - "image": "ghcr.io/xrplf/xrpld/packaging-debian:sha-3a2d19f", + "image": "ghcr.io/xrplf/xrpld/packaging-debian:sha-e6055dd", "variant": "assert" } } @@ -101,7 +101,7 @@ "extra_cmake_args": "-Dvalidator_keys=ON", "package": { "type": "rpm", - "image": "ghcr.io/xrplf/xrpld/packaging-rhel:sha-3a2d19f" + "image": "ghcr.io/xrplf/xrpld/packaging-rhel:sha-e6055dd" } } ] diff --git a/.github/workflows/build-nix-images.yml b/.github/workflows/build-nix-images.yml index 38f2e13b88..7b4d2895a7 100644 --- a/.github/workflows/build-nix-images.yml +++ b/.github/workflows/build-nix-images.yml @@ -13,7 +13,6 @@ on: - "!nix/devshell.nix" - "!nix/check-tools/**" - "bin/default-loader-path.sh" - - "bin/install-sanitizer-libs.sh" pull_request: paths: - ".github/workflows/build-nix-images.yml" diff --git a/.github/workflows/build-packaging-images.yml b/.github/workflows/build-packaging-images.yml index 427d3b0fbf..829a26831f 100644 --- a/.github/workflows/build-packaging-images.yml +++ b/.github/workflows/build-packaging-images.yml @@ -5,7 +5,6 @@ on: branches: - develop paths: - - ".github/workflows/build-packaging-images.yml" - "bin/install-packaging-tools.sh" - "package/images/packaging/**" pull_request: diff --git a/.github/workflows/build-pre-commit-image.yml b/.github/workflows/build-pre-commit-image.yml index 192e55b51f..79dc2f0fc3 100644 --- a/.github/workflows/build-pre-commit-image.yml +++ b/.github/workflows/build-pre-commit-image.yml @@ -5,7 +5,6 @@ on: branches: - develop paths: - - ".github/workflows/build-pre-commit-image.yml" - "bin/pre-commit/Dockerfile" - "rust-toolchain.toml" pull_request: diff --git a/.github/workflows/cargo-audit.yml b/.github/workflows/cargo-audit.yml index 6e613b822a..86429d27ef 100644 --- a/.github/workflows/cargo-audit.yml +++ b/.github/workflows/cargo-audit.yml @@ -34,7 +34,7 @@ permissions: jobs: audit: runs-on: ubuntu-latest - container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-060957e + container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-ed96e60 permissions: contents: read # Needed to open an issue on scheduled failures. diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 25063b9dfa..feb31f6072 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -17,4 +17,4 @@ jobs: uses: XRPLF/actions/.github/workflows/pre-commit.yml@279ec358f4a1be4088be3e024b07916fa97c75b6 with: runs_on: ubuntu-latest - container: '{ "image": "ghcr.io/xrplf/xrpld/pre-commit:sha-473fe44" }' + container: '{ "image": "ghcr.io/xrplf/xrpld/pre-commit:sha-3a2d19f" }' diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index 735ddfc906..b22b79f6f9 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -41,7 +41,7 @@ env: jobs: build: runs-on: ubuntu-latest - container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-060957e + container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-ed96e60 steps: - name: Checkout repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 diff --git a/.github/workflows/reusable-clang-tidy.yml b/.github/workflows/reusable-clang-tidy.yml index 8e3b80e318..fa922ac017 100644 --- a/.github/workflows/reusable-clang-tidy.yml +++ b/.github/workflows/reusable-clang-tidy.yml @@ -34,7 +34,7 @@ jobs: needs: [determine-files] if: ${{ needs.determine-files.outputs.cpp_changed_files != '' || needs.determine-files.outputs.need_full_run == 'true' }} runs-on: ["self-hosted", "Linux", "X64", "heavy"] - container: "ghcr.io/xrplf/xrpld/nix-debian:sha-060957e" + container: "ghcr.io/xrplf/xrpld/nix-debian:sha-ed96e60" permissions: contents: read issues: write diff --git a/.github/workflows/reusable-rust.yml b/.github/workflows/reusable-rust.yml index bdd5f75ca6..0a0b0031d7 100644 --- a/.github/workflows/reusable-rust.yml +++ b/.github/workflows/reusable-rust.yml @@ -28,7 +28,7 @@ permissions: jobs: clippy: runs-on: ubuntu-latest - container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-060957e + container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-ed96e60 steps: - name: Checkout repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 @@ -41,7 +41,7 @@ jobs: coverage: runs-on: ubuntu-latest - container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-060957e + container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-ed96e60 steps: - name: Checkout repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 @@ -70,7 +70,7 @@ jobs: doc: runs-on: ubuntu-latest - container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-060957e + container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-ed96e60 steps: - name: Checkout repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 diff --git a/.github/workflows/reusable-upload-recipe.yml b/.github/workflows/reusable-upload-recipe.yml index ac0d69a497..ba7f7b748b 100644 --- a/.github/workflows/reusable-upload-recipe.yml +++ b/.github/workflows/reusable-upload-recipe.yml @@ -40,7 +40,7 @@ defaults: jobs: upload: runs-on: ubuntu-latest - container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-060957e + container: ghcr.io/xrplf/xrpld/nix-ubuntu:sha-ed96e60 env: REMOTE_NAME: ${{ inputs.remote_name }} CONAN_LOGIN_USERNAME_XRPLF: ${{ secrets.remote_username }} diff --git a/bin/check-build-context-runtime.sh b/bin/check-build-context-runtime.sh new file mode 100755 index 0000000000..ecf923f599 --- /dev/null +++ b/bin/check-build-context-runtime.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +# Fail if a binary of a build-context Conan package loads anything from the Nix +# store other than glibc, or cannot resolve a library at all. +# +# Only binaries linked by the Nix toolchain are checked, i.e. those recording a +# store path as their interpreter or RUNPATH. Prebuilt upstream binaries (such +# as the ones the cmake package ships) use the system loader instead. +# +# Build-context packages provide the tools that run during the build (protoc, +# grpc_cpp_plugin, ...). Their package ID does not change when a Nix toolchain +# update moves the GCC runtime to a new store path, so a cached binary has to +# get by with the pinned glibc alone. See docs/build/nix.md. +# +# Usage: bin/check-build-context-runtime.sh +# is the output of `conan install --format=json`. + +set -euo pipefail + +if [ "$#" -ne 1 ]; then + echo "usage: $0 " >&2 + exit 2 +fi + +if [ "$(uname -s)" != "Linux" ]; then + echo "$0: Linux only" >&2 + exit 2 +fi + +folders="$(jq -r '.graph.nodes[] | select(.context == "build" and .package_folder) | .package_folder' "$1" | sort -u)" + +checked=0 +failed=0 + +while IFS= read -r file; do + case "$(file -b "${file}")" in + ELF*) ;; + *) continue ;; + esac + [[ "$(readelf -ldW "${file}")" == */nix/store/* ]] || continue + checked=$((checked + 1)) + + # `ldd` lists the interpreter and every library as the loader resolves them. + if deps="$(ldd "${file}" 2>&1)"; then + bad="$(printf '%s\n' "${deps}" | + grep -E 'not found|/nix/store/' | + grep -vE '/nix/store/[^/]+-glibc-[^/]+/' || true)" + else + case "${deps}" in + *"not a dynamic executable"*) continue ;; + esac + bad="${deps}" + fi + if [ -n "${bad}" ]; then + failed=$((failed + 1)) + echo "::error file=${file}::loads a library from the Nix store other than glibc" + echo "${file}" + echo "${bad}" | sed 's/^/ /' + fi +done < <( + # shellcheck disable=SC2086 # one folder per line, no spaces in Conan paths + [ -z "${folders}" ] || find ${folders} -type f \( -perm -u+x -o -name '*.so*' \) +) + +echo "Build-context packages: checked ${checked} binaries, ${failed} failed." +[ "${failed}" -eq 0 ] diff --git a/bin/check-tools.sh b/bin/check-tools.sh index d04a996c14..5164df625e 100755 --- a/bin/check-tools.sh +++ b/bin/check-tools.sh @@ -112,6 +112,7 @@ if [ "${os}" = "linux" ] || [ "${os}" = "macos" ]; then check ClangBuildAnalyzer check curl check file + check jq check less check make # net-tools netstat reports "net-tools X.Y"; macOS ships BSD netstat with no diff --git a/bin/pre-commit/Dockerfile b/bin/pre-commit/Dockerfile index a96f3e4c25..9f0fd9d63a 100644 --- a/bin/pre-commit/Dockerfile +++ b/bin/pre-commit/Dockerfile @@ -23,7 +23,7 @@ apt-get clean rm -rf /var/lib/apt/lists/* EOF -ARG PRE_COMMIT_VERSION=4.6.0 +ARG PRE_COMMIT_VERSION=4.6.2 RUN pip install --no-cache --break-system-packages \ pre-commit==${PRE_COMMIT_VERSION} diff --git a/conan.lock b/conan.lock index 1a4a0e7817..5e7be8d6f5 100644 --- a/conan.lock +++ b/conan.lock @@ -20,7 +20,7 @@ "libarchive/3.8.7#c446109bd1f1d8ba7936c94189bc50e6%1782392403.066892", "jemalloc/5.3.1#1fc58d55316041f10fbc1e8a2eae632a%1776700028.228", "gtest/1.17.0#5224b3b3ff3b4ce1133cbdd27d53ee7d%1782392402.791979", - "grpc/1.81.1#b87796a4269034856cbc1a2522db16eb%1788275071.530512", + "grpc/1.81.1#aaa93ab6cda2f2baa6a84490582c8adf%1791284951.826256", "fast_float/8.2.10#f6f28d6bb22112078e7dbda611caf681%1785888854.601666", "ed25519/2015.03#ae761bdc52730a843f0809bdf6c1b1f6%1782307148.15562", "date/3.0.4#862e11e80030356b53c2c38599ceb32b%1782392402.538492", @@ -34,11 +34,15 @@ "build_requires": [ "zlib/1.3.2#1cb806da49011867778ffb6ac7190fcb%1782392402.122708", "strawberryperl/5.32.1.1#8d114504d172cfea8ea1662d09b6333e%1782395692.540639", + "re2/20251105#8579cfd0bda4daf0683f9e3898f964b4%1782392402.431897", "protobuf/6.33.5#ff253ead763bd8d9904a52979cd21e81%1782392410.233933", + "openssl/3.6.3#f806de8933e3bf6f01016c6a888cee2e%1783945160.863288", "nasm/2.16.01#31e26f2ee3c4346ecd347911bd126904%1782395690.33162", "msys2/cci.latest#d22fe7b2808f5fd34d0a7923ace9c54f%1770657326.649", "m4/1.4.19#1727f439cf74e83826ec96d0b4904eee%1784541921.659", + "grpc/1.81.1#aaa93ab6cda2f2baa6a84490582c8adf%1791284951.826256", "cmake/4.3.3#840cf00ea09777e05c2050a50a82c722%1782392418.696091", + "c-ares/1.34.6#545240bb1c40e2cacd4362d6b8967650%1782392402.681654", "b2/5.4.2#ffd6084a119587e70f11cd45d1a386e2%1782392402.624226", "automake/1.16.5#b91b7c384c3deaa9d535be02da14d04f%1755524470.56", "autoconf/2.71#51077f068e61700d65bb05541ea1e4b0%1731054366.86", diff --git a/conan/profiles/default b/conan/profiles/default index 1b7eaff980..38ece7fa59 100644 --- a/conan/profiles/default +++ b/conan/profiles/default @@ -49,6 +49,17 @@ tools.build:compiler_executables={'c':'{{ cc_exe }}','cpp':'{{ cxx_exe }}'} user.package:cppstd_version=23 tools.info.package_id:confs+=["user.package:cppstd_version"] +{% if os == "Linux" and context == "build" %} +{# Build-context executables (protoc, grpc_cpp_plugin, build tools) run during the build #} +{# and would otherwise load libstdc++/libgcc from a Nix store path #} +{# that might change with a Nix toolchain update. #} +{# --as-needed drops the ones they link but don't use, #} +{# such as libatomic for grpc_cpp_plugin on arm64. #} +{% set static_runtime_flags = ["-static-libstdc++", "-static-libgcc", "-Wl,--as-needed"] %} +tools.build:exelinkflags+={{ static_runtime_flags }} +tools.info.package_id:confs+=["tools.build:exelinkflags"] +{% endif %} + {% if os == "Macos" %} [buildenv] {# os.version adds -mmacosx-version-min to compiler command lines, #} @@ -58,3 +69,13 @@ tools.info.package_id:confs+=["user.package:cppstd_version"] {# Scoped to boost/* since it is the only gap. #} boost/*:MACOSX_DEPLOYMENT_TARGET={{ min_macos_version }} {% endif %} + +{% if os == "Linux" and context == "build" %} +{# b2 links itself with its own script, which ignores exelinkflags #} +{# and only takes CXXFLAGS when use_cxx_env is set. #} +[options] +b2/*:use_cxx_env=True + +[buildenv] +b2/*:CXXFLAGS={{ static_runtime_flags | join(" ") }} +{% endif %} diff --git a/conan/profiles/sanitizers b/conan/profiles/sanitizers index 09e6aef02b..ac7b4c21fe 100644 --- a/conan/profiles/sanitizers +++ b/conan/profiles/sanitizers @@ -5,6 +5,9 @@ include(default) {% if not sanitizers %} {# Sanitizers not configured; no additional settings needed #} +{% elif context == "build" %} +{# Build-context packages are tools we run, not code we test, #} +{# so don't instrument them #} {% else %} {% if compiler == "msvc" %} diff --git a/conanfile.py b/conanfile.py index a1aa248c93..294e036d92 100644 --- a/conanfile.py +++ b/conanfile.py @@ -49,7 +49,8 @@ class Xrpl(ConanFile): ] tool_requires = [ - "protobuf/6.33.5", + "grpc/", + "protobuf/", ] default_options = { @@ -123,6 +124,10 @@ class Xrpl(ConanFile): "xxhash/*:shared": False, } + # default_options only reach the host context; + # give tool_requires (and their dependencies) the same dependency options. + default_build_options = {k: v for k, v in default_options.items() if "/" in k} + def set_version(self): self.version = self.version or DEV_VERSION diff --git a/docs/build/nix.md b/docs/build/nix.md index 0b701b39f3..c33c8a87ad 100644 --- a/docs/build/nix.md +++ b/docs/build/nix.md @@ -194,10 +194,22 @@ bin/check-nix-store-refs.sh ~/.conan2-nix ``` It works on Linux too, but asserts something narrower there: the toolchain always -writes the store into `PT_INTERP` and `RUNPATH`, and CI builds inside an image -whose store is fixed for its lifetime, so that is fine. Only the binaries -[`PatchNixBinary.cmake`](../../cmake/PatchNixBinary.cmake) retargets to the -system loader have to be clean, and those are what CI checks: +writes the store into `PT_INTERP` and `RUNPATH`. That is fine for the pinned +glibc, whose path does not move, but not for the GCC runtime, which moves with +every GCC update. So [`conan/profiles/default`](../../conan/profiles/default) +links build-context packages, whose executables run during the build, with +`-static-libstdc++ -static-libgcc -Wl,--as-needed`, and +[`conan/profiles/sanitizers`](../../conan/profiles/sanitizers) does not +instrument them. CI checks that they load nothing from the store but glibc, from +the graph `conan install --format=json` writes: + +```bash +bin/check-build-context-runtime.sh graph.json +``` + +Only the binaries [`PatchNixBinary.cmake`](../../cmake/PatchNixBinary.cmake) +retargets to the system loader have to be fully clean, and those are what CI +checks: ```bash bin/check-nix-store-refs.sh build/xrpld diff --git a/nix/check-tools/macos.txt b/nix/check-tools/macos.txt index ae8acb7679..abc44606ae 100644 --- a/nix/check-tools/macos.txt +++ b/nix/check-tools/macos.txt @@ -39,6 +39,9 @@ Development tooling: ✅ file file-5.48 /nix/store/y44vpziwbzfm8020dzlqqbybyyy7lb6g-file-5.48/bin/file + ✅ jq + jq-1.8.2 + /nix/store/wm7v59a2lhj1w2k8jz53spcs1iizm9lv-jq-1.8.2-bin/bin/jq ✅ less less 710 (PCRE2 regular expressions) /nix/store/3yn3dx5fwg5i0inqqzwnxq7f6lwhpjqa-less-710/bin/less @@ -143,4 +146,4 @@ Rust toolchain: Skipping git-over-HTTPS check (CHECK_TOOLS_SKIP_CLONE is set). -✅ All 45 checked tools are present and runnable. +✅ All 46 checked tools are present and runnable. diff --git a/nix/check-tools/nix-ubuntu-amd64.txt b/nix/check-tools/nix-ubuntu-amd64.txt index ba5d5e65b1..6082bc3061 100644 --- a/nix/check-tools/nix-ubuntu-amd64.txt +++ b/nix/check-tools/nix-ubuntu-amd64.txt @@ -2,173 +2,176 @@ Detected OS: linux (Linux x86_64) Core build tools: ✅ cmake - cmake version 4.1.2 - /nix/store/r9941n32g4wyvggz2703dlplbdq8a6rd-cmake-4.1.2/bin/cmake + cmake version 4.4.3 + /nix/store/jcvvpih1046akxcwh9hdiak5q24jqcf0-cmake-4.4.3/bin/cmake ✅ conan - Conan version 2.28.1 - /nix/store/lxny9y4jvjdws7hgz1mygvb7hjrpmna5-conan-2.28.1/bin/conan + Conan version 2.32.0 + /nix/store/q0g5grbh7zm8gfhhnq5h6fm1rbs9yv3n-conan-2.32.0/bin/conan ✅ git - git version 2.54.0 - /nix/store/bcnisk3ydfgv26v2gw3zlky24g00yww2-git-2.54.0/bin/git + git version 2.55.0 + /nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git ✅ python3 - Python 3.13.13 - /nix/store/60m4rxhg2fldqaak400c0lry96ijrzqn-python3-3.13.13/bin/python3.13 + Python 3.14.7 + /nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python3.14 Development tooling: ✅ ccache ccache version 4.13.6 - /nix/store/c9wwl7s5i6rsfwvf4v0xbbmzx5m6jgfr-ccache-4.13.6/bin/ccache + /nix/store/p1a1s700dqsw1b3b8d2ba64nqw68zgpy-ccache-4.13.6/bin/ccache ✅ clang - clang version 22.1.7 - /nix/store/ff0hrp9r9i3pa5arkdw0sgmzp8d576qi-clang-wrapper-22.1.7/bin/clang + clang version 22.1.8 + /nix/store/dggxva67vs7virgsmd6xkwd6p7zsc5pn-clang-wrapper-22.1.8/bin/clang ✅ clang-22 - clang version 22.1.7 - /nix/store/dagc2rq44gfbr7w7yvvqca3yqpc9gqbq-clang-22/bin/clang-22 + clang version 22.1.8 + /nix/store/ckz6y10v5dbyswpf9f6hd8kjfv84f920-clang-22/bin/clang-22 ✅ clang++ - clang version 22.1.7 - /nix/store/ff0hrp9r9i3pa5arkdw0sgmzp8d576qi-clang-wrapper-22.1.7/bin/clang++ + clang version 22.1.8 + /nix/store/dggxva67vs7virgsmd6xkwd6p7zsc5pn-clang-wrapper-22.1.8/bin/clang++ ✅ clang++-22 - clang version 22.1.7 - /nix/store/l5m8clin1npl605wdkd8mr18ggxww3z4-clang++-22/bin/clang++-22 + clang version 22.1.8 + /nix/store/lsishk8fwbdmlwr5fbwyd3yhhjsm67qr-clang++-22/bin/clang++-22 ✅ ClangBuildAnalyzer ClangBuildAnalyzer 1.6.0 - /nix/store/bshlmn8fqw55nsnm581xqlfbahfkykxx-clangbuildanalyzer-1.6.0/bin/ClangBuildAnalyzer + /nix/store/gvx8im1c89vspwb8ixa91lr1dagbi241-clangbuildanalyzer-1.6.0/bin/ClangBuildAnalyzer ✅ curl - curl 8.20.0 (x86_64-pc-linux-gnu) libcurl/8.20.0 OpenSSL/3.6.2 zlib/1.3.2 libssh2/1.11.1 nghttp2/1.69.0 mit-krb5/1.22.1 - /nix/store/zbwymrp4lcfjc4kkk0n4779v0kjjz58z-curl-8.20.0-bin/bin/curl + curl 8.22.0 (x86_64-pc-linux-gnu) libcurl/8.22.0 OpenSSL/3.5.8 zlib/1.3.2 libssh2/1.11.1 nghttp2/1.70.0 mit-krb5/1.22.2 + /nix/store/305w9ipyg497mz9dq31abdf61qk58k29-curl-8.22.0-bin/bin/curl ✅ file - file-5.47 - /nix/store/bizyfqdw0h67wzqmp10knmf9s2pqahdb-file-5.47/bin/file + file-5.48 + /nix/store/g0fbnccaan8q0rxlw43xnbyb90i94vlc-file-5.48/bin/file + ✅ jq + jq-1.8.2 + /nix/store/m3y7hqmy20nd1ps6qy8410a326255bf0-jq-1.8.2-bin/bin/jq ✅ less - less 692 (PCRE2 regular expressions) - /nix/store/c6bacbn93qg4a7g9n4czww8rg24dvysr-less-692/bin/less + less 710 (PCRE2 regular expressions) + /nix/store/zi4d0awnc6crz18s177bv9y2yz9al3lq-less-710/bin/less ✅ make GNU Make 4.4.1 - /nix/store/d3bwqm6bymhy3pdgbvf7vxjqfp31m3j1-gnumake-4.4.1/bin/make + /nix/store/z565rgmn9vccv2h0g87z725pw610jmm8-gnumake-4.4.1/bin/make ✅ netstat net-tools 2.10 - /nix/store/jmyzqvgflnswmws7rnxx6g3zbj680xvd-net-tools-2.10/bin/netstat + /nix/store/9i6j9lrsliyz1ww2f8xx18z36wc9n38a-net-tools-2.10/bin/netstat ✅ ninja 1.13.2 - /nix/store/7a235m7crqbb4h49sak20fqxpw3n7hr0-ninja-1.13.2/bin/ninja + /nix/store/4nsdla28c4177ssp0hlyv5l2yzj8wcba-ninja-1.13.2/bin/ninja ✅ perl - v5.42.0 - /nix/store/6plwsm6pkq79yjv4xvy8csk2pd4hzr67-perl-5.42.0/bin/perl + v5.42.3 + /nix/store/8g4dmf7l8q1mf9w4wfmlcl8gvdgmhb8v-perl-5.42.3/bin/perl ✅ pkg-config 0.29.2 - /nix/store/1m05k7xgfnw6jc21xxk5681ni3ar97wf-pkg-config-wrapper-0.29.2/bin/pkg-config + /nix/store/b9izmrfjp0qnnyahdwwrzdwi87s1h179-pkg-config-wrapper-0.29.2/bin/pkg-config ✅ vim VIM - Vi IMproved 9.2 (2026 Feb 14, compiled Jan 01 1980 00:00:00) - /nix/store/hvyqx52g4g2fxhgpans3fksjj6lmlyaw-vim-9.2.0389/bin/vim + /nix/store/9swnd5pf8p8w1gwcbhdpm2yx705kbp38-vim-9.2.1001/bin/vim ✅ zip Zip 3.0 - /nix/store/qnd2ag67hrjj0b6vbmisdshf50r6s72n-zip-3.0/bin/zip + /nix/store/5ypvkry3qra47dylc9kfk36r1q9vha80-zip-3.0/bin/zip ✅ clang-apply-replacements - clang-apply-replacements version 22.1.7 - /nix/store/4zp1rjpj2xijrv4kqpwsy3ixwb2r6nlk-clang-tools-22.1.7/bin/clang-apply-replacements + clang-apply-replacements version 22.1.8 + /nix/store/37jhp4j3y339zmkx09qbr3fpfy3q0kl0-clang-tools-22.1.8/bin/clang-apply-replacements ✅ clang-apply-replacements-22 - clang-apply-replacements version 22.1.7 - /nix/store/py2wihg0a96qcppv4hjmww547xabr0fb-clang-apply-replacements-22/bin/clang-apply-replacements-22 + clang-apply-replacements version 22.1.8 + /nix/store/qg0b99zn522gl3vz9hx9ni9ianb11d1r-clang-apply-replacements-22/bin/clang-apply-replacements-22 ✅ clang-format - clang-format version 22.1.7 - /nix/store/4zp1rjpj2xijrv4kqpwsy3ixwb2r6nlk-clang-tools-22.1.7/bin/clang-format + clang-format version 22.1.8 + /nix/store/37jhp4j3y339zmkx09qbr3fpfy3q0kl0-clang-tools-22.1.8/bin/clang-format ✅ clang-format-22 - clang-format version 22.1.7 - /nix/store/kz820ccifjlwqnwqjsx7kbiajrgsmbrh-clang-format-22/bin/clang-format-22 + clang-format version 22.1.8 + /nix/store/m1al4bygpn7i13q1kalavybwh9ldg6rz-clang-format-22/bin/clang-format-22 ✅ clang-tidy - LLVM version 22.1.7 - /nix/store/4zp1rjpj2xijrv4kqpwsy3ixwb2r6nlk-clang-tools-22.1.7/bin/clang-tidy + LLVM version 22.1.8 + /nix/store/37jhp4j3y339zmkx09qbr3fpfy3q0kl0-clang-tools-22.1.8/bin/clang-tidy ✅ clang-tidy-22 - LLVM version 22.1.7 - /nix/store/gdrkvpw846lkyzh8y9p3zx50g6ml2v84-clang-tidy-22/bin/clang-tidy-22 + LLVM version 22.1.8 + /nix/store/h51xrqf8xgx4zil2rm1ydp909858y4xm-clang-tidy-22/bin/clang-tidy-22 ✅ dot - dot - graphviz version 12.2.1 (0) - /nix/store/12rgns2296s4qcja778gvcbx61z77rc4-graphviz-12.2.1/bin/dot + dot - graphviz version 15.1.1 (0) + /nix/store/f7r47nc0d13xa4c2xaaxa6dp3pzm9sp1-graphviz-15.1.1/bin/dot ✅ doxygen - 1.16.1 - /nix/store/k0vzr5lvgq1byraknzwvk51wcgpnsrkh-doxygen-1.16.1/bin/doxygen + 1.17.0 + /nix/store/q6yx2nsimj9xmckmgw4br2cnapbgnqpk-doxygen-1.17.0/bin/doxygen ✅ gcovr gcovr 8.4 - /nix/store/iyzi7fpyclqrha054adnizvif02lg49x-python3.13-gcovr-8.4/bin/gcovr + /nix/store/shx7mfl8n4kx11icvwyj5x7cmf6z5ahq-python3.14-gcovr-8.4/bin/gcovr ✅ gh - gh version 2.94.0 (nixpkgs) - /nix/store/pidh15szlsb1vc41xdsa3xbdghdazvby-gh-2.94.0/bin/gh + gh version 2.102.0 (2026-09-30) + /nix/store/66h5dr9v94x04myh2kabx06rq9763jfc-gh-2.102.0/bin/gh ✅ git-cliff - git-cliff 2.13.1 - /nix/store/1q851fs62shgjhc03fxxdkpzxdjg7k11-git-cliff-2.13.1/bin/git-cliff + git-cliff 2.14.2 + /nix/store/sl19b42d69b3w2vb9pxp6jbqk841z8vj-git-cliff-2.14.2/bin/git-cliff ✅ git-lfs - git-lfs/3.7.1 (3.7.1; linux amd64; go 1.26.3) - /nix/store/6ljwpal7b1756708m33vj0crpral7mvl-git-lfs-3.7.1/bin/git-lfs + git-lfs/3.8.0 (3.8.0; linux amd64; go 1.26.8) + /nix/store/rp9ld1f6h83xmf2rb5fpib5wmr46fy9f-git-lfs-3.8.0/bin/git-lfs ✅ gpg gpg (GnuPG) 2.4.9 - /nix/store/wx7vk8babxkgy813r70yc67vcwnmagbx-gnupg-2.4.9/bin/gpg + /nix/store/8gm9aq3sspqmvvh7c0x7djcivj2x7yvn-gnupg-2.4.9/bin/gpg ✅ pre-commit - pre-commit 4.5.1 - /nix/store/bj6i9vl34cij5h0r165y40hrjqak0bmz-pre-commit-4.5.1/bin/pre-commit + pre-commit 4.6.2 + /nix/store/6blf72f7sdmlrqjggxvk5ij4cxb7fk4c-pre-commit-4.6.2/bin/pre-commit ✅ run-clang-tidy usage: run-clang-tidy [-h] [-allow-enabling-alpha-checkers] - /nix/store/sbg911hs9dbclrzlp04br3iyfpgnaj6r-run-clang-tidy/bin/run-clang-tidy + /nix/store/a760dc8nldq1715410384bkk83idmm00-run-clang-tidy/bin/run-clang-tidy ✅ run-clang-tidy-22 usage: run-clang-tidy [-h] [-allow-enabling-alpha-checkers] - /nix/store/n8yak1ap308gvi7gmrniw0ybsx80fjws-run-clang-tidy-22/bin/run-clang-tidy-22 + /nix/store/xwh85m9sa5h8fnpnlmqwfnf2sz9l59mm-run-clang-tidy-22/bin/run-clang-tidy-22 Rust toolchain: ✅ cargo cargo 1.97.1 (c980f4866 2026-06-30) - /nix/store/88abzp43ywyzql1rhf8jh5aj5n5j7xzr-cargo-1.97.1-x86_64-unknown-linux-gnu/bin/cargo + /nix/store/60b0cz400q34wj2gzav5a41i7y6jzlw3-cargo-1.97.1-x86_64-unknown-linux-gnu/bin/cargo ✅ cargo-audit - cargo-audit-audit 0.22.1 - /nix/store/2w9if868piw98xz057sz97jnjvf7hnvf-cargo-audit-0.22.1/bin/cargo-audit + cargo-audit-audit 0.22.2 + /nix/store/kksgynfwir3pfii9qkbj3gcc61an0d4s-cargo-audit-0.22.2/bin/cargo-audit ✅ cargo-llvm-cov - cargo-llvm-cov 0.8.5 - /nix/store/jjpdf1l6izz6607a346ykra9sndzaw7h-cargo-llvm-cov-0.8.5/bin/cargo-llvm-cov + cargo-llvm-cov 0.9.0 + /nix/store/4y8qxx0mlm22hnxlw2cmbcwpxispw02h-cargo-llvm-cov-0.9.0/bin/cargo-llvm-cov ✅ cargo-nextest - cargo-nextest 0.9.137 - /nix/store/jhkr7gwyrchkml33gyns9cy0yn7b57qc-cargo-nextest-0.9.137/bin/cargo-nextest + cargo-nextest 0.9.146 + /nix/store/q0anzqrazmdr8n1049ca28098q6lv2y8-cargo-nextest-0.9.146/bin/cargo-nextest ✅ clippy-driver clippy 0.1.97 (8bab26f4f6 2026-07-14) - /nix/store/40d3mzka7r1ps71l0yv2fs6616nbw85m-rust-minimal-1.97.1/bin/clippy-driver + /nix/store/kk0kqdc4f7am21yp30rr8jcrnib5xqzy-rust-minimal-1.97.1/bin/clippy-driver ✅ rust-analyzer rust-analyzer 1.97.1 (8bab26f 2026-07-14) - /nix/store/lr3m97p3hx1k22a7c44pb0wa7rbayhfi-rust-analyzer-preview-1.97.1-x86_64-unknown-linux-gnu/bin/rust-analyzer + /nix/store/4mglk7qw9jqbv5nwlx9ahdnpcn5sz70r-rust-analyzer-preview-1.97.1-x86_64-unknown-linux-gnu/bin/rust-analyzer ✅ rust-nightly - rustc 1.99.0-nightly (87e5904f5 2026-07-20) - /nix/store/j7kf7a5h4xypzp6x1skg4dsdx2k4fwb3-rust-nightly/bin/rust-nightly + rustc 1.101.0-nightly (282215592 2026-10-04) + /nix/store/qwyzkvba3f9569wjj45b4iyb7nz7qbnr-rust-nightly/bin/rust-nightly ✅ rustc rustc 1.97.1 (8bab26f4f 2026-07-14) - /nix/store/40d3mzka7r1ps71l0yv2fs6616nbw85m-rust-minimal-1.97.1/bin/rustc + /nix/store/kk0kqdc4f7am21yp30rr8jcrnib5xqzy-rust-minimal-1.97.1/bin/rustc ✅ rustfmt rustfmt 1.9.0-stable (8bab26f4f6 2026-07-14) - /nix/store/6f1icmb2za20kxn30pgmbv5jq9fnbf4z-rustfmt-preview-1.97.1-x86_64-unknown-linux-gnu/bin/rustfmt + /nix/store/y5gf8a3hix7pnwzdwcfpf3acqhzv3xy6-rustfmt-preview-1.97.1-x86_64-unknown-linux-gnu/bin/rustfmt GCC toolchain: ✅ gcc - gcc (GCC) 15.2.0 - /nix/store/3dd6y3pq00i3r85l45jvz63wjya403nl-gcc-wrapper-15.2.0/bin/gcc + gcc (GCC) 15.3.0 + /nix/store/bslmkbaiymxxdc6lwcdb1qyw745nds5j-gcc-wrapper-15.3.0/bin/gcc ✅ gcc-15 - gcc (GCC) 15.2.0 - /nix/store/d6iri2s6bzqq5ac3fg25j6hgnn1lz44f-gcc-15/bin/gcc-15 + gcc (GCC) 15.3.0 + /nix/store/h6f2qc8kgwf7r81gwb10csvpjqfc2404-gcc-15/bin/gcc-15 ✅ g++ - g++ (GCC) 15.2.0 - /nix/store/3dd6y3pq00i3r85l45jvz63wjya403nl-gcc-wrapper-15.2.0/bin/g++ + g++ (GCC) 15.3.0 + /nix/store/bslmkbaiymxxdc6lwcdb1qyw745nds5j-gcc-wrapper-15.3.0/bin/g++ ✅ g++-15 - g++ (GCC) 15.2.0 - /nix/store/gm3msmmxq055lm9gprkfjj9d2gdz1mpg-g++-15/bin/g++-15 + g++ (GCC) 15.3.0 + /nix/store/jwncv76v61ld9l99v0b1dkmf810if65s-g++-15/bin/g++-15 ✅ cpp - cpp (GCC) 15.2.0 - /nix/store/3dd6y3pq00i3r85l45jvz63wjya403nl-gcc-wrapper-15.2.0/bin/cpp + cpp (GCC) 15.3.0 + /nix/store/bslmkbaiymxxdc6lwcdb1qyw745nds5j-gcc-wrapper-15.3.0/bin/cpp ✅ cpp-15 - cpp (GCC) 15.2.0 - /nix/store/bn3gmn0m7g4gn2i0yml46fljc7mghiq5-cpp-15/bin/cpp-15 + cpp (GCC) 15.3.0 + /nix/store/jmi558xj8v7lz2fm6wrradh40dp48zx9-cpp-15/bin/cpp-15 ✅ gcov - gcov (GCC) 15.2.0 - /nix/store/xvv5sm5i8x0ks6ypfkzl7c4j9srnxz7k-gcc-15.2.0/bin/gcov + gcov (GCC) 15.3.0 + /nix/store/n2ab7kf7mm84hna35x463mizcy52pf1h-gcc-15.3.0/bin/gcov Mold: ✅ mold - mold 2.41.0 (compatible with GNU ld) - /nix/store/2w6fpgxjzzyqmd25wzplm23dfa49a0p2-mold-unwrapped-wrapper-2.41.0/bin/mold + mold 2.42.1 (compatible with GNU ld) + /nix/store/9dcddrfxlfl9n3wfibi5jkmp22bjkvkh-mold-unwrapped-wrapper-2.42.1/bin/mold Skipping git-over-HTTPS check (CHECK_TOOLS_SKIP_CLONE is set). -✅ All 53 checked tools are present and runnable. +✅ All 54 checked tools are present and runnable. diff --git a/nix/check-tools/nix-ubuntu-arm64.txt b/nix/check-tools/nix-ubuntu-arm64.txt index 2b45230327..6b567fe1f7 100644 --- a/nix/check-tools/nix-ubuntu-arm64.txt +++ b/nix/check-tools/nix-ubuntu-arm64.txt @@ -2,173 +2,176 @@ Detected OS: linux (Linux aarch64) Core build tools: ✅ cmake - cmake version 4.1.2 - /nix/store/nkcpxjifkambzlrwh27a8igvhnbchibg-cmake-4.1.2/bin/cmake + cmake version 4.4.3 + /nix/store/39cq2g3d3flq2lmb6hc09grxs4xaax8p-cmake-4.4.3/bin/cmake ✅ conan - Conan version 2.28.1 - /nix/store/8i2gyqgc00xvxg9xm6y7n0ilncdv8imw-conan-2.28.1/bin/conan + Conan version 2.32.0 + /nix/store/vbr044x1zbq062kkw53zm0sm3slv8g56-conan-2.32.0/bin/conan ✅ git - git version 2.54.0 - /nix/store/ixp98f9avf8ikpdrmp40cj33g0dazyp9-git-2.54.0/bin/git + git version 2.55.0 + /nix/store/kj6aff4gmz3snpp35rl3gysbl9srd81a-git-2.55.0/bin/git ✅ python3 - Python 3.13.13 - /nix/store/lqn6mbgzzdrqq2qkwddcmxj9z6amdd86-python3-3.13.13/bin/python3.13 + Python 3.14.7 + /nix/store/81ag9nxz1flw3xjkv1vvqg8y2ipx2ins-python3-3.14.7/bin/python3.14 Development tooling: ✅ ccache ccache version 4.13.6 - /nix/store/2q39xi2kbi04ibga7635f2sl148d1mzv-ccache-4.13.6/bin/ccache + /nix/store/nzb1lir9sw06fn4635kfx055myqanaz8-ccache-4.13.6/bin/ccache ✅ clang - clang version 22.1.7 - /nix/store/xjqffrq9i7la058s9865ig71l9sp1ys5-clang-wrapper-22.1.7/bin/clang + clang version 22.1.8 + /nix/store/7z7by1cxa52mk7hjia1pimjvsd6aizhf-clang-wrapper-22.1.8/bin/clang ✅ clang-22 - clang version 22.1.7 - /nix/store/vcf6ilfwn57828hwzyp6zlyr24j9j6yw-clang-22/bin/clang-22 + clang version 22.1.8 + /nix/store/pqn36q5paasw7v8sjgz5fd90mfpgkkqr-clang-22/bin/clang-22 ✅ clang++ - clang version 22.1.7 - /nix/store/xjqffrq9i7la058s9865ig71l9sp1ys5-clang-wrapper-22.1.7/bin/clang++ + clang version 22.1.8 + /nix/store/7z7by1cxa52mk7hjia1pimjvsd6aizhf-clang-wrapper-22.1.8/bin/clang++ ✅ clang++-22 - clang version 22.1.7 - /nix/store/xby0f6gamr7m27zp5cndsvghbp9lgb3c-clang++-22/bin/clang++-22 + clang version 22.1.8 + /nix/store/m9a3slb0lcixm2csgjz9s0nvj9m5ysnq-clang++-22/bin/clang++-22 ✅ ClangBuildAnalyzer ClangBuildAnalyzer 1.6.0 - /nix/store/h893hd4q1bb6ily2lby5dzyfrrzd2nvj-clangbuildanalyzer-1.6.0/bin/ClangBuildAnalyzer + /nix/store/ml2991pbdhh0qcxqj9331lhpsg449vky-clangbuildanalyzer-1.6.0/bin/ClangBuildAnalyzer ✅ curl - curl 8.20.0 (aarch64-unknown-linux-gnu) libcurl/8.20.0 OpenSSL/3.6.2 zlib/1.3.2 libssh2/1.11.1 nghttp2/1.69.0 mit-krb5/1.22.1 - /nix/store/i1s0lqwlrmjd2dxzgy2p84cxqqsb0bmk-curl-8.20.0-bin/bin/curl + curl 8.22.0 (aarch64-unknown-linux-gnu) libcurl/8.22.0 OpenSSL/3.5.8 zlib/1.3.2 libssh2/1.11.1 nghttp2/1.70.0 mit-krb5/1.22.2 + /nix/store/94c2x2bl3xb7mx43sg1bs1hd7pnw83ac-curl-8.22.0-bin/bin/curl ✅ file - file-5.47 - /nix/store/dx973zg9km2w9albsib2vw9wyvacfrlw-file-5.47/bin/file + file-5.48 + /nix/store/66sd1x1hls0yijibn00iz08jh4fnas9z-file-5.48/bin/file + ✅ jq + jq-1.8.2 + /nix/store/kr5py0dcqc9f3l9148qd1axh0z77lld3-jq-1.8.2-bin/bin/jq ✅ less - less 692 (PCRE2 regular expressions) - /nix/store/1blb3s7hhsr77wqi598m6k1qkfp3ms0w-less-692/bin/less + less 710 (PCRE2 regular expressions) + /nix/store/n6z9dv3yjlgvfx1nmrx6qzyv8vzim1l2-less-710/bin/less ✅ make GNU Make 4.4.1 - /nix/store/9ngw1ippk25jjj5fjxv36xbp6iq7rxdx-gnumake-4.4.1/bin/make + /nix/store/q07jxvck60qgrg4p1ywypddh5zz6i9s2-gnumake-4.4.1/bin/make ✅ netstat net-tools 2.10 - /nix/store/7vdsz21f0s499s5yyqzp5s4676q4yxdd-net-tools-2.10/bin/netstat + /nix/store/rfmhd3f8drg3wqyr2mhyrlkd7vyp2pxv-net-tools-2.10/bin/netstat ✅ ninja 1.13.2 - /nix/store/8ksx98gsbn5lmlizcmw57yd4sg0k2p58-ninja-1.13.2/bin/ninja + /nix/store/lfkdyggn1ffslfd830l35jrvapr5lzri-ninja-1.13.2/bin/ninja ✅ perl - v5.42.0 - /nix/store/5wnly69vv1i3y97al4v3xrqymf9hlzgq-perl-5.42.0/bin/perl + v5.42.3 + /nix/store/nyp5q4d2cb0pghi4i7nscb97bqkb6kp3-perl-5.42.3/bin/perl ✅ pkg-config 0.29.2 - /nix/store/c7vwy0gl1q0agl2h22gi0m9dg7xxad2l-pkg-config-wrapper-0.29.2/bin/pkg-config + /nix/store/h82n3d0wdrgskdc3yvmz5l3c50h2snvp-pkg-config-wrapper-0.29.2/bin/pkg-config ✅ vim VIM - Vi IMproved 9.2 (2026 Feb 14, compiled Jan 01 1980 00:00:00) - /nix/store/v8c7pvx26irvy9k5sbwd183cyvckzzb3-vim-9.2.0389/bin/vim + /nix/store/h39h0qq4i80sp3yd7sxjn2wf497v5rln-vim-9.2.1001/bin/vim ✅ zip Zip 3.0 - /nix/store/5mh19mvbv9ym2sm9vymyyaac5l2cj2jq-zip-3.0/bin/zip + /nix/store/lfwhq17wfcmjy823fldhlhxj1hjchdzc-zip-3.0/bin/zip ✅ clang-apply-replacements - clang-apply-replacements version 22.1.7 - /nix/store/s53p2m776iqaz7acgr5csgpsd18w15h7-clang-tools-22.1.7/bin/clang-apply-replacements + clang-apply-replacements version 22.1.8 + /nix/store/6jr2pbz9mzxznf47lw1w6ss1arqsakw6-clang-tools-22.1.8/bin/clang-apply-replacements ✅ clang-apply-replacements-22 - clang-apply-replacements version 22.1.7 - /nix/store/bg4kn8z81hk7b9284rjqvr51wpfjqc24-clang-apply-replacements-22/bin/clang-apply-replacements-22 + clang-apply-replacements version 22.1.8 + /nix/store/mgcaw2063w2d4s61fz023bd0pf3vq5y7-clang-apply-replacements-22/bin/clang-apply-replacements-22 ✅ clang-format - clang-format version 22.1.7 - /nix/store/s53p2m776iqaz7acgr5csgpsd18w15h7-clang-tools-22.1.7/bin/clang-format + clang-format version 22.1.8 + /nix/store/6jr2pbz9mzxznf47lw1w6ss1arqsakw6-clang-tools-22.1.8/bin/clang-format ✅ clang-format-22 - clang-format version 22.1.7 - /nix/store/79v57mzcw8ng8kl7p961ck08ymhp31v7-clang-format-22/bin/clang-format-22 + clang-format version 22.1.8 + /nix/store/2iwvl9784yrjfjhfac46z5ihwmbaavk7-clang-format-22/bin/clang-format-22 ✅ clang-tidy - LLVM version 22.1.7 - /nix/store/s53p2m776iqaz7acgr5csgpsd18w15h7-clang-tools-22.1.7/bin/clang-tidy + LLVM version 22.1.8 + /nix/store/6jr2pbz9mzxznf47lw1w6ss1arqsakw6-clang-tools-22.1.8/bin/clang-tidy ✅ clang-tidy-22 - LLVM version 22.1.7 - /nix/store/wdyd6cb9z1lyi37lbzvwldgcc7yv1n5c-clang-tidy-22/bin/clang-tidy-22 + LLVM version 22.1.8 + /nix/store/2b7hn8hyp02yfarh8c40c4jsjkm789l0-clang-tidy-22/bin/clang-tidy-22 ✅ dot - dot - graphviz version 12.2.1 (0) - /nix/store/58rrk4yzwpmyxvl8cqm18h3dhv24zf00-graphviz-12.2.1/bin/dot + dot - graphviz version 15.1.1 (0) + /nix/store/vz4zb8d1rfigzzdn3i0hd4kff28vk02l-graphviz-15.1.1/bin/dot ✅ doxygen - 1.16.1 - /nix/store/hq32kzwpl89wgr49iq0gmqn9r5n072zq-doxygen-1.16.1/bin/doxygen + 1.17.0 + /nix/store/6q4z332wc9jnvad71wjj87lgjxidhgzl-doxygen-1.17.0/bin/doxygen ✅ gcovr gcovr 8.4 - /nix/store/sml3xbbfhhlhk6h7jnlg19pdbx9b764b-python3.13-gcovr-8.4/bin/gcovr + /nix/store/v548fjz51k2nmr257vjnd0zp3bxpc2r1-python3.14-gcovr-8.4/bin/gcovr ✅ gh - gh version 2.94.0 (nixpkgs) - /nix/store/7hh2qi0gj2ifbxbl56cjzbiyfc379bji-gh-2.94.0/bin/gh + gh version 2.102.0 (2026-09-30) + /nix/store/vgg6gnq74h76b4r2ac2q9366f2s5qxwx-gh-2.102.0/bin/gh ✅ git-cliff - git-cliff 2.13.1 - /nix/store/bidn3pz53yd6qlg711917xx0q10hqmqv-git-cliff-2.13.1/bin/git-cliff + git-cliff 2.14.2 + /nix/store/hrlgliq7l3fl2qrdlc197mvscs4n03rd-git-cliff-2.14.2/bin/git-cliff ✅ git-lfs - git-lfs/3.7.1 (3.7.1; linux arm64; go 1.26.3) - /nix/store/4rsklvkbac5bayy0zv12kxyvspi4sshd-git-lfs-3.7.1/bin/git-lfs + git-lfs/3.8.0 (3.8.0; linux arm64; go 1.26.8) + /nix/store/pa2g4xdvr4a73m6mv4cqs0pik1ka1xp5-git-lfs-3.8.0/bin/git-lfs ✅ gpg gpg (GnuPG) 2.4.9 - /nix/store/ka4i8zz5ni3rzqnzcxbfvwr95fk8pn6q-gnupg-2.4.9/bin/gpg + /nix/store/3qc90b7qkxz7na3xnpd2qb8yvcq8zdp6-gnupg-2.4.9/bin/gpg ✅ pre-commit - pre-commit 4.5.1 - /nix/store/n981w6hjfar2l81kxbxs2wxl64vwa5kj-pre-commit-4.5.1/bin/pre-commit + pre-commit 4.6.2 + /nix/store/5f3av75nc7n7xbf2hlvlagzpp2g8g562-pre-commit-4.6.2/bin/pre-commit ✅ run-clang-tidy usage: run-clang-tidy [-h] [-allow-enabling-alpha-checkers] - /nix/store/4z2fyklg78klallr7x9j02kz92hnxp4m-run-clang-tidy/bin/run-clang-tidy + /nix/store/b1yccjmij9qiha8a8d9yxayjdh5cg2vq-run-clang-tidy/bin/run-clang-tidy ✅ run-clang-tidy-22 usage: run-clang-tidy [-h] [-allow-enabling-alpha-checkers] - /nix/store/f8m0p9ad40brp9ahy4i0h27kqjkya1j9-run-clang-tidy-22/bin/run-clang-tidy-22 + /nix/store/v75dyrp7vwdgx5w2fzwsy00lf94qpz0i-run-clang-tidy-22/bin/run-clang-tidy-22 Rust toolchain: ✅ cargo cargo 1.97.1 (c980f4866 2026-06-30) - /nix/store/6hch2qrr86n2sa2m90lrpxrfxxwbkayl-cargo-1.97.1-aarch64-unknown-linux-gnu/bin/cargo + /nix/store/nci0zxxj2fiq0dlkpqzbnqfh27wz4sq4-cargo-1.97.1-aarch64-unknown-linux-gnu/bin/cargo ✅ cargo-audit - cargo-audit-audit 0.22.1 - /nix/store/9rxbrn9aa2r1z96186s69pc7vzizyfch-cargo-audit-0.22.1/bin/cargo-audit + cargo-audit-audit 0.22.2 + /nix/store/zldaj03mfz9f21yiby5yymq7v8vqygd7-cargo-audit-0.22.2/bin/cargo-audit ✅ cargo-llvm-cov - cargo-llvm-cov 0.8.5 - /nix/store/vwjsi159n89szrx4yh5pc3jlf2gp4fld-cargo-llvm-cov-0.8.5/bin/cargo-llvm-cov + cargo-llvm-cov 0.9.0 + /nix/store/iwpcfjah31fgn99ph32ajzz7i22j6al5-cargo-llvm-cov-0.9.0/bin/cargo-llvm-cov ✅ cargo-nextest - cargo-nextest 0.9.137 - /nix/store/qb6bcg2fjvm3r9s9j98nmffmf9xwh45s-cargo-nextest-0.9.137/bin/cargo-nextest + cargo-nextest 0.9.146 + /nix/store/p5svqr8x1rr7b1i8595pr8qafsr7s6fm-cargo-nextest-0.9.146/bin/cargo-nextest ✅ clippy-driver clippy 0.1.97 (8bab26f4f6 2026-07-14) - /nix/store/a6p27cg6b8szfixfyvkssx6l0c345zw8-rust-minimal-1.97.1/bin/clippy-driver + /nix/store/ny64zks16ms5d70jk1qsiwsk0fr33ipp-rust-minimal-1.97.1/bin/clippy-driver ✅ rust-analyzer rust-analyzer 1.97.1 (8bab26f 2026-07-14) - /nix/store/262830dlw2517lnagfx7i7agqgl4fmsd-rust-analyzer-preview-1.97.1-aarch64-unknown-linux-gnu/bin/rust-analyzer + /nix/store/d9s5skhvi1qxj940mylwym2rjicnc2kq-rust-analyzer-preview-1.97.1-aarch64-unknown-linux-gnu/bin/rust-analyzer ✅ rust-nightly - rustc 1.99.0-nightly (87e5904f5 2026-07-20) - /nix/store/c59pxk1yikdlf129qwyg4fplmxcrha0k-rust-nightly/bin/rust-nightly + rustc 1.101.0-nightly (282215592 2026-10-04) + /nix/store/rbsf1gr6f9ikv2izlyh8im117w6hs7h5-rust-nightly/bin/rust-nightly ✅ rustc rustc 1.97.1 (8bab26f4f 2026-07-14) - /nix/store/a6p27cg6b8szfixfyvkssx6l0c345zw8-rust-minimal-1.97.1/bin/rustc + /nix/store/ny64zks16ms5d70jk1qsiwsk0fr33ipp-rust-minimal-1.97.1/bin/rustc ✅ rustfmt rustfmt 1.9.0-stable (8bab26f4f6 2026-07-14) - /nix/store/nd8g81wv1smnvdpy4whpcyv2siwjmaan-rustfmt-preview-1.97.1-aarch64-unknown-linux-gnu/bin/rustfmt + /nix/store/dplvgjikmv8909rk0dkqr90ryjg7xn0j-rustfmt-preview-1.97.1-aarch64-unknown-linux-gnu/bin/rustfmt GCC toolchain: ✅ gcc - gcc (GCC) 15.2.0 - /nix/store/rn6svg593xsmn8qcjzk8x9pa1i62c4kb-gcc-wrapper-15.2.0/bin/gcc + gcc (GCC) 15.3.0 + /nix/store/g7z555pl99vnwif4jxa05nk1qdc33i1n-gcc-wrapper-15.3.0/bin/gcc ✅ gcc-15 - gcc (GCC) 15.2.0 - /nix/store/h489d1rmjisfbxh5kmsb0a7c35j8qsdf-gcc-15/bin/gcc-15 + gcc (GCC) 15.3.0 + /nix/store/vbdsfjk3j1xy5z329sl2d8vp6mq6x09i-gcc-15/bin/gcc-15 ✅ g++ - g++ (GCC) 15.2.0 - /nix/store/rn6svg593xsmn8qcjzk8x9pa1i62c4kb-gcc-wrapper-15.2.0/bin/g++ + g++ (GCC) 15.3.0 + /nix/store/g7z555pl99vnwif4jxa05nk1qdc33i1n-gcc-wrapper-15.3.0/bin/g++ ✅ g++-15 - g++ (GCC) 15.2.0 - /nix/store/9ywmhz8bmzknrn3pn84g46z8hj3vrmw5-g++-15/bin/g++-15 + g++ (GCC) 15.3.0 + /nix/store/9ghl998ry4cxlsg6hnq5rn2iipnlkccm-g++-15/bin/g++-15 ✅ cpp - cpp (GCC) 15.2.0 - /nix/store/rn6svg593xsmn8qcjzk8x9pa1i62c4kb-gcc-wrapper-15.2.0/bin/cpp + cpp (GCC) 15.3.0 + /nix/store/g7z555pl99vnwif4jxa05nk1qdc33i1n-gcc-wrapper-15.3.0/bin/cpp ✅ cpp-15 - cpp (GCC) 15.2.0 - /nix/store/vmjilh1b830qz9yh0a1jj5ads0jxizdk-cpp-15/bin/cpp-15 + cpp (GCC) 15.3.0 + /nix/store/wj0mv2fv2lhglvpjzhscqpbigkvik6br-cpp-15/bin/cpp-15 ✅ gcov - gcov (GCC) 15.2.0 - /nix/store/rmwf5hpi1y2m1wpnfvlxmrhksm4djk2j-gcc-15.2.0/bin/gcov + gcov (GCC) 15.3.0 + /nix/store/mszfsj00qnv9ygqcqz3w02qzxxskhvlb-gcc-15.3.0/bin/gcov Mold: ✅ mold - mold 2.41.0 (compatible with GNU ld) - /nix/store/f5qh5a0bx1dslmnf5n5gx0s6aljbswq3-mold-unwrapped-wrapper-2.41.0/bin/mold + mold 2.42.1 (compatible with GNU ld) + /nix/store/gbq334xbibaz4gn184j7gs58m2spgwi7-mold-unwrapped-wrapper-2.42.1/bin/mold Skipping git-over-HTTPS check (CHECK_TOOLS_SKIP_CLONE is set). -✅ All 53 checked tools are present and runnable. +✅ All 54 checked tools are present and runnable.