GitHub إجراء لتنفيذ التحليل الثابت على استخدام CodeChecker كسائقه. بالنسبة لمشاريع C-Family (C ، C ++ ، Objective-C ، CUDA ، إلخ) ، يدعم CodeChecker قيادة برامج التحليل الثابت لـ Clang. يمكن دمج العديد من ناتج المحللين الثابتة الأخرى في CodeChecker من خلال محول التقرير.
يشمل هذا البرنامج النصي المركب المفرد الخطوات التالية:
ملاحظة: يمكن أن يكون التحليل الثابت عملية تستغرق وقتًا طويلاً. يوصى بأن خطوة التحليل الثابت ليست متسلسلة مع بقية تنفيذ CI ، ولكن إما تعمل كوظيفة خاصة بها في سير العمل ، أو سير عمل متميز تمامًا تمامًا.
يرجى التأكد من تكوين مشروعك بالكامل للبناء قبل تنفيذ هذا الإجراء.
ملاحظة: يمكن للمحللين الثابتين الاعتماد على معلومات إضافية تم تحسينها في بناء الإصدار الحقيقي. وبالتالي ، يوصى بتكوين مشروعك في تكوين Debug .
أضف المهمة إلى CI الخاص بك على النحو التالي. الإصداران حصريان بشكل متبادل - يمكنك إما إعطاء قاعدة بيانات تجميع ، أو تقوم بتوجيه CodeChecker لإنشاء واحدة.
بعض المشاريع تافهة بدرجة كافية في تكوين البناء الخاص بها cmake حيث لا يلزم اتخاذ خطوات إضافية بعد تنفيذ configure.sh . إذا كنت قادرًا على إنشاء قاعدة بيانات تجميع من نظام الإنشاء الخاص بك دون تشغيل البناء نفسه ، فيمكنك توفير بعض الوقت ، والانتقال إلى التحليل على الفور.
يمكنك تحديد قاعدة بيانات التجميع التي تم إنشاؤها في متغير 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 في أشواط . عادة ما يرتبط التشغيل بتكوين واحد للتحليل. |
؟ اقرأ المزيد عن 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 في أشواط . عادة ما يرتبط التشغيل بتكوين واحد للتحليل. يمكن تخزين عمليات التشغيل بشكل تدريجي ، وفي هذه الحالة ، يمكن لـ CodeChecker التعليق على أن التقارير قد تم إصلاحها. |
outputs الإجراء لاستخدامها في خطوات أخرىيكشف الإجراء المخرجات التالية التي يمكن استخدامها في خطوات سير العمل التي تنجح في التحليل.
| عامل | قيمة | وصف |
|---|---|---|
analyze-output | مدخلات تلقائيًا أو analyze-output | الدليل الذي تتوفر فيه ملفات إخراج التحليل الخام (إما أنشأها المحللون ، أو بواسطة المحول). |
codechecker-version | تم إنشاؤه تلقائيًا (على الأرجح مثل version الإدخال) | إصدار codechecker المثبت الذي أجرى التحليل. |
codechecker-hash | تم إنشاؤه تلقائيًا. | تجزئة GIT من codechecker المثبت الذي أجرى التحليل. |
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 ، ما إذا كانت هناك نتائج جديدة في التحليل الحالي بالمقارنة مع محتويات الخادم. |