Nota: El Escaneo de código se encuentra en beta dentro de GitHub Enterprise Server 2.22. Para encontrar un lanzamiento de disponibilidad general del escaneo de código, mejora al último lanzamiento de GitHub Enterprise Server.
Nota: Tu administrador de sitio debe habilitar el escaneo de código para tu instancia de GitHub Enterprise Server 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 obtener más información, consulta "Configurar el escaneo de código en tu aplicativo."
Acerca de Flujo de trabajo de análisis de CodeQL y los lenguajes compilados
Puedes configurar a GitHub para que ejecute el escaneo de código en tu repositorio si agregas un flujo de trabajo de GitHub Actions a este. Note: This article refers to escaneo de código powered by CodeQL, not to escaneo de código resulting from the upload of third-party static analysis tools. Para obtener más información, consulta la sección "Configurar el escaneo de código en un repositorio".
Habitualmente, no necesitas editar el flujo de trabajo predeterminado para escaneo de código. Sin embargo, si lo requieres, puedes editar el flujo de trabajo para personalizar algunos de los ajustes. Por ejemplo, puedes editar el Flujo de trabajo de análisis de CodeQL de GitHub para especificar la frecuencia de los escaneos, los idiomas o los directorios a escanear, y qué debe buscar el CodeQL del escaneo de código en tu código. También podrías necesitar editar el Flujo de trabajo de análisis de CodeQL si utilizas un conjunto de comandos específicos para compilar tu código. Para obtener información general acerca de cómo configurar el escaneo de código y de cómo editar los archivos de flujo de trabajo, consulta las secciones "Configurar el escaneo de código" y "Aprende sobre las GitHub Actions".
Acerca de autobuild para CodeQL
El escaneo de código funciona ejecutando consultas contra una o más bases de datos. Cada base de datos contiene una representación de todo el código de tu repositorio en un solo lenguaje. Para los lenguajes compilados de C/C++, C#, y Java, el proceso de poblar esta base de datos involucra compilar el código y extraer los datos. CodeQL también ejecuta una compilación para que los proyectos de Go configuren el proyecto. Sin embargo, en contraste con el resto de los lenguajes compilados, todos los archivos de Go en el repositorio se extraen, y no únicamente aquellos que se compilaron. Puedes utilizar comandos personalizados de compilación para saltarte la extracción de archivos de Go que no haya tocado la compilación.
Para los lenguajes compilados compatibles, puedes utilizar la acción de autobuild
en el Flujo de trabajo de análisis de CodeQL para compilar tu código. Esto te evita tener que especificar los comandos de compilación explícitos paraC/C++, C#, y Java.
Si tu flujo de trabajo utiliza una matriz de language
, el autobuild
intentará compilar cada uno de los lenguajes que se listen en ella. Sin una matriz, el autobuild
intentará compilar el lenguaje compatible que tenga más archivos de origen en el repositorio. Con la excepción de Go, el análisis de otros lenguajes compilados en tu repositorio siempre fallará a menos de que proporciones comandos de compilación específicos.
Nota: Si utilizas los ejecutores auto-hospedados para GitHub Actions, tal vez necesites instalar software adicional para utilizar el proceso de autobuild
. Adicionalmente, si tu repositorio requiere de una versión específica de una herramienta de compilación, tal vez necesites instalarla manualmente. Para obtener más información, consulta la sección "Especificaciones para los ejecutores hospedados en GitHub".
C/C++
Tipo de sistema compatible | Nombre del sistema |
---|---|
Sistema operativo | Windows, macOS, y Linux |
Sistema de compilación | Windows: MSbuild y scripts de compilación Linux y macOS: Autoconf, Make, CMake, qmake, Meson, Waf, SCons, Linux Kbuild, y scripts de compilación |
El comportamiento del paso de autobuild
varía de acuerdo con el sistema operativo en el que se ejecute la extracción. En Windows, el paso de autobuild
intenta autodetectar un método de compilación adecuado para C/C++ utilizando el siguiente enfoque:
- Invocar a
MSBuild.exe
en el archivo de la solución (.sln
) o del proyecto (.vcxproj
) que esté más cercano a la raíz. Siautobuild
detecta soluciones o archivos de proyecto múltiples en la misma profundidad (la más corta) desde el directorio de nivel superior, entonces intentará compilarlos todos. - Invocar un script que se ve como un script de compilación—build.bat, build.cmd, and build.exe (en ese órden).
En Linux y macOS, el paso de autobuild
revisa los archivos presentes en el repositorio para determinar el sistema de compilación que se utilizó:
- Busca un sistema de compilación en el directorio raíz.
- Si no se encuentra ninguno, busca un directorio único en los subdirectorios, el cual cuente con un sistema de compilación para C/C++.
- Ejecuta un comando adecuado para configurar el sistema.
C
Tipo de sistema compatible | Nombre del sistema |
---|---|
Sistema operativo | Windows y Linux |
Sistema de compilación | .NET y MSbuild, así como los scripts de compilación |
El proceso de autobuild
intenta autodetectar un método de compilación adecuado para C# utilizando el siguiente acercamiento:
- Invoca a
dotnet build
en el archivo (.sln
) de la solución o en el archivo (.csproj
) del proyecto que esté más cercano a la raíz. - Invoca a
MSbuild
(Linux) o aMSBuild.exe
(Windows) en el archivo de la solución o del proyecto más cercano a la raíz. Siautobuild
detecta soluciones o archivos de proyecto múltiples en la misma profundidad (la más corta) desde el directorio de nivel superior, entonces intentará compilarlos todos. - Invoca un script que se parece a un script de compilación—build y build.sh (en ese orden, para Linux) o build.bat, build.cmd, y build.exe (en ese orden, para Windows).
Java
Tipo de sistema compatible | Nombre del sistema |
---|---|
Sistema operativo | Windows, macOS, y Linux (sin restricción) |
Sistema de compilación | Gradle, Maven y Ant |
El proceso de autobuild
intenta determinar el sistema de compilación para las bases de código de Java aplicando esta estrategia:
- Busca un archivo de compilación en el directorio raíz. Busca a Gradle en Maven y luego Ant compila los archivos.
- Ejecuta el primer archivo de compilación que encuentre. Si tanto los archivos de Gradle como los de Maven están presentes, se utiliza el archivo de Gradle.
- De lo contrario, usca los archivos de compilación en los subidrectorios directos del directorio raíz. Si solo un subdirectorio contiene archivos de compilación, ejecuta el primer archivo identificado en este subdirectorio (utilizando la misma preferencia que para 1). Si más de un subdirectorio contiene archivos de compilación, reporta un error.
Agregar pasos de compilación para un lenguaje compilado
Si el código de C/C++, C# o de Java en tu repositorio tiene un proceso de compilación diferente al estándar, el autobuild
podría fallar. Necesitarás eliminar el paso de autobuild
del flujo de trabajo y agregar los pasos de compilación manualmente. Si quieres especificar qué archivos de Go se deben extraer de tu repositorio, necesitarás agregar pasos de compilación. Para obtener más información sobre cómo editar el archivo de flujo de trabajo, consulta la sección "Configurar el escaneo de código".
Después de eliminar el paso de autobuild
, quita el comentario del paso de run
y agrega los comandos de compilación que son adecuados para tu repositorio. El paso de run
en el flujo de trabajo ejecuta programas de línea de comandos que utiizan el shell del sistema operativo. Puedes modificar estos comandos y agregar más de ellos para personalizar el proceso de compilación.
- run: |
make bootstrap
make release
Para obtener más información acerca de la palabra clave run
, consulta la sección "Sintaxis de flujo de trabajo para { site.data.variables.product.prodname_actions }}".
Si tu repositorio contiene lenguajes compilados múltiples, puedes especificar los compandos de compilación específicos de estos lenguajes. Por ejemplo, si tu repositorio contiene C/C++, C# y Java, y el autobuild
compila correctamente C/C++ y C#, pero falla con Java, puedes utilizar la siguiente configuración en tu flujo de trabajo, después del paso init
. Esto especifica los pasos de compilación para Java mientras que aún utiliza el 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
Para obtener más información acerca del condicional if
, consulta la sección "Sintaxis de flujo de trabajo para GitHub Actions".
Para obtener más tips e ides sobre por qué el autobuild
no está compilando tu código, consulta la sección "Solucionar errores en el flujo de trabajo de CodeQL".
Si agregas pasos de compilación manualmente para los lenguajes compilados y el escaneo de código aún no funciona en tu repositorio, contacta a el administrador de tu sitio.