Qodanaは、バグ、セキュリティの脆弱性、重複、および欠陥の修正を識別および提案するコード品質監視ツールです。
目次
QodanaスキャンGithubアクションを使用すると、githubリポジトリでQodanaを実行できます。
Qodanaスキャンを構成するには、 .github/workflows/code_quality.ymlファイルを保存して、ワークフロー構成を含みます。
name : Qodana
on :
workflow_dispatch :
pull_request :
push :
branches :
- main
- ' releases/* '
jobs :
qodana :
runs-on : ubuntu-latest
permissions :
contents : write
pull-requests : write
checks : write
steps :
- uses : actions/checkout@v3
with :
ref : ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit
fetch-depth : 0 # a full history is required for pull request analysis
- name : ' Qodana Scan '
uses : JetBrains/[email protected]
env :
QODANA_TOKEN : ${{ secrets.QODANA_TOKEN }} # read the steps about it belowビルド構成でQODANA_TOKEN環境変数を設定するには:
QODANA_TOKENの暗号化された秘密を作成し、プロジェクトトークンをその価値として保存します。QODANA_TOKEN変数をQodana Scanステップのenvセクションに追加します。このワークフローを使用して、Qodanaはメインブランチ、リリースブランチ、およびリポジトリに来るプルリクエストで実行されます。
注:Qodanaがプルリクエストモードで動作する場合のチェックアウトにはfetch-depth: 0必要です(そのプルリクエストにのみ表示される問題を報告します)。
さまざまなジョブが並行して実行されるため、Qodana用の個別のワークフローファイルを使用することをお勧めします

Qodanaが見つかった問題を自動的に修正し、リポジトリへの変更をプッシュするには、
qodana.yamlファイルでfixesStrategy指定します--apply-fixes戦略を使用してアクションargsプロパティ--cleanup設定します。push-fixesプロパティをに設定しますpull-request :修正を備えた新しいブランチを作成し、元のブランチへのプルリクエストを作成しますbranch :修正を元のブランチに押します。また、 pr-modeをfalseに設定します。現在、このモードは修正を適用するためにサポートされていません。contents: write 、 pull-requests: write 、 checks: write )push-fixesにpull-request値を使用する場合プロパティ: GitHubアクションにPullリクエストを作成および承認することを許可します構成の例:
- name : Qodana Scan
uses : JetBrains/[email protected]
with :
pr-mode : false
args : --apply-fixes
push-fixes : pull-request
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}Qodanaは、コードだけでなく
.ideaの構成も自動的に変更できます。これらの変更をプッシュしたくない場合は、.gitignoreファイルに.ideaを追加します。
同じジョブで異なるgit操作を行いたい場合は、 push-fixesを無効にして、必要な操作を手動で実行できます
name : Qodana
on :
workflow_dispatch :
pull_request :
push :
branches :
- master
- ' releases/* '
jobs :
qodana :
runs-on : ubuntu-latest
permissions :
contents : write
pull-requests : write
checks : write
steps :
- uses : actions/checkout@v3
with :
ref : ${{ github.event.pull_request.head.sha }}
fetch-depth : 0
- name : ' Qodana Scan '
uses : JetBrains/[email protected]
with :
args : --cleanup
- run : |
git config user.name github-actions
git config user.email [email protected]
git checkout -b quick-fixes-$GITHUB_RUN_ID
git add -- . ':!.idea'
git commit -m "I fixed some issues"
git push origin quick-fixes-$GITHUB_RUN_ID
gh pr create --repo $GITHUB_REPOSITORY --base $GITHUB_REF_NAME --head quick-fixes-$GITHUB_RUN_ID --title "Pull requests" --body "I fixed some issues"
env:
GH_TOKEN: ${{ github.token }}Qodanaを使用してプロジェクトのGithubコードスキャンをセットアップできます。それを行うには、これらの行をQodanaスキャンの基本構成のすぐ下にcode_quality.ymlワークフローファイルに追加します。
- uses : github/codeql-action/upload-sarif@v2
with :
sarif_file : ${{ runner.temp }}/qodana/results/qodana.sarif.jsonこのサンプルは、SARIF形式のQodanaレポートをGitHubにアップロードするためにcodeql-actionを呼び出し、 sarif_fileキーを使用してレポートファイルを指定します。
GitHubコードスキャンは、検査結果をサードパーティツールにエクスポートしません。つまり、Qodanaによるさらなる処理にこのデータを使用することはできません。この場合、検査結果をGitHubコードスキャンに送信する前に、Qodana側にベースラインと品質のゲート処理をセットアップする必要があります。詳細については、品質ゲートとベースラインセクションを参照してください。
Qodana Quality Gateが失敗した場合、GitHubを施行してプル要求のマージをブロックできます。それを行うには、以下に説明するように分岐保護ルールを作成します。
mainブランチをターゲットにするpull_requestイベントで実行するようにワークフローを設定します。 on :
pull_request :
branches :
- main mainの代わりに、ここでブランチを指定できます。
fail-thresholdオプションの問題の数(整数)を設定します。mainをブランチ名に追加します。Qodanaステータスチェックを検索してから、確認してください。高品質のゲートとベースライン機能を組み合わせて、技術的な負債を管理し、新しい問題のみを報告し、あまりにも多くの問題を含むプルリクエストをブロックできます。
これらの手順に従って、プロジェクトのベースラインを確立します。
cd project
qodana scan --show-report http://localhost:8080/でレポートを開き、検出された問題をベースラインに追加し、 qodana.sarif.jsonファイルをダウンロードします。
qodana.sarif.jsonファイルをGithubのプロジェクトルートフォルダーにアップロードします。
append --baseline,qodana.sarif.json qodanaスキャンアクション構成の引数code_quality.ymlファイルのargs
- name : Qodana Scan
uses : JetBrains/qodana-action@main
with :
args : --baseline,qodana.sarif.jsonベースラインを更新したい場合は、これらの手順をもう一度繰り返す必要があります。
これから、GitHubは、ベースラインに新しいものとして追加されなかった問題についてのみ機会を生成します。
ベースラインに加えて高品質のゲートを確立するには、 baseline-pathパス行の直後にこの行をcode_quality.ymlに追加します。
fail-threshold : <number-of-accepted-problems>これに基づいて、ベースラインを越えたプル要求の新しい問題のみを検出できます。同時に、 fail-threshold制限を超える新しい問題を伴うプル要求がブロックされ、ワークフローが失敗します。
リポジトリにQodanaワークフローバッジを設定して、それを行うには、次の手順に従ってください。

