Reglas del repositorio de http

Informar un problema Ver fuente Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Las siguientes funciones se pueden cargar desde @bazel_tools//tools/build_defs/repo:http.bzl.

Son reglas para descargar archivos y archivos a través de HTTP.

Configuración

Para usar estas reglas, cárgalas en tu archivo WORKSPACE de la siguiente manera:

load(
    "@bazel_tools//tools/build_defs/repo:http.bzl",
    "http_archive",
    "http_file",
    "http_jar",
)

Estas son versiones mejoradas de las reglas HTTP nativas y, al final, reemplaza las reglas nativas.

http_archive

http_archive(name, add_prefix, auth_patterns, build_file, build_file_content, canonical_id,
             integrity, netrc, patch_args, patch_cmds, patch_cmds_win, patch_tool, patches,
             remote_file_integrity, remote_file_urls, remote_patch_strip, remote_patches,
             repo_mapping, sha256, strip_prefix, type, url, urls, workspace_file,
             workspace_file_content)

Descarga un repositorio de Bazel como un archivo comprimido, lo descomprime. y pone a disposición sus destinos para la vinculación.

Admite las siguientes extensiones de archivo: "zip", "jar", "war", "aar", "tar", "tar.gz", "tgz", "tar.xz", "txz", "tar.zst", "tzst", tar.bz2 y "ar", o "deb".

Ejemplos: Supongamos que el repositorio actual contiene el código fuente de un programa de chat. que tiene la raíz en el directorio ~/chat-app. Debe depender de una biblioteca de SSL que esté disponible en http://example.com/openssl.zip. Este archivo .zip contiene la siguiente estructura de directorios:

  WORKSPACE
  src/
    openssl.cc
    openssl.h

En el repositorio local, el usuario crea un archivo openssl.BUILD que Contiene la siguiente definición de destino:

  cc_library(
      name = "openssl-lib",
      srcs = ["src/openssl.cc"],
      hdrs = ["src/openssl.h"],
  )

Los objetivos del repositorio ~/chat-app pueden depender de este destino si el elemento se agregaron las siguientes líneas a ~/chat-app/WORKSPACE:

  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

  http_archive(
      name = "my_ssl",
      url = "http://example.com/openssl.zip",
      sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      build_file = "@//:openssl.BUILD",
  )

Luego, los destinos especificarían @my_ssl//:openssl-lib como dependencia.

Atributos

name Nombre: obligatorio.

Un nombre único para este repositorio.

add_prefix String; opcional

Directorio de destino relacionado con el directorio del repositorio. El archivo se descomprimirá en este directorio después de aplicar "strip_prefix" (si corresponde) a las rutas de acceso de los archivos dentro del archivo. Por ejemplo, el archivo "foo-1.2.3/src/foo.h" se descomprimirá en "bar/src/foo.h" si "add_prefix = "bar"" y "strip_prefix = "foo-1.2.3"".

auth_patterns Diccionario: Cadena -> Cadena (opcional)

Un diccionario opcional que asigna nombres de host a patrones de autorización personalizados. Si el nombre de host de una URL está presente en este dict, el valor se usará como patrón cuando generar el encabezado de autorización para la solicitud HTTP. Esto permite el uso de plantillas de autorización que se usan en muchos proveedores de almacenamiento en la nube comunes. Actualmente, el patrón admite 2 tokens: <login> y <password>, que se reemplazan por su valor equivalente en el archivo netrc para el mismo nombre de host. Después de aplicar el formato, el resultado se establece como el valor del campo Authorization de la solicitud HTTP. Ejemplo de atributo y netrc para una descarga HTTP a una API habilitada para OAuth2 con un token de portador:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
La solicitud HTTP final tendría el siguiente encabezado:
Authorization: Bearer RANDOM-TOKEN

build_file Etiqueta; opcional

Es el archivo que se usará como archivo BUILD para este repositorio. Este atributo es una etiqueta absoluta (usa "@//" para el repositorio principal). No es necesario que el archivo se llame BUILD, pero puede tener el nombre (algo como BUILD.new-repo-name podría funcionar bien para distinguirlo de los archivos BUILD reales del repositorio. Se puede especificar build_file o build_file_content, pero no ambos.

build_file_content Cadena (opcional)

Es el contenido del archivo BUILD de este repositorio. Se puede especificar build_file o build_file_content, pero no ambos.

canonical_id String; opcional

Es un ID canónico del archivo descargado. Si se especifica y no está vacío, Bazel no tomará el archivo de la caché, a menos que una solicitud con el mismo ID canónico lo haya agregado a la caché. Si no se especifica o está vacío, Bazel usa de forma predeterminada las URLs del archivo como el ID canónico. Esto ayuda a detectar el error común de actualizar las URLs sin actualizar también el hash, lo que genera compilaciones que se realizan correctamente de forma local, pero fallan en máquinas sin el archivo en la caché. Este comportamiento se puede inhabilitar con --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0.

integrity Cadena (opcional)

La suma de comprobación esperada en el formato de integridad de subrecursos del archivo descargado Debe coincidir con la suma de comprobación del archivo descargado. _Omitir la suma de verificación es un riesgo de seguridad, ya que los archivos remotos pueden cambiar._ En el mejor de los casos, omitir este campo hará que tu compilación no sea hermética. Es opcional hacer que el desarrollo es más fácil, pero se debe configurar este atributo o `sha256` antes del envío.

netrc String; opcional

Ubicación del archivo .netrc para usar en la autenticación

patch_args Lista de cadenas; opcional

Los argumentos que se le proporcionan a la herramienta de parches El valor predeterminado es -p0, pero, por lo general, se necesitará -p1 para los parches que genera git. Si se especifican varios argumentos -p, el último tendrá efecto.Si se especifican otros argumentos distintos de -p, Bazel recurrirá a la herramienta de línea de comandos de parches en lugar de la implementación de parches nativa de Bazel. Cuando se recurra a la herramienta de línea de comandos de parche y no se especifique el atributo patch_tool, se usará "patch". Esto solo afecta a los archivos de parche en el atributo “patches”.

patch_cmds Lista de cadenas (opcional)

Secuencia de comandos de Bash que se aplicará en Linux/Macos después de aplicar los parches.

patch_cmds_win Lista de cadenas (opcional)

Es la secuencia de comandos de PowerShell que se aplicará en Windows después de aplicar los parches. Si no se establece este atributo, patch_cmds se ejecutará en Windows, lo que requiere que exista el binario de Bash.

patch_tool Cadena (opcional)

La utilidad parche(1) que se debe usar. Si lo haces, Bazel usará la herramienta de parches especificada en lugar de la implementación de parches nativa de Bazel.

patches Lista de etiquetas; opcional

Es una lista de archivos que se aplicarán como parches después de extraer el archivo. De forma predeterminada, usa la implementación de parches nativa de Bazel, que no admite la coincidencia difusa ni el parche binario, pero Bazel recurrirá a usar la herramienta de línea de comandos de parches si se especifica el atributo "patch_tool" o si hay argumentos distintos de "-p" en el atributo "patch_args".

remote_file_integrity Diccionario: Cadena -> String; opcional

Es una asignación de las rutas de acceso relativas de los archivos (clave) a su valor de integridad (valor). Estas rutas de acceso relativas se deben asignar a los archivos (clave) en el atributo `remote_file_urls`.

remote_file_urls Diccionario: Cadena -> Lista de cadenas; opcional

Es un mapa de rutas de acceso relativas (clave) a una lista de URLs (valor) que se deben descargar y poner a disposición como archivos superpuestos en el repositorio. Esto es útil cuando deseas agregar archivos WORKSPACE o BUILD.bazel encima de un repositorio existente. Los archivos se descargan antes de aplicar los parches en el atributo "patches" y la lista de URL debe ser posible una duplicación del mismo archivo. Las URLs se prueban en orden hasta que una tiene éxito.

remote_patch_strip Número entero (opcional)

La cantidad de barras iniciales que se quitarán del nombre de archivo en los parches remotos.

remote_patches Diccionario: Cadena -> Cadena (opcional)

Es un mapa de la URL del archivo de parche a su valor de integridad. Se aplican después de extraer el archivo y antes de aplicar los archivos de parche del atributo "patches". Usa la implementación de parches nativos de Bazel. Puedes especificar el número de la tira de parches con “remote_patch_strip”

repo_mapping Diccionario: Cadena -> String; obligatorio.

Un diccionario del nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias de lugares de trabajo para las dependencias de este repositorio.

Por ejemplo, una entrada "@foo": "@bar" declara que, cada vez que este repositorio dependa de "@foo" (como una dependencia de "@foo//some:target", en realidad debería resolver esa dependencia dentro de "@bar" declarado globalmente ("@bar//some:target").

sha256 String; opcional

El SHA-256 esperado del archivo descargado. Debe coincidir con el SHA-256 del archivo descargado. _Es un riesgo de seguridad para omitir SHA-256, ya que los archivos remotos pueden cambiar. En el mejor de los casos, omitir este campo hará que la compilación no sea hermética. Es opcional hacer que el desarrollo sea más fácil, pero se debe establecer este atributo o "integridad" antes del envío.

strip_prefix String; opcional

Es un prefijo de directorio que se quitará de los archivos extraídos. Muchos archivos contienen un directorio de nivel superior que contiene todos los archivos útiles del archivo. En lugar de tener que especificar este prefijo una y otra vez en "build_file", este campo se puede usar para quitarlo de todos los archivos extraídos. Por ejemplo, supongamos que usas "foo-lib-latest.zip", que contiene el directorio "foo-lib-1.2.3/", en el que hay un archivo "WORKSPACE" y los directorios "src/", "lib/" y "test/" que contienen el código real que deseas compilar. Especifica `strip_prefix = "foo-lib-1.2.3"` para usar el `foo-lib-1.2.3` como tu directorio de nivel superior. Ten en cuenta que, si hay archivos fuera de este directorio, se descartarán y no se podrá acceder a ellos (p. ej., un archivo de licencia de nivel superior). Esto incluye archivos o directorios que comienzan con el prefijo, pero que no están en el directorio (p.ej., "foo-lib-1.2.3.release-notes"). Si el prefijo especificado no coincide con un directorio del archivo, Bazel mostrará un error.

type Cadena (opcional)

Es el tipo de archivo del archivo descargado. De forma predeterminada, el tipo de archivo se determina a partir de la extensión del archivo URL. Si el archivo no tiene extensión, puedes especificar explícitamente uno de los siguiente: "zip", "jar", "war", "aar", "tar", "tar.gz", "tgz" `"tar.xz"`, `"txz"`, `"tar.zst"`, `"tzst"`, `"tar.bz2"`, `"ar"` o `"deb"`.

url Cadena (opcional)

Una URL a un archivo que estará disponible para Bazel. Debe ser un archivo, una URL http o https. Se siguen los redireccionamientos. No se admite la autenticación. Se puede lograr más flexibilidad con el parámetro de URL que permite para especificar las URLs alternativas desde las que se recuperarán.

urls Lista de cadenas; opcional

Es una lista de URLs a un archivo que estará disponible para Bazel. Cada entrada debe ser un archivo o una URL http o https. Se siguen los redireccionamientos. No se admite la autenticación. Las URLs se prueban en orden hasta que una se ejecuta correctamente, por lo que primero debes enumerar las duplicaciones locales. Si todas las descargas fallan, también lo hará la regla.

workspace_file Etiqueta; opcional

El archivo que se usará como archivo `WORKSPACE` para este repositorio. Se puede especificar “workspace_file” o “workspace_file_content”, o ninguno, pero no ambos.

workspace_file_content String; opcional

Es el contenido del archivo WORKSPACE de este repositorio. Se puede especificar "workspace_file" o "workspace_file_content", o ninguno, pero no ambos.

http_file

http_file(name, auth_patterns, canonical_id, downloaded_file_path, executable, integrity, netrc,
          repo_mapping, sha256, url, urls)

Descarga un archivo de una URL y lo pone a disposición para usarlo como un grupo de archivos.

Ejemplos: Supongamos que necesitas tener un paquete Debian para tus reglas personalizadas. Este paquete está disponible en http://example.com/package.deb. Luego, puedes agregar lo siguiente a tu archivo WORKSPACE:

  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")

  http_file(
      name = "my_deb",
      url = "http://example.com/package.deb",
      sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  )

Los destinos especificarían @my_deb//file como una dependencia para depender de este archivo.

Atributos

name Nombre: obligatorio.

Un nombre único para este repositorio.

auth_patterns Diccionario: Cadena -> String; opcional

Un diccionario opcional que asigna nombres de host a patrones de autorización personalizados. Si el nombre de host de una URL está presente en este diccionario, el valor se usará como un patrón cuando se genere el encabezado de autorización para la solicitud HTTP. Esto permite el uso de esquemas de autorización personalizados que se usan en muchos proveedores de almacenamiento en la nube comunes. Actualmente, el patrón admite 2 tokens: <login> y <password>, que se reemplazan por su valor equivalente en el archivo netrc para el mismo nombre de host. Después de formatear, el resultado se establece como el valor del campo Authorization de la solicitud HTTP. Ejemplo de atributo y netrc para una descarga HTTP a una API habilitada para OAuth2 con un token de portador:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
La solicitud HTTP final tendría el siguiente encabezado:
Authorization: Bearer RANDOM-TOKEN

canonical_id String; opcional

Es un ID canónico del archivo descargado. Si se especifica y no está vacío, Bazel no tomará el archivo de la caché, a menos que una solicitud con el mismo ID canónico lo haya agregado a la caché. Si no se especifica o está vacío, Bazel usa de forma predeterminada las URLs del archivo como el ID canónico. Esto ayuda a detectar el error común de actualizar las URLs sin actualizar también el hash, lo que genera compilaciones que se realizan correctamente de forma local, pero fallan en máquinas sin el archivo en la caché. Este comportamiento se puede inhabilitar con --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0.

downloaded_file_path Cadena (opcional)

Ruta de acceso asignada al archivo descargado

executable Booleano; opcional

Indica si el archivo descargado debe ser ejecutable.

integrity Cadena (opcional)

La suma de comprobación esperada en el formato de integridad de subrecursos del archivo descargado Debe coincidir con la suma de comprobación del archivo descargado. _Omitir la suma de verificación es un riesgo de seguridad, ya que los archivos remotos pueden cambiar._ En el mejor de los casos, omitir este campo hará que tu compilación no sea hermética. Es opcional hacer que el desarrollo es más fácil, pero se debe configurar este atributo o `sha256` antes del envío.

netrc String; opcional

Ubicación del archivo .netrc que se usará para la autenticación

repo_mapping Diccionario: Cadena -> Cadena; obligatorio

Un diccionario del nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias de lugares de trabajo para las dependencias de este repositorio.

Por ejemplo, una entrada "@foo": "@bar" declara que, cada vez que este repositorio dependa de "@foo" (como una dependencia de "@foo//some:target", en realidad debería resolver esa dependencia dentro de "@bar" declarado globalmente ("@bar//some:target").

sha256 String; opcional

El SHA-256 esperado del archivo descargado. Debe coincidir con el SHA-256 del archivo descargado. _Omitir SHA-256 es un riesgo de seguridad, ya que los archivos remotos pueden cambiar._ En el mejor de los casos, omitir este campo hará que tu compilación no sea hermética. Es opcional hacer que el desarrollo es más fácil, pero debe establecerse antes del envío.

url String; opcional

Una URL a un archivo que estará disponible para Bazel. Debe ser un archivo, una URL http o https. Se siguen los redireccionamientos. No se admite la autenticación. Se puede lograr más flexibilidad con el parámetro de URL que permite para especificar las URLs alternativas desde las que se recuperarán.

urls Lista de cadenas; opcional

Es una lista de URLs a un archivo que estará disponible para Bazel. Cada entrada debe ser un archivo, una URL HTTP o HTTPS. Se siguen los redireccionamientos. No se admite la autenticación. Las URLs se prueban en orden hasta que se encuentra una que funciona, por lo que primero debes enumerar los espejos locales. Si fallan todas las descargas, la regla fallará.

http_jar

http_jar(name, auth_patterns, canonical_id, downloaded_file_name, integrity, netrc, repo_mapping,
         sha256, url, urls)

Descarga un archivo JAR desde una URL y lo pone a disposición como java_import.

Los archivos descargados deben tener la extensión .jar.

Ejemplos: Supongamos que el repositorio actual contiene el código fuente de un programa de chat, con permisos de administrador en el directorio ~/chat-app. Depende de una biblioteca SSL que esté disponible en http://example.com/openssl-0.2.jar

Los destinos del repositorio ~/chat-app pueden depender de este destino si se agregan las siguientes líneas a ~/chat-app/WORKSPACE:

  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_jar")

  http_jar(
      name = "my_ssl",
      url = "http://example.com/openssl-0.2.jar",
      sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  )

Los destinos especificarían @my_ssl//jar como una dependencia para depender de este jar.

También puedes hacer referencia a archivos en el sistema actual (localhost) con "file:///path/to/file" si usas sistemas basados en Unix. Si usas Windows, usa "file:///c:/path/to/file". En ambos Por ejemplo, ten en cuenta las tres barras diagonales (/), ya que las dos primeras barras pertenecen a file:// y la tercera una pertenece a la ruta de acceso absoluta del archivo.

Atributos

name Nombre: obligatorio.

Un nombre único para este repositorio.

auth_patterns Diccionario: Cadena -> String; opcional

Un diccionario opcional que asigna nombres de host a patrones de autorización personalizados. Si el nombre de host de una URL está presente en este dict, el valor se usará como patrón cuando generar el encabezado de autorización para la solicitud HTTP. Esto permite el uso de plantillas de autorización que se usan en muchos proveedores de almacenamiento en la nube comunes. Actualmente, el patrón admite 2 tokens: <login> y <password>, que se reemplazan por su valor equivalente en el archivo netrc para el mismo nombre de host. Después de aplicar el formato, el resultado se establece como el valor del campo Authorization de la solicitud HTTP. Ejemplo de atributo y netrc para una descarga HTTP en una API habilitada para OAuth2 mediante un token del portador:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
La solicitud HTTP final tendría el siguiente encabezado:
Authorization: Bearer RANDOM-TOKEN

canonical_id Cadena (opcional)

Es un ID canónico del archivo descargado. Si se especifica y no está vacío, Bazel no tomará el archivo de la caché, a menos que una solicitud con el mismo ID canónico lo haya agregado a la caché. Si no se especifica o está vacío, Bazel usa de forma predeterminada las URLs del archivo como el ID canónico. Esto ayuda a detectar el error común de actualizar las URLs sin actualizar también el hash, lo que genera compilaciones que se realizan correctamente de forma local, pero fallan en máquinas sin el archivo en la caché. Este comportamiento se puede inhabilitar con --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0.

downloaded_file_name String; opcional

Nombre de archivo asignado al archivo jar descargado

integrity Cadena (opcional)

La suma de comprobación esperada en el formato de integridad de subrecursos del archivo descargado Debe coincidir con la suma de comprobación del archivo descargado. _Omitir la suma de verificación es un riesgo de seguridad, ya que los archivos remotos pueden cambiar._ En el mejor de los casos, omitir este campo hará que tu compilación no sea hermética. Es opcional hacer que el desarrollo es más fácil, pero se debe configurar este atributo o `sha256` antes del envío.

netrc String; opcional

Ubicación del archivo .netrc que se usará para la autenticación

repo_mapping Diccionario: Cadena -> Cadena; obligatorio

Un diccionario del nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias de lugares de trabajo para las dependencias de este repositorio.

Por ejemplo, una entrada "@foo": "@bar" declara que, cada vez que este repositorio dependa de "@foo" (como una dependencia de "@foo//some:target", en realidad debería resolver esa dependencia dentro de "@bar" declarado globalmente ("@bar//some:target").

sha256 String; opcional

El SHA-256 esperado del archivo descargado. Debe coincidir con el SHA-256 del archivo descargado. _Es un riesgo de seguridad para omitir SHA-256, ya que los archivos remotos pueden cambiar. En el mejor de los casos, omitir este campo hará que la compilación no sea hermética. Es opcional hacer que el desarrollo sea más fácil, pero se debe establecer este atributo o "integridad" antes del envío.

url Cadena (opcional)

Una URL a un archivo que estará disponible para Bazel. Debe ser un archivo, una URL HTTP o una HTTPS. Se siguen los redireccionamientos. No se admite la autenticación. Se puede lograr más flexibilidad con el parámetro de URL que permite para especificar las URLs alternativas desde las que se recuperarán. La URL debe terminar en ".jar".

urls Lista de cadenas (opcional)

Una lista de URLs a un archivo que estará disponible para Bazel. Cada entrada debe ser un archivo, una URL HTTP o HTTPS. Se siguen los redireccionamientos. No se admite la autenticación. Las URLs se prueban en orden hasta que se encuentra una que funciona, por lo que primero debes enumerar los espejos locales. Si todas las descargas fallan, también lo hará la regla. Todas las URLs deben terminar en ".jar".