ROS講座98 CIでビルドチェックをする

# 環境
この記事は以下の環境で動いています。

| 項目 | 値 |
|:-:|:-:|
| CPU | Core i5-8250U |
| Ubuntu | 20.04 |
| ROS | Noetic |

インストールについては[ROS講座02 インストール](https://qiita.com/srs/items/e0e0a9dc3f94c2d3348e)を参照してください。
またこの記事のプログラムはgithubにアップロードされています。[ROS講座11 gitリポジトリ](https://qiita.com/srs/items/25a56a6abda41dcf396e)を参照してください。

# 概要
ソフトウェア開発していると、気づいたらビルドの問題が突如発生するということがありますしえます。例えば、追加ビルドは通るが、新たにcloneしてビルドをすると通らないこと、apt installで何を入れると通るか分からなくなるということが起こります。
これを防ぐのがCI(継続的インテグレーション)でして、これは自動的にサーバーで特定の処理を行うというものです。今回はgitの更新がある(=pgit pushする)たびにサーバーで仮想環境を使って1からビルドを試すということをします。今回はCIサービスとしてgithub actionを使います。

# github actionとは

github actionとはgithubの公式機能でリポジトリの`.github/workflow/`以下のファイルに書かれている操作を自動で実行する仕組みです。左記のディレクトリにファイルを作ってpushするだけで、その他の操作は一切不要です(githubのWebページへ行って機能をONにするなどの操作は一切ありません)。

# 操作

## ワークフローファイル

```yaml:.github/workflows/build.yaml
name: ROS build workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-20.04
    env:
      CATKIN_WS: /home/runner/work/catkin_ws
    steps:
    - uses: actions/checkout@v2

    - name: Setup ROS
      uses: ros-tooling/setup-ros@v0.2
      with:
        required-ros-distributions: noetic

    - name: Install catkin tool
      run: sudo apt-get install python3-catkin-tools

    - name: Init workspace
      run: |
        source /opt/ros/noetic/setup.bash
        mkdir -p ${CATKIN_WS}/src
        ln -s ${GITHUB_WORKSPACE} ${CATKIN_WS}/src/

    - name: pre build
      run: |
        source /opt/ros/noetic/setup.bash
        cd ${CATKIN_WS}/src/ros_lecture
        git submodule update --init --recursive
        rosdep update
        rosdep install -i -y --from-paths ./

    - name: build
      run: |
        source /opt/ros/noetic/setup.bash
        cd ${CATKIN_WS}
        catkin build
        
```

* `on: [push]`は実行タイミングでこれはgithubにpushするたびに実行することを示します。
* `uses: ros-tooling/setup-ros@v0.2`これは他の人が定義したactionを実行することを示します。指し先は[こちら](https://github.com/ros-tooling/setup-ros/blob/master/action.yml)
* submoduleのclose、rosdepで依存パッケージのダウンロー、`catkin build`という流れでビルドを実行します。

## 実行&確認
pushするだけで動作が始まります。

githubのWebサイトに行き[リポジトリのactionタブ](https://github.com/project-srs/ros_lecture/actions)を見ます。

![action1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/c6169ed3-77f3-d32d-63c9-f1c18b3d4844.png)

左側のタブから目的のワークフロー（今回はROS build workflow）を選びます。

![action2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/2875acf0-ced9-5046-16a7-d8886dd9c437.png)

このページで最新や過去の実行履歴が見れます。緑や赤の表示は結果でその横の文字はコミットメッセージになります。ワークフローに含まれるアクションの一覧が見えます。

![action3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/92136a4e-f1db-fe72-e105-d5be80f263f4.png)

アクション名を押すと詳細が見えてここからログも見れます。失敗したときに何が失敗したのかはここで確認できます。

![action4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/fe32e8d8-7ee4-e19d-a35e-e8ea96380752.png)

# バッチを付ける

ワークフローの詳細ページの右上の「...」から「Create Status Badge」を選択しましょう。リンクが生成されます。これをgithubに上げるREADME.mdにそのまま張れば表示されます。

# TravisCIからgithub actionへの乗り換え
以前はTravisCIというサービスを使っていました。昔はpublicリポジトリなら無料だったのですが2021年に(ほぼ)有料になってしまいました。特に複雑なことをやっていたわけではないのでgithub actionへの乗り換えをしました。

# 参考
[GitHubの新機能「GitHub Actions」で試すCI/CD](https://knowledge.sakura.ad.jp/23478/)

# 目次ページへのリンク
[ROS講座の目次へのリンク](https://qiita.com/srs/items/5f44440afea0eb616b4a)