JetBrains 製コード解析ツール Qodana を GitHub Actions で動かしてみた

2 min read読了の目安(約2500字

Qodana とは?

https://blog.jetbrains.com/idea/2021/02/early-access-program-for-qodana-a-new-product-that-brings-the-smarts-of-jetbrains-ides-into-your-ci-pipeline/

https://github.com/JetBrains/qodana-action

Qodana is a code quality monitoring tool that identifies and suggests fixes for bugs, security vulnerabilities, duplications, and imperfections. Qodana already supports PHP, Java, and Kotlin projects, and will eventually support all languages and technologies covered by JetBrains IDEs.

[訳]
Qodana はバグや脆弱性や重複や不完全さを検出し修正を提案してくれるコード品質監視ツールです。
現在は PHP, Java, Kotlin がサポートされ最終的には JetBrains IDE がカバーするすべての言語や技術がサポートされる予定です。

まだ Early Access Program (EAP) なので注意

実行環境

Docker ベースなので以下の環境で実行できます。

  • 手動
  • CI パイプライン
  • GitHub Actions
  • GitHub Application
  • JetBrains TeamCity standalone & Cloud

今回は GitHub Actions で試します。

対象コード

ほどよいボリュームのコードということで laravel/lumen をお借りしました。
フォークして qodana ブランチを作成してあります。

https://github.com/SnowCait/lumen/tree/qodana

GitHub Actions

設定はデフォルトのままで動きました。
レポートが HTML で出力されるのですがローカルで index.html を開くと Fetch API が使えずエラーになるので GitHub Pages でホストします。
リポジトリ設定で qodana ブランチと /docs フォルダーを設定しました。

.github/workflows/qodana.yml
name: Qodana

on:
  push:
    branches: [ qodana ]
    paths:
      - .github/workflows/qodana.yml

jobs:
  qodana:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - run: composer install
      - name: Qodana - Code Inspection
        uses: JetBrains/qodana-action@v1.0-eap
        with:
          report-dir: docs # GitHub Pages 用に指定
      - name: Count changes
        id: changes
        run: |
          git add -N docs
          echo "::set-output name=count::$(git diff --name-only docs | wc -l)"
      - name: Deploy to GitHub Pages
        run: |
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add docs
          git commit -m "Qodana report"
          git push
        if: steps.changes.outputs.count > 0
      - uses: actions/upload-artifact@v2
        with:
          name: result
          path: qodana
      - uses: actions/upload-artifact@v2
        with:
          name: report
          path: docs

実行時間

コード規模にもよると思いますが3分くらいでした。

レポート

レポートは以下にホストしてあります。

https://snowcait.github.io/lumen/

サマリーのグラフと詳細のリストが表示されました。