Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
fe75658
Delete outdated patches
Tobias-Fischer Jan 28, 2026
486e0d6
Add regression tests
Tobias-Fischer Jan 28, 2026
57a3349
Update snapshot
Tobias-Fischer Jan 28, 2026
0649e7a
Bump mutex and versions
Tobias-Fischer Jan 28, 2026
fc42a4e
Delete patch/ros-humble-rosidl-generator-cpp.patch
Tobias-Fischer Jan 28, 2026
f0849b2
Delete patch/ros-humble-rosidl-runtime-cpp.patch
Tobias-Fischer Jan 28, 2026
e76ec37
Remove outdated patches (win)
Tobias-Fischer Jan 28, 2026
3a39461
Check patches individually and then provide summary for easier debugging
Tobias-Fischer Jan 28, 2026
9730aaa
Refactor CMakeLists.txt for yaml-cpp and Windows settings
Tobias-Fischer Jan 28, 2026
1e61a0c
Delete patch/ros-humble-ur-controllers.win.patch
Tobias-Fischer Jan 28, 2026
10129f5
Delete patch/ros-humble-ur-robot-driver.win.patch
Tobias-Fischer Jan 28, 2026
8eaeb59
Delete patch/ros-humble-rviz-default-plugins.win.patch
Tobias-Fischer Jan 28, 2026
93775e5
Update reverse_interface.h and add endian.h
Tobias-Fischer Jan 28, 2026
832f503
Change eigenpy override version to 3.12.0
Tobias-Fischer Jan 28, 2026
016773c
Fixes
Tobias-Fischer Jan 29, 2026
a34545a
Update include paths for hardware interface headers
Tobias-Fischer Jan 29, 2026
e65c349
Fixes
Tobias-Fischer Jan 29, 2026
68d3b0b
Unvendor proxsuite
Tobias-Fischer Jan 29, 2026
171526a
fix ublox
Tobias-Fischer Feb 19, 2026
e57a892
No ublox on osx
Tobias-Fischer Feb 19, 2026
a71d800
Add patch for interpolator header file
Tobias-Fischer Feb 19, 2026
801f8b8
add patch for hls-lfcd-lds-driver
olivier-roussel Feb 20, 2026
b532f4e
patch autoware-info-utils
olivier-roussel Feb 20, 2026
f35d1dd
Update robostack.yaml for python3-uvloop platform support
Tobias-Fischer Feb 21, 2026
4389e40
Add override_version for urdfdom_headers
Tobias-Fischer Feb 21, 2026
7809b34
fix mavros-extras patch for mixed target_link_libraries cmake signatures
olivier-roussel Feb 22, 2026
2422021
pin poco version to 1.14.2 for compat with libfranka 0.20.3
olivier-roussel Feb 22, 2026
17d28fb
Update urdfdom version to 5.1.0 for compatibility
Tobias-Fischer Feb 22, 2026
9d5a7c4
Enable full rebuild by setting IGNORE_CACHE to true
Tobias-Fischer Feb 22, 2026
6b1058e
update libfranka version
nmarticorena Feb 23, 2026
778cd46
update snapshot
nmarticorena Feb 23, 2026
c297d72
revert pin poco version
nmarticorena Feb 23, 2026
72cd37a
update patches linux-64
nmarticorena Feb 23, 2026
74f9933
down to urdfdom_headers == 1.0.6 and urdfdom == 4.0.1
olivier-roussel Feb 23, 2026
e1531d2
bump urdf again
Tobias-Fischer Mar 1, 2026
eeac03d
Align target visibility with rolling
Tobias-Fischer Mar 2, 2026
6ff6b7e
Fix macOS linking for move_group capabilities
Tobias-Fischer Mar 3, 2026
fc23e84
Update CMake configuration for rosidl_generator_py
Tobias-Fischer Mar 3, 2026
37c1a33
try link against python::module on psx
Tobias-Fischer Mar 3, 2026
e6e411d
fix urdfdom version back to 5.1.0
olivier-roussel Mar 3, 2026
87146ff
unpin urdfdom_header from 1.0.6 in sdformat-urdf cmake
olivier-roussel Mar 3, 2026
35b674f
patch autoware-ndt-scan-matcher
olivier-roussel Mar 4, 2026
7ca4403
Add automware and franka patches
Tobias-Fischer Mar 5, 2026
40b92ec
rm old patch
Tobias-Fischer Mar 5, 2026
b5757f0
bump assimp, protobuf and opencv
olivier-roussel Mar 5, 2026
8db4341
Enable full rebuild by ignoring cache
Tobias-Fischer Mar 5, 2026
ece434d
use cyclonedds on macos
Tobias-Fischer Mar 5, 2026
0c073e0
fix
Tobias-Fischer Mar 5, 2026
993dc1a
Bump assimp, add patches
Tobias-Fischer Mar 5, 2026
0fae73e
Fix patches
Tobias-Fischer Mar 6, 2026
e2cb8cf
Fixes
Tobias-Fischer Mar 6, 2026
d14c564
Further fixes
Tobias-Fischer Mar 6, 2026
c5a6f26
patch for fasttrps
olivier-roussel Mar 6, 2026
bb14a3e
patch ublox-gps for asio
olivier-roussel Mar 6, 2026
e1ef577
More local fixes
Tobias-Fischer Mar 7, 2026
72aa543
Fix
Tobias-Fischer Mar 7, 2026
6d89777
Finished aarch64 build
Tobias-Fischer Mar 7, 2026
2ada96e
One win debug attempt
Tobias-Fischer Mar 8, 2026
21c3909
emscripten test
Tobias-Fischer Mar 8, 2026
997db4a
emscripten - numpy 1.26
Tobias-Fischer Mar 8, 2026
3440e94
Bump vinca
Tobias-Fischer Mar 8, 2026
88462e8
More emscripten
Tobias-Fischer Mar 8, 2026
de84bdb
empty
Tobias-Fischer Mar 9, 2026
6269b7a
patch lanelet2-projection for win
olivier-roussel Mar 11, 2026
e83b94a
patch autoware-lanelet2-extension for win
olivier-roussel Mar 11, 2026
74d8f14
Bump vinca
Tobias-Fischer Mar 11, 2026
fe48294
Add custom build directory for Windows in CI
Tobias-Fischer Mar 12, 2026
7069962
Upgrade GitHub Actions to latest versions
Tobias-Fischer Mar 12, 2026
1553390
krb5
Tobias-Fischer Mar 12, 2026
96202df
Fix osx-64
Tobias-Fischer Mar 12, 2026
a404537
restore use of shorten output build dir for win
olivier-roussel Mar 12, 2026
d3d0c8d
patch autoware-test-utils for windows
olivier-roussel Mar 12, 2026
55342ab
Enable Win32 long paths in testpr.yml
Tobias-Fischer Mar 12, 2026
15ce2a0
Bump vinca
Tobias-Fischer Mar 12, 2026
9cc2582
Update testpr.yml
Tobias-Fischer Mar 13, 2026
83906cc
Try fix osx and win
Tobias-Fischer Mar 13, 2026
9a69ec0
Add rattler-index
Tobias-Fischer Mar 13, 2026
04f4c05
Try fix
Tobias-Fischer Mar 13, 2026
2f600e8
Try fix win
Tobias-Fischer Mar 13, 2026
5110d71
No workaround needed
Tobias-Fischer Mar 13, 2026
54bbc6a
Partly noetic sync
Tobias-Fischer Mar 13, 2026
76edf46
Rebuild lanelet2-core
Tobias-Fischer Mar 13, 2026
59227ae
Fix win
Tobias-Fischer Mar 13, 2026
2fb9c02
Win fix
Tobias-Fischer Mar 13, 2026
ad0c74f
skip same autoware packages as on kilted for win
Tobias-Fischer Mar 13, 2026
f2cc129
Fix
Tobias-Fischer Mar 14, 2026
d606a4c
use c++17
Tobias-Fischer Mar 14, 2026
0ea4449
Fixup
Tobias-Fischer Mar 14, 2026
cfe4f07
Potential fix for pull request finding
Tobias-Fischer Mar 14, 2026
baa0f83
Fix copilot suggestions
Tobias-Fischer Mar 15, 2026
42c2afa
Fix remaining review comments
Tobias-Fischer Mar 15, 2026
aa0b231
Merge pull request #387 from olivier-roussel/rebuild_feb_2026_cont
Tobias-Fischer Mar 15, 2026
598329b
Merge branch 'main' into rebuild_feb_2026
Tobias-Fischer Mar 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
19 changes: 16 additions & 3 deletions .github/workflows/testpr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,17 @@ jobs:
echo "CONDA_BLD_PATH=C:\\bld\\" >> $GITHUB_ENV
mkdir /c/bld

