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?

カバレッジ取得ツール kcov が Ubuntu 26.06 で apt パッケージが復活していた

0
Posted at

はじめに

以前の記事で Bash のカバレッジ取得に kcov を使おうとしたものの、GitHub Actions の標準 Runner の Ubuntu 24.04 には apt で提供されていなかったので利用を諦めていた話を書きました。

が、実際にはそのうち使える状態になっていました。調査不足だったので訂正と共に実際に使って確認してみました。

背景

kcov は Ubuntu 24.04 では確かになかったのですが、次期LTS の Ubuntu 26.04 では復活していました。

また、GitHub Actions で Ubuntu 26.04 は Public Preview になっていました。

これを組み合わせれば GitHub Actions 上でも比較的容易に検証できるので試してみました。

前提・実行対象

Bash スクリプトのテストを bats でテストした結果を kcov でカバレッジを取るというケースを想定します。

レポジトリ構成
.
├── .github
│   └── workflows
│       └── test.yml     # kcov でテストカバレッジを取る
├── src
│   └── calculator.sh    # カバレッジ取得対象
└── test
    └── calculator.bats  # bats によるテスト

Bash スクリプトは以下です。

calculator.sh
#!/usr/bin/env bash

add() {
  echo $(($1 + $2))
}

subtract() {
  echo $(($1 - $2))
}

# 直接実行された場合の処理
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
  if [[ "$1" == "add" ]]; then
    add "$2" "$3"
  elif [[ "$1" == "subtract" ]]; then
    subtract "$2" "$3"
  else
    echo "Usage: $0 {add|subtract} a b"
    exit 1
  fi
fi

bats のスクリプトは以下です。

カバレッジが正しく取得できているか確認するために subtract を直接実行したパターンのテストを外してあります。

calculator.bats
#!/usr/bin/env bats

setup() {
  # スクリプトをロード
  source ./src/calculator.sh
}

@test "関数 add が正しく計算できるか" {
  run add 2 3
  [ "$status" -eq 0 ]
  [ "$output" = "5" ]
}

@test "関数 subtract が正しく計算できるか" {
  run subtract 5 2
  [ "$status" -eq 0 ]
  [ "$output" = "3" ]
}

@test "スクリプト直接実行で add が動くか" {
  run ./src/calculator.sh add 10 5
  [ "$status" -eq 0 ]
  [ "$output" = "15" ]
}

@test "無効な引数で Usage が出力されてエラーになるか" {
  run ./src/calculator.sh invalid
  [ "$status" -eq 1 ]
  [[ "$output" == *"Usage:"* ]]
}

これを GitHub Actions で実行するためのワークフローは以下です。

.github/workflows/test.yml
name: Coverage with Ubuntu 26.04

on:
  push:
    branches: [ main ]
  pull_request:
  workflow_dispatch:

permissions:
  contents: read

jobs:
  test:
    runs-on: ubuntu-26.04 # Ubuntu 26.04 ランナーを指定
    steps:
      - name: Checkout code
        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
        with:
          persist-credentials: false

      - name: Install bats and kcov
        # Ubuntu 26.04 の apt には kcov が含まれているので、apt でインストール可能
        run: |
          sudo apt-get update
          sudo apt-get install -y bats kcov

      - name: Ensure target script is executable
        run: chmod +x ./src/calculator.sh

      - name: Run tests and collect coverage with kcov
        run: |
          mkdir -p coverage
          # kcov で bats の実行結果のカバレッジを取得
          # --include-path で src ディレクトリのみをカバレッジ対象とする
          kcov --include-path=./src coverage/ bats ./test/

      - name: Upload coverage report
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: kcov-coverage-report
          path: coverage/

実行結果

GitHub Actions での実行結果サマリは以下です。

image.png

成功してカバレッジレポートの zip ファイルがアップロードされています。

これをダウンロードして確認したのが以下です。

image.png

calculator.bats であえてはずした subtract の直接呼出しだけが呼ばれていないことが確認できており、正しくカバレッジが取得できているようでした。

余談

ローカルのWSL2で kcov でレポートを作るのも10秒くらいかかったのですが、GitHub Actions 上だと 40秒くらいかかっていました。

今回のテストケースは少数なので、起動時オーバーヘッドが大きいのか、テストケースの分量で実行時間が増えるのかは分からないのですが、 kcov は ptrace を使って命令実行を判別しているはずなので、分量が増えると時間がかかるかもしれません。

おわりに

Ubuntu 24.04 では apt に含まれなくなっていたので GitHub Actions のカバレッジ取得への利用を一時見送っていた kcov ですが、現在は Ubuntu 26.04 で対応できるようになっていました。

エコシステムの対応状況は随時追っていかないと以前とは状況が変わっているのでキャッチアップを欠かさないように心がけて行こうと思います。

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?