背景
前回の記事では趣味で開発しているソフトにGoogleTestというユニットテストツールを導入した
今回はその発展として以下を実現させたい
- Github上のリポジトリへPushするたびにCI/CDでテストを実行させる
- テストが実行されたらカバレッジをトップのREADMEに表示させる
GithubActions
GitHubはGithubActions呼ばれるCI/CDツールを提供している
これはコミットがPushされた時など特定のイベントをトリガーにしてジョブを実行させることができる
なお、Publicにしているリポジトリなら無料で使用できるが、Privateリポジトリは料金がかかる模様
設定方法
リポジトリのルートディレクトリから.github/workflowsというディレクトリを作る
workflowsディレクトリにyamlファイルを作り、その中にCI時の実行内容を記述する
/
├ .github/
│ └ workflows/
│ └ ci.yaml
:
以下がyaml内で使える構文のリファレンスである
基本的には"name", "on", "jobs"を定義していくことになる
-
name
-
on
- CIのトリガーとなるイベントを定義する
- onの中にイベントとなるpushやPull Requestを設定できる
-
jobs
- CIがトリガーされたら実行される動作を定義する
- jobsは一つ以上のjobから構成されており、特に設定しない限りは並列に実行される
- 単純なワークフローならjobを分ける意味はあまりないと思う
- job毎に実行環境や手順を記述できる
以下の例は依存関係をインストールしているのだが、これを使って説明する
jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install dependencies run: | sudo apt update sudo apt install -y cmake g++ lcov libgtest-dev libgmock-dev \ libbluetooth-dev libdbus-1-dev libmosquitto-dev libpoco-dev \ libsystemd-dev if [ -d /usr/src/gtest ]; then cd /usr/src/gtest sudo cmake . sudo make sudo cp -v lib/*.a /usr/lib || true fi if [ -d /usr/src/gmock ]; then cd /usr/src/gmock sudo cmake . sudo make sudo cp -v lib/*.a /usr/lib || true fi- "build"
- jobの名前 (job_id)
- "runs-on"
- jobの実行環境
- もしフローの途中で実行環境を変えたければ別のjobを定義することになる
- "steps"
- steps以下に実行手順を記述する
- " - name"で各ステップの名前を定義できる
- ステップには事前に定義された動作を実行する"uses"と、自分でシェルコマンドなどを記述する"run"がある
- "uses"
- パブリックリポジトリなどで公開されているアクションを使うことができる
- おまじない的に"actions/checkout@v4"を一番初めに実行している
- 実行環境にCIで動かそうとしているリポジトリをチェックアウトしているらしい
- "run"
- 実行環境のシェル上で動作させるコマンドを記述する
- '|'を使えば複数行にわたって記述することができる
あとはローカル環境で実行するようにビルドやテストを行うコマンドをrunに書けばよい
codecov
codecovはテストカバレッジの統計を取ってくれるWebサービスである
Githubと連携することでGithubActionsのフローで生成されたカバレッジレポートから現在のカバレッジ率を出してくれる
codecoveにサインアップしてGitHubと連携させると自分のアカウントのリポジトリの一覧が表示されるようになる
Coverageタブを開くとどのCIツールを使うかが選択できるので、GitHubActionsを選択する
あとは表示される手順に従ってセットアップをする
- Step 1はテストツールのインストール手順であり、今回は既にGoogleTestを使っているので飛ばす
- Step4にあるとおりGitHubWorkflowのyamlファイルをアップデートする必要がある
- 特定のカバレッジレポートファイルを読み込むようにするには、以下のように
files: <file path>という行を追加すればよい
- 特定のカバレッジレポートファイルを読み込むようにするには、以下のように
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./build/coverageFiltered.info
fail_ci_if_error: true
最後にConfigurationタブからカバレッジ率のバッジを表示するMarkdownを取得できるので、これをREADME.mdにコピー&ペーストする
結果
READMEから最新のコードカバレッジが表示されるようになった
参考