- name: Enable Win32 long paths
shell: powershell
if: matrix.platform == 'win-64'
run: |
New-ItemProperty `
-Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" `
-Value 1 `
-PropertyType DWORD `
-Force

# Workaround for https://github.com/RoboStack/ros-humble/pull/141#issuecomment-1941919816
- name: Clean up PATH
if: contains(matrix.os, 'windows')
Expand Down Expand Up @@ -104,9 +115,8 @@ jobs:
- name: Delete specific outdated cache entries
shell: bash -l {0}
run: |
# rm -rf ${{ matrix.folder_cache }}/ros-humble-<package>* || true
pixi run rattler-index fs output --force
exit 0
rm -rf ${{ matrix.folder_cache }}/ros-humble-autoware-trajectory* || true
pixi run rattler-index fs ${{ matrix.folder_cache }}/.. --force

- name: See packages restored by cache
shell: bash -l {0}
Expand All @@ -117,6 +127,9 @@ jobs:
shell: bash -l {0}
if: matrix.platform != 'emscripten-wasm32'
run: |
if [ "${{ runner.os }}" = "Windows" ]; then
export VINCA_CUSTOM_CMAKE_BUILD_DIR='C:\x\'
fi
pixi run rattler-build build --recipe-dir recipes --target-platform ${{ matrix.platform }} -m ./conda_build_config.yaml -c conda-forge -c robostack-staging --skip-existing

