Las siguientes funciones se pueden cargar desde @bazel_tools//tools/build_defs/repo:http.bzl
.
Reglas para la descarga de 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 reglas son versiones mejoradas de las reglas http nativas y, con el tiempo, reemplazarán 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_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 sus destinos a disposición 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 su 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 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 objetivos 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 del archivo dentro del archivo. Por ejemplo, el archivo `foo-1.2.3/src/foo.h` se desempaquetará en `bar/src/foo.h` si `add_prefix = "bar"` y `strip_prefix = "foo-1.2.3"`. |
auth_patterns |
Diccionario: String -> 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 patrón cuando se genere el encabezado de autorización para la solicitud HTTP. Esto habilita el uso de esquemas de autorización personalizada utilizados 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)
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 serlo (algo como BUILD.new-repo-name puede funcionar bien para distinguirlo de los archivos BUILD reales del repositorio. Se pueden especificar build_file o build_file_content, pero no ambos. |
build_file_content |
String; opcional
El contenido del archivo BUILD para este repositorio Se pueden 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 un elemento y este 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 el hash, lo que da como resultado compilaciones que tienen éxito 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 |
String; opcional
Suma de comprobación esperada en formato de integridad de subrecursos del archivo descargado. Debe coincidir con la suma de verificación del archivo descargado. _Es un riesgo de seguridad omitir la suma de verificación, 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 facilitar el desarrollo, 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 |
patch_args |
Lista de cadenas; opcional
Los argumentos dados a la herramienta de parche. El valor predeterminado es -p0; sin embargo, por lo general, -p1 será necesario para los parches generados por Git. Si se especifican varios argumentos -p, se aplicará el último.Si se especifican otros argumentos que no sean -p, Bazel recurrirá a la herramienta de línea de comandos de parche en lugar de la implementación de parches nativa de Bazel. Si se recurre a la herramienta de línea de comandos del parche y el atributo "patch_tool" no se especifican, se usará "patch". Esto solo afecta a los archivos de parche del atributo "patches". |
patch_cmds |
Lista de cadenas; opcional
Secuencia de comandos de Bash que se aplicarán en Linux/Macos después de la aplicación de 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, que requiere el objeto binario Bash para existir. |
patch_tool |
String; opcional
La utilidad del parche(1) que se usará. Si se especifica esto, Bazel usará la herramienta de parche 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 extraer el archivo. De forma predeterminada, usa la implementación del parche nativo 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_patch_strip |
Número entero (opcional)
El número de barras diagonales que se quitarán del nombre de archivo en los parches remotos. |
remote_patches |
Diccionario: String -> String; opcional
Es un mapa de la URL del archivo de parche a su valor de integridad. Se aplica después de extraer el archivo y antes de aplicar los archivos de parche desde el atributo "patches". Usa la implementación del parche nativo de Bazel, puedes especificar el número de la tira de parches con `remote_patch_strip` |
repo_mapping |
Diccionario: String -> String; obligatorio
Un diccionario que va desde el nombre del repositorio local hasta el nombre del repositorio global. Esto permite controles sobre la resolución de dependencias del lugar de trabajo para las dependencias de este repositorio. Por ejemplo, una entrada"@foo": "@bar" declara que, para cualquier momento, este repositorio depende 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
Es el SHA-256 esperado del archivo descargado. Este debe coincidir con el SHA-256 del archivo descargado. _Existe un riesgo de seguridad omitir el SHA-256, 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 facilitar el desarrollo, pero se debe configurar este atributo o la “integridad” antes del envío. |
strip_prefix |
String; opcional
Un prefijo de directorio para quitar de los archivos extraídos. Muchos archivos contienen un directorio de nivel superior que incluye todos los archivos útiles. En lugar de tener que especificar este prefijo una y otra vez en el `build_file`, el 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 encuentran 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 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 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 de archivo de la URL. Si el archivo no tiene extensión, puedes especificar de forma explícita una de las siguientes opciones: "zip",`, ".jar"`, "war"`, "aar"`, ".tar"`, ".tar.gz", "". |
url |
String; opcional
Una URL a un archivo que estará disponible para Bazel Debe ser un archivo, o URL HTTP o HTTPS. Se siguen los redireccionamientos. No se admite la autenticación. Se puede obtener más flexibilidad con el parámetro "urls", que permite especificar URLs alternativas para recuperar datos. |
urls |
Lista de cadenas; opcional
Una lista de las URLs a un archivo que estará disponible para Bazel. Cada entrada debe ser un archivo, con URL HTTP o HTTPS. Se siguen los redireccionamientos. No se admite la autenticación. Las URLs se prueban en orden hasta que una se realiza con éxito, por lo que primero debes enumerar las duplicaciones locales. Si fallan todas las descargas, fallará 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 bien 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 bien 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 desde una URL y lo pone a disposición para usarlo 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 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: String -> 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 patrón cuando se genere el encabezado de autorización para la solicitud HTTP. Esto habilita el uso de esquemas de autorización personalizada utilizados 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 un elemento y este 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 el hash, lo que da como resultado compilaciones que tienen éxito 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 |
String; opcional
Ruta asignada al archivo descargado |
executable |
Booleano; opcional
Si el archivo descargado debe ser ejecutable. |
integrity |
String; opcional
Suma de comprobación esperada en formato de integridad de subrecursos del archivo descargado. Debe coincidir con la suma de verificación del archivo descargado. _Es un riesgo de seguridad omitir la suma de verificación, 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 facilitar el desarrollo, 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: String -> String; obligatorio
Un diccionario que va desde el nombre del repositorio local hasta el nombre del repositorio global. Esto permite controles sobre la resolución de dependencias del lugar de trabajo para las dependencias de este repositorio. Por ejemplo, una entrada"@foo": "@bar" declara que, para cualquier momento, este repositorio depende 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
Es el SHA-256 esperado del archivo descargado. Este debe coincidir con el SHA-256 del archivo descargado. _Existe un riesgo de seguridad omitir el SHA-256, 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 facilitar el desarrollo, pero se debe configurar antes del envío. |
url |
String; opcional
Una URL a un archivo que estará disponible para Bazel Debe ser un archivo, o URL HTTP o HTTPS. Se siguen los redireccionamientos. No se admite la autenticación. Se puede obtener más flexibilidad con el parámetro "urls", que permite especificar URLs alternativas para recuperar datos. |
urls |
Lista de cadenas; opcional
Una lista de las URLs a un archivo que estará disponible para Bazel. Cada entrada debe ser un archivo, con URL HTTP o HTTPS. Se siguen los redireccionamientos. No se admite la autenticación. Las URLs se prueban en orden hasta que una se realiza con éxito, por lo que primero debes enumerar las duplicaciones locales. Si fallan todas las descargas, fallará 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 una extensión .jar.
Ejemplos: Supongamos que el repositorio actual contiene el código fuente de un programa de chat, que tiene su raíz en el directorio ~/chat-app
. Depende de una biblioteca SSL 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 los archivos en el sistema actual (localhost) con “file:///path/to/file” si estás en sistemas basados en Unix. Si usas Windows, usa "file:///c:/path/to/file". En ambos ejemplos, observa las tres barras (/
): 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: String -> 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 patrón cuando se genere el encabezado de autorización para la solicitud HTTP. Esto habilita el uso de esquemas de autorización personalizada utilizados 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 un elemento y este 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 el hash, lo que da como resultado compilaciones que tienen éxito 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 |
String; opcional
Nombre de archivo asignado al archivo jar descargado |
integrity |
String; opcional
Suma de comprobación esperada en formato de integridad de subrecursos del archivo descargado. Debe coincidir con la suma de verificación del archivo descargado. _Es un riesgo de seguridad omitir la suma de verificación, 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 facilitar el desarrollo, 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: String -> String; obligatorio
Un diccionario que va desde el nombre del repositorio local hasta el nombre del repositorio global. Esto permite controles sobre la resolución de dependencias del lugar de trabajo para las dependencias de este repositorio. Por ejemplo, una entrada"@foo": "@bar" declara que, para cualquier momento, este repositorio depende 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
Es el SHA-256 esperado del archivo descargado. Este debe coincidir con el SHA-256 del archivo descargado. _Existe un riesgo de seguridad omitir el SHA-256, 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 facilitar el desarrollo, pero se debe configurar este atributo o la “integridad” antes del envío. |
url |
String; opcional
Una URL a un archivo que estará disponible para Bazel Debe ser un archivo, o URL HTTP o HTTPS. Se siguen los redireccionamientos. No se admite la autenticación. Se puede obtener más flexibilidad con el parámetro "urls", que permite especificar URLs alternativas para recuperar datos. La URL debe terminar en `.jar`. |
urls |
Lista de cadenas; opcional
Una lista de las URLs a un archivo que estará disponible para Bazel. Cada entrada debe ser un archivo, con URL HTTP o HTTPS. Se siguen los redireccionamientos. No se admite la autenticación. Las URLs se prueban en orden hasta que una se realiza con éxito, por lo que primero debes enumerar las duplicaciones locales. Si fallan todas las descargas, fallará la regla. Todas las URLs deben terminar en ".jar". |