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文件中指定fixesStrategyargs属性使用快速固定策略: --apply-fixes或--cleanuppush-fixes属性设置为pull-request :创建一个具有修复程序的新分支,并为原始分支创建拉动请求branch :将固定固定到原始分支。另外,将pr-mode设置为false :当前,应用程序不支持此模式。contents: write , pull-requests: write , checks: write )pull-request值进行push-fixes属性:允许GitHub操作创建和批准拉动请求示例配置:
- 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中的配置:如果您不想推动这些更改,请将.idea添加到.gitignore文件中。
如果您想在同一份工作中进行其他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代码扫描。为此,请将这些行添加到code_quality.yml工作流文件,直到Qodana扫描的基本配置下方:
- uses : github/codeql-action/upload-sarif@v2
with :
sarif_file : ${{ runner.temp }}/qodana/results/qodana.sarif.json该示例调用codeql-action用于将SARIF格式的Qodana报告上传到GitHub,并使用sarif_file密钥指定报告文件。
GitHub代码扫描不会将检查结果导出到第三方工具,这意味着您不能将这些数据用于Qodana的进一步处理。在这种情况下,您必须在向GitHub代码扫描提交检查结果之前,在Qodana方面设置基线和质量门处理,有关详细信息,请参见质量门和基线部分。
如果Qodana质量门失败,您可以强制执行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参数to qodana扫描操作配置args参数code_quality.yml文件:
- 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以外,您不需要其他选项:如果您在一个工作流中配置多个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 | 利用github缓存进行Qodana运行。选修的。 | 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结果摘要摘要。选修的。 | true |
github-token | github令牌访问存储库:后注释,评论。选修的。 | ${{ github.token }} |
push-fixes | 将Qodana固定在存储库中,可以是none , branch到当前分支或pull-request 。选修的。 | none |
与Qodana有关的所有问题,功能请求和支持都在YouTrack上处理。
如果您想提交新问题,请使用链接YouTrack |新问题。