Reglas del repositorio de http

Informar un problema Ver fuente Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

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

Configuración

Para usar estas reglas en una extensión de módulo, cárgalas en tu archivo .bzl y, luego, llámalas desde la función de implementación de tu extensión. Por ejemplo, para usar http_archive:

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

def _my_extension_impl(mctx):
  http_archive(name = "foo", urls = [...])

my_extension = module_extension(implementation = _my_extension_impl)

Como alternativa, puedes llamar directamente a estas reglas de repositorio en tu archivo MODULE.bazel con use_repo_rule:

http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(name = "foo", urls = [...])

http_archive

load("@bazel//tools/build_defs/repo:http.bzl", "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_strip, patch_tool,
             patches, remote_file_integrity, remote_file_urls, remote_module_file_integrity,
             remote_module_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 hace que sus destinos estén disponibles para la vinculación.

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

Ejemplos: Supongamos que el repositorio actual contiene el código fuente de un programa de chat, cuya raíz se encuentra en el directorio ~/chat-app. Debe depender de una biblioteca SSL 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 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_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 una dependencia.

ATRIBUTOS

name Nombre (obligatorio)

Es un nombre único para este repositorio.

add_prefix Cadena; opcional

Es el directorio de destino relativo al 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

Es 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 utilizan 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 darle 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 llamarse de otra manera (algo como BUILD.nombre-repo-nuevo puede 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 Cadena; opcional

Es el 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 se haya agregado a la caché mediante una solicitud con el mismo ID canónico. Si no se especifica o está vacío, Bazel usa de forma predeterminada las URLs del archivo como 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 las 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

Es la suma de verificación esperada en formato de Subresource Integrity del archivo descargado. Debe coincidir con la suma de verificació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 para facilitar el desarrollo, pero se debe establecer este atributo o "sha256" antes del envío.

netrc Cadena; opcional

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

patch_args Lista de cadenas; opcional

Son los argumentos que se proporcionan a la herramienta de parche. El valor predeterminado es -p0 (consulta el atributo "patch_strip"), pero, por lo general, se necesitará -p1 para los parches generados por Git. Si se especifican varios argumentos -p, tendrá efecto el último.Si se especifican argumentos que no sean -p, Bazel recurrirá al uso de la herramienta de línea de comandos patch en lugar de la implementación de patch nativa de Bazel. Cuando se recurre a la herramienta de línea de comandos patch y no se especifica el atributo patch_tool, se usará "patch". Esto solo afecta los archivos de parche en el atributo "patches".

patch_cmds Lista de cadenas; opcional

Secuencia de comandos de Bash que se aplicarán en Linux o macOS después de aplicar los parches.

patch_cmds_win Lista de cadenas; opcional

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

patch_strip Número entero; opcional

Cuando se establece en "N", esto equivale a insertar "-pN" al principio de "patch_args".

patch_tool Cadena; opcional

Es la utilidad patch(1) que se usará. Si se especifica, 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 aproximada ni los parches binarios, pero Bazel recurrirá a la herramienta de línea de comandos patch si se especifica el atributo "patch_tool" o si hay argumentos distintos de "-p" en el atributo "patch_args".

remote_file_integrity Diccionario: Cadena -> Cadena; opcional

Es un mapa de rutas de acceso relativas de archivos (clave) a su valor de integridad (valor). Estas rutas de acceso relativas deben asignarse 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 descargarán y estarán disponibles como archivos superpuestos en el repo. Esto es útil cuando deseas agregar archivos WORKSPACE o BUILD.bazel sobre un repositorio existente. Los archivos se descargan antes de aplicar los parches en el atributo "patches", y todas las URLs de la lista deben ser posibles duplicados del mismo archivo. Las URLs se prueban en orden hasta que una tiene éxito.

remote_module_file_integrity Cadena; opcional

Solo para uso interno.

remote_module_file_urls Lista de cadenas; opcional

Solo para uso interno.

remote_patch_strip Número entero; opcional

Cantidad de barras diagonales 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". Utiliza la implementación de parches nativa de Bazel. Puedes especificar el número de bandas de parche con `remote_patch_strip`.

repo_mapping Diccionario: Cadena -> Cadena; opcional

Solo en el contexto de `WORKSPACE`: Es un diccionario que asigna el nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias del espacio de trabajo para las dependencias de este repositorio. Por ejemplo, una entrada `"@foo": "@bar"` declara que, en cualquier momento en 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`). Este atributo _no_ se admite en el contexto de `MODULE.bazel` (cuando se invoca una regla de repositorio dentro de la función de implementación de una extensión de módulo).

sha256 Cadena; opcional

Es el hash SHA-256 esperado del archivo descargado. Debe coincidir con el hash SHA-256 del archivo descargado. _Omitir el 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 para facilitar el desarrollo, pero se debe establecer este atributo o "integrity" antes del envío.

strip_prefix Cadena; opcional

Es un prefijo de directorio que se quita de los archivos extraídos. Muchos archivos contienen un directorio de nivel superior que incluye todos los archivos útiles del archivo. En lugar de tener que especificar este prefijo una y otra vez en el archivo `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 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 directorio `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 los 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 de la URL. Si el archivo no tiene extensión, puedes especificar explícitamente una de las siguientes: "zip", "jar", "war", "aar", "tar", "tar.gz", "tgz", "tar.xz", "txz", "tar.zst", "tzst", "tar.bz2", "ar" o"deb".

url Cadena; opcional

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

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 tiene éxito, por lo que debes enumerar primero los espejos locales. Si fallan todas las descargas, la regla fallará.

workspace_file Etiqueta: Opcional

Es un atributo no operativo; no lo uses.

workspace_file_content Cadena; opcional

Es un atributo no operativo; no lo uses.

VARIABLES DE ENTORNO

Esta regla del repositorio depende de las siguientes variables de entorno:

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID

http_file

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

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

Descarga un archivo desde una URL y lo pone a disposición para que se use como 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)

Es un nombre único para este repositorio.

auth_patterns Diccionario: Cadena -> Cadena; opcional

Es 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 utilizan 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 darle 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

canonical_id Cadena; opcional

Es el 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 se haya agregado a la caché mediante una solicitud con el mismo ID canónico. Si no se especifica o está vacío, Bazel usa de forma predeterminada las URLs del archivo como 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 las 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

Es la suma de verificación esperada en formato de Subresource Integrity del archivo descargado. Debe coincidir con la suma de verificació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 para facilitar el desarrollo, pero se debe establecer este atributo o "sha256" antes del envío.

netrc Cadena; opcional

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

repo_mapping Diccionario: Cadena -> Cadena; opcional

Solo en el contexto de `WORKSPACE`: Es un diccionario que asigna el nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias del espacio de trabajo para las dependencias de este repositorio. Por ejemplo, una entrada `"@foo": "@bar"` declara que, en cualquier momento en 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`). Este atributo _no_ se admite en el contexto de `MODULE.bazel` (cuando se invoca una regla de repositorio dentro de la función de implementación de una extensión de módulo).

sha256 Cadena; opcional

Es el hash SHA-256 esperado del archivo descargado. Debe coincidir con el hash SHA-256 del archivo descargado. _Omitir el 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 para facilitar el desarrollo, pero se debe configurar antes del envío.

url Cadena; opcional

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

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 tiene éxito, por lo que debes enumerar primero los espejos locales. Si fallan todas las descargas, la regla fallará.

VARIABLES DE ENTORNO

Esta regla del repositorio depende de las siguientes variables de entorno:

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID

http_jar

load("@bazel//tools/build_defs/repo:http.bzl", "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, cuya raíz se encuentra en el directorio ~/chat-app. Debe depender 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 archivo JAR.

También puedes hacer referencia a archivos en el sistema actual (localhost) con "file:///ruta/al/archivo" si usas sistemas basados en Unix. Si usas Windows, usa "file:///c:/ruta/al/archivo". En ambos ejemplos, observa las tres barras (/): las dos primeras pertenecen a file:// y la tercera, a la ruta de acceso absoluta al archivo.

ATRIBUTOS

name Nombre (obligatorio)

Es un nombre único para este repositorio.

auth_patterns Diccionario: Cadena -> Cadena; opcional

Es 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 utilizan 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 darle 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

canonical_id Cadena; opcional

Es el 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 se haya agregado a la caché mediante una solicitud con el mismo ID canónico. Si no se especifica o está vacío, Bazel usa de forma predeterminada las URLs del archivo como 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 las 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 Cadena; opcional

Nombre de archivo asignado al archivo .jar descargado

integrity Cadena; opcional

Es la suma de verificación esperada en formato de Subresource Integrity del archivo descargado. Debe coincidir con la suma de verificació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 para facilitar el desarrollo, pero se debe establecer este atributo o "sha256" antes del envío.

netrc Cadena; opcional

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

repo_mapping Diccionario: Cadena -> Cadena; opcional

Solo en el contexto de `WORKSPACE`: Es un diccionario que asigna el nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias del espacio de trabajo para las dependencias de este repositorio. Por ejemplo, una entrada `"@foo": "@bar"` declara que, en cualquier momento en 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`). Este atributo _no_ se admite en el contexto de `MODULE.bazel` (cuando se invoca una regla de repositorio dentro de la función de implementación de una extensión de módulo).

sha256 Cadena; opcional

Es el hash SHA-256 esperado del archivo descargado. Debe coincidir con el hash SHA-256 del archivo descargado. _Omitir el 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 para facilitar el desarrollo, pero se debe establecer este atributo o "integrity" antes del envío.

url Cadena; opcional

Es una URL a un archivo que estará disponible para Bazel. Debe ser un archivo o una URL http o https. Se siguen los redireccionamientos. No se admite la autenticación. Se puede lograr una mayor flexibilidad con el parámetro urls, que permite especificar URLs alternativas desde las que se pueden recuperar datos. La URL debe terminar en ".jar".

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 tiene éxito, por lo que debes enumerar primero los espejos locales. Si fallan todas las descargas, la regla fallará. Todas las URLs deben terminar en ".jar".

VARIABLES DE ENTORNO

Esta regla del repositorio depende de las siguientes variables de entorno:

  • BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID