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?

Pandoc、Job Summariesを用いたコードカバレッジの可視化と共有

Posted at

前提

今回使用する技術は下記を前提としています。
業務で使用しているのがPHP/Laravelのため、本投稿でも使用しますが他言語でも基本的には問題ありません。
Summary表示まで実装するので、細かい箇所は各自で調べて頂ければ幸いです。

  • Github Actions
  • Pandoc
  • PHP/Laravel
    • テストユニットはPestを使用する

CI/CDフロー設計

  1. 特定ブランチへのpush、PR作成で発火
  2. Pestでカバレッジレポートを出力
  3. Pandocでレポート形式を変換
  4. Github Artifactに成果物を保存
  5. Github Job Summaryでレポート内容を表示

実装

フローにおけるテスト実行までの部分は割愛します。

テスト実行、カバレッジレポートの出力

Clover XMLやXML形式のパターンが多いかと思うのですが、Pandocが対応しているのは下記フォーマットのため、レポートの出力形式は.htmlで行います。

XML version of native AST

出力されるファイルはcoverage.index.htmlとなります。

- name: Tests
  run: |
    ./vendor/bin/pest --coverage-html coverage

マークダウン形式への変換

Pandocを用いてマークダウンへの変換を行います。
github actionsでのSummary表示のためgfmへ変換します。

gfm (GitHub-Flavored Markdown), or the deprecated and less accurate markdown_github;
use markdown_github only if you need extensions not supported in gfm.
- name: Convert HTML to Markdown
  uses: docker://pandoc/core:3.5
  with:
    args: >-
      --to=gfm
      --output=coverage.md
      coverage/index.html

Artifactへ保存

今回はmarkdown変換後のレポートのみ保存します。
また検証段階のため保存期間は1日と最短日数で指定しています。

- name: Upload Coverage Artifact
  uses: actions/upload-artifact@v4
  with:
    name: coverage-report
    path: coverage.md
    # 検証のため最短期間で設定
    retention-days: 1

Job Summaryでの結果表示

今回の本題です。
Pandocで変換したgfm形式のレポートをSummaryで表示します。

- name: Add Coverage to Job Summary
  run: |
    echo "# Test Coverage Report" >> $GITHUB_STEP_SUMMARY
    echo "" >> $GITHUB_STEP_SUMMARY
    cat coverage.md >> $GITHUB_STEP_SUMMARY

当初は通常のmarkdownで表示できるのかと思ったのですが、同僚からGitHub Flavored Markdownでいけるとアドバイスをもらいました。
実際、githubのドキュメントにも下記記述があります。

ジョブの概要では GitHub Flavored Markdown がサポートされていて、
ステップの Markdown コンテンツを GITHUB_STEP_SUMMARY 環境ファイルに追加できます。

ちなみにhtmlやxml、text形式のものをそのままpushしてもエラーにはなりませんが、明らかに表示が崩れてしまうのでご注意ください。

おわりに

image.png
上記のようになりました。
テストカバレッジレポートの形式をgfmに変換さえできれば、後はgithub公式のアクションで対応できるのでとても簡単でした!(むしろ変換の部分で手こずった印象です)
レポートの出力形式のスタイルをどうするかという部分はあるものの、表示するという基本部分についてはしっかり抑えられているかと思います。
みなさんもぜひ試してみてください!

おまけ

少し見栄えが悪いので整えてみました。
gfmへの変換前にcoverage/index.htmlを下記ステップで整形します。

- name: Remove breadcrumb and links from HTML
  run: |
    # Remove breadcrumb navigation
    sed -i '/<nav aria-label="breadcrumb">/,/<\/nav>/d' coverage/index.html
    # Remove directory icons
    sed -i 's|<img src="_icons/[^"]*" class="octicon" />||g' coverage/index.html
    # Remove links but keep text
    sed -i 's|<a href="[^"]*">\([^<]*\)</a>|\1|g' coverage/index.html

image.png
はい、少しマシになりましたね:thumbsup:

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?