0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Github上でCIを回し、codecoveでカバレッジを表示させる

Posted at

背景

前回の記事では趣味で開発しているソフトに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

    • CIの実行結果に表示されるワークフローの名前
    • 例:
      image.png
  • 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を選択する

image.png

あとは表示される手順に従ってセットアップをする

  • 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にコピー&ペーストする

image.png

結果

READMEから最新のコードカバレッジが表示されるようになった

image.png

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?