- name: Build recipes [emscripten]
Expand Down
224 changes: 224 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
# AGENTS.md

Working notes for future coding agents in a RoboStack repo. Replace $DISTRO with e.g. noetic/humble/kilted and so forth; you can check the working directory.

## Session defaults for this repo

- Prefer fixing easy, low-risk build failures first (one-line CMake / include / standard-level fixes).
- Do not stop to ask the maintainer to run commands; run build/debug loops directly.
- Use checked-out sources in `.pixi` and `output/src_cache` when patching.
- Use `./build_gap_report.py` to track build/recipe gaps across platforms:
- `Built package artifacts without matching recipe directory`: packages built in `output/<platform>` that are not represented as recipe folders.
- `Recipe directories without built artifact on this platform`: generated recipes that still need successful builds for that platform.
- If a package is truly Linux-only, move it to Linux-only handling in `vinca.yaml` (or non-linux skip), instead of keeping ad-hoc macOS comments. Follow similar strategies for other platforms such as Windows.
- For patch naming, keep one patch per package and use package-based naming (`patch/ros-$DISTRO-<pkg>.patch`) with no extra suffix variants.

## Standard build loop

```bash
# single package (preferred for debugging)
pixi run build-one --package ros-$DISTRO-<pkg>

# broad pass when needed
pixi run build_continue_on_failure
```

## Common fix patterns seen in this repo

- Boost 1.88 breakages often need C++14 (`-std=c++14`) instead of `-std=c++11`.
- Avoid linking to `Python::Python` on Apple for module-style targets; use:

```cmake
if( APPLE )
set_target_properties( ${_name} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup" )
else()
target_link_libraries( ${_name} ${PYTHON_LIBRARIES} )
endif()
```

- For gtest-related failures, prefer dependency or test-disable fixes over custom shims:
- add dependency via `patch/dependencies.yaml`, or
- disable tests when safe.
- For rtabmap RViz plugin issues, force/confirm Qt5 discovery in CMake where needed.

## Debug a failed build

### 1. Find the work directory

```bash
tail -1 output/rattler-build-log.txt
```

### 2. Inspect full log

Read `conda_build.log` in the work dir. Focus on:
- compile errors
- link errors
- configure failures
- patch failures
- missing files

### 3. Inspect build env

Read `build_env.sh` in the work dir:
- `PREFIX`
- `BUILD_PREFIX`
- `SRC_DIR`
- `RECIPE_DIR`

### 4. Check fetched source metadata

```bash
cat .source_info.json | jq .
```

### 5. Investigate by failure class

- Missing headers: check `requirements.host`; verify under `$PREFIX/include`.
- Undefined symbols: check host deps, `$PREFIX/lib`, linker flags.
- Configure failures: inspect flags in `conda_build.sh`; rerun manually with verbosity.
- Patch failures: refresh patch against current source revision.
- Relocatability issues: inspect hardcoded prefixes/rpaths.

### 6. Reproduce interactively

```bash
cd <work-directory>
source build_env.sh
bash -x conda_build.sh 2>&1 | less
```

### 7. Rebuild package

```bash
pixi run build-one --package ros-$DISTRO-<pkg>
```

## Create a patch from build-directory edits

