Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
49e7079
feat: define DimOS messages and generate Python typing interfaces
TomCC7 Sep 21, 2026
1870b69
feat: carry generated CDR through typed transports and browser channels
TomCC7 Sep 22, 2026
999f8f7
Merge branch 'feat/cdr-mcap-viewers' into feat/cdr-runtime-cutover
TomCC7 Sep 22, 2026
b2dacb0
fix: migrate relay consumers and stop commands to generated messages
TomCC7 Sep 22, 2026
dd99350
feat: exchange generated CDR messages through native SDKs
TomCC7 Sep 22, 2026
2aa039f
feat: migrate lidar and mapping streams to generated CDR
TomCC7 Sep 22, 2026
e1f0630
feat: migrate camera and lidar native adapters to CDR
TomCC7 Sep 22, 2026
b9649e3
feat: accept external generated codecs in native module ports
TomCC7 Sep 22, 2026
b2a67cc
test: verify generated TF through Python and Rust workers
TomCC7 Sep 22, 2026
0f13f1a
fix: validate and bound raw LCM fragment reassembly
TomCC7 Sep 22, 2026
be2cf4e
test: exercise three-language CDR coordinator blueprint
TomCC7 Sep 22, 2026
2097dcb
feat: use generated transforms in Python TF and replay lookup
TomCC7 Sep 22, 2026
d23389c
feat: migrate static TF publishers and robot mount transforms
TomCC7 Sep 22, 2026
744dd07
feat: migrate calibration and webcam messages to generated CDR
TomCC7 Sep 22, 2026
89823de
feat: use generated CDR values for Go2 sensors and simulation lidar
TomCC7 Sep 22, 2026
4ca73a8
feat: publish generated pose and TF values from Unitree connections
TomCC7 Sep 22, 2026
7ee8107
feat: persist and replay generated messages with CDR storage codecs
TomCC7 Sep 22, 2026
1348e1f
refactor: separate recorder file policy from embedding modules
TomCC7 Sep 22, 2026
6207275
feat: record generated CDR messages with native schemas
TomCC7 Sep 22, 2026
e1986e8
docs: capture packaged native recorder verification
TomCC7 Sep 22, 2026
e895cf2
feat: convert optional ROS bridge directly through CDR
TomCC7 Sep 22, 2026
09cda54
feat: use generated messages for Galaxea control and feedback
TomCC7 Sep 22, 2026
a5a9a7c
feat: exchange generated whole-body commands and feedback
TomCC7 Sep 22, 2026
7055991
feat: use generated G1 feedback and coordinator joint streams
TomCC7 Sep 22, 2026
72f11fc
feat: use generated base-motion commands and odometry
TomCC7 Sep 22, 2026
11daaf8
feat: consume generated joint states in planning selection and monito…
TomCC7 Sep 22, 2026
a021f07
refactor: use generated joints in planning backends and filter CDR cl…
TomCC7 Sep 22, 2026
a0a6019
refactor: execute generated CDR trajectories across manipulation and …
TomCC7 Sep 22, 2026
d8c68e8
refactor: use generated poses and grasp proposals in planning and con…
TomCC7 Sep 22, 2026
9c6e146
refactor: render generated clouds and occupancy maps
TomCC7 Sep 22, 2026
20c02b8
refactor: plan and resample generated CDR paths
TomCC7 Sep 22, 2026
60e2681
refactor: run replanning navigation on generated messages
TomCC7 Sep 22, 2026
2d6058b
refactor: feed generated voxel maps into navigation
TomCC7 Sep 22, 2026
9a18da2
refactor: use generated paths in follower and odometry history
TomCC7 Sep 22, 2026
bef1567
refactor: select frontier goals from generated maps
TomCC7 Sep 22, 2026
da98c7a
refactor: select patrol goals from generated maps
TomCC7 Sep 22, 2026
7dc8158
refactor: arbitrate movement with generated messages
TomCC7 Sep 22, 2026
eff7a27
refactor: use generated camera info in visual servo controller
TomCC7 Sep 22, 2026
dedaf1f
refactor: preserve generated cloud records in detection filters
TomCC7 Sep 22, 2026
4045c9d
refactor: project generated clouds and depth into detections
TomCC7 Sep 22, 2026
56cd7e5
refactor: use generated images and wire types for bbox detections
TomCC7 Sep 22, 2026
c6e2a0c
refactor: serialize generated detection collections
TomCC7 Sep 22, 2026
a9e7590
refactor: use generated images across vision and tracking boundaries
TomCC7 Sep 22, 2026
7509447
test: exercise generated person-follow control thread
TomCC7 Sep 22, 2026
ee410be
refactor: serialize generated 3D bbox and marker detections
TomCC7 Sep 22, 2026
3b414c4
refactor: detect fiducials from generated images and transforms
TomCC7 Sep 22, 2026
659bbca
refactor: stream generated fiducial detections and poses
TomCC7 Sep 22, 2026
b074f38
refactor: publish generated marker TF and desk calibration
TomCC7 Sep 22, 2026
ad7a2dc
refactor: generate bbox navigation goals from CDR detections
TomCC7 Sep 22, 2026
ea1bb6b
refactor: use generated CDR types in holonomic tracking
TomCC7 Sep 22, 2026
10c7d3f
refactor: run holonomic path following on generated CDR messages
TomCC7 Sep 22, 2026
e14dff9
refactor: gate and resample generated CDR navigation paths
TomCC7 Sep 22, 2026
3eb6035
refactor: generate CDR paths at the MLS Python boundary
TomCC7 Sep 23, 2026
6511526
refactor: render generated MLS geometry with Rerun adapters
TomCC7 Sep 23, 2026
c40ab5e
refactor: evaluate navigation from generated CDR recordings
TomCC7 Sep 23, 2026
94630c2
refactor: use generated clouds and TF in offline planner rendering
TomCC7 Sep 23, 2026
8d84ffa
refactor: replay generated CDR streams in ray-tracing CLI
TomCC7 Sep 23, 2026
f0290e4
refactor: dispatch generated TF messages in Rerun bridge
TomCC7 Sep 23, 2026
5d39f0c
refactor: render generated camera messages in Rerun bridge
TomCC7 Sep 23, 2026
c5a25c6
refactor: render generated detections in Rerun bridge
TomCC7 Sep 23, 2026
0a6bc3a
refactor: render generated point clouds in Rerun bridge
TomCC7 Sep 23, 2026
afc71f9
refactor: render generated navigation messages in Rerun bridge
TomCC7 Sep 23, 2026
60f9019
fix: keep Rerun bridge archetype dispatch correctly typed
TomCC7 Sep 23, 2026
35227d9
refactor: render generated occupancy grids in Rerun bridge
TomCC7 Sep 23, 2026
4acf946
test: verify live CDR image delivery through Rerun bridge
TomCC7 Sep 23, 2026
bbb433c
test: verify live CDR viewer delivery over Zenoh and LCM
TomCC7 Sep 23, 2026
295e39e
refactor: emit generated CDR messages from viewer controls
TomCC7 Sep 23, 2026
80e5969
refactor: use generated messages in command center
TomCC7 Sep 23, 2026
0bc00fc
refactor: align shared interfaces and VLM with generated messages
TomCC7 Sep 23, 2026
ae00dd3
refactor: generate navigation skill goals with CDR types
TomCC7 Sep 23, 2026
87ad59d
refactor: serialize generated observation images through MCP
TomCC7 Sep 23, 2026
08cb4eb
refactor: publish generated keyboard teleop commands
TomCC7 Sep 23, 2026
be38320
refactor: compress generated maps for hosted teleop
TomCC7 Sep 23, 2026
dbf5583
feat: generate video telemetry and demonstrate local CDR message auth…
TomCC7 Sep 30, 2026
be3b8c7
feat: migrate phone commands to generated CDR frames
TomCC7 Sep 30, 2026
dd9a5e3
feat: migrate hosted Go2 command boundaries to generated messages
TomCC7 Sep 30, 2026
1e7705a
fix: provision CDR build dependencies and migrate browser replay fixt…
TomCC7 Sep 30, 2026
febed89
fix: align native bake contracts and camera mux with CDR
TomCC7 Sep 30, 2026
b641878
refactor: migrate generated message consumers and telemetry helpers
TomCC7 Sep 30, 2026
01ea441
fix: restore isolated Cargo generation and migrate offline image cons…
TomCC7 Sep 30, 2026
6547f9c
refactor: migrate offline VQA frames and add synthetic CDR documentat…
TomCC7 Sep 30, 2026
c690ef5
refactor: project generated RGB-D clouds and repair codegen test entr…
TomCC7 Sep 30, 2026
201a305
refactor: migrate offline memory and map consumers to generated messages
TomCC7 Sep 30, 2026
aecb4d7
fix: migrate CDR consumer fixtures and replay contracts
TomCC7 Sep 30, 2026
42c3f44
refactor: migrate CDR camera and scene consumers
TomCC7 Sep 30, 2026
31800fc
fix(cdr): migrate offline mapping and remaining recorder consumers
TomCC7 Sep 30, 2026
2334dd0
fix(cdr): complete relocalization and offline memory viewer consumers
TomCC7 Sep 30, 2026
83c7a3a
refactor: migrate compressed image transports and raw message adapters
TomCC7 Sep 30, 2026
23b8e1d
docs: split compressed image validation evidence into focused page
TomCC7 Sep 30, 2026
6b1c9c0
refactor: align recorder graphs and isolated Python with generated me…
TomCC7 Sep 30, 2026
2c0ce03
fix: adapt generated images for dataset export and explain recording …
TomCC7 Sep 30, 2026
e386163
refactor: migrate Unitree Spot and camera boundaries to generated mes…
TomCC7 Sep 30, 2026
36a0fd2
refactor: migrate WebXR camera and PGO consumers to generated CDR
TomCC7 Sep 30, 2026
5d746bd
refactor: migrate hosted arm DDS and simulation CDR consumers
TomCC7 Sep 30, 2026
3a233c5
test: isolate drone video replay from fixture downloads
TomCC7 Sep 30, 2026
a36cc95
refactor: migrate simulation eval and experimental CDR consumers
TomCC7 Sep 30, 2026
11bae55
refactor: finish generated entity control and eval consumers
TomCC7 Sep 30, 2026
359a16c
refactor: migrate manual tools and sensor moments to generated messages
TomCC7 Sep 30, 2026
f4a269c
test: migrate CDR fixture routing and repair export assertion
TomCC7 Sep 30, 2026
f58e343
fix: align native recorder topics and verify blueprint replay
TomCC7 Sep 30, 2026
0bac7f4
test: migrate stamped covariance and scalar stream contracts
TomCC7 Sep 30, 2026
0f710a8
refactor: preserve image codecs in generated message helpers
TomCC7 Sep 30, 2026
9398cae
refactor: migrate numeric geometry and map regression contracts
TomCC7 Sep 30, 2026
547b95b
refactor: migrate geometry operations and construction contracts
TomCC7 Sep 30, 2026
dc4e590
docs: record geometry migration validation and multicast limit
TomCC7 Sep 30, 2026
7a97da7
refactor: retire Python LCM message dependency and old examples
TomCC7 Sep 30, 2026
cd4fa2e
test: replace implicit legacy moment recordings with CDR fixtures
TomCC7 Sep 30, 2026
c76bc12
test: exercise memory pipelines with deterministic CDR recordings
TomCC7 Sep 30, 2026
75b31da
refactor: migrate DimSim browser and bridge messages to CDR
TomCC7 Sep 30, 2026
b6884a1
test: replace real detection fixtures with verified CDR recordings
TomCC7 Sep 30, 2026
9cd5ced
ci: verify the release wheel matrix without publishing
TomCC7 Sep 30, 2026
154e9b7
feat: preserve generated message ownership across native packages
TomCC7 Sep 30, 2026
38261d5
feat: build standalone message projects through CLI and pip
TomCC7 Oct 1, 2026
0bde189
feat: document and verify external three-language message projects
TomCC7 Oct 1, 2026
bd5e107
fix: give exported native SDK a standalone Cargo workspace
TomCC7 Oct 1, 2026
5ee0cc7
fix: prepare clean CI runners for external message examples
TomCC7 Oct 1, 2026
c746ec6
fix: distribute native messages at their configured package version
TomCC7 Oct 1, 2026
7a862e4
docs: use current dimOS branding in message guide
TomCC7 Oct 1, 2026
cb98281
test: expose worker crashes before CI job timeout
TomCC7 Oct 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/docker/message-codegen-reference.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
FROM ros:jazzy-ros-base

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential cmake python3-colcon-common-extensions \
build-essential cmake python3-colcon-common-extensions python3-pytest python3-typing-extensions \
ros-jazzy-common-interfaces ros-jazzy-rosidl-default-generators \
&& rm -rf /var/lib/apt/lists/*

Expand Down
33 changes: 33 additions & 0 deletions .github/scripts/message_wheel_smoke.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env python3
# Copyright 2026 Dimensional Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Verify the standalone built-in wheel without installing the robot runtime."""

import json
from pathlib import Path

import dimos_generated as messages
from dimos_generated_schemas.provider import package_root

assert messages.__dimos_version__ == "0.1.0"
header = messages.std_msgs.msg.Header()
assert type(header).decode(header.encode()).encode() == header.encode()
root = Path(package_root())
metadata = json.loads((root / "message-package.json").read_text())
assert metadata["shared"]
assert "std_msgs/msg/Header" in metadata["owned"]
assert (root / "schemas/std_msgs/msg/Header.msg").is_file()
assert (root / "lib/cmake/dimos_generated/dimos_generatedConfig.cmake").is_file()
assert (root / "rust/Cargo.toml").is_file()
56 changes: 51 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -277,9 +277,17 @@ jobs:
with:
enable-cache: true
prune-cache: true
- name: Build standalone CDR dependency
run: bash scripts/setup_message_codegen.sh
- name: Install lint dependencies
run: uv sync --only-group lint --frozen
- name: Install native build typing dependencies
run: uv pip install --no-deps pybind11==3.0.1 types-setuptools==77.0.2.20250328
- name: Generate CDR typing package
run: uv run python -m dimos.message_codegen.generate --output build/messages
- name: Mypy
env:
MYPYPATH: build/messages/typing
run: uv run mypy

# The deno-fmt pre-commit hook needs deno on PATH.
Expand Down Expand Up @@ -333,6 +341,8 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y portaudio19-dev
- name: Build standalone CDR dependency
run: bash scripts/setup_message_codegen.sh
- name: Build and test PyO3 bindings
# PyO3 extension modules (cdylib + `extension-module`) are the one case
# that still needs a plain build: pytest imports the compiled .so.
Expand Down Expand Up @@ -374,7 +384,7 @@ jobs:
sudo apt-get update
# lcm.pc carries `Requires: glib-2.0`, so pkg-config cannot resolve
# lcm at all without glib's own .pc file
sudo apt-get install -y liblcm-dev libglib2.0-dev nlohmann-json3-dev
sudo apt-get install -y liblcm-dev libglib2.0-dev nlohmann-json3-dev portaudio19-dev libturbojpeg
base=https://github.com/eclipse-zenoh
curl -fsSL -o /tmp/zenoh-c.zip \
"$base/zenoh-c/releases/download/$ZENOH_VERSION/zenoh-c-$ZENOH_VERSION-x86_64-unknown-linux-gnu-standalone.zip"
Expand All @@ -390,13 +400,39 @@ jobs:
sudo unzip -q /tmp/zenoh-c.zip -d /usr/local
sudo unzip -q /tmp/zenoh-cpp.zip -d /usr/local
sudo ldconfig
- name: Generate native CDR message package
run: |
bash scripts/setup_message_codegen.sh
bash scripts/install_native_messages.sh
echo "CMAKE_PREFIX_PATH=$PWD/build/message-codegen/install" >> "$GITHUB_ENV"
- name: Configure
run: cmake -S native/cpp -B build/native-cpp -DDIMOS_NATIVE_BUILD_TESTS=ON
- name: Build
run: cmake --build build/native-cpp -j
- name: Test
run: ctest --test-dir build/native-cpp --output-on-failure

- uses: astral-sh/setup-uv@v10.0.1
- name: Verify the documented external three-language project
run: |
uv sync --group tests --frozen
cmake --install build/native-cpp --prefix "$PWD/build/native-sdk"
uv run python scripts/package_native_sdk.py --output examples/message-project/sdk
export CMAKE_PREFIX_PATH="$PWD/build/native-sdk:$CMAKE_PREFIX_PATH"
uv run dimos build --project examples/message-project
uv pip install --no-deps examples/message-project/dist/story_messages-*.whl
(cd examples/message-project/cpp && cmake --preset dimos && cmake --build --preset dimos)
cargo build --locked --manifest-path examples/message-project/rust/Cargo.toml
uv run python examples/message-project/demo_blueprint.py --transport zenoh
- name: Retain custom message and native SDK review artifacts
uses: actions/upload-artifact@v7
with:
name: external-message-project
path: |
examples/message-project/dist/
examples/message-project/sdk/
build/native-sdk/

- name: Find C++ native modules
id: find-modules
run: |
Expand Down Expand Up @@ -481,6 +517,8 @@ jobs:
- uses: actions/setup-node@v7
with:
node-version: 'lts/*'
- name: Build standalone CDR dependency
run: bash scripts/setup_message_codegen.sh
- name: Install Python dependencies
run: uv sync --group tests --frozen
- name: Restore Hugging Face model cache
Expand Down Expand Up @@ -603,8 +641,6 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y portaudio19-dev libturbojpeg ffmpeg
- name: Fetch the go2_short replay dataset
run: git lfs pull --include="data/.lfs/go2_short.db.tar.gz" --exclude=""
- name: Build standalone CDR dependency
run: bash scripts/setup_message_codegen.sh
- name: Install dependencies
Expand Down Expand Up @@ -632,7 +668,8 @@ jobs:
contains(fromJSON('["success", "skipped"]'), needs.cachix-build-check.result) &&
contains(fromJSON('["success", "skipped"]'), needs.cachix-build.result)
needs: [cachix-build-check, cachix-build]
timeout-minutes: 20
# Cold native/Python setup can consume nine minutes before pytest starts.
timeout-minutes: 30
strategy:
matrix:
pyver: ['3.10', '3.11', '3.12']
Expand Down Expand Up @@ -715,8 +752,17 @@ jobs:
run: bash scripts/setup_message_codegen.sh
- name: Install dependencies
run: uv sync --group tests --frozen
- name: Install CDR conformance test dependencies
run: uv pip install mcap==1.4.0 rosbags==0.11.0 mypy==1.19.1 pybind11==3.0.1
- name: Install Rust for offline planner bindings
uses: dtolnay/rust-toolchain@stable
- name: Build offline planner Python bindings
run: |
source .venv/bin/activate
maturin develop -m dimos/mapping/ray_tracing/rust/py/Cargo.toml
maturin develop -m dimos/navigation/nav_3d/mls_planner/rust/py/Cargo.toml
- name: Run tests
run: uv run pytest --numprocesses=logical --cov=dimos/ --junitxml=junit.xml -m 'not (self_hosted or mujoco or self_hosted_large or web_browser or bake_e2e or native_e2e)'
run: uv run pytest --numprocesses=logical --cov=dimos/ --junitxml=junit.xml -o faulthandler_timeout=120 -m 'not (self_hosted or mujoco or self_hosted_large or web_browser or bake_e2e or native_e2e)'
- name: Re-run the failing tests with maximum verbosity
if: failure()
env:
Expand Down
60 changes: 59 additions & 1 deletion .github/workflows/message-codegen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,17 @@ on:
paths:
- dimos/message_codegen/**
- examples/message-codegen/**
- examples/message-project/**
- packages/dimos-generated/**
- docs/development/messages.md
- native/rust/dimos-lcm-transport/**
- scripts/*message*codegen*
- scripts/test_message_packages.sh
- scripts/package_messages.sh
- scripts/test_message_mcap.sh
- dimos/protocol/cdr_mcap.py
- dimos/protocol/test_cdr_mcap.py
- dimos/protocol/pubsub/impl/*ros*.py
- scripts/vendor_message_definitions.py
- .github/workflows/message-codegen.yml
- .github/docker/message-codegen-reference.Dockerfile
Expand All @@ -35,14 +40,45 @@ jobs:
run: |
test ! -d /opt/ros
uv venv .venv --python 3.12
uv pip install --python .venv/bin/python pybind11==3.0.1 rosbags==0.11.0 numpy pytest pytest-asyncio pytest-env lcm-dimos-fork setuptools wheel mcap==1.4.0 rerun-sdk==0.32.0 pillow
uv pip install --python .venv/bin/python pybind11==3.0.1 rosbags==0.11.0 numpy PyYAML==6.0.3 pytest pytest-asyncio pytest-env lcm-dimos-fork setuptools wheel mcap==1.4.0 rerun-sdk==0.32.0 pillow mypy==1.19.0
.venv/bin/python -c "import importlib.util; assert importlib.util.find_spec('rclpy') is None"
- name: Build the pinned standalone CDR library
run: bash scripts/setup_message_codegen.sh
- name: Generate, build, test, and demonstrate all three languages
run: bash scripts/test_message_codegen.sh
- name: Build and consume wheel, sdist, CMake, and Cargo packages
run: bash scripts/test_message_packages.sh
- name: Build standalone message authoring and built-in packages
run: |
uv build dimos/message_codegen --out-dir build/message-codegen/ux-wheelhouse
CMAKE_PREFIX_PATH="$PWD/build/message-codegen/install" uv build packages/dimos-generated --out-dir build/message-codegen/ux-wheelhouse
uv venv --seed build/message-codegen/download-env
build/message-codegen/download-env/bin/python -m pip download --only-binary=:all: --dest build/message-codegen/ux-wheelhouse setuptools wheel packaging pybind11==3.0.1 cmake
- name: Verify custom package ownership, rebuilds, and isolated pip installs
env:
DIMOS_FASTCDR_PREFIX: ${{ github.workspace }}/build/message-codegen/install
DIMOS_MESSAGE_WHEELHOUSE: ${{ github.workspace }}/build/message-codegen/ux-wheelhouse
run: |
.venv/bin/python -m pytest -o addopts="" --noconftest -q \
dimos/message_codegen/test_project.py \
dimos/message_codegen/test_documented_project.py \
dimos/message_codegen/test_ownership.py \
dimos/message_codegen/test_ownership_native.py \
dimos/message_codegen/test_project_install.py
- name: Package matching built-in CMake and Rust artifacts
run: bash scripts/package_messages.sh
- name: Consume relocated built-in native packages
env:
DIMOS_BUILTIN_PACKAGE: ${{ github.workspace }}/build/message-codegen/release
DIMOS_FASTCDR_PREFIX: ${{ github.workspace }}/build/message-codegen/install
run: .venv/bin/python -m pytest -o addopts="" --noconftest -q dimos/message_codegen/test_builtin_artifacts.py
- name: Retain standalone message build artifacts
uses: actions/upload-artifact@v7
with:
name: message-authoring-packages
path: |
build/message-codegen/ux-wheelhouse/dimos*
build/message-codegen/release/dist/*
- name: Record generated CDR and verify both viewer decoders
run: bash scripts/test_message_mcap.sh
- name: Retain self-contained recording and viewer evidence
Expand All @@ -61,6 +97,12 @@ jobs:
build/message-codegen/external-app/evidence/
build/message-codegen/external-app/dist/
build/message-codegen/external-app/generated/rust/target/package/*.crate
- name: Retain the standalone Python binding for ROS bridge verification
uses: actions/upload-artifact@v7
with:
name: message-codegen-python-binding
path: build/message-codegen/demo/cpp/build/dimos_generated*.so
if-no-files-found: error
- name: Retain executable demo evidence
if: always()
uses: actions/upload-artifact@v7
Expand All @@ -78,6 +120,10 @@ jobs:
with:
name: message-codegen-evidence
path: build/message-codegen/demo/evidence/
- uses: actions/download-artifact@v8
with:
name: message-codegen-python-binding
path: build/message-codegen/demo/cpp/build/
- name: Build independent ROS2 reference environment
run: docker build -f .github/docker/message-codegen-reference.Dockerfile -t dimos-cdr-jazzy-reference .github/docker
- name: Compare native payloads with independently generated ROS2 types
Expand All @@ -95,6 +141,18 @@ jobs:
source install/setup.bash
python3 /source/examples/message-codegen/demo_ros_reference.py --build /demo
' | tee build/message-codegen/demo/evidence/jazzy-reference.txt
- name: Verify generated messages through the optional ROS bridge
run: |
docker run --rm -v "$PWD:/source:ro" dimos-cdr-jazzy-reference '
set -e
source /opt/ros/jazzy/setup.bash
export PYTHONPATH=/source:/source/build/message-codegen/demo/cpp/build:$PYTHONPATH
cd /source
python3 -m pytest -o addopts="" --noconftest --import-mode=importlib -p no:cacheprovider \
dimos/protocol/pubsub/impl/test_rospubsub_conversion.py \
dimos/protocol/pubsub/impl/test_rospubsub.py -q
python3 examples/message-codegen/demo_ros_bridge.py
' | tee build/message-codegen/demo/evidence/ros-bridge.txt
- uses: actions/upload-artifact@v7
with:
name: message-codegen-jazzy-reference
Expand Down
80 changes: 80 additions & 0 deletions .github/workflows/release-build-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@
name: release-build-check

on:
workflow_dispatch:
inputs:
full-matrix:
type: boolean
default: false
description: Build and test all supported release wheels without publishing
pull_request:
paths:
- .github/workflows/release.yml
Expand All @@ -13,6 +19,8 @@ on:
- .github/scripts/wheel_smoke.py
- pyproject.toml
- setup.py
- packages/dimos-generated/**
- .github/scripts/message_wheel_smoke.py
- dimos/message_codegen/**
- scripts/setup_message_codegen.sh
- MANIFEST.in
Expand All @@ -27,24 +35,89 @@ permissions: {}

jobs:
build-one-wheel:
if: github.event_name != 'workflow_dispatch' || !inputs.full-matrix
runs-on: ubuntu-latest
permissions:
contents: read
env:
# Keep in sync with the build-wheels env in release.yml
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_34
CIBW_BEFORE_BUILD: "bash {project}/scripts/setup_message_codegen.sh"
CIBW_BEFORE_TEST: "pip install --no-index --find-links {project}/wheelhouse --find-links {project}/build/message-test-dependencies dimos-generated==0.1.0 dimos-message-build==0.1.0"
CIBW_TEST_COMMAND: "python {project}/.github/scripts/wheel_smoke.py"
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Build cockpit dist
uses: ./.github/actions/build-cockpit
- uses: astral-sh/setup-uv@v10.0.1
- name: Build message backend wheel and prepare its test dependencies
run: |
uv build dimos/message_codegen --wheel --out-dir wheelhouse
uv venv --seed build/message-wheel-download
build/message-wheel-download/bin/python -m pip download --only-binary=:all: --platform any --implementation py --python-version 3.10 --dest build/message-test-dependencies setuptools==77.0.3 wheel==0.48.0 packaging==25.0 pybind11==3.0.1 tomli==2.4.0
- name: Build built-in message wheels
uses: pypa/cibuildwheel@v4.2.0
with:
package-dir: packages/dimos-generated
only: cp312-manylinux_x86_64
env:
CIBW_BEFORE_TEST: ""
CIBW_TEST_COMMAND: "python {project}/.github/scripts/message_wheel_smoke.py"
- name: Build one wheel
uses: pypa/cibuildwheel@v4.2.0
with:
only: cp312-manylinux_x86_64

build-wheel-matrix:
if: github.event_name == 'workflow_dispatch' && inputs.full-matrix
strategy:
fail-fast: false
matrix:
include:
- { os: ubuntu-latest, arch: x86_64 }
- { os: ubuntu-24.04-arm, arch: aarch64 }
- { os: macos-14, arch: arm64 }
runs-on: ${{ matrix.os }}
permissions:
contents: read
env:
# Same build and installed-wheel smoke test as release.yml, without publish jobs.
CIBW_ARCHS: ${{ matrix.arch }}
CIBW_BUILD: "cp310-* cp311-* cp312-*"
CIBW_SKIP: "*-musllinux_*"
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_34
CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_34
CIBW_BEFORE_BUILD: "bash {project}/scripts/setup_message_codegen.sh"
CIBW_BEFORE_TEST: "pip install --no-index --find-links {project}/wheelhouse --find-links {project}/build/message-test-dependencies dimos-generated==0.1.0 dimos-message-build==0.1.0"
CIBW_TEST_COMMAND: "python {project}/.github/scripts/wheel_smoke.py"
MACOSX_DEPLOYMENT_TARGET: "11.0"
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Build cockpit dist
uses: ./.github/actions/build-cockpit
- uses: astral-sh/setup-uv@v10.0.1
- name: Build message backend wheel and prepare its test dependencies
run: |
uv build dimos/message_codegen --wheel --out-dir wheelhouse
uv venv --seed build/message-wheel-download
build/message-wheel-download/bin/python -m pip download --only-binary=:all: --platform any --implementation py --python-version 3.10 --dest build/message-test-dependencies setuptools==77.0.3 wheel==0.48.0 packaging==25.0 pybind11==3.0.1 tomli==2.4.0
- name: Build built-in message wheels
uses: pypa/cibuildwheel@v4.2.0
with:
package-dir: packages/dimos-generated
env:
CIBW_BEFORE_TEST: ""
CIBW_TEST_COMMAND: "python {project}/.github/scripts/message_wheel_smoke.py"
- name: Build and test supported wheels
uses: pypa/cibuildwheel@v4.2.0
- name: Upload review wheels
uses: actions/upload-artifact@v7
with:
name: checked-wheels-${{ matrix.os }}-${{ matrix.arch }}
path: wheelhouse/*.whl

build-sdist:
runs-on: ubuntu-latest
permissions:
Expand All @@ -61,5 +134,12 @@ jobs:
prune-cache: true
- name: Build sdist
run: uv build --sdist
- name: Build lightweight backend artifacts
run: uv build dimos/message_codegen --out-dir message-dist
- name: Upload build backend for review
uses: actions/upload-artifact@v7
with:
name: checked-message-backend
path: message-dist/*
- name: Check sdist contents
run: python3 .github/scripts/check_sdist.py dist/*.tar.gz
Loading
Loading