Skip to main content

Acerca del análisis de código de CodeQL para lenguajes compilados

Comprenda cómo CodeQL analiza los lenguajes compilados, las opciones de compilación disponibles y cómo puede personalizar el proceso de generación de bases de datos si es necesario.

¿Quién puede utilizar esta característica?

Usuarios con acceso de escritura if advanced setup is already enabled

Code scanning está disponible para los tipos de repositorio siguientes:

  • Repositorios públicos en GitHub.com
  • Repositorios propiedad de la organización en GitHub Team, GitHub Enterprise Cloud, o GitHub Enterprise Server, con GitHub Code Security habilitados.

Acerca de Flujo de trabajo de análisis de CodeQL y los lenguajes compilados

Code scanning funciona ejecutando consultas en una o varias bases de datos de CodeQL. Cada base de datos contiene una representación del código de su repositorio en un solo lenguaje. Para los lenguajes compilados de C/C++, C#, Go, Java, Kotlin, Rust (versión preliminar pública), y Swift, el proceso de poblar esta base de datos suele implicar compilar el código y extraer los datos.

Al habilitar code scanning, tanto la configuración predeterminada como la configuración avanzada generan una base de datos de CodeQL para su análisis mediante el método más sencillo disponible. Para C# y Java, la base de datos de CodeQL se genera directamente desde el código base sin necesidad de una compilación (modo de compilación none). Para otros lenguajes compilados, CodeQL compila el código base mediante el modo de compilación autobuild. Alternativamente, puede usar el modo de compilación manual para especificar comandos de compilación explícitos para analizar solo los archivos que se compilan mediante estos comandos personalizados.

Puede usar el almacenamiento en caché de dependencias con CodeQL para almacenar dependencias como una caché de GitHub Actions en lugar de descargarlas de los registros. Consulte Acerca del almacenamiento en caché de dependencias para CodeQL más adelante en este artículo.

Modos de compilación de CodeQL

La acción de CodeQL admite tres modos de compilación diferentes para los lenguajes compilados:

  •         `none`: la base de datos de CodeQL se crea directamente a partir del código base sin compilarlo (compatible con todos los lenguajes interpretados y también en C# y Java).
    
  •         `autobuild` - CodeQL detecta el método de compilación más indicado y lo utiliza para intentar compilar la base de código y crear una base de datos para el análisis (compatible con C/C++, C#, Go, Java, Kotlin y Swift).
    
  •           `manual`: se definen los pasos de compilación que se usarán para el código base en el flujo de trabajo (compatible con C/C++, C#, Go, Java, Kotlin y Swift).
    

Para obtener información sobre el comportamiento específico autobuild del lenguaje, los requisitos de ejecutor y las instrucciones para las compilaciones manuales, consulte Opciones y pasos de compilación de CodeQL para lenguajes compilados.

Acerca del almacenamiento en caché de dependencias para CodeQL

Puede usar el almacenamiento en caché de dependencias con CodeQL para almacenar dependencias como una caché de GitHub Actions en lugar de descargarlas de los registros. Esto reduce el riesgo de pérdida de alertas cuando los registros de terceros no funcionan bien y puede producir una mejora en el rendimiento en los proyectos que tienen un gran número de dependencias o funcionan con registros lentos. Para obtener más información sobre cómo el almacenamiento en caché de dependencias puede acelerar los flujos de trabajo, consulte Referencia de almacenamiento en caché de dependencias.

El almacenamiento en caché de dependencias funciona con todos los modos de compilación y es compatible con Java, Go y C#.

Nota:

El uso del almacenamiento en caché de dependencias almacenará cachés específicas de CodeQL que estarán sujetas a cuotas de caché de un repositorio. Consulta Referencia de almacenamiento en caché de dependencias.