Running build farm jobs locally?

I’m trying to wrap my head around the entire build farm infrastructure but I’m struggling. Partially as I don’t understand what is and isn’t outdated information anymore.

Regardless, my specific question is how can i run jobs from https://build.ros2.org locally. I tried following the docs ROS Build Farms — ROS 2 Documentation: Rolling documentation which leads to ros_buildfarm/doc/jobs/release_jobs.rst at master · ros-infrastructure/ros_buildfarm · GitHub . That file was last updated 8 years ago, and the example invocation uses an index file that has no ros2 distros.

Is that github documentation still applicable? If so, which index.yaml file should be used so we can test builds for new distros. I’m specifically looking to fix issues for my package on rolling (ubuntu noble amd64).

The documentation is still up-to-date accurate. The same infrastructure that powered the ROS 1 build farm is used for ROS 2.

The main thing to change is the rosdistro index. The ROS 2 build farm configuration is in GitHub - ros2/ros_buildfarm_config

For example:

generate_release_script.py https://raw.githubusercontent.com/ros2/ros_buildfarm_config/ros2/index.yaml jazzy default rclcpp ubuntu noble amd64 > /tmp/release_job/release_job_jazzy_rclcpp.sh

Thank you! That seems to work, though I’ve run into a seperate problem which I’ll discuss in another topic.

If you just want to run some package builds locally for debugging (and not the full build farm), the easiest way is, I think, to run bloom locally Building a custom deb package — ROS 2 Documentation: Rolling documentation. You can then directly edit the package files to see what causes an issue.

If you need to build packages isolated to test dependency resolution or check for downloads at build time, I can recommend the GitHub action ros-deb-builder-action.

Thank you for the deb package doc link, I’ll check if that also works for faster debugging for me. For now the local build farm job generation works too.

Well, until I get to the part where I use FetchContent for dependency resolution. And then it breaks again because it seems like the build farm disables any sort of (cmake) external dependency resolution (asked also in buildfarm 'make' 'install' error - #9 by mehermvr ).

to test dependency resolution or check for downloads at build time, I can recommend the GitHub action ros-deb-builder-action.

Is the action meant to be an alternative for the ros build farm binary release process? Because unless I understood it completely wrong, the build farm seems to disable downloads at build (cmake configure) time.

In my opinion by far the easiest solution to check a package is to run industrial_ci.

It can be run locally, or easily be integrated into all common CI systems.

External dependencies should be resolved through the “usual” dependency systems afaik, so you might have to release it through rosdistro, as well.

For test purposes industrial_ci allows quite flexible modifications to your build environment.

1 Like

Well, it is not a replacement. The action builds DEB packages in a GitHub workflow and then hosts the Debian repo in your GitHub repo. You can then use it like any other Debian repo.

Can can definitely download assets during the build on the build farm. I have done this with ExternalProject_Add in the past. You can do this too with ros-deb-builder-action if you enable network communication.

@christian Thanks for the GitHub - jspricke/ros-deb-builder-action: Github Action to convert ROS packages to Debian packages link

I’ve fixed the build issue i was having, and that tool was a great help to test the network isolation part.