Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
51b0aae
feat: add emscripten-wasm32 support with rmw_zenoh_pico
Tobias-Fischer Sep 9, 2026
3882e6c
fix: pick up vinca's MODULE-library pthreads fix, rcutils dlopen guards
Tobias-Fischer Sep 9, 2026
0f4f76d
chore: pick up vinca's post-refactor merge, regenerate rosdistro snap…
Tobias-Fischer Sep 9, 2026
b60d7be
Merge remote-tracking branch 'origin/codex/cross-distro-sync' into fe…
Tobias-Fischer Sep 9, 2026
0f46d45
style: run pixi sort after the cross-distro-sync merge
Tobias-Fischer Sep 9, 2026
2ae59fb
fix: preserve pinned tags when backfilling the snapshot schema; sbg_d…
Tobias-Fischer Sep 9, 2026
0731d85
Merge remote-tracking branch 'origin/codex/cross-distro-sync' into fe…
Tobias-Fischer Sep 9, 2026
1996721
fix: declare rosidl_typesupport_microxrcedds_c/cpp as real deps
Tobias-Fischer Sep 10, 2026
3b667f6
fix: commit extra_recipes/{microcdr,zenoh-pico}/build.sh
Tobias-Fischer Sep 10, 2026
1975af6
fix: test_msgs/example_interfaces microxrcedds deps + tolerate the _E…
Tobias-Fischer Sep 10, 2026
e6f1ffd
chore: bump vinca pin to the pre-find-typesupport fix
Tobias-Fischer Sep 10, 2026
2a981e4
chore: bump vinca pin to the typesupport pre-find ordering fix
Tobias-Fischer Sep 10, 2026
61f99ed
docs: correct the _Event-gap rebuild grouping in build-emscripten's c…
Tobias-Fischer Sep 10, 2026
61a0dfe
fix: patch the rosidl_typesupport_microxrcedds_cpp _Event codegen gap…
Tobias-Fischer Sep 10, 2026
9c12dca
fix: sync-native-bootstrap-mirror breaks on a genuinely empty output/
Tobias-Fischer Sep 10, 2026
6accfce
fix: force a full reindex in sync-native-bootstrap-mirror
Tobias-Fischer Sep 10, 2026
5d5bfb1
feat: add geometry_msgs and sensor_msgs to the wasm32 closure
Tobias-Fischer Sep 10, 2026
53761c9
fix: detect the native platform instead of hardcoding osx-arm64
Tobias-Fischer Sep 10, 2026
3c95518
fix: pull in vinca's explicit-refs/tags/ fix for ambiguous raw.github…
Tobias-Fischer Sep 10, 2026
e366f57
fix: export rmw_zenoh_pico's runtime-config extension functions on wa…
Tobias-Fischer Sep 11, 2026
15486b5
fix: drop pthreads from emscripten-wasm32, use Asyncify; fix rmw_zeno…
Tobias-Fischer Sep 11, 2026
f00feae
fix: session_connect() must not fail when read/lease tasks can't start
Tobias-Fischer Sep 12, 2026
eccaf42
fix: rebuild numpy without native wasm exceptions for Asyncify compat
Tobias-Fischer Sep 12, 2026
68950c5
fix: drop pthreads from microcdr's own emscripten build, use Asyncify
Tobias-Fischer Sep 12, 2026
22bd0ca
fix: bump zenoh-pico to 1.7.0 to fix multi-publisher write-filter bug
Tobias-Fischer Sep 12, 2026
c97e7c1
fix: pump zenoh-pico network unconditionally in rmw_wait to stop rclp…
Tobias-Fischer Sep 12, 2026
e905878
Add temporary CI diagnostic: cross-platform xeus-python build comparison
Tobias-Fischer Sep 13, 2026
8076455
Add push trigger to diagnostic workflow (workflow_dispatch alone needs
Tobias-Fischer Sep 13, 2026
3408747
chore: drop custom numpy build, fix rosidl_generator_py numpy detection
Tobias-Fischer Sep 13, 2026
e3e0bb9
fix: zenoh-pico resumable non-blocking session-open handshake, no Asy…
Tobias-Fischer Sep 13, 2026
90c179a
add: browser_demo C++ rclc/rclcpp browser demo source (never committed)
Tobias-Fischer Sep 13, 2026
538b221
docs: record the Asyncify-dropped session-open handshake saga in AGEN…
Tobias-Fischer Sep 13, 2026
e4787ef
fix: enable zenoh-pico Z_FEATURE_LOCAL_SUBSCRIBER for same-session pu…
Tobias-Fischer Sep 13, 2026
5851ce1
fix: rosidl_typesupport_microxrcedds_c string deserialize heap overflow
Tobias-Fischer Sep 13, 2026
46a38fb
docs: fix stale pthread-era wording in two emscripten patch comments
Tobias-Fischer Sep 13, 2026
96c9682
fix: drop leftover -pthread flag from osrf_testing_tools_cpp's emscri…
Tobias-Fischer Sep 13, 2026
69263c1
fix: regenerate corrupted rmw_zenoh_pico patch, restoring a fix that …
Tobias-Fischer Sep 13, 2026
a776f7e
fix: rebuild rclc/rclcpp -- stale build compiled while vinca still ha…
Tobias-Fischer Sep 14, 2026
04e8471
fix: microcdr installs flat instead of into a nested microcdr-2.0.2/ dir
Tobias-Fischer Sep 14, 2026
78f79b8
fix: rmw_zenoh_pico session teardown crash -- missing call parens
Tobias-Fischer Sep 14, 2026
2346efe
docs: flag AGENTS.md's Asyncify-migration section as historical
Tobias-Fischer Sep 14, 2026
7deaae5
fix: rmw_wait() busy-spun with no yield on any nonzero timeout
Tobias-Fischer Sep 14, 2026
ad78d0c
fix: make rclpy.spin() usable in JupyterLite; QoS events return UNSUP…
Tobias-Fischer Sep 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 134 additions & 0 deletions .github/workflows/diagnose-xeus-python-platform.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
name: Diagnose xeus-python cross-platform build (temporary)

# Throwaway diagnostic workflow, manually triggered only. Investigates
# whether the "null function or function signature mismatch"
# indirect-call-table-corruption bug seen when locally recompiling
# xeus-python on a macOS ARM64 (osx-arm64) host is specific to that build
# platform -- as opposed to the currently-published, working stock
# xeus-python-0.19.0 package on the emscripten-forge-4x channel, which was
# almost certainly built on a Linux x86_64 CI runner. Builds the exact same
# scratch diagnostic recipe (zero xeus-python source patches, stock
# xeus/xeus-lite/pyjs-dev/python host deps -- the same "stockdeps-test"
# config already confirmed to crash when built locally on osx-arm64) on
# both ubuntu-latest (linux-64) and macos-15 (osx-arm64, matching the local
# dev machine) for direct comparison, and uploads the resulting
# xpython.js/xpython.wasm from each as build artifacts.
#
# See ~/robot/ros-rolling-emscripten-zenoh/AGENTS.md's "BREAKTHROUGH
# 2026-09-13" sections (search for "null function" and "toolchain
# non-determinism") for the full background on why this test exists.
#
# Safe to delete this file once the investigation concludes either way.

on:
workflow_dispatch:
# workflow_dispatch alone can't be triggered via the API/CLI unless the
# workflow file also exists on the repo's default branch (a real GitHub
# restriction) -- this repo's default branch is a separate, regularly
# RoboStack-synced `main`, unrelated to this feature branch's work, so
# touching it just for this throwaway diagnostic isn't worth it. A push
# trigger scoped to just this branch works instead, without needing
# anything on `main`.
push:
branches:
- feature/emscripten-wasm32-zenoh-pico
paths:
- '.github/workflows/diagnose-xeus-python-platform.yml'
- 'scratch_test_recipes/xeus-python-stockdeps/**'

jobs:
build-xeus-python-diagnostic:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform: linux-64
- os: macos-15
platform: osx-arm64

runs-on: ${{ matrix.os }}

steps:
- name: Checkout ros-rolling-emscripten-zenoh
uses: actions/checkout@v6
with:
persist-credentials: false
fetch-depth: 1

- uses: prefix-dev/setup-pixi@v0.9.4
with:
frozen: true

- name: Checkout emscripten-forge/recipes (for cross-python/compiler/pytester toolchain packages)
uses: actions/checkout@v6
with:
repository: emscripten-forge/recipes
path: emscripten_forge_recipes
persist-credentials: false
fetch-depth: 1

- name: Build emscripten toolchain packages (compiler, cross-python, pytester)
shell: bash -l {0}
working-directory: emscripten_forge_recipes
run: |
pixi run rattler-build build \
--package-format tar-bz2 \
-c https://repo.prefix.dev/emscripten-forge-4x \
-c microsoft \
-c conda-forge \
--skip-existing all \
-m variant.yaml \
--recipe recipes/recipes/emscripten_emscripten-wasm32
pixi run rattler-build build \
--package-format tar-bz2 \
-c https://repo.prefix.dev/emscripten-forge-4x \
-c microsoft \
-c conda-forge \
--skip-existing all \
-m variant.yaml \
--recipe recipes/recipes/cross-python_emscripten-wasm32
pixi run rattler-build build \
--package-format tar-bz2 \
-c https://repo.prefix.dev/emscripten-forge-4x \
-c microsoft \
-c conda-forge \
--skip-existing all \
-m variant.yaml \
--recipe recipes/recipes/pytester

- name: Build diagnostic xeus-python (zero patches, stock host deps)
shell: bash -l {0}
run: |
pixi run rattler-build build \
--package-format tar-bz2 \
-r ./scratch_test_recipes/xeus-python-stockdeps/recipe.yaml \
-m ./conda_build_config.yaml \
--output-dir ./ci_output \
-c https://repo.prefix.dev/conda-forge \
-c https://repo.prefix.dev/emscripten-forge-4x \
-c "file://${{ github.workspace }}/emscripten_forge_recipes/output" \
-c microsoft \
-c robostack-staging \
--target-platform emscripten-wasm32 \
--test skip \
--channel-priority disabled

- name: Extract xpython.js/xpython.wasm for upload
shell: bash -l {0}
run: |
mkdir -p extracted_artifact
tar xjf ./ci_output/emscripten-wasm32/xeus-python-stockdeps-test-*.tar.bz2 -C extracted_artifact
# also record a sha256 of the wasm binary directly in the log, for
# a quick eyeball diff between the two matrix legs without needing
# to download both artifacts
shasum -a 256 extracted_artifact/bin/xpython.wasm extracted_artifact/bin/xpython.js

- name: Upload xpython.js/xpython.wasm
uses: actions/upload-artifact@v4
with:
name: xeus-python-diagnostic-${{ matrix.platform }}
path: |
extracted_artifact/bin/xpython.js
extracted_artifact/bin/xpython.wasm
retention-days: 7
27 changes: 27 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,35 @@ recipes_only_patch/
*.sh
*.ps1
*.json
# The blanket *.sh above is meant for vinca-generated build scripts, but it
# also silently swallowed extra_recipes/*/build.sh -- hand-written source
# for the microcdr/zenoh-pico recipes, not generated output. Caught by a
# real CI run doing a genuinely fresh checkout: neither build.sh ever
# actually made it into a commit, so build-emscripten failed with
# "build.sh: command not found" once it reached either recipe.
!extra_recipes/**/*.sh
# Same deal: a genuine, hand-written, committed helper script, not
# generated output -- caught this one myself before it repeated the
# extra_recipes mistake above (2026-09-10).
!/sync_native_bootstrap_mirror.sh
# Same deal again: browser_demo/'s own hand-written build*.sh scripts are
# real, committed source (not generated output) too.
!browser_demo/*.sh
.DS_Store
# pixi environments
.pixi
*.egg-info
output/
# Throwaway local test/build artifacts -- large binaries, extracted
# packages, build logs, isolated test builds. Never committed; see
# AGENTS.md for what each holds and how to regenerate it.
scratch/
scratch_test_recipes/
browser_demo/out/
# A hand-flattened local scratch extraction of a conda environment used
# for manual browser_demo testing (see its own README) -- a derived,
# regeneratable build artifact, not source; never committed.
demo_env/
# Local zenohd router binary + plugins, downloaded/extracted for manual
# testing against a real router -- never committed.
zenoh_router/
Loading