From 42f120a01e34ff3fb5c9acf6b027b5b9c296d36c Mon Sep 17 00:00:00 2001 From: Nicolas Palpacuer Date: Tue, 28 Jul 2026 10:34:13 -0400 Subject: [PATCH 1/3] Stop pinning python3.11 in the linux setup path bin/setup.sh assumed it would only ever run in canon, which has python3.11. The Viam cloud build image used by `viam module reload` and `viam module build` is Debian bullseye, which has no python3.11 package, so the setup step fails before anything is compiled: + sudo apt install -y cmake python3.11 python3.11-venv wget E: Unable to locate package python3.11 E: Couldn't find any package by glob 'python3.11' Cloud builds for this module have been failing this way since at least January 2026. Install the unversioned python3 / python3-venv instead: conan requires >= 3.6, bullseye ships 3.9, and the venv further down is already created with whatever python3 resolves to. GitHub Actions is unaffected: it runs its own apt install inside the rdk-devenv container, where python3.11 is present. Co-Authored-By: Claude Opus 5 (1M context) --- bin/setup.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bin/setup.sh b/bin/setup.sh index 6457a1ae..95af8c39 100755 --- a/bin/setup.sh +++ b/bin/setup.sh @@ -19,8 +19,11 @@ if [[ ${OS} == "darwin" ]]; then brew install cmake python@3.11 wget unzip || true elif [[ ${OS} == "linux" ]]; then echo "Detected Linux" - # NOTE: this is written under the assumption that it will be built in canon - sudo apt -y update && sudo apt -y upgrade && sudo apt install -y cmake python3.11 python3.11-venv wget + # Do not pin a python minor version here. This runs both in canon (python3.11) and in the Viam + # cloud build image used by `viam module reload` / `viam module build`, which is Debian bullseye + # and has no python3.11 package at all, so pinning it fails the build outright. Conan needs + # >= 3.6, and the venv below is created with whatever python3 resolves to. + sudo apt -y update && sudo apt -y upgrade && sudo apt install -y cmake python3 python3-venv wget else echo "Unsupported OS: ${OS}" exit 1 From 8d6be2803f819e48fdc6629fb9dc4b19ecb68ed0 Mon Sep 17 00:00:00 2001 From: Nicolas Palpacuer Date: Tue, 28 Jul 2026 10:40:53 -0400 Subject: [PATCH 2/3] Bound the transitive xtensor range to keep the graph resolvable viam-cpp-sdk requests an unbounded `xtensor/[>=0.24.3]` whenever cppstd is 17 or higher. That now resolves to xtensor 0.27.1, which itself requires C++20, so dependency resolution fails outright against conancenter: xtensor/0.27.1: Invalid: Current cppstd (17) is lower than the required C++ standard (20). Exited with code exit status 6 This blocks `viam module reload` in the Viam cloud builder and any local build via bin/setup.sh. Override the range downstream so it resolves to 0.25.0. This is a workaround: the real fix belongs in viam-cpp-sdk's _xtensor_requires(), which should bound its range the way it already does for the cppstd <= 14 case. Drop this once that lands. Co-Authored-By: Claude Opus 5 (1M context) --- conanfile.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/conanfile.py b/conanfile.py index df16d499..35a84ae2 100644 --- a/conanfile.py +++ b/conanfile.py @@ -33,6 +33,11 @@ def requirements(self): self.requires("libcurl/8.9.1") self.requires("libzip/1.11.1") self.requires("libpng/1.6.50") + # viam-cpp-sdk pulls xtensor in transitively, and at cppstd >= 17 it asks for an unbounded + # `xtensor/[>=0.24.3]`. That now resolves to 0.27.1, which itself requires C++20, so the + # graph fails to resolve at all against conancenter. Bound it until the SDK bounds its own + # range. Remove this once viam-cpp-sdk's _xtensor_requires() is fixed upstream. + self.requires("xtensor/[>=0.24.3 <0.27]", override=True) def validate(self): check_min_cppstd(self, 17) From d3ec06e66edc3651eb87d3840992330eee71f07e Mon Sep 17 00:00:00 2001 From: Nicolas Palpacuer Date: Tue, 28 Jul 2026 10:53:41 -0400 Subject: [PATCH 3/3] Point the xtensor override at the SDK bump that removes it The upstream range was already bounded in viam-cpp-sdk releases/v0.37.0 (PR viamrobotics/viam-cpp-sdk#650), so the removal trigger is bumping the pin off 0.20.1, not waiting on an upstream fix. Co-Authored-By: Claude Opus 5 (1M context) --- conanfile.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/conanfile.py b/conanfile.py index 35a84ae2..6440e599 100644 --- a/conanfile.py +++ b/conanfile.py @@ -33,10 +33,11 @@ def requirements(self): self.requires("libcurl/8.9.1") self.requires("libzip/1.11.1") self.requires("libpng/1.6.50") - # viam-cpp-sdk pulls xtensor in transitively, and at cppstd >= 17 it asks for an unbounded - # `xtensor/[>=0.24.3]`. That now resolves to 0.27.1, which itself requires C++20, so the - # graph fails to resolve at all against conancenter. Bound it until the SDK bounds its own - # range. Remove this once viam-cpp-sdk's _xtensor_requires() is fixed upstream. + # viam-cpp-sdk pulls xtensor in transitively, and 0.20.1 asks for an unbounded + # `xtensor/[>=0.24.3]` at cppstd >= 17. That now resolves to 0.27.1, which itself requires + # C++20, so the graph fails to resolve at all against conancenter. The SDK added the + # matching upper bound in releases/v0.37.0, so drop this override once the pin above moves + # to v0.37.0 or newer rather than carrying it forward. self.requires("xtensor/[>=0.24.3 <0.27]", override=True) def validate(self):