Las siguientes funciones se pueden cargar desde
@bazel_tools//tools/build_defs/repo:http.bzl
Reglas para descargar archivos a través de HTTP.
Configuración
Para usar estas reglas en la extensión de un módulo, cárgalas en el archivo .bzl y llámalas desde tu
la función de implementación de una 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
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
. Depende de una biblioteca 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 que se aplique `strip_prefix` (si corresponde) a las rutas de acceso a archivos dentro del archivo. Por ejemplo, archivo `foo-1.2.3/src/foo.h` se descomprime en `bar/src/foo.h` si `add_prefix = "bar"` y `strip_prefix = "foo-1.2.3"`. |
auth_patterns |
Diccionario: Cadena -> String; 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 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: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENLa solicitud HTTP final tendría el siguiente encabezado: 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 tenga el nombre BUILD, pero puede tener el nombre (algo como BUILD.new-repo-name 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 |
String; opcional
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 se agregó 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 el el ID canónico. Esto ayuda a detectar el error común de actualizar las URLs actualizar el hash, lo que da como resultado compilaciones que se ejecutan de forma correcta a nivel local, pero que fallan sin el archivo en la caché. Este comportamiento se puede inhabilitar con --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
integrity |
String; opcional
La suma de comprobación esperada en el formato de integridad de los subrecursos del archivo descargado. Debe coincidir con la suma de comprobación del archivo descargado. _Es un riesgo para la seguridad omitir la suma de comprobación, ya que los archivos remotos pueden cambiar. En el mejor de los casos, omitir esta campo hará que la 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 proporcionados a la herramienta de parches. El valor predeterminado es -p0; sin embargo, -p1 suele ser necesario 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 recurras a la herramienta de línea de comandos del parche y no se especifica el atributo programa_de_parche, se usará "parche". 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
Secuencia de comandos de PowerShell que se aplicarán en Windows después de aplicar los parches. Si no se establece este atributo, se ejecutará patch_cmds en Windows, lo que requiere que exista el objeto binario Bash. |
patch_tool |
String; opcional
La utilidad parche(1) que se 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
Una lista de los archivos que se aplicarán como parches después de extraerlo. De forma predeterminada, usa la implementación de parches nativa de Bazel que no admite la coincidencia de fuzz ni el parche binario, pero Bazel recurrirá a la herramienta de línea de comandos de parche 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 descargarán y estarán disponibles 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 URL 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 -> String; opcional
Es una asignación 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 que va 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, 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 manera global, `@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 para la 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
Un prefijo de directorio para quitar los archivos extraídos. Muchos archivos contienen un directorio de nivel superior que contiene todos los en el archivo. En lugar de tener que especificar este prefijo una y otra vez en el `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 se Los directorios `src/`, `lib/` y `test/` que contienen el código real que desean construir. 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, descartados y son inaccesibles (por ejemplo, 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 |
String; 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 |
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
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 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
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 archivo grupo.
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 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 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 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: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENLa 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 se agregó 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 el el ID canónico. Esto ayuda a detectar el error común de actualizar las URLs actualizar el hash, lo que da como resultado compilaciones que se ejecutan de forma correcta a nivel local, pero que fallan 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 |
String; opcional
Ruta de acceso asignada al archivo descargado |
executable |
Booleano; opcional
Si el archivo descargado debe ser ejecutable. |
integrity |
String; opcional
La suma de comprobación esperada en el formato de integridad de los subrecursos del archivo descargado. Debe coincidir con la suma de comprobación del archivo descargado. _Es un riesgo para la seguridad omitir la suma de comprobación, ya que los archivos remotos pueden cambiar. En el mejor de los casos, omitir esta campo hará que la 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 |
repo_mapping |
Diccionario: Cadena -> String; obligatorio.
Un diccionario que va 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, 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 manera global, `@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 para la 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 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
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 una se ejecuta correctamente, por lo que primero debes enumerar las duplicaciones locales. Si todas las descargas fallan, también lo hará la regla. |
http_jar
http_jar(name, auth_patterns, canonical_id, downloaded_file_name, integrity, netrc, repo_mapping, sha256, url, urls)
Descarga un 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 para un programa de chat, con la raíz en la
el directorio ~/chat-app
. Depende 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 cumplen las siguientes líneas
Agregado 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) usando “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 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 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: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENLa 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 se agregó 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 el el ID canónico. Esto ayuda a detectar el error común de actualizar las URLs actualizar el hash, lo que da como resultado compilaciones que se ejecutan de forma correcta a nivel local, pero que fallan 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 |
String; opcional
La suma de comprobación esperada en el formato de integridad de los subrecursos del archivo descargado. Debe coincidir con la suma de comprobación del archivo descargado. _Es un riesgo para la seguridad omitir la suma de comprobación, ya que los archivos remotos pueden cambiar. En el mejor de los casos, omitir esta campo hará que la 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 |
repo_mapping |
Diccionario: Cadena -> String; obligatorio.
Un diccionario que va 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, 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 manera global, `@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 para la 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 |
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. 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 una se ejecuta correctamente, por lo que primero debes enumerar las duplicaciones locales. Si todas las descargas fallan, también lo hará la regla. Todas las URLs deben terminar en ".jar". |