Действие 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 сообщества. Значение должно быть основной версией (например, 13 ), которая поддерживается PPA для используемой ОС! Если latest , автоматически собирайте последнюю (но не выпущенную) версию. Если ignore , не установите ничего. (Не рекомендуется.) |
install-custom | false | Если установить на true , открывает возможность локально клонировать и устанавливать Codechecker из указанного repository и version . В противном случае version принимается в качестве версии выпуска, и загружается люкс из Codechecker от PYPI. |
repository | Ericsson/CodeChecker | Репозиторий Codechecker для проверки и построения, если install-custom true . |
version | master | Если install-custom является false , версия выпуска (например, 6.18.0 ) для загрузки из PYPI или master , чтобы получить последний выпуск. В противном случае, ветвь (по умолчанию master ), теги или совершают SHA в repository , чтобы проверить. |
? Узнайте больше о 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 | URL -адрес продукта Codechecker для проверки и дифференциации, включая конечную точку. Обычно в формате http://example.com/ProductName . Указание этой переменной требуется , если diff была установлена на true . | |
diff-username | Если сервер требует аутентификации для доступа, укажите имя пользователя, с которым следует войти в систему. | |
diff-password | Пароль или сгенерированный токен доступа, соответствующий пользователю. ? ПРИМЕЧАНИЕ. Рекомендуется, чтобы это было настроено в качестве секрета репозитория и дано как таковое: ${{ secrets.CODECHECKER_PASSWORD }} при настройке действия. | |
diff-run-name | (Автогенерированная, в формате user/repo: branchname ) | Создание анализа кодекереров собирается в прогоны . Пропуск обычно коррелирует с одной конфигурацией анализа. |
? Узнайте больше о CodeChecker store в официальной документации.
? Хранение запуска на сервер требует разрешения PRODUCT_STORE , если сервер требует аутентификации.
| Переменная | По умолчанию | Описание |
|---|---|---|
store | false | Если установить true , скрипт загрузит результаты на сервер CodeChecker. Обычно другие флаги тоже должны быть настроены! |
store-url | URL -адрес продукта Codechecker для хранения, включая конечную точку. Обычно в формате http://example.com/ProductName . Указание этой переменной требуется , если store было установлено в true . | |
store-username | Если сервер требует аутентификации для доступа, укажите имя пользователя, с которым должна войти загрузка. | |
store-password | Пароль или сгенерированный токен доступа, соответствующий пользователю. ? ПРИМЕЧАНИЕ. Рекомендуется, чтобы это было настроено в качестве секрета репозитория и дано как таковое: ${{ secrets.CODECHECKER_PASSWORD }} при настройке действия. | |
store-run-name | (Автогенерированная, в формате user/repo: branchname ) | Создание анализа кодекереров собирается в прогоны . Пропуск обычно коррелирует с одной конфигурацией анализа. Прогонки могут храниться постепенно, и в этом случае Codechecker может аннотировать эти отчеты. |
outputs действия для использования в дальнейших шагахДействие раскрывает следующие выходы, которые могут использоваться в этапах рабочего процесса, преуспевающего анализ.
| Переменная | Ценить | Описание |
|---|---|---|
analyze-output | Автогенерированный или analyze-output | Доступен каталог, в которых необработанные выходные файлы анализа (либо созданные анализаторами, либо конвертером). |
codechecker-version | Автогенерирован (вероятно, то же самое, что и входная version ) | Версия установленного Codechecker, которая выполнила анализ. |
codechecker-hash | Автогенерирован. | Git hash установленного кодексера, который выполнил анализ. |
logfile | Автогенерированный, или вход logfile | База данных компиляции JSON в анализе, которая была выполнена. |
llvm-version | Автогенерирован. | Полная строка версии установленного пакета LLVM/Clang (как сообщается clang --version ). |
diff-html-dir | Автогенерирован. | Каталог, в котором были созданы отчеты об ошибках HTML HTML, которые были созданы по поводу новых результатов (если diff был включен). |
diff-result-log | Автогенерирован. | Файл выходного журнала CodeChecker cmd diff , который содержит новые результаты, сброшенные в него. |
diff-run-name | Автогенерированный или diff-run-name вход | Название анализа прогона (если diff был включен), с которым сравнивались отчеты. |
result-html-dir | Автогенерирован. | Каталог, в котором были созданы удобные отчеты HTML -отчеты 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 был включен, были ли новые выводы в текущем анализе по сравнению с содержанием сервера. |