```bash
WORK_DIR=$(tail -1 output/rattler-build-log.txt)
cd "$WORK_DIR"

# preview first
rattler-build create-patch --directory . --name <patch-name> --dry-run

# with excludes if needed
rattler-build create-patch \
--directory . \
--name <patch-name> \
--exclude "*.o,*.so,*.dylib,*.a,*.pyc,__pycache__,build/" \
--dry-run

# generate
rattler-build create-patch \
--directory . \
--name <patch-name> \
--exclude "*.o,*.so,*.dylib,*.a,*.pyc,__pycache__,build/"
```

Then move/merge patch into repo package patch file and ensure recipe uses it.

## Validate that patches still apply

Use the patch checker before/after large patch edits:

```bash
pixi run check-patches
```

For faster iteration on one package patch, run the script directly with a recipe filter:

```bash
# prepare + check only one recipe
python check_patches_clean_apply.py --recipe ros-$DISTRO-<pkg>

# prepare only (no build), useful while editing
python check_patches_clean_apply.py --dry --recipe ros-$DISTRO-<pkg>

# multiple focused recipes
python check_patches_clean_apply.py --recipe ros-$DISTRO-<pkg1> --recipe ros-$DISTRO-<pkg2>
```

What it does:
- scans all `recipes/**/recipe.yaml`
- keeps only recipes that declare `source.patches`
- creates `recipes_only_patch/` with minimal patch-check recipes
- runs patch application checks recipe-by-recipe and prints a pass/fail summary

## Patch placement and recipe wiring

- Canonical patch location: `patch/ros-$DISTRO-<pkg>.patch`
- Keep recipe copy in `recipes/ros-$DISTRO-<pkg>/patch/` if this repo flow expects it.
- Ensure `recipes/ros-$DISTRO-<pkg>/recipe.yaml` has:

```yaml
source:
patches:
- patch/ros-$DISTRO-<pkg>.patch
```

## Parallelization and dependency-aware scheduling

It is worth splitting work across multiple agents, but only for independent packages.

Rules:
- Do not build dependent packages in parallel.
- Infer dependency relationships from `recipes/ros-$DISTRO-<pkg>/recipe.yaml` (`requirements.host` and `requirements.run`).
- If package A depends on package B (for example `rosmon` -> `rosmon-core`), build/fix B first.
- Run parallel lanes only for packages that do not depend on each other.
- If unsure, serialize the builds.

## Inspect a built conda package

```bash
find output/ -name "*<package-name>*" -type f \( -name "*.conda" -o -name "*.tar.bz2" \)
```

For `.conda` artifacts:

```bash
TMPDIR=$(mktemp -d)
cd "$TMPDIR"
unzip -q <package.conda>
zstd -d < pkg-*.tar.zst | tar -xvf -
zstd -d < info-*.tar.zst | tar -xvf -
```

Check:
- `info/index.json` (deps/build string)
- `info/paths.json` (installed files)
- binaries/libs/rpaths (`otool -L` on macOS)
- hardcoded prefixes in text metadata

## `vinca.yaml` maintenance guidelines

- Add package seeds under `packages_select_by_deps` using ROS package names (dash/underscore accepted).
- Use platform conditions for Linux-only packages; avoid temporary macOS comment blocks.
- Keep `packages_skip_by_deps` and `packages_remove_from_deps` coherent with platform constraints.
- When `build_gap_report.py` shows built artifacts without recipe directories, add those package seeds to `vinca.yaml`.
- After `vinca.yaml` edits, regenerate recipes before expecting `build_gap_report.py` results to change.

## Local contribution workflow (RoboStack)

```bash
pixi run build
```

## Full rebuilds
For full rebuilds also remember:
- refresh snapshot: `pixi run create_snapshot`
- update `conda_build_config.yaml` for active migrations. You can use https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/main/recipe/conda_build_config.yaml as a base, and then also apply migrations that are mostly done; you can check the status at https://conda-forge.org/status/.
- bump `build_number`
- bump mutex minor and update hardcoded mutex refs where needed
- clear stale `pkg_additional_info.yaml` build-number overrides unless intentional
- remember that in CI there is a build cache, if you fix a problem in an already built package you need to delete the cache for this package in the .github/workflows/testpr.yml under "Delete specific outdated cache entries"

## Practical triage order

1. Build a failing package directly.
2. Apply smallest viable source or recipe fix.
3. Update package patch file (package-named).
4. Rebuild same package.
5. Move on immediately if it becomes complex; prioritize easy wins.
6. Revisit hard failures after reducing the failure queue.
Loading
Loading