ほとんどの場合、 args以外のオプションは必要ありません。1つのワークフローで複数のQodanaスキャンジョブを構成している場合、他のすべてのオプションが役立ちます。
アクションパラメーターを定義するためwith使用します。
with :
args : --baseline,qodana.sarif.json
cache-default-branch-only : true| 名前 | 説明 | デフォルト値 |
|---|---|---|
args | 追加のQodana CLI scanコマンド引数、たとえば, -i,frontend,--print-problemsで引数を分割します。オプション。 | - |
results-dir | 分析結果を保存するディレクトリ。オプション。 | ${{ runner.temp }}/qodana/results |
upload-result | Qodanaの結果(Sarif、その他のアーティファクト、ログ)をジョブのアーティファクトとしてアップロードします。オプション。 | false |
artifact-name | 結果のアップロードに使用されるQodana結果アーティファクト名を指定します。オプション。 | qodana-report |
cache-dir | Qodanaキャッシュを保存するディレクトリ。オプション。 | ${{ runner.temp }}/qodana/caches |
use-caches | Qodana RunsにGithubキャッシュを利用します。オプション。 | true |
primary-cache-key | プライマリキャッシュキーを設定します。オプション。 | qodana-2024.3-${{ github.ref }}-${{ github.sha }} |
additional-cache-key | 追加のキャッシュキーを設定します。オプション。 | qodana-2024.3-${{ github.ref }} |
cache-default-branch-only | デフォルトのブランチのみのキャッシュをアップロードします。オプション。 | false |
use-annotations | 注釈を使用して、GitHubユーザーインターフェイスの結果をマークします。オプション。 | true |
pr-mode | 分析は、変更されたファイルのみをプルリクエストにします。オプション。 | true |
post-pr-comment | Qodana結果の概要を掲載したコメントをPullリクエストに投稿してください。オプション。 | true |
github-token | リポジトリにアクセスするためのgithubトークン:投稿の投稿、コメント。オプション。 | ${{ github.token }} |
push-fixes | Qodanaの修正をリポジトリにプッシュすることは、現在のブランチへのbranch 、またはpull-requestブランチnoneことができます。オプション。 | none |
Qodanaに関連するすべての問題、機能要求、およびサポートは、YouTrackで処理されます。
新しい問題を提出したい場合は、リンクYouTrackを使用してください|新しい問題。