ある程度ROSでのアプリケーション開発に慣れてくると、apt
でインストールしたり、rosdep
で依存関係を解決したくなりますよね(なりません?なりますよね。)。
それを楽ちんにしてくれるのがbloom
というツールです。
とはいえ、実際にやってみようと思うと、結構心理的障壁が高かったりします。
もちろんROS Wikiをみれば情報はあるし、ご丁寧に日本語訳まであります。
あとはこれに従えばいいのですが、それでも実際にやるにはどうにもハードルが高い気がして、手が伸びないというのが、多くの方にとっての本音ではないでしょうか。
かく言う私自身、本当に大丈夫だろうかとヒヤヒヤしながらbloom
でリリース作業をしました。
自分がその時のヒヤヒヤ感をもう二度と味わいたくないのと笑、同じような思いを抱えてらっしゃるROSデベロッパの方と情報を共有できたらなと思いまして。
というわけで、その手順を記していこうと思います。
大枠の流れは、目次を参照下さい。作業順に沿って並んでいます。
ケーススタディのネタ
今回ケーススタディとする対象のネタは、小生が開発した timed_roslaunch
というパッケージです。指定秒だけ launch ファイルの実行タイミングを遅らせることができるユーティリティです。
概念図
私が実際に作業してみた経験を元に、このようになっているのだろうというイメージを作成してみました。(誤りがございましたらご指摘頂けましたら幸いです。)
自作パッケージを完成させる
まずは、自作パッケージを作りましょう(当たり前笑)。
そして、以下の点に注意しましょう。
依存関係を正確に記述する
パッケージには、マニフェスト情報であるpackage.xml
と、cmake用の設定ファイルであるCMakeLitst.txt
が格納されており、これらに自作パッケージの依存関係を正確に記述する必要があります。
なぜなら、Buildfarm
に登録された場合、CIによるビルドジョブが走るので、依存関係をしっかりかかないとビルドステータスがFailになってしまいます。
これは、配布先のユーザ側でも、せっかくインストールしたのに自分で依存関係を解決しなければならないという辛い状態になりますし、自分自身が使うときにも苦労するでしょう。
ここではその設定方法について細かく書くつもりはありませんが、最低限依存関係だけでも確認は必須です。駆け足ですが、概要だけ。
package.xml
〈depend〉タグ
- ビルド時、実行時、エクスポート時で必要なパッケージ。
〈build_depend〉タグ
- ビルド時に必要なパッケージ。でもエクスポートがいらないならこれだけでいいです。
〈exec_depend〉タグ
- 実行時に必要なパッケージ。
〈test_depend〉タグ
- テスト時に必要なパッケージ。
CMakeLists.txt
find_package
- パッケージの存在確認をします。
- catkin に含まれるパッケージを確認します。
- find_package はされているけど、catkin_package内でCATKIN_DEPENDSされていないものは、エクスポートが不要なので、package.xmlで〈build_depend〉と〈exec_depend〉に加えます。
catkin_package
- catkinでビルドする際の依存パッケージの設定をします。
- CATKIN_DEPENDS されているパッケージはエクスポートが必要なので、〈depend〉 に入れます。
install
- down_stream パッケージが利用する際に必要なファイルは全て install 指定します。
参考ドキュメント
詳細は公式をご参照下さい。
※正直依存関係周りは、このネタだけで記事が一本書けるくらいの話です。分からなくてもとにかく、ここではもう作業として割り切って、必要な依存関係を記述しきっちゃて下さい。最悪全部〈depend〉 にしちゃっても、ビルドは通ってしまうはずですので(気持ちは悪いですが笑)。
CHANGELOG.rstの登録
作業がローカルなのに、なんで図でリモートを指しているのかと思われた方がいらっしゃったら、ちょっと待ってください。
Push するところまで含めてCHANGELOG.rst
の登録とさせて下さい。(この作業におけるワークスペースまで図示すると、図全体の均衡が保てなくなるので、少々ご辛抱を ^^;)
generate
まずはCHANGELOG.rst
を作成します。
$ catkin_generate_changelog --all Found packages: timed_roslaunch Querying all tags and commit information... Generating changelog files with all versions... - creating './CHANGELOG.rst' Done. Please review the extracted commit messages and consolidate the changelog entries before committing the files!
差分を確認してみましょう。
$ git status ブランチ kinetic-devel 追跡されていないファイル: (use "git add <file>..." to include in what will be committed) CHANGELOG.rst nothing added to commit but untracked files present (use "git add" to track)
CHANGELOG.rst が作成されているのが分かります。中身も確認しておきます。
$ git diff diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2b3320..7100568 100644 --- a/CHANGELOG.rst --- b/CHANGELOG.rst @@ -2,6 +2,13 @@ Changelog for package timed_roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <br> +Forthcoming +----------- +* Merge pull request + Modify CMakeLists for launch and test dir install +* Modify CMakeLists for launch and test dir install +* Contributors: MoriKen254 + 0.1.2 (2018-11-09) ------------------ * Fix install scripts in CMakeLists
コミットログが入ります。変なコミットメッセージを入れると、恥を晒すことに…(オイ)。
commit & push
上記の差分をコミットし、リモートにプッシュします。
$ git add --a $ git commit -m "Add CHANGELOG.rst" [kinetic-devel 45a9cf9] Add CHANGELOG.rst 1 file changed, 75 insertions(+) create mode 100644 CHANGELOG.rst $ git push origin kinetic-devel Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 1.92 KiB | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/MoriKen254/timed_roslaunch 57a995e..45a9cf9 kinetic-devel -> kinetic-devel
releaseの前準備
package.xml 内の ver. 番号をインクリします!
以下のコマンドを打ちましょう。
$ catkin_prepare_release
すると、現在のpackage.xml
を解析して、リリースバージョンをインクリするコミットが生成されます。
Prepare the source repository for a release. Repository type: git Found packages: timed_roslaunch Prepare release of version '0.1.3' [Y/n]?y Trying to push to remote repository (dry run)... Everything up-to-date Checking if working copy is clean (no staged changes, no modified files, no untracked files)... Rename the forthcoming section of the following packages to version '0.1.3': timed_roslaunch Bump version of all packages from '0.1.2' to '0.1.3' Committing the package.xml files... [kinetic-devel 46cfd23] 0.1.3 2 files changed, 3 insertions(+), 3 deletions(-)
次に、インクリ後のリリースバージョンのタグも生成します。
Creating tag '0.1.3'...
先程のコミットとタグを両方リモートにプッシュしても良いかを尋ねられます。もちろんyes!
The following commands will be executed to push the changes and tag to the remote repository: /usr/bin/git push origin kinetic-devel /usr/bin/git push --tags Execute commands to push the local commits and tags to the remote repository [Y/n]?y
まずはコミットをプッシュ。
Counting objects: 4, done. Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 377 bytes | 0 bytes/s, done. Total 4 (delta 3), reused 0 (delta 0) remote: Resolving deltas: 100% (3/3), completed with 3 local objects. To https://github.com/MoriKen254/timed_roslaunch.git 45a9cf9..46cfd23 kinetic-devel -> kinetic-devel Total 0 (delta 0), reused 0 (delta 0)
次にタグをプッシュ。
To https://github.com/MoriKen254/timed_roslaunch.git * [new tag] 0.1.3 -> 0.1.3 The source repository has been released successfully. The next step will be 'bloom-release'.
おわりに
これにて、①前準備編は完了です。
実際のリリース作業は次回の記事で記述します。次回の方がちとややこしいのですが。ま、ぶっちゃけ bloom が勝手にやってくれるので、こっちは眺めているだけなのですが笑。便利なものです。