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 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
, haz lo siguiente:
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 del 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_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
, "ar"
o "deb"
.
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.zip. Este archivo .zip
contiene la siguiente estructura de directorio:
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 dependencia.
ATRIBUTOS
name |
Name; obligatorio
Un nombre único para este repositorio. |
add_prefix |
Cadena (opcional)
Es el directorio de destino en relación 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 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: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN Authorization: Bearer RANDOM-TOKEN |
build_file |
Etiqueta (opcional)
El archivo que se usará como archivo de COMPILACIÓN 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 |
Cadena (opcional)
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 da como resultado compilaciones que se ejecutan de forma correcta a nivel local, pero que fallan en máquinas sin el archivo en 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 comprobació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 configurar 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)
Los argumentos proporcionados 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, se aplicará el último.Si se especifican argumentos distintos de -p, Bazel usará 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 parches en el atributo "patches". |
patch_cmds |
Lista de cadenas (opcional)
Es la 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 patch(1) que se usará. Si se especifica esto, 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 -> Cadena (opcional)
Es un mapa de las rutas de acceso relativas de los 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: String -> Lista de cadenas; opcional
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 repositorio. Esto es útil cuando quieres agregar archivos WORKSPACE o BUILD.bazel a 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)
Es la cantidad de barras diagonales iniciales que se quitarán del nombre del 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 nativa de Bazel. Puedes especificar el número de tira de parches con "remote_patch_strip". |
repo_mapping |
Diccionario: String -> String; opcional
Solo en el contexto “WORKSPACE”: un diccionario del nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias de Workspace para las dependencias de este repositorio. Por ejemplo, una entrada "@foo": "@bar"` declara que, en cualquier momento, este repositorio depende de `@foo` (por ejemplo, una dependencia de `@foo//some:target`, en realidad debería resolver esa dependencia dentro de `@bar` declarada de forma global (`@bar//some:target`). Este atributo _no_ se admite en el contexto de `MODULE.bazel` en la implementación de una regla de repositorio (cuando se invoca una función de repositorio). |
sha256 |
Cadena (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. Facilitar el desarrollo es opcional, pero se debe configurar este atributo o "integridad" antes del envío. |
strip_prefix |
Cadena (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 en el 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 se encuentra un archivo “WORKSPACE” y que son 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 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 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, 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 urls, que permite especificar URLs alternativas desde las que 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 se ejecuta correctamente, por lo que primero debes enumerar las duplicaciones locales. Si fallan todas las descargas, la regla fallará. |
workspace_file |
Etiqueta (opcional)
Es 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 |
Cadena (opcional)
Es el contenido del archivo WORKSPACE de este repositorio. Se puede especificar "workspace_file" o "workspace_file_content", o ninguno, pero no ambos. |
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 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 -> Cadena (opcional)
Un dict 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: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN Authorization: Bearer RANDOM-TOKEN |
canonical_id |
Cadena (opcional)
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 da como resultado compilaciones que se ejecutan de forma correcta a nivel local, pero que fallan en máquinas sin el archivo en 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 comprobació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 configurar 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 “WORKSPACE”: un diccionario del nombre del repositorio local al nombre del repositorio global. Esto permite controlar la resolución de dependencias de Workspace 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"). Este atributo _no_ se admite en el contexto "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)
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 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, 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 urls, que permite especificar URLs alternativas desde las que 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 se encuentra una que funciona, por lo que primero debes enumerar 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, con permisos de administrador en el directorio ~/chat-app
. Debe depender de una biblioteca SSL que esté disponible en http://example.com/openssl-0.2.jar
.
Los objetivos 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 ejemplos, ten en cuenta las tres barras diagonales (/
): las primeras dos barras pertenecen a file://
y la tercera pertenece a la ruta de acceso absoluta al archivo.
ATRIBUTOS
name |
Nombre: Obligatorio
Un nombre único para este repositorio. |
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 diccionario, el valor se usará como patrón cuando se genere el encabezado de autorización para la solicitud HTTP. Esto habilita el uso de esquemas de autorización personalizados utilizados en muchos proveedores comunes de almacenamiento en la nube.
Actualmente, el patrón admite 2 tokens: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN Authorization: Bearer RANDOM-TOKEN |
canonical_id |
Cadena (opcional)
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 da como resultado compilaciones que se ejecutan de forma correcta a nivel local, pero que fallan en máquinas sin el archivo en caché. Este comportamiento se puede inhabilitar con --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
downloaded_file_name |
Cadena (opcional)
Es el 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 comprobació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 configurar este atributo o "sha256" antes del envío. |
netrc |
Cadena (opcional)
Ubicación del archivo .netrc para usar en la autenticación |
repo_mapping |
Diccionario: Cadena -> Cadena (opcional)
Solo en el contexto "WORKSPACE": 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"). Este atributo _no_ es compatible con el contexto "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)
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. Facilitar el desarrollo es opcional, pero se debe configurar este atributo o "integridad" antes del envío. |
url |
Cadena (opcional)
Es 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 urls, que permite especificar URLs alternativas desde las que 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 se ejecuta correctamente, por lo que primero debes enumerar las duplicaciones 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