Packaging ROS with GitHub Actions: software release and blog post


we published a GitHub Action that makes creating binary distributions of ROS packages easier than ever!
It uses standard Debian tooling, supports ROS 1 & 2, and works with both public & private repos.

Read more about it in the blog post: Packaging ROS with GitHub Actions | PickNik
Or directly start using it: ROS buildfarm · Actions · GitHub Marketplace · GitHub


This is great! Thanks @jspricke and PickNik for this much needed public tool. You already have a first customer, already tried it successfully here and it works great :ok_hand:


This is amazing. I have looked into creating binaries in the past. And most difficult part of the process was: where to leave your binaries.

Leveraging a git repo for this which can be used as apt source is a great solution!

Also thank you for adding this note in your documentation:

Note that this is not meant to replace the ROS build farm but as an addition.

@tnajjar please also release your package via the official channels. If all (or a lot of) open-source packages would start creating their own binary distribution channels, this becomes a large hassle to maintain for the users…


There are two use cases that we had when starting with this:

  1. Internal projects at PickNik depend on source builds of many upstream projects because we have open PRs, or the packages haven’t been released into the main distribution since some critical bug fix or change was merged. This meant we’d sometimes have CI times of ~2hrs, even with caching. Binary installs of these packages are so much faster than even just running cmake and ccache with perfect cache hits.
  2. When adding new features to MoveIt we’d like to update the tutorials simultaneously to reflect those changes. The tradeoff of doing that is that to go through the MoveIt tutorials; one has to build moveit from source. This puts a long waiting step in the new user experience of MoveIt.

This is not meant as a replacement for the main build-farm, and it could get frustrating for many users if most packages started publishing binaries this way because it is essentially creating an overlay, and using multiples of these at the same time could create conflicts that are hard to debug and resolve.


This is some of the most innovative works on the ROS devops side i have seen in a long time, thanks!. Wondering how it can be integrated with GitHub - ros-industrial/industrial_ci: Easy continuous integration repository for ROS repositories

@AUSTIN We discussed integration into industrial_ci at the beginning here: pre-release tests that more closely resemble what the buildfarm does for ros2 · Issue #697 · ros-industrial/industrial_ci · GitHub. The problem is that industrial_ci is Docker based whereas this Action uses user namespaces with unshare. I think the easiest way is to simply have both systems as independent jobs in the CI definition. Note that this Action currently ignores the unit tests but I’m planning to add them in future.