Menyesuaikan bahasa dan pembangunan untuk pemindaian kode

Selesai

Pemindaian kode CodeQL mendukung banyak bahasa secara default dengan fitur pembuatan otomatis. Namun, jika kode Anda menggunakan proses build non-standar, Anda mungkin perlu menyesuaikan alur kerja Anda dengan langkah-langkah build kustom.

Unit ini akan menjelaskan cara mengubah bahasa yang dianalisis dengan pemindaian kode dan cara menambahkan langkah pembuatan kustom ke alur kerja pemindaian kode CodeQL.

Ubah bahasa yang dianalisis

Pemindaian kode CodeQL secara otomatis mendeteksi kode yang ditulis dalam bahasa yang didukung berikut: C/C++, C#, Go, Java, JavaScript/TypeScript, Python, dan Ruby.

Catatan

CodeQL terus memperbarui bahasa dan kerangka kerja yang didukung, untuk daftar lengkap bahasa, varian, dan kompilator yang tersedia, silakan lihat dokumentasi[7].

File alur kerja analisis CodeQL default berisi matriks build yang disebut bahasa yang mencantumkan bahasa di repositori Anda yang dianalisis. CodeQL secara otomatis mengisi matriks ini saat Anda menambahkan pemindaian kode ke repositori. Menggunakan matriks bahasa mengoptimalkan CodeQL untuk menjalankan setiap analisis secara paralel. Kami menyarankan agar semua alur kerja mengadopsi konfigurasi ini karena manfaat performa paralelisasi build.

Jika repositori Anda berisi kode dalam lebih dari salah satu bahasa yang didukung, Anda dapat memilih bahasa mana yang ingin Anda analisis. Ada beberapa alasan Anda mungkin ingin mencegah suatu bahasa dari dianalisis. Misalnya, proyek mungkin memiliki dependensi dalam bahasa yang berbeda dengan isi utama kode Anda, dan Anda mungkin lebih suka tidak melihat pemberitahuan untuk dependensi tersebut.

Jika alur kerja Anda menggunakan matriks bahasa, maka CodeQL dikodekan secara permanen untuk hanya menganalisis bahasa dalam matriks. Untuk mengubah bahasa yang ingin Anda analisis, edit nilai variabel matriks. Anda dapat menghapus bahasa untuk mencegahnya dianalisis, atau Anda dapat menambahkan bahasa yang tidak ada di repositori saat pemindaian kode disiapkan. Misalnya, jika repositori awalnya hanya berisi JavaScript saat pemindaian kode disiapkan, dan Anda kemudian menambahkan kode Python, Anda harus menambahkan python ke matriks.

jobs:
  analyze:
    name: Analyze
    ...
    strategy:
      fail-fast: false
      matrix:
        language: ['javascript', 'python']

Jika alur kerja Anda tidak berisi matriks yang disebut bahasa, maka CodeQL dikonfigurasi untuk menjalankan analisis secara berurutan. Jika Anda tidak menentukan bahasa dalam alur kerja, CodeQL secara otomatis mendeteksi dan mencoba menganalisis bahasa yang didukung di repositori. Jika Anda ingin memilih bahasa mana yang akan dianalisis, tanpa menggunakan matriks, Anda dapat menggunakan parameter bahasa di bawah tindakan init.

- uses: github/codeql-action/init@v1
  with:
    languages: cpp, csharp, python

Langkah-langkah pembuatan kustom untuk pemindaian kode

Untuk bahasa yang dikompilasi yang didukung, Anda dapat menggunakan tindakan pembuatan otomatis dalam alur kerja analisis CodeQL untuk membangun kode Anda. Ini menghindari harus menentukan perintah build eksplisit untuk C/C++, C#, dan Java. CodeQL juga menjalankan build untuk proyek Go untuk menyiapkan proyek. Namun, berbeda dengan bahasa lain yang dikompilasi, semua file Go di repositori diekstraksi, bukan hanya yang dibangun. Anda dapat menggunakan perintah build kustom untuk menghindari mengekstrak file Go yang tidak tersentuh oleh proses build.

Menambahkan langkah-langkah build untuk bahasa yang dikompilasi

Jika kode C/C++, C#, atau Java di repositori Anda memiliki proses build non-standar, autobuild mungkin gagal. Anda harus menghapus langkah autobuild dari alur kerja, dan menambahkan langkah pembuatan secara manual.

Setelah menghapus langkah autobuild, batalkan komentar pada langkah jalankan dan tambahkan perintah build yang sesuai untuk repositori Anda. Langkah menjalankan alur kerja menjalankan program baris perintah menggunakan shell sistem operasi. Anda dapat mengubah perintah ini dan menambahkan lebih banyak perintah untuk menyesuaikan proses build.

- run: |
  make bootstrap
  make release

Jika repositori Anda berisi beberapa bahasa yang dikompilasi, Anda dapat menentukan perintah build khusus bahasa. Misalnya, jika repositori Anda berisi C/C++, C# dan Java, dan autobuild membangun C/C++ dan C# dengan benar tetapi gagal membangun Java, Anda dapat menggunakan konfigurasi berikut dalam alur kerja Anda setelah langkah init. Ini menentukan langkah-langkah build untuk Java saat masih menggunakan autobuild untuk C/C++ dan 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