GitHub操作以使用CodeChecker作为驱动程序进行静态分析。对于C家族项目(C,C ++,Objective-C,Cuda等),CodeChecker支持推动Clang的静态分析程序。可以通过报告转换器将其他几个静态分析仪的输出集成到Codechecker中。
这个单个动作复合脚本包含以下步骤:
注意:静态分析可能是一个耗时的过程。建议静态分析步骤与CI执行的其余部分不是顺序的,而是在工作流程中作为自己的作业运行,或者完全不同的工作流程。
在执行此操作之前,请确保您的项目已完全配置为构建。
注意:静态分析仪可以依靠在真实版本构建中优化的其他信息。因此,建议在Debug配置中配置您的项目。
如下所示,将工作添加到您的CI中。这两个版本是相互排斥的 - 您可以提供一个编译数据库,或者您指示CodeChecker创建一个。
某些项目在其构建配置中足够微不足道,在执行configure.sh , cmake或类似工具后不需要采取其他步骤。如果您能够在不运行构建本身的情况下从构建系统中生成编译数据库,则可以节省一些时间,然后立即进行分析。
您可以在logfile变量中指定生成的编译数据库
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
logfile : ${{ github.workspace }}/Build/compile_commands.json
# Upload the results to the CI.
- uses : actions/upload-artifact@v2
with :
name : " CodeChecker Bug Reports "
path : ${{ steps.codechecker.outputs.result-html-dir }} 其他类型的项目可能严重依赖生成的代码。在事先执行没有构建的情况下查看这些项目的源代码时,它们不会编译 - 因此,分析也不能执行。
在这种情况下,您需要指示CodeChecker在分析之前记录构建(并花费时间进行构建)。
您可以在build-command变量中指定要执行的构建。
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
build-command : " cd ${{ github.workspace }}/Build; cmake --build . "
# Upload the results to the CI.
- uses : actions/upload-artifact@v2
with :
name : " CodeChecker Bug Reports "
path : ${{ steps.codechecker.outputs.result-html-dir }}如果要求,可以将warnings输出变量与执行工作中的步骤相匹配,如果项目发出了任何静态分析警告,则会打破整个工作。
注意:由于静态分析可能是嘈杂的,并且报告笨拙地修复了,因此默认行为和建议是仅报告调查结果,但不会破坏整个CI。
为了以人为耗费的形式获取报告,必须先将其上传到失败步骤失败之前,然后将其上传到某个地方!
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
build-command : " cd ${{ github.workspace }}/Build; cmake --build . "
# Upload the results to the CI.
- uses : actions/upload-artifact@v2
with :
name : " CodeChecker Bug Reports "
path : ${{ steps.codechecker.outputs.result-html-dir }}
# Break the build if there are *ANY* warnings emitted by the analysers.
- name : " Break build if CodeChecker reported any findings "
if : ${{ steps.codechecker.outputs.warnings == 'true' }}
run : exit 1如果您的项目在某个地方设有Codechecker服务器,则可以配置该作业以自动创建或更新运行。
# It is recommended that storing only happens for PUSH events, and preferably
# only for long-term branches.
on :
push :
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
build-command : " cd ${{ github.workspace }}/Build; cmake --build . "
store : true
store-url : ' http://example.com:8001/MyProject '
store-username : ${{ secrets.CODECHECKER_STORE_USER }}
store-password : ${{ secrets.CODECHECKER_STORE_PASSWORD }}
# store-run-name: "custom run name to store against"CodeChecker能够计算两个分析之间的差异。如果对项目的稳定版本进行分析(请参见上文),则可以配置用于拉动请求的作业,如果试图引入新的分析结果,则可以自动拒绝拉的请求。
为了以人为耗费的形式获取报告,必须先将其上传到失败步骤失败之前,然后将其上传到某个地方!
on :
pull_request :
runs :
steps :
# Check the pull request out! (In pull_request jobs, the checkout action
# automatically downloads the "after-merge" state of the pull request if
# there are no conflicts.)
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
build-command : " cd ${{ github.workspace }}/Build; cmake --build . "
store : ${{ github.event_name == 'push' }}
store-url : ' http://example.com:8001/MyProject '
store-username : ${{ secrets.CODECHECKER_STORE_USER }}
store-password : ${{ secrets.CODECHECKER_STORE_PASSWORD }}
# Keep the names for 'store' and 'diff' in sync, or auto-generated!
# diff-run-name: "custom run name to store with"
diff : ${{ github.event_name == 'pull_request' }}
diff-url : ' http://example.com:8001/MyProject '
diff-username : ${{ secrets.CODECHECKER_DIFF_USER }}
diff-password : ${{ secrets.CODECHECKER_DIFF_PASSWORD }}
# diff-run-name: "custom run name to diff against"
# Upload the potential new findings results to the CI.
- uses : actions/upload-artifact@v2
if : ${{ steps.codechecker.outputs.warnings-in-diff == 'true' }}
with :
name : " New introduced results Bug Reports "
path : ${{ steps.codechecker.outputs.diff-html-dir }}
- name : " Fail the job if new findings are introduced "
if : ${{ steps.codechecker.outputs.warnings-in-diff == 'true' }}
shell : bash
run : |
echo "::error title=New static analysis warnings::Analysed commit would introduce new static analysis warnings and potential bugs to the project"
# Fail the build, after results were collected and uploaded.
exit 1 这个单个动作复合脚本包含以下步骤:
report-converter将其他分析仪的报告转换为CodeChecker的格式。注意:静态分析可能是一个耗时的过程。建议静态分析步骤与CI执行的其余部分不是顺序的,而是在工作流程中作为自己的作业运行,或者完全不同的工作流程。
请参阅您选择的分析仪的文档。 CodeChecker不支持通过外部工具来驱动分析,但是如果完成了成功的分析,则可以转换和存储结果。
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Perform the analysis. Details vary between analysers!
# Example for "PyLint" added below!
- name : " Analyse with PyLint "
run : |
sudo apt-get -y install pylint
pylint -f json --exit-zero myproject > pylint_reports.json
# Run the conversion
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
report-converter : true
original-analyser : " pylint "
original-analysis-output : " pylint_reports.json "
# Upload the results (after conversion by CodeChecker) to the CI.
- uses : actions/upload-artifact@v2
with :
name : " CodeChecker Bug Reports "
path : ${{ steps.codechecker.outputs.result-html-dir }}报告 - 连接工具将各种分析仪的输出转换为CodeChecker使用的通用格式。转换完成后,其余的动作功能可以以与C/C ++项目相同的方式执行。请参阅文档的早期部分以进行这些功能的配置。
| 多变的 | 默认 | 描述 |
|---|---|---|
config | $(project-root)/.codechecker.json | 配置文件包含要附加到分析命令的标志。建议大多数分析配置版本都与项目版本相关。 ?在官方文档中阅读有关codechecker.json配置文件的更多信息。 |
| 多变的 | 默认 | 描述 |
|---|---|---|
llvm-version | latest | LLVM的主要版本要安装和使用。 LLVM是从社区PPA安装的。该值必须是PPA支持的主要版本(例如13 )!如果latest ,将自动收集最新的(未发行)版本。如果ignore ,请勿安装任何内容。 (不建议。) |
install-custom | false | 如果设置为true ,则可以打开从指定的repository和version中本地克隆并安装Codechecker的能力。否则,将version视为发行版本,并下载了来自PYPI的Codechecker Suite。 |
repository | Ericsson/CodeChecker | 如果install-custom为true ,则CodeChecker存储库要签出和构建。 |
version | master | 如果install-custom是false ,则从PYPI下载版本版本(例如6.18.0 ),或者master以获取最新版本。否则,分支(默认master ),标记或提交repository中的SHA进行检查。 |
?在官方文档中阅读有关CodeChecker log更多信息。
| 多变的 | 默认 | 描述 |
|---|---|---|
logfile | JSON编译数据库的位置描述了项目的构建方式。如果构建系统可以为我们预先生成文件,则使用此标志。 | |
build-command | 构建命令要执行。 CodeChecker能够为自己执行和记录构建。如果构建系统无法单独生成信息,或者项目依赖于其他生成的代码,则使用此标志。 |
?在官方文档中阅读有关CodeChecker analyze更多信息。
| 多变的 | 默认 | 描述 |
|---|---|---|
analyze-output | (自动生成) | 应存储原始分析输出的目录。 |
ctu | false | 在Clang静态分析仪中启用交叉翻译单元分析。 |
ignore-analyze-crashes | true | 如果设置为true ,则分析阶段如果某些分析操作失败(由于clang中的潜在崩溃),则不会报告错误。 |
?在官方文档中阅读有关CodeChecker parse更多信息。
?在官方文档中阅读有关report-converter更多信息。
| 多变的 | 默认 | 描述 |
|---|---|---|
report-converter | false | 如果设置为true ,则该作业将执行其他分析仪的报告转换,而不是单独进行静态分析。 |
original-analyser | 较早进行的分析的“类型”。通过以强制输入的方式传递给report-converter可执行文件。 | |
original-analysis-output | 可用的第三方分析仪结果的文件或目录。通过以强制输入的方式传递给report-converter可执行文件。 |
?在官方文档中阅读有关CodeChecker cmd diff更多信息。
?如果服务器需要身份验证,则检查服务器内容的分析结果需要PRODUCT_VIEW权限。
| 多变的 | 默认 | 描述 |
|---|---|---|
diff | false | 如果设置为true ,则该作业将计算当前分析结果的差异,以与存储在远程服务器上的结果相比。 |
diff-url | codechecker产品的URL检查和差异,包括端点。通常以http://example.com/ProductName的格式。如果diff为true ,则需要指定此变量。 | |
diff-username | 如果服务器需要身份验证才能访问,请指定检查应使用的用户名。 | |
diff-password | 密码或生成的访问令牌与用户相对应。 ?注意:建议将其配置为存储库秘密,并因此提供: ${{ secrets.CODECHECKER_PASSWORD }}配置操作时。 | |
diff-run-name | (自动生成,格式user/repo: branchname ) | CodeChecker分析执行被收集到运行中。运行通常与分析的一种配置相关。 |
?在官方文档中阅读有关CodeChecker store更多信息。
?如果服务器需要身份验证,则存储运行到服务器需要PRODUCT_STORE权限。
| 多变的 | 默认 | 描述 |
|---|---|---|
store | false | 如果设置为true ,则脚本将将调查结果上传到Codechecker Server。通常,其他标志也需要配置! |
store-url | Codechecker产品的URL将存储到包括端点。通常以http://example.com/ProductName的格式。如果将store设置为true ,则需要指定此变量。 | |
store-username | 如果服务器需要身份验证才能访问,请指定上传应使用的用户名。 | |
store-password | 密码或生成的访问令牌与用户相对应。 ?注意:建议将其配置为存储库秘密,并因此提供: ${{ secrets.CODECHECKER_PASSWORD }}配置操作时。 | |
store-run-name | (自动生成,格式user/repo: branchname ) | CodeChecker分析执行被收集到运行中。运行通常与分析的一种配置相关。运行可以逐步存储,在这种情况下,CodeChecker可以注释报告已修复。 |
outputs将在进一步的步骤中使用该动作暴露了以下输出,这些输出可能在工作流程的步骤中成功进行分析。
| 多变的 | 价值 | 描述 |
|---|---|---|
analyze-output | 自动生成或analyze-output输入 | 可以使用原始分析输出文件(由分析仪或转换器创建)的目录。 |
codechecker-version | 自动生成(可能与输入version相同) | 执行分析的已安装CodeChecker的版本。 |
codechecker-hash | 自动生成。 | 执行分析的已安装CodeChecker的git哈希。 |
logfile | 自动生成或logfile输入 | 执行的分析的JSON编译数据库。 |
llvm-version | 自动生成。 | 已安装的LLVM/Clang软件包的完整版字符串(如clang --version报道)。 |
diff-html-dir | 自动生成。 | 生成了有关新发现的用户友好的HTML错误报告的目录(如果启用了diff )。 |
diff-result-log | 自动生成。 | CodeChecker cmd diff的输出日志文件,其中包含倾倒在其中的新发现。 |
diff-run-name | 自动生成或diff-run-name输入 | 比较报告的分析名称(如果启用了diff )。 |
result-html-dir | 自动生成。 | 生成用户友好的HTML错误报告的目录。 |
result-log | 自动生成。 | CodeChecker parse的输出日志文件包含倒入其中的发现。 |
store-run-name | 自动生成或store-run-name输入 | 分析运行的名称(如果已启用了store ),将结果上传到。 |
store-successful | true还是false | 存储结果是否成功。可选地打破构建以检测网络失败的功能。 |
warnings | true还是false | 静态分析仪是否报告了任何发现。 |
warnings-in-diff | true还是false | 如果启用了diff ,则与服务器内容相比,当前分析中是否有新的发现。 |