[Documentation] [TitleIndex] [WordIndex

发布第三方功能包

默认情况下,bloom会向公共ROS构建工厂发布包。 请参阅build.ros.org以获得关于发布包的更多信息和策略。

在这种情况下,第三方包是一个非catkin包,你希望将其释放到ROS生态系统中。需要将一个包发布到ROS生态系统中的需求是详细在REP-0136。基本步骤如下:

与这些要求有关的细节在REP中。

第三方包可以通过两种方式实现这些需求:在上游存储库中,或者在发布存储库中。

修改上游库

通过在上游存储库中添加一个package.xml和安装它的规则,这个包看起来就像一个catkin包到ROS生态系统。这是一个干净的解决方案,因为它不需要对正常发布过程进行任何修改,而且对上游存储库几乎没有影响。此外,如果package.xml和安装规则是在上游源代码中,然后第三方包可以从源文件中检出的同时在catkin包中构建。如果你选择此方法,那么只需创建一个包。使用此作为参考的: 教程

通知发布存储库

然而,通常情况下,把package.xml放到上游存储库中不是一个选项。在这种情况下,你可以"inject"这个包,使用bloom来进入发布存储库。

设置发布存储库

首先需要做的是遵循创建发布存储库教程。通常,这需要在github上创建一个发布存储库,并将其克隆到本地机器上。

进入发布设置

创建发布存储库之后,需要创建发布跟踪。你可以从头创建一个新的,或者复制和编辑一个旧的配置。创造一个新的轨道:

$ cd /path/to/release/repository
$ git-bloom-config new hydro

或者,从旧的轨道复制和编辑:

$ cd /path/to/release/repository
$ git-bloom-config copy groovy hydro
$ git-bloom-config edit hydro

其中hydro是你创建时的名字追踪(并且该名字最好为你想要发布ROS版本的名称)。遵循配置发布追踪 进入配置选项, 除非以下差异

版本的条目:

Version:
  :{ask}
    This means that the user will be prompted for the version each release.
    This also means that the upstream devel will be ignored.
  :{auto}
    This means the version will be guessed from the devel branch.
    This means that the devel branch must be set, the devel branch must exist,
    and there must be a valid package.xml in the upstream devel branch.
  <version>
    This will be the version used.
    It must be updated for each new upstream version.
  [':{auto}']: 

因为没有package.xml上游bloom不能猜测版本:{auto},但是我们可以让bloom通过输入:{ask}来提示版本的发布。

"Patches Directory"条目。把它设置为·hydro·或任何你喜欢的名字。这将是master分支中的文件夹,其中包含你的package.xml。

添加Package.xml到master分支

现在我们已经通知bloom,在主分支中hydro文件夹下的将会有补丁(或者你告诉它的任何内容),我们需要在该目录添加package.xml覆盖到上游。首先切换到master分支,并创建上面指定的补丁文件夹:

$ git checkout master
$ mkdir hydro

其中hydro是你填写"Patches Directory"的名字。

现在在这个目录创建package.xml,你可以使用这个:catkin/package.xml 作为参考,确保可以在catkin上有run_depend

另外,与其将一个实际的版本放到<version>的标签上,不如把它放在:{version}中。:{version}将被每次发布的版本替换。例如:

<?xml version="1.0"?>
<package>
  <name>foo</name>
  <version>:{version}</version>
  <description>The foo package</description>

  <maintainer email="user@todo.todo">user</maintainer>
  <license>BSD</license>

  <run_depend>catkin</run_depend>
  <buildtool_depend>cmake</buildtool_depend>
  <build_depend>boost</build_depend>
  <run_depend>boost</run_depend>

  <export>
    <build_type>cmake</build_type>
  </export>
</package>

在上面描述的案例中,每次在发布存储库上运行bloom时,将提示用户发布版本,根据"release tag"配置,将获取上游源代码的归档文件,并将其导入到发布存储库的upstream分支,package.xml被覆盖在upstream分支上,并在包中添加:{version} 被用户提供的版本替换的package.xml。

此时,你需要提交package.xml模板到主分支:

添加安装规则作为补丁

在将安装规则添加为补丁之前,你需要运行git-bloom-release一次,以便有一个发布分支可以修补:

hydro是你先前创建的跟踪的名称。

在运行后,你可以添加你的补丁。首先查看发布分支:

发布标签是release/rosdistro/packagename.

注意: 请注意,发布模板基于package名称,而不是repository名称。一个存储库可以有多个包,因此可能有多个release/rosdistro/*分支。你需要对其中的每一个安装一个类似的安装规则补丁。

现在,在这个分支上编辑您的构建系统来安装package.xml。在CMake中它应该是这样的:

...
# Install catkin package.xml
install(FILES package.xml DESTINATION share/foo)
...

其中foo是包的名字(该值为package.xml中的<name>)。

一旦不将其添加到构建系统中,提交并返回到远程:

现在只需再次运行git-bloom-release

hydro是你之前创建和发布的跟踪的名称。

现在你的发布存储库已经设置好了,你将不需要为将来的版本做任何特别的事情。

向上游存储库添加额外补丁

从上面的安装中,遵循与package.xml中的补丁相同的流程。记住,在你把更多的提交给release/rosdistro/foo来导出补丁之后,就调用git-bloom-patch export

将补丁从一个ros发行版转移到另一个

如果你已经为一个旧的ros发行版本(例如,groovy)设置了一些针对上游repo的补丁,并且希望将这些补丁移植到新的ros发行版中,然后按照下面的说明操作:

首先,为更新的ros发行版(hydro)执行一个发行版,以确保有一个发布分支可以修补:

然后,从您的旧的ros发行版(groovy)中签出补丁,并将它们导入新的ros发行版(hydro):

然后像往常一样进行发布:

完成发布

现在你可以完成第一次发布教程,可以开始第一次运行bloom.

注意: 如果你正在重新运行第三方包以满足新的建议,你应该确保release/*或debian/*分支中没有补丁需要移植。

将来的版本

在第一次发布之后,你在其中添加了一个模板package.xml和一个发布分支补丁,你可以直接跟随。发布catkin包教程来成功发布。

故障排除

对于某些版本来说,还有一些细节可能是必要的,并且可以使用新的建议来转换以前发布的第三方包。

自定义构建命令

一些软件包需要比标准cmake && make && make install更多的选项,而其他一些包甚至都不是cmake。在这些情况下,debian文件夹中的rules文件需要修改。要执行此操作,至少要执行一次git-bloom-release命令,然后签出到debian分支:

其中hydro是发布的ROS发行版,而foo则是包的名称。

在这个分支中,应该有一个包含模板文件的debian文件夹,其中包括rules.em。编辑该文件以满足你的需要,然后提交更改:

然后重新运行bloom:

其中hydro是你希望运行追踪的名字。


2020-08-08 12:30