Skip to main content
Publicamos actualizaciones para la documentación con frecuencia y es posible que aún se esté traduciendo esta página. Para obtener la información más reciente, consulta la documentación en inglés.

Acerca de los paquetes de CodeQL

Puedes usar paquetes de CodeQL para ejecutar consultas de CodeQL que mantienen otras personas o para compartir consultas de CodeQL que has desarrollado.

Las licencias de GitHub CodeQL se otorgan por usuario tras la instalación. Puedes usar CodeQL solo para determinadas tareas según las restricciones de las licencias. Para obtener más información, vea «Acerca de la CLI de CodeQL».

Si tienes una cuenta de GitHub Enterprise y una licencia de GitHub Advanced Security, puedes usar CodeQL para el análisis automatizado, la integración continua y la entrega continua. Para crear una cuenta empresarial, ponte en contacto con el equipo de ventas. Para obtener más información, vea «Acerca de GitHub Advanced Security».

Nota: Este artículo se migró desde el sitio web de documentación de CodeQL en enero de 2023.

Nota: La función de administración de paquetes de CodeQL, incluidos los paquetes de CodeQL, está actualmente disponible como versión beta y está sujeta a cambios. Durante la versión beta, los paquetes de CodeQL solo están disponibles con paquetes de GitHub: el Container registry. Para usar esta función beta, instala la versión más reciente del paquete de la CLI de CodeQL desde https://github.com/github/codeql-action/releases.

Acerca de los paquetes de CodeQL

Nota: En este artículo se describen las características disponibles con el paquete CodeQL CLI 2.10.5 que se incluye en la versión inicial de GitHub Enterprise Server 3.7.

Si el administrador del sitio ha actualizado tu versión de la CodeQL CLI a una versión más reciente, consulta la versión de GitHub Enterprise Cloud de este artículo para obtener información sobre las características más recientes.

Los paquetes de CodeQL se usan para crear, compartir y ejecutar consultas y bibliotecas de CodeQL, así como para establecer dependencias de ellas. Puedes publicar tus propios paquetes de CodeQL y descargar paquetes creados por otros usuarios. Los paquetes de CodeQL contienen consultas, archivos de biblioteca, conjuntos de consultas y metadatos.

Hay dos tipos de paquetes de CodeQL: paquetes de consultas y paquetes de biblioteca.

  • Los paquetes de consultas están diseñados para ejecutarse. Cuando se publica un paquete de consultas, el conjunto incluye todas las dependencias transitivas y una caché de compilación. Esto garantiza la ejecución coherente y eficaz de las consultas del paquete.

  • Los paquetes de biblioteca están diseñados para que los usen paquetes de consulta (u otros paquetes de biblioteca) y no contienen consultas. Las bibliotecas no se compilan y no se incluye ninguna caché de compilación cuando el paquete se publica.

Puedes usar los comandos de administración de paquetes en la CodeQL CLI para crear paquetes de CodeQL, agregar dependencias a los paquetes e instalar o actualizar dependencias. Para obtener más información, consulta "Creación y uso de paquetes de CodeQL". También puedes publicar y descargar paquetes de CodeQL con la CodeQL CLI. Para obtener más información, consulta "Publicación y uso de paquetes de CodeQL".

Los paquetes estándar de CodeQL para todos los lenguajes admitidos se publican en el Container registry. El repositorio de CodeQL contiene archivos de origen para los paquetes estándar de CodeQL para todos los lenguajes admitidos.

Estructura de los paquetes de CodeQL

Un paquete de CodeQL debe contener un archivo denominado qlpack.yml en su directorio raíz. En el archivo qlpack.yml, el campo name: debe tener un valor que siga el formato <scope>/<pack>, donde <scope> es la organización o cuenta de usuario de GitHub en la que se publicará el paquete y <pack> es el nombre del paquete. Además, los paquetes de consultas y los paquetes de biblioteca con pruebas CodeQL incluyen un archivo codeql-pack.lock.yml que contiene las dependencias resueltas del paquete. Este archivo se genera durante una llamada al comando codeql pack install, no está diseñado para editarse manualmente y debe agregarse al sistema de control de versiones.

Los demás archivos y directorios del paquete deben organizarse de forma lógica. Por ejemplo, normalmente:

  • Las consultas se organizan en directorios para categorías específicas.

  • Las consultas de productos, bibliotecas y marcos específicos se organizan en sus propios directorios de nivel superior.

