CodeChecker를 사용하여 드라이버로 사용하여 정적 분석을 실행하는 GitHub 작업. C-Family Projects (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에서 설치됩니다. 값은 사용 된 OS의 PPA 에서 지원하는 주요 버전 (예 : 13 )이어야 합니다 ! latest 경우 최신 (아직 발표되지 않은) 버전을 자동으로 수집하십시오. ignore 하면 아무것도 설치하지 마십시오. (권장되지 않습니다.) |
install-custom | false | true 로 설정된 경우 지정된 repository 및 version 에서 로컬로 클론하고 CodeChecker를 설치하는 기능을 엽니 다. 그렇지 않으면 version 릴리스 버전으로 사용되며 PYPI의 CodeChecker 제품군이 다운로드됩니다. |
repository | Ericsson/CodeChecker | CodeChecker 저장소는 install-custom true 인 경우 체크 아웃 및 빌드 할 수 있습니다. |
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 서버에 업로드합니다. 일반적으로 다른 플래그도 구성해야합니다! |
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 | 자동 생성. | 분석을 수행 한 설치된 코드 체커의 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 활성화 된 경우, 서버의 내용과 비교할 때 현재 분석에 새로운 결과가 있는지 여부. |