تخصيص اللغات وإصدارات البناء لفحص التعليمة البرمجية
يدعم مسح ضوئي للتعليمة البرمجية CodeQL العديد من اللغات افتراضياً باستخدام ميزة البناء التلقائي. إذا كانت التعليمة البرمجية الخاصة بك تستخدم عملية إنشاء غير قياسية، فقد تحتاج إلى تخصيص سير عملك بخطوات بناء مخصصة.
ستصف هذه الوحدة كيفية تغيير اللغات التي تم تحليلها عن طريق فحص التعليمة البرمجية وكيفية إضافة خطوات بناء مخصصة إلى سير عمل مسح ضوئي للتعليمة البرمجية CodeQL.
قم بتغيير اللغات التي يتم تحليلها
يكتشف مسح ضوئي للتعليمة البرمجية CodeQL تلقائياً التعليمة البرمجية المكتوبة باللغات المدعومة التالية: C/C++, C#, Go, Java, JavaScript/TypeScript, Python, and Ruby.
إشعار
تقوم CodeQL بتحديث اللغات والأطر المدعومة باستمرار، للحصول على قائمة كاملة باللغات والمتغيرات والمحولات البرمجية المتوفرة، يرجى الاطلاع على الوثائق[7]..
يحتوي ملف سير عمل تحليل CodeQL الافتراضي على مصفوفة بناء تسمى language والتي تسرد اللغات في مستودعك التي تم تحليلها. يملأ CodeQL هذه المصفوفة تلقائياً عند إضافة مسح ضوئي للتعليمة البرمجية إلى مستودع. يؤدي استخدام مصفوفة اللغة إلى تحسين CodeQL لتشغيل كل تحليل على التوازي. نوصي بأن تتبنى جميع مهام سير العمل هذا التكوين نظراً لفوائد الأداء الخاصة بالتوازي مع الإصدارات.
إذا كان المستودع الخاص بك يحتوي على تعليمات برمجية بأكثر من واحدة من اللغات المدعومة، يمكنك اختيار اللغات التي تريد تحليلها. هناك العديد من الأسباب التي قد تجعلك ترغب في منع تحليل لغة ما. على سبيل المثال، قد تكون للمشروع تبعيات بلغة مختلفة عن النص الأساسي للتعليمات البرمجية الخاصة بك، وقد تفضل عدم رؤية التنبيهات الخاصة بهذه التبعيات.
إذا كان سير العمل الخاص بك يستخدم مصفوفة اللغة، ترميز CodeQL لتحليل اللغات الموجودة في المصفوفة فقط. لتغيير اللغات التي تريد تحليلها، قم بتحرير قيمة متغير المصفوفة. يمكنك إزالة لغة لمنع تحليلها، أو يمكنك إضافة لغة لم تكن موجودة في المستودع عند إعداد مسح التعليمات البرمجية. على سبيل المثال، إذا احتوى المستودع في البداية على JavaScript فقط عند إعداد مسح التعليمات البرمجية، وقمت لاحقا بإضافة تعليمة Python البرمجية، فستحتاج إلى إضافته python إلى المصفوفة.
jobs:
analyze:
name: Analyze
...
strategy:
fail-fast: false
matrix:
language: ['javascript', 'python']
إذا كان سير العمل الخاص بك لا يحتوي على مصفوفة تسمى اللغة، فسيتم تكوين CodeQL لتشغيل التحليل بشكل تسلسلي. إذا لم تحدد اللغات في سير العمل، يكتشف CodeQL تلقائيا ويحاول تحليل أي لغات مدعومة في المستودع. إذا كنت تريد اختيار اللغات المراد تحليلها، بدون استخدام مصفوفة، يمكنك استخدام معلمة اللغات ضمن الإجراء init.
- uses: github/codeql-action/init@v1
with:
languages: cpp, csharp, python
خطوات بناء مخصصة لفحص التعليمة البرمجية
بالنسبة للغات المترجمة المدعومة، يمكنك استخدام إجراء الإنشاء التلقائي في سير عمل تحليل CodeQL لإنشاء التعليمة البرمجية الخاصة بك. وهذا يتجنب الاضطرار إلى تحديد أوامر إنشاء صريحة ل C/C++، وC#، وJava. تدير CodeQL أيضاً بناء لمشاريع Go لإعداد المشروع. ومع ذلك، على عكس اللغات المترجمة الأخرى، يتم استخراج جميع ملفات Go في المستودع، وليس فقط تلك التي تم إنشاؤها. يمكنك استخدام أوامر إنشاء مخصصة لتخطي استخراج ملفات Go التي لا تلمسها البنية.
أضف خطوات البناء للغة المترجمة
إذا كان كود C/C++, C#, أو Java في المستودع الخاص بك يحتوي على عملية إنشاء غير قياسية، فقد يفشل autobuild. ستحتاج إلى إزالة الخطوة autobuild من سير العمل وإضافة خطوات الإنشاء يدوياً.
بعد إزالة الخطوة autobuild، ألغِ تعليق خطوة التشغيل وأضف أوامر إنشاء مناسبة لمستودعك. تقوم خطوة تشغيل سير العمل بتشغيل برامج سطر الأوامر باستخدام غلاف نظام التشغيل. يمكنك تعديل هذه الأوامر وإضافة المزيد من الأوامر لتخصيص عملية الإنشاء.
- run: |
make bootstrap
make release
إذا كان المستودع الخاص بك يحتوي على لغات مترجمة متعددة، فيمكنك تحديد أوامر بناء خاصة بلغة معينة. على سبيل المثال، إذا كان المستودع الخاص بك يحتوي على C/C++، وC# وJava، وينشئ autobuild بشكل صحيح C/C++ وC# ولكنه فشل في إنشاء Java، يمكنك استخدام التكوين التالي في سير العمل بعد خطوة التهيئة. يحدد هذا خطوات إنشاء Java أثناء الاستمرار في استخدام autobuild لـ C/C++ وC#:
- if: matrix.language == 'cpp' || matrix.language == 'csharp'
name: Autobuild
uses: github/codeql-action/autobuild@v1
- if: matrix.language == 'java'
name: Build Java
run: |
make bootstrap
make release