ros-industrial / industrial_ci

Easy continuous integration repository for ROS repositories
Apache License 2.0
248 stars 129 forks source link

Support ROS-independent CI Builds #818

Open marip8 opened 1 year ago

marip8 commented 1 year ago

Addresses #817 to allow CI builds that do not source /opt/ros/<distro> during the build.

Here is an example CI run where this capability was used

mathias-luedtke commented 1 year ago

IMHO this is out of scope of industrial_ci. The scripts assume a ROS environment to function properly.

marip8 commented 1 year ago

IMHO this is out of scope of industrial_ci.

Maybe at the moment, but I'm proposing this PR to support these types of builds as a feature of industrial_ci rather than a convenient hack.

At least for ROS-I Americas, I think ROS-independent builds are going to become more common as we separate the core functionality of our tools from the ROS interfaces that make them convenient to use. As stated in #817, I personally already have several ROS-I related projects that could leverage this type of build today, with more planned in the near future. We could certainly gather feedback from others if there is a question about general interest in this capability as a feature. In my opinion, there is a ton of value in the ICI pipeline: nested builds, docker image creation, testing, dependency installation, etc. I would rather not re-implement this whole pipeline elsewhere when it only requires very minor modifications to support the builds I am interested in.

Regarding the sanity checks, I understand the concern. What would be an appropriate way to keep them while being able to keep these added features (i.e., no UNDERLAY required and no sourcing /opt/ros/$ROS_DISTRO)? An additional variable(s ) that must be explicitly set to enable a ROS-independent build?

mathias-luedtke commented 1 year ago

What is so bad about sourcing /opt/ros? In your example (https://github.com/marip8/opw_kinematics/pull/1) you even install the ROS repositories manually..

mathias-luedtke commented 1 year ago

https://github.com/ros-industrial/industrial_ci/pull/834 should be sufficient, it breaks ros_prerelease tests, but I will have to come up with a better implementation for those anyway

marip8 commented 1 year ago

What is so bad about sourcing /opt/ros? In your example (https://github.com/marip8/opw_kinematics/pull/1) you even install the ROS repositories manually..

Mostly because I want to do builds where ROS isn't actually installed, so there is no /opt/ros/... to source. In the opw_kinematics example, I don't actually install ROS. I'm just using some ROS ecosystem tools like colcon to build and rosdep to install dependencies that are distributed on Ubuntu (i.e. from rosdep/base.yaml). I still have to add the ROS source list and keys in order to install these tools, but ROS itself was never installed.

Ryanf55 commented 9 months ago

The whole point of colcon, ament, and vcs is they are separate from ROS. Perhaps an alternative method is to contribute the actions directly to those repositories?IE - VCS has a clone action, and colcon has a build action and a test action?