Personalización de lenguajes y compilaciones para el examen de código
El examen de código de CodeQL admite muchos lenguajes de forma predeterminada con una característica de compilación automática. Sin embargo, si el código usa un proceso de compilación no estándar, es posible que tenga que personalizar el flujo de trabajo con pasos de compilación personalizados.
En esta unidad se describirá cómo cambiar los lenguajes analizados por el examen de código y cómo agregar pasos de compilación personalizados a un flujo de trabajo de examen de código de CodeQL.
Cambio de los lenguajes que se analizan
El examen de código de CodeQL detecta automáticamente el código escrito en los siguientes lenguajes admitidos: C/C++, C#, Go, Java, JavaScript/TypeScript, Python y Ruby.
Nota:
CodeQL actualiza constantemente sus lenguajes y marcos admitidos, para obtener una lista completa de los lenguajes, variantes y compiladores disponibles, consulte la documentación[7].
El archivo de flujo de trabajo de análisis de CodeQL predeterminado contiene una matriz de compilación denominada lenguaje que enumera los lenguajes del repositorio que se analizan. CodeQL rellena automáticamente esta matriz al agregar el examen de código a un repositorio. El uso de la matriz de lenguaje optimiza CodeQL para ejecutar cada análisis en paralelo. Se recomienda que todos los flujos de trabajo adopten esta configuración debido a las ventajas de rendimiento de paralelizar las compilaciones.
Si el repositorio contiene código en más de uno de los lenguajes admitidos, puede elegir qué lenguajes desea analizar. Hay varias razones por las que es posible que quiera evitar que se analice un lenguaje. Por ejemplo, el proyecto podría tener dependencias en un lenguaje diferente al cuerpo principal del código y es posible que prefiera no ver alertas para esas dependencias.
Si el flujo de trabajo usa la matriz de lenguajes, CodeQL se codifica de forma rígida para analizar solo los lenguajes de la matriz. Para cambiar los lenguajes que desea analizar, edite el valor de la variable de matriz. Puede quitar un lenguaje para evitar que se analice, o bien puede agregar uno que no estuviera presente en el repositorio al configurar el examen de código. Por ejemplo, si el repositorio inicialmente solo contenía JavaScript al configurar el examen de código, y posteriormente ha agregado código de Python, deberá agregar python
a la matriz.
jobs:
analyze:
name: Analyze
...
strategy:
fail-fast: false
matrix:
language: ['javascript', 'python']
Si el flujo de trabajo no contiene una matriz denominada lenguaje, CodeQL está configurado para ejecutar el análisis secuencialmente. Si no especifica lenguajes en el flujo de trabajo, CodeQL detecta e intenta analizar automáticamente los lenguajes admitidos en el repositorio. Si desea elegir qué lenguajes analizar, sin usar una matriz, puede usar el parámetro languages en la acción init
.
- uses: github/codeql-action/init@v1
with:
languages: cpp, csharp, python
Pasos de compilación personalizados para el examen de código
Para los lenguajes compilados admitidos, puede usar la acción de compilación automática en el flujo de trabajo de análisis de CodeQL para compilar el código. Esto evita tener que especificar comandos de compilación explícitos para C/C++, C# y Java. CodeQL también ejecuta una compilación para los proyectos de Go para configurar el proyecto. Sin embargo, a diferencia de los demás lenguajes compilados, se extraen todos los archivos de Go del repositorio, no solo los compilados. Puede usar comandos de compilación personalizados para omitir la extracción de archivos de Go no incluidos en la compilación.
Adición de pasos de compilación para un lenguaje compilado
Si el código de C/C++, C# o Java del repositorio tiene un proceso de compilación no estándar, autobuild
puede producir un error. Deberá quitar el paso autobuild
del flujo de trabajo y agregar manualmente los pasos de compilación.
Después de quitar el paso autobuild
, quite la marca de comentario del paso de ejecución y agregue comandos de compilación que sean adecuados para el repositorio. El paso de ejecución del flujo de trabajo ejecuta herramientas de línea de comandos mediante el shell del sistema operativo. Puede modificar estos comandos y agregar más comandos para personalizar el proceso de compilación.
- run: |
make bootstrap
make release
Si el repositorio contiene varios lenguajes compilados, puede especificar comandos de compilación específicos del lenguaje. Por ejemplo, si el repositorio contiene C/C++, C# y Java, y autobuild
compila correctamente C/C++ y C# pero no puede compilar Java, podría usar la siguiente configuración en el flujo de trabajo, después del paso de init. Esto especifica los pasos de compilación para Java mientras se sigue usando autobuild
para C/C++ y 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