Nota:
El administrador del sitio debe habilitar code scanning antes de que puedas utilizar esta característica. Si quieres utilizar GitHub Actions para escanear tu código, el administrador de sitio también puede habilitar las GitHub Actions y configurar la infraestructura que se requiera. Para más información, consulta Configuración la digitalización de código para el dispositivo.
Comparación de modos de compilación
| Característica del modo de compilación | Ninguno | Autocompilación | Manual |
|---|---|---|---|
| Se usa de forma predeterminada y para la habilitación a nivel de organización | Sí (C# y Java) | Sí, donde none no se admite | No |
| El análisis se realiza correctamente sin la configuración del usuario | Sí | Variable | No |
| Integridad del análisis | Código generado no analizado | Variable | Controlado por el usuario |
| Precisión del análisis | Bueno | Bueno | Óptima |
Elegir un modo de compilación
Cuando se configura code scanning por primera vez o en varios repositorios, es mejor usar la configuración predeterminada. La configuración predeterminada usa el método más sencillo disponible para generar una CodeQL base de datos y analizar el código, de modo que pueda empezar a corregir las alertas lo antes posible. Una vez que haya resuelto las alertas iniciales, puede cambiar a la configuración avanzada con un proceso de compilación manual para repositorios de alto riesgo.
Para obtener información sobre el comportamiento específico autobuild del lenguaje, los requisitos del ejecutor y los detalles del modo de compilación para los lenguajes compilados, consulte Opciones y pasos de compilación de CodeQL para lenguajes compilados.
Uso de varios modos de compilación en un repositorio de varios lenguajes
En el caso de los repositorios con varios lenguajes compilados, puede usar diferentes modos de compilación para distintos lenguajes. Por ejemplo, si el repositorio contiene C/C++, C# y Java, es posible que desee proporcionar pasos de compilación manuales para un lenguaje (aquí C/C++). Este flujo de trabajo especifica un modo de compilación diferente para cada lenguaje.
strategy:
matrix:
include:
# Analyzes C and C++ code using the commands in `Build C and C++ code`
- language: c-cpp
build-mode: manual
# Analyzes C# code by automatically detecting a build
- language: csharp
build-mode: autobuild
# Analyzes Java code directly from the codebase without a build
- language: java-kotlin
build-mode: none # analyzes Java only
steps:
- name: Checkout repository
uses: actions/checkout@v5
# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
- if: ${{ matrix.build-mode == 'manual' }}
name: Build C and C++ code
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
Para obtener información sobre los lenguajes, bibliotecas y marcos que se admiten en la versión más reciente de CodeQL, vea Lenguajes y marcos admitidos en la CodeQL documentación. Para obtener información sobre los requisitos del sistema para ejecutar la versión más reciente de CodeQL, consulte Requisitos del sistema en la CodeQL documentación.
Uso del none modo de compilación para CodeQL
Para C# y Java, CodeQL crea una base de datos sin necesidad de una compilación cuando se habilita la configuración predeterminada para code scanning a menos que el repositorio también incluya código de Kotlin. Si un repositorio contiene código de Kotlin además de Java código, la configuración predeterminada se habilita con el proceso de creación automática porque el análisis de Kotlin requiere una compilación.
La creación de una CodeQL base de datos sin una compilación puede producir resultados menos precisos que usar autobuild o pasos de compilación manuales si:
- Los scripts de compilación no se pueden consultar para obtener información de dependencia y las estimaciones de dependencia son inexactas.
- Normalmente, el repositorio genera código durante el proceso de compilación.
Para usar autobuild o pasos de compilación manual, puedes usar la configuración avanzada.
Nota:
Para el análisis de Java, si build-mode está establecido en none y el código de Kotlin se encuentra en el repositorio, no se analizará el código de Kotlin y se generará una advertencia. Consulte Opciones y pasos de compilación de CodeQL para lenguajes compilados.
Uso autobuild para CodeQL
La CodeQL acción usa autobuild para analizar los lenguajes compilados en los casos siguientes.
- La configuración predeterminada está habilitada y el lenguaje no admite la compilación
none(compatible con C# y Java). - La configuración avanzada está habilitada y el flujo de trabajo especifica
build-mode: autobuild. - La configuración avanzada está habilitada y el flujo de trabajo tiene un paso de Autobuild para el lenguaje mediante la acción
autobuild(github/codeql-action/autobuild@v4).
Use la opción build-mode.
# Initializes the CodeQL tools for scanning.
name: Analyze
strategy:
matrix:
include:
# Analyze C and C++ code
- language: c-cpp
build-mode: autobuild
# Analyze Go code
- language: go
build-mode: autobuild
steps:
- uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
Uso del paso Autobuild
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v4
Especificar manualmente los pasos de compilación
Solo puede especificar los pasos de compilación manuales si ha habilitado la configuración avanzada, consulte Establecimiento de la configuración avanzada para el examen del código.
Si se produce un error en autobuild, o si quieres analizar otro conjunto de archivos de origen de los compilados por el proceso autobuild, tendrás que hacer lo siguiente:
- Si el flujo de trabajo especifica un modo de compilación para el lenguaje, cambie el modo de compilación a
manual. - Si el flujo de trabajo contiene un paso
autobuild, elimine o convierta en comentario el pasoautobuilden el flujo de trabajo.
Después, quita la marca de comentario del paso run y especifica manualmente el proceso de compilación que se va a usar. Para C/C++, C#, Go, Java, Kotlin y Swift, CodeQL analizará cualquier código fuente generado por los pasos de compilación que hayas especificado.
Actualiza el flujo de trabajo para definir build-mode como manual.
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
build-mode: manual
- uses: github/codeql-action/analyze@v4
with:
category: "/language:${{ matrix.language }}"
Como alternativa, actualice el flujo de trabajo para convertir en comentario el paso "Autobuild".
# Autobuild attempts to build any compiled languages.
# - name: Autobuild
# uses: github/codeql-action/autobuild@v4
Adición de comandos de compilación
Cuando la compilación manual está habilitada, quite la marca de comentario del paso run en el flujo de trabajo y agregue comandos de compilación adecuados para el repositorio. El paso run 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
Para obtener más información sobre la palabra clave run, consulta Sintaxis del flujo de trabajo para GitHub Actions.
Si ha agregado pasos de compilación manuales para lenguajes compilados y code scanning sigue sin funcionar en el repositorio, póngase en contacto con el administrador del sitio.