Acerca de los archivos qlpack.yml

Al ejecutar comandos relacionados con consultas, CodeQL examina primero los directorios del mismo nivel que el directorio de instalación (y sus subdirectorios) en busca de archivos qlpack.yml. A continuación, comprueba la caché de los paquetes de CodeQL que se han descargado. Esto significa que, al desarrollar consultas localmente, los paquetes locales del directorio de instalación invalidan los paquetes del mismo nombre en la caché de paquetes, para que puedas probar los cambios locales.

Los metadatos de cada archivo qlpack.yml indican a CodeQL cómo compilar las consultas del paquete, de qué bibliotecas depende el paquete y dónde se encuentran las definiciones del conjunto de consultas.

El contenido del paquete de CodeQL (consultas o bibliotecas usadas en el análisis de CodeQL) está incluido en el mismo directorio que qlpack.yml o en sus subdirectorios.

El directorio que contiene el archivo qlpack.yml actúa como directorio raíz para el contenido del paquete de CodeQL. Es decir, para todos los archivos .ql y .qll del paquete, CodeQL resolverá todas las instrucciones de importación relativas al directorio que contiene el archivo qlpack.yml en la raíz del paquete.

Propiedades de qlpack.yml

Se admiten las propiedades siguientes en los archivos qlpack.yml.

name

  • Propiedad requerida por todos los paquetes.
  • Define el ámbito del paquete, dónde se publica el paquete de CodeQL y el nombre del paquete definido mediante caracteres alfanuméricos y guiones. Debe ser único, ya que CodeQL no puede diferenciar entre paquetes de CodeQL con nombres idénticos. Usa el nombre del paquete para especificar las consultas que se ejecutarán mediante database analyze y para definir las dependencias entre los paquetes de CodeQL (consulta los ejemplos siguientes). Por ejemplo:
    name: octo-org/security-queries
    

version

  • Propiedad requerida por todos los paquetes que se publican.
  • Define una versión semántica para este paquete de CodeQL que debe cumplir la especificación SemVer v2.0.0. Por ejemplo:
    version: 0.0.0
    

dependencies

  • Propiedad requerida por los paquetes que definen dependencias de paquetes de CodeQL en otros paquetes.
  • Define una asignación de referencias del paquete al intervalo de versiones semánticas que es compatible con este paquete. Es compatible con la CodeQL CLI v2.6.0 y versiones posteriores. Por ejemplo:
    dependencies:
      codeql/cpp-all: ^0.0.2`
    

defaultSuiteFile

  • Required by packs that export a set of default queries to run.
  • Defines the path to a query suite file relative to the package root, containing all of the queries that are run by default when this pack is passed to the codeql database analyze command. Supported from CLI version v2.6.0 and onwards. Only one of defaultSuiteFile or defaultSuite can be defined. For example:
    defaultSuiteFile: cpp-code-scanning.qls
    

defaultSuite

  • Propiedad requerida por los paquetes que exportan un conjunto de consultas predeterminadas que se van a ejecutar.
  • Define un conjunto de consultas insertado que contiene todas las consultas que se ejecutan de forma predeterminada cuando este paquete se pasa al comando codeql database analyze. Es compatible con la CLI v2.6.0 y versiones posteriores. Solo se puede definir un elemento defaultSuiteFile o defaultSuite. Por ejemplo:
    defaultSuite:
      queries: .
      exclude:
        precision: medium
    

library

  • Propiedad requerida por los paquetes de biblioteca.
  • Define un valor booleano que indica si este paquete es un paquete de biblioteca. Los paquetes de biblioteca no contienen consultas y no se compilan. Los paquetes de consultas pueden omitir este campo o establecerlo explícitamente en false. Por ejemplo:
    library: true
    

suites

  • Opcional para los paquetes que definen conjuntos de consultas.
  • Indica la ruta de acceso a un directorio del paquete que contiene los conjuntos de consultas que quieres que sean conocidos para la CodeQL CLI, definida en relación con el directorio del paquete. Los usuarios de paquetes de CodeQL pueden ejecutar conjuntos "conocidos" almacenados en este directorio si especifican el nombre del paquete, sin necesidad de proporcionar su ruta de acceso completa. Esto no se admite para los paquetes de CodeQL que se descargan del registro de contenedor. Para obtener más información sobre los conjuntos de consultas, lee el artículo titulado "Creación de conjuntos de consultas de CodeQL". Por ejemplo:
    suites: octo-org-query-suites
    

tests

  • Opcional para los paquetes que contienen pruebas de CodeQL. Se omite para los paquetes sin pruebas.
  • Indica la ruta de acceso a un directorio dentro del paquete que contiene pruebas, definida en relación con el directorio del paquete. Usa . para especificar todo el paquete. Las consultas de este directorio se ejecutan como pruebas cuando test run se ejecuta con la opción --strict-test-discovery. Las definiciones de conjuntos de consultas que usan instrucciones queries o qlpack para solicitar todas las consultas de un paquete determinado omiten estas consultas. Si falta esta propiedad, el elemento . se da por supuesto. Por ejemplo:
    tests: .
    

extractor

  • Propiedad requerida por todos los paquetes que contienen pruebas de CodeQL.
  • Define el extractor de lenguaje de CodeQL que se usará al ejecutar las pruebas de CodeQL en el paquete. Para obtener más información sobre las pruebas de consultas, lee el artículo titulado "Pruebas de consultas personalizadas". Por ejemplo:
    extractor: javascript
    

authors

  • Opcional.
  • Define los metadatos que se mostrarán en la página de búsqueda de paquetes, en la sección de paquetes de la cuenta en la que se publica el paquete de CodeQL. Por ejemplo:
    authors: author1@github.com,author2@github.com 
    

license

  • Opcional.
  • Define los metadatos que se mostrarán en la página de búsqueda de paquetes, en la sección de paquetes de la cuenta en la que se publica el paquete de CodeQL. Para obtener una lista de las licencias permitidas, consulta Lista de licencias de SPDX en la especificación de SPDX. Por ejemplo:
    license: MIT
    

description

  • Opcional.
  • Define los metadatos que se mostrarán en la página de búsqueda de paquetes, en la sección de paquetes de la cuenta en la que se publica el paquete de CodeQL. Por ejemplo:
    description: Human-readable description of the contents of the CodeQL pack.
    

libraryPathDependencies

  • Opcional, en desuso. Utilice la propiedad dependencies en su lugar.
  • Antes se usaba para definir los nombres de los paquetes de CodeQL de los que depende este paquete de CodeQL, como una matriz. Esto proporciona al paquete acceso a las bibliotecas, el esquema de la base de datos y los conjuntos de consultas definidos en la dependencia. Por ejemplo:
    libraryPathDependencies: codeql/javascript-all 
    

dbscheme

  • Propiedad requerida solo por los paquetes de lenguaje principales.
  • Define la ruta de acceso al esquema de la base de datos para todas las bibliotecas y consultas escritas para este lenguaje de CodeQL (consulta el ejemplo siguiente). Por ejemplo:
    dbscheme: semmlecode.python.dbscheme
    

upgrades

  • Propiedad requerida solo por los paquetes de lenguaje principales.
  • Indica la ruta de acceso a un directorio dentro del paquete que contiene scripts de actualización de la base de datos, definida en relación con el directorio del paquete. Las actualizaciones de la base de datos se usan internamente para asegurarse de que una base de datos creada con una versión diferente de la CodeQL CLI es compatible con la versión actual de la CLI. Por ejemplo:
    upgrades: .
    

Acerca de los archivos codeql-pack.lock.yml

Los archivos codeql-pack.lock.yml almacenan las versiones de las dependencias transitivas resueltas de un paquete de CodeQL. El comando codeql pack install crea este archivo si aún no existe, que debe agregarse al sistema de control de versiones. La sección dependencies del archivo qlpack.yml contiene intervalos de versiones que son compatibles con el paquete. El archivo codeql-pack.lock.yml bloquea las versiones en dependencias precisas. Esto garantiza que la ejecución de codeql pack install en este paquete siempre recuperará las mismas versiones de las dependencias, incluso si existen versiones compatibles más recientes.

Por ejemplo, si un archivo qlpack.yml contiene las dependencias siguientes:

dependencies:
  codeql/cpp-all: ^0.1.2
  my-user/my-lib: ^0.2.3
  other-dependency/from-source: "*"

El archivo codeql-pack.lock.yml contendrá algo similar a lo siguiente:

dependencies:
  codeql/cpp-all:
    version: 0.1.4
  my-user/my-lib:
    version: 0.2.4
  my-user/transitive-dependency:
    version: 1.2.4

La dependencia codeql/cpp-all está bloqueada en la versión 0.1.4. La dependencia my-user/my-lib está bloqueada en la versión 0.2.4. La dependencia my-user/transitive-dependency, que es transitiva y no se especifica en el archivo qlpack.yml, está bloqueada en la versión 1.2.4. Falta other-dependency/from-source en el archivo de bloqueo, ya que se resuelve desde el origen. Esta dependencia debe estar disponible en la misma área de trabajo de CodeQL que el paquete. Para obtener más información sobre las áreas de trabajo de CodeQL y resolver las dependencias del origen, consulta "Acerca de las áreas de trabajo de CodeQL".

En la mayoría de los casos, el archivo codeql-pack.lock.yml solo es pertinente para los paquetes de consultas, ya que los paquetes de biblioteca no son ejecutables y normalmente no necesitan que se corrijan sus dependencias transitivas. La excepción a esto son los paquetes de biblioteca que contienen pruebas. En este caso, el archivo codeql-pack.lock.yml se usa para asegurarse de que las pruebas siempre se ejecutan con las mismas versiones de dependencias, con el fin de evitar errores falsos cuando hay dependencias no coincidentes.

Ejemplos de paquetes de CodeQL personalizados

Cuando escribas consultas o pruebas personalizadas, debes guardarlas en paquetes de CodeQL personalizados. Para simplificar, intenta organizar cada paquete lógicamente. Para obtener más información, consulta "Estructura de los paquetes de CodeQL". Guarda los archivos para las consultas y las pruebas en paquetes independientes y, siempre que sea posible, organiza los paquetes personalizados en carpetas específicas para cada lenguaje de destino. Esto es útil sobre todo si piensas publicar los paquetes de CodeQL para que puedan compartirse con otros usuarios o emplearse en el examen de código. Para obtener más información, vea «Acerca del examen de código con CodeQL».

Paquetes de CodeQL para bibliotecas personalizadas

Un paquete personalizado de CodeQL con bibliotecas de C++ personalizadas, sin consultas ni pruebas, podría incluir un archivo qlpack.yml que contenga lo siguiente:

name: my-github-user/my-custom-libraries
version: 1.2.3
library: true
dependencies:
  codeql/cpp-all: ^0.1.2

codeql/cpp-all es el nombre del paquete de CodeQL para el análisis de C/C++ incluido en el repositorio de CodeQL. El intervalo de versiones ^0.1.2 indica que este paquete es compatible con todas las versiones de codeql/cpp-all que son mayores o iguales que 0.1.2 y menores que 0.2.0. Cualquier archivo de biblioteca de CodeQL (un archivo con una extensión .qll) definido en este paquete estará disponible para las consultas definidas en cualquier paquete de consultas que incluya este paquete en su bloque de dependencias.

La propiedad library indica que se trata de un paquete de biblioteca y que no contiene ninguna consulta.

Paquetes de CodeQL para consultas personalizadas

Un paquete personalizado de CodeQL con consultas y bibliotecas de C++ personalizadas podría incluir un archivo qlpack.yml que contenga lo siguiente:

name: my-github-user/my-custom-queries
version: 1.2.3
dependencies:
  codeql/cpp-all: ^0.1.2
  my-github-user/my-custom-libraries: ^1.2.3
suites: my-custom-suites

codeql/cpp-all es el nombre del paquete de CodeQL para el análisis de C/C++ incluido en el repositorio de CodeQL. El intervalo de versiones ^0.1.2 indica que este paquete es compatible con todas las versiones de codeql/cpp-all que son mayores o iguales que 0.1.2 y menores que 0.2.0. my-github-user/my-custom-libraries es el nombre de un paquete de CodeQL que contiene bibliotecas personalizadas de CodeQL para C++. Cualquier archivo de biblioteca de CodeQL (un archivo con una extensión .qll) definido en este paquete estará disponible para las consultas del paquete my-github-user/my-custom-queries.

La propiedad suites indica un directorio donde se pueden encontrar conjuntos de consultas "conocidos". Estos conjuntos se pueden usar en la línea de comandos si se hace referencia solo a su nombre, y no a su ruta de acceso completa. Para obtener más información sobre los conjuntos de consultas, lee el artículo titulado "Creación de conjuntos de consultas de CodeQL".

Paquetes de CodeQL para pruebas personalizadas

En el caso de los paquetes de CodeQL que contienen archivos de prueba, debes incluir también una propiedad extractor para que el comando test run sepa cómo crear bases de datos de prueba. También podría interesarte especificar la propiedad tests.

El siguiente archivo qlpack.yml indica que my-github-user/my-query-tests depende de my-github-user/my-custom-queries una versión mayor o igual que 1.2.3 y menor que 2.0.0. También declara que la CLI debe usar el extractor (extractor) de Java al crear bases de datos de prueba. La línea tests: . declara que todos los archivos .ql del paquete se deben ejecutar como pruebas cuando codeql test run se ejecuta con la opción --strict-test-discovery. Normalmente, los paquetes de prueba no contienen una propiedad version. Esto evita que se publiquen accidentalmente.

  name: my-github-user/my-query-tests
  dependencies:
    my-github-user/my-custom-queries: ^1.2.3
  extractor: java
  tests: .

Para obtener más información sobre la ejecución de pruebas, lee el artículo titulado "Pruebas de consultas personalizadas".

Ejemplos de paquetes de CodeQL en el repositorio de CodeQL

Cada uno de los lenguajes del repositorio de CodeQL tiene cuatro paquetes principales deCodeQL:

  • Paquete de biblioteca principal para el lenguaje, con el esquema de base de datos que usa el lenguaje, así como bibliotecas de CodeQL y consultas en <language>/ql/lib.

  • Paquete de consultas principal para el lenguaje, que incluye las consultas predeterminadas para el lenguaje junto con sus conjuntos de consultas en <language>/ql/src.

  • Pruebas para las consultas y bibliotecas de lenguaje principales en <language>/ql/test.

  • Consultas de ejemplo para el lenguaje en <language>/ql/examples.

Paquete de biblioteca principal

Este es un archivo qlpack.yml de ejemplo para el paquete de lenguaje principal de bibliotecas de análisis de C/C++:

name: codeql/cpp-all
version: x.y.z-dev
dbscheme: semmlecode.cpp.dbscheme
library: true
upgrades: upgrades

Notas adicionales sobre las propiedades siguientes:

  • library: indica que se trata de un paquete de biblioteca sin consultas ejecutables. Está concebido únicamente para usarse como una dependencia para otros paquetes.

  • dbscheme y upgrades: estas propiedades son internas para CodeQL CLI y solo deben definirse en el paquete de QL principal para un lenguaje.

Paquete de consultas principal

Este es un archivo qlpack.yml de ejemplo para el paquete de consultas principal de consultas de análisis de C/C++:

name: codeql/cpp-queries
version: x.y.z-dev
dependencies:
    codeql/cpp-all: "*"
    codeql/suite-helpers: "*"
suites: codeql-suites
defaultSuiteFile: codeql-suites/cpp-code-scanning.qls

Notas adicionales sobre las propiedades siguientes:

  • dependencies: este paquete de consultas depende de codeql/cpp-all y codeql/suite-helpers. Dado que estas dependencias se resuelven en el origen, no importa con qué versión del paquete de CodeQL son compatibles. Para obtener más información sobre cómo resolver dependencias del origen, consulta "Dependencias de origen".

  • suites: indica el directorio que contiene conjuntos de consultas "conocidos".

  • defaultSuiteFile: nombre del archivo de conjunto de consultas predeterminado que se usa cuando no se especifica ningún conjunto de consultas.

Pruebas del paquete principal de CodeQL

Este es un archivo qlpack.yml de ejemplo para el paquete de pruebas principal de pruebas de análisis de C/C++:

name: codeql/cpp-tests
dependencies:
  codeql/cpp-all: "*"
  codeql/cpp-queries: "*"
extractor: cpp
tests: .

Notas adicionales sobre las propiedades siguientes:

  • dependencies: este paquete depende de los paquetes principales de consultas y biblioteca de CodeQL para C++.

  • extractor: especifica que todas las pruebas usarán el mismo extractor de C++ para crear la base de datos para las pruebas.

  • tests: especifica la ubicación de las pruebas. En este caso, las pruebas se encuentran en la carpeta raíz (y todas las subcarpetas) del paquete.

  • version: no hay ninguna propiedad version para el paquete de pruebas. Esto impide que los paquetes de pruebas se publiquen accidentalmente.