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 ,則與服務器內容相比,當前分析中是否有新的發現。 |