As seguintes funções podem ser carregadas de
@bazel_tools//tools/build_defs/repo:http.bzl
:
Regras para fazer o download de arquivos em HTTP.
Configuração
Para usar essas regras, carregue-as no arquivo WORKSPACE
da seguinte maneira:
load(
"@bazel_tools//tools/build_defs/repo:http.bzl",
"http_archive",
"http_file",
"http_jar",
)
Essas regras são versões aprimoradas das regras HTTP nativas e, em algum momento, substitua as regras 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)
Faz o download de um repositório do Bazel como um arquivo compactado, o descompacta e disponibiliza os destinos para vinculação.
Ele é compatível com as seguintes extensões de arquivo: "zip"
, "jar"
, "war"
, "aar"
, "tar"
,
"tar.gz"
, "tgz"
, "tar.xz"
, "txz"
, "tar.zst"
, "tzst"
, tar.bz2
, "ar"
,
ou "deb"
.
Exemplos:
Suponha que o repositório atual contenha o código-fonte de um programa de chat,
tem acesso root no diretório ~/chat-app
. Precisa depender de uma biblioteca SSL
que está disponível em http://example.com/openssl.zip. Este arquivo .zip
contém a seguinte estrutura de diretórios:
WORKSPACE
src/
openssl.cc
openssl.h
No repositório local, o usuário cria um arquivo openssl.BUILD
que
contém a seguinte definição de destino:
cc_library(
name = "openssl-lib",
srcs = ["src/openssl.cc"],
hdrs = ["src/openssl.h"],
)
Os destinos no repositório ~/chat-app
podem depender desse destino
as seguintes linhas foram adicionadas 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",
)
Os destinos especificariam @my_ssl//:openssl-lib
como uma dependência.
Atributos
name |
Nome; obrigatório
Um nome exclusivo para este repositório. |
add_prefix |
String; opcional
Diretório de destino relativo ao diretório do repositório. O arquivo será descompactado nesse diretório após a aplicação de "strip_prefix". (se houver) para os caminhos do arquivo. Por exemplo, arquivo "foo-1.2.3/src/foo.h" será descompactado em "bar/src/foo.h" se "add_prefix = "bar"". e `strip_prefix = "foo-1.2.3"`. |
auth_patterns |
Dicionário: String -> String; opcional
Um dict opcional que mapeia nomes de host para padrões de autorização personalizados.
Se o nome do host de um URL estiver presente neste dicionário, o valor será usado como padrão na
gerando o cabeçalho de autorização para a solicitação http. Isso permite o uso de funções
esquemas de autorização usados em muitos provedores comuns de armazenamento em nuvem.
Atualmente, o padrão aceita dois tokens: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENA solicitação HTTP final teria o seguinte cabeçalho: Authorization: Bearer RANDOM-TOKEN |
build_file |
Rótulo opcional
O arquivo a ser usado como o arquivo BUILD para esse repositório.Esse atributo é um rótulo absoluto (use "@//" para o repositório principal). O arquivo não precisa ser nomeado BUILD, mas pode ser (algo como BUILD.new-repo-name pode funcionar bem para distingui-lo dos arquivos BUILD reais do repositório. É possível especificar build_file ou build_file_content, mas não ambos. |
build_file_content |
String; opcional
O conteúdo do arquivo BUILD deste repositório. É possível especificar build_file ou build_file_content, mas não ambos. |
canonical_id |
String; opcional
Um ID canônico do arquivo transferido por download. Se especificado e não estiver vazio, o Bazel não extrairá o arquivo do cache, a menos que foi adicionado ao cache por uma solicitação com o mesmo ID canônico. Se não for especificado ou estiver vazio, o Bazel por padrão usa os URLs do arquivo como o ID canônico. Isso ajuda a detectar o erro comum de atualizar os URLs sem atualizar o hash, resultando em builds que funcionam localmente, mas falham máquinas sem o arquivo no cache. Esse comportamento pode ser desativado com --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
integrity |
String; opcional
Soma de verificação esperada no formato Sub-resource Integrity do arquivo transferido por download. Ela precisa corresponder à soma de verificação do arquivo baixado. _É um risco à segurança para omitir a soma de verificação, já que os arquivos remotos podem mudar. Omitir fará com que sua construção não seja hermética. É opcional tornar o desenvolvimento mais fácil, mas este atributo ou `sha256` precisa ser definido antes do envio. |
netrc |
String; opcional
Localização do arquivo .netrc a ser usado para autenticação |
patch_args |
Lista de strings opcional
Os argumentos fornecidos à ferramenta de patch. O padrão é -p0. No entanto, -p1 geralmente será necessário para patches gerados pelo git. Quando vários argumentos -p são especificados, o último entra em vigor.Se outros argumentos diferentes de -p forem especificados, o Bazel voltará a usar a ferramenta de linha de comando "patch" em vez da implementação de patch nativa do Bazel. Ao retornar à ferramenta de linha de comando "patch" e ao atributo patch_tool não for especificado, "patch" será usado. Isso afeta apenas arquivos de patch no atributo "patches". |
patch_cmds |
Lista de strings opcional
Sequência de comandos Bash a serem aplicados no Linux/Macos após a aplicação dos patches. |
patch_cmds_win |
Lista de strings opcional
Sequência de comandos do PowerShell aplicados no Windows após a aplicação dos patches. Se o atributo não for definido, patch_cmds será executado no Windows, o que exige a existência do binário Bash. |
patch_tool |
String; opcional
O utilitário patch(1) a ser usado. Se isso for especificado, o Bazel vai usar a ferramenta de patch especificada em vez da implementação de patch nativa do Bazel. |
patches |
Lista de rótulos opcional
Uma lista de arquivos que serão aplicados como patches após a extração do arquivo. Por padrão, ela usa a implementação de patch nativa do Bazel que não oferece suporte à correspondência de fuzz e ao patch binário. No entanto, o Bazel voltará a usar a ferramenta de linha de comando patch se o atributo "patch_tool" for especificado ou se houver argumentos diferentes de "-p" no atributo "patch_args". |
remote_file_integrity |
Dicionário: String -> String; opcional
Um mapa dos caminhos relativos do arquivo (chave) para o valor de integridade (valor). Esses caminhos relativos devem ser mapeados para os arquivos (chave) no atributo `remote_file_urls`. |
remote_file_urls |
Dicionário: String -> Lista de strings opcional
Um mapa de caminhos relativos (chave) para uma lista de URLs (valor) que serão transferidos por download e disponibilizados como arquivos sobrepostos no repositório. Isso é útil quando você quer adicionar arquivos WORKSPACE ou BUILD.bazel sobre um repositório atual. Os arquivos são baixados antes da aplicação dos patches no atributo `patches`, e a lista de URLs deve ser todos possíveis espelhos do mesmo arquivo. Os URLs são testados em ordem até que um deles tenha sucesso. |
remote_patch_strip |
Número inteiro opcional
O número de barras iniciais a serem removidas do nome do arquivo nos patches remotos. |
remote_patches |
Dicionário: String -> String; opcional
Um mapa do URL do arquivo de patch para o valor de integridade, eles são aplicados depois de extrair o arquivo e antes de aplicar arquivos de patch do atributo `patches`. Ele usa a implementação de patch nativa do Bazel. É possível especificar o número da faixa de patch com "remote_patch_strip" |
repo_mapping |
Dicionário: String -> String; obrigatório
Um dicionário do nome do repositório local para o nome do repositório global. Isso permite o controle sobre a resolução de dependências do espaço de trabalho para dependências deste repositório. Por exemplo, uma entrada `"@foo": "@bar"` declara que, sempre que esse repositório depender de `@foo`, como uma dependência de `@foo//some:target`, ele deverá resolver essa dependência dentro do `@bar` declarado globalmente (`@bar//some:target`). |
sha256 |
String; opcional
O SHA-256 esperado do arquivo transferido por download. Precisa corresponder ao SHA-256 do arquivo baixado. _É um risco à segurança para omitir o SHA-256, já que os arquivos remotos podem mudar._ Omitir fará com que sua construção não seja hermética. É opcional tornar o desenvolvimento mais fácil, mas este atributo ou `integrity` deve ser definido antes do envio. |
strip_prefix |
String; opcional
Um prefixo de diretório a ser removido dos arquivos extraídos. Muitos arquivos contêm um diretório de nível superior que contém todas as informações arquivos no arquivo. Em vez de precisar especificar esse prefixo repetidamente, em `build_file`, este campo pode ser usado para removê-lo de todos os arquivos extraídos. Por exemplo, suponha que você esteja usando `foo-lib-latest.zip`, que contém o "foo-lib-1.2.3/" no qual há um arquivo "WORKSPACE" e Os diretórios `src/`, `lib/` e `test/` que contêm o código real que você quer criar. Especifique `strip_prefix = "foo-lib-1.2.3"` para usar o "foo-lib-1.2.3" como diretório de nível superior. Se houver arquivos fora desse diretório, eles serão descartada e inacessível (por exemplo, um arquivo de licença de nível superior). Isso inclui arquivos/diretórios que começam com o prefixo, mas que não estão no diretório (por exemplo, `foo-lib-1.2.3.release-notes`). Se o prefixo especificado não corresponder a um diretório no arquivo, o Bazel retornará um erro. |
type |
String; opcional
O tipo do arquivo baixado. Por padrão, o tipo de arquivo é determinado a partir da extensão do arquivo do URL. Se o arquivo não tiver extensão, você poderá especificar explicitamente um dos seguintes: `"zip"`, `"jar"`, `"war"`, `"aar"`, `"tar"`, `"tar.gz"`, `"tgz"`, "tar.xz", "txz", "tar.zst", "tzst", "tar.bz2", "ar" ou "deb". |
url |
String; opcional
Um URL para um arquivo que será disponibilizado para o Bazel. Precisa ser um arquivo, URL http ou https. Os redirecionamentos são seguidos. Não há suporte para autenticação. É possível ter mais flexibilidade com o parâmetro urls, que permite para especificar URLs alternativos nos quais buscar. |
urls |
Lista de strings opcional
Uma lista de URLs para um arquivo que será disponibilizado para o Bazel. Cada entrada precisa ser um arquivo, URL http ou https. Os redirecionamentos são seguidos. Não há suporte para autenticação. Os URLs são testados em ordem até que um deles tenha êxito, portanto, liste os espelhos locais primeiro. Se todos os downloads falharem, a regra falhará. |
workspace_file |
Rótulo opcional
O arquivo a ser usado como o arquivo "WORKSPACE" para este repositório. É possível especificar `workspace_file` ou `workspace_file_content` ou nenhum deles, mas não ambos. |
workspace_file_content |
String; opcional
O conteúdo do arquivo WORKSPACE deste repositório. É possível especificar `workspace_file` ou `workspace_file_content` ou nenhum deles, mas não ambos. |
http_file
http_file(name, auth_patterns, canonical_id, downloaded_file_path, executable, integrity, netrc, repo_mapping, sha256, url, urls)
Faz o download de um arquivo a partir de um URL e o disponibiliza para uso como arquivo grupo.
Exemplos: Suponha que você precise ter um pacote debian para suas regras personalizadas. Este pacote está disponível em http://example.com/package.deb. Depois, você pode adicionar à sua Arquivo 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",
)
Os destinos especificariam @my_deb//file
como uma dependência para depender desse arquivo.
Atributos
name |
Nome; obrigatório
Um nome exclusivo para este repositório. |
auth_patterns |
Dicionário: String -> String; opcional
Um dict opcional que mapeia nomes de host para padrões de autorização personalizados.
Se o nome do host de um URL estiver presente neste dicionário, o valor será usado como padrão na
gerando o cabeçalho de autorização para a solicitação http. Isso permite o uso de funções
esquemas de autorização usados em muitos provedores comuns de armazenamento em nuvem.
Atualmente, o padrão aceita dois tokens: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENA solicitação HTTP final teria o seguinte cabeçalho: Authorization: Bearer RANDOM-TOKEN |
canonical_id |
String; opcional
Um ID canônico do arquivo transferido por download. Se especificado e não estiver vazio, o Bazel não extrairá o arquivo do cache, a menos que foi adicionado ao cache por uma solicitação com o mesmo ID canônico. Se não for especificado ou estiver vazio, o Bazel por padrão usa os URLs do arquivo como o ID canônico. Isso ajuda a detectar o erro comum de atualizar os URLs sem atualizar o hash, resultando em builds que funcionam localmente, mas falham máquinas sem o arquivo no cache. Esse comportamento pode ser desativado com --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
downloaded_file_path |
String; opcional
Caminho atribuído ao arquivo baixado |
executable |
Booleano; opcional
Se o arquivo transferido por download precisar se tornar executável. |
integrity |
String; opcional
Soma de verificação esperada no formato Sub-resource Integrity do arquivo transferido por download. Ela precisa corresponder à soma de verificação do arquivo baixado. _É um risco à segurança para omitir a soma de verificação, já que os arquivos remotos podem mudar. Omitir fará com que sua construção não seja hermética. É opcional tornar o desenvolvimento mais fácil, mas este atributo ou `sha256` precisa ser definido antes do envio. |
netrc |
String; opcional
Localização do arquivo .netrc a ser usado para autenticação |
repo_mapping |
Dicionário: String -> String; obrigatório
Um dicionário do nome do repositório local para o nome do repositório global. Isso permite o controle sobre a resolução de dependências do espaço de trabalho para dependências deste repositório. Por exemplo, uma entrada `"@foo": "@bar"` declara que, sempre que esse repositório depender de `@foo`, como uma dependência de `@foo//some:target`, ele deverá resolver essa dependência dentro do `@bar` declarado globalmente (`@bar//some:target`). |
sha256 |
String; opcional
O SHA-256 esperado do arquivo transferido por download. Precisa corresponder ao SHA-256 do arquivo baixado. _É um risco à segurança para omitir o SHA-256, já que os arquivos remotos podem mudar._ Omitir fará com que sua construção não seja hermética. É opcional tornar o desenvolvimento mais fácil, mas deve ser definido antes do envio. |
url |
String; opcional
Um URL para um arquivo que será disponibilizado para o Bazel. Precisa ser um arquivo, URL http ou https. Os redirecionamentos são seguidos. Não há suporte para autenticação. É possível ter mais flexibilidade com o parâmetro urls, que permite para especificar URLs alternativos nos quais buscar. |
urls |
Lista de strings opcional
Uma lista de URLs para um arquivo que será disponibilizado para o Bazel. Cada entrada precisa ser um arquivo, URL http ou https. Os redirecionamentos são seguidos. Não há suporte para autenticação. Os URLs são testados em ordem até que um deles tenha êxito, portanto, liste os espelhos locais primeiro. Se todos os downloads falharem, a regra falhará. |
http_jar
http_jar(name, auth_patterns, canonical_id, downloaded_file_name, integrity, netrc, repo_mapping, sha256, url, urls)
Faz o download de um jar a partir de um URL e o disponibiliza como java_import.
Os arquivos baixados devem ter uma extensão .jar.
Exemplos:
Suponha que o repositório atual contenha o código-fonte de um programa de chat, com raiz na
diretório ~/chat-app
. Precisa depender de uma biblioteca SSL que está disponível em
http://example.com/openssl-0.2.jar
:
Os destinos no repositório ~/chat-app
poderão depender desse destino se as linhas a seguir forem
adicionado 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",
)
Os destinos especificariam @my_ssl//jar
como uma dependência para depender desse jar.
Você também pode referenciar arquivos no sistema atual (localhost) usando "file:///path/to/file"
se estiver em sistemas baseados em Unix. Se você estiver no Windows, use "file:///c:/path/to/file". Em ambos
Observe as três barras (/
). As duas primeiras pertencem a file://
e a terceira
um pertence ao caminho absoluto para o arquivo.
Atributos
name |
Nome; obrigatório
Um nome exclusivo para este repositório. |
auth_patterns |
Dicionário: String -> String; opcional
Um dict opcional que mapeia nomes de host para padrões de autorização personalizados.
Se o nome do host de um URL estiver presente neste dicionário, o valor será usado como padrão na
gerando o cabeçalho de autorização para a solicitação http. Isso permite o uso de funções
esquemas de autorização usados em muitos provedores comuns de armazenamento em nuvem.
Atualmente, o padrão aceita dois tokens: auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" }netrc: machine storage.cloudprovider.com password RANDOM-TOKENA solicitação HTTP final teria o seguinte cabeçalho: Authorization: Bearer RANDOM-TOKEN |
canonical_id |
String; opcional
Um ID canônico do arquivo transferido por download. Se especificado e não estiver vazio, o Bazel não extrairá o arquivo do cache, a menos que foi adicionado ao cache por uma solicitação com o mesmo ID canônico. Se não for especificado ou estiver vazio, o Bazel por padrão usa os URLs do arquivo como o ID canônico. Isso ajuda a detectar o erro comum de atualizar os URLs sem atualizar o hash, resultando em builds que funcionam localmente, mas falham máquinas sem o arquivo no cache. Esse comportamento pode ser desativado com --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0. |
downloaded_file_name |
String; opcional
Nome de arquivo atribuído ao jar transferido por download |
integrity |
String; opcional
Soma de verificação esperada no formato Sub-resource Integrity do arquivo transferido por download. Ela precisa corresponder à soma de verificação do arquivo baixado. _É um risco à segurança para omitir a soma de verificação, já que os arquivos remotos podem mudar. Omitir fará com que sua construção não seja hermética. É opcional tornar o desenvolvimento mais fácil, mas este atributo ou `sha256` precisa ser definido antes do envio. |
netrc |
String; opcional
Localização do arquivo .netrc a ser usado para autenticação |
repo_mapping |
Dicionário: String -> String; obrigatório
Um dicionário do nome do repositório local para o nome do repositório global. Isso permite o controle sobre a resolução de dependências do espaço de trabalho para dependências deste repositório. Por exemplo, uma entrada `"@foo": "@bar"` declara que, sempre que esse repositório depender de `@foo`, como uma dependência de `@foo//some:target`, ele deverá resolver essa dependência dentro do `@bar` declarado globalmente (`@bar//some:target`). |
sha256 |
String; opcional
O SHA-256 esperado do arquivo transferido por download. Precisa corresponder ao SHA-256 do arquivo baixado. _É um risco à segurança para omitir o SHA-256, já que os arquivos remotos podem mudar._ Omitir fará com que sua construção não seja hermética. É opcional tornar o desenvolvimento mais fácil, mas este atributo ou `integrity` deve ser definido antes do envio. |
url |
String; opcional
Um URL para um arquivo que será disponibilizado para o Bazel. Precisa ser um arquivo, URL http ou https. Os redirecionamentos são seguidos. Não há suporte para autenticação. É possível ter mais flexibilidade com o parâmetro urls, que permite para especificar URLs alternativos nos quais buscar. O URL precisa terminar em ".jar". |
urls |
Lista de strings opcional
Uma lista de URLs para um arquivo que será disponibilizado para o Bazel. Cada entrada precisa ser um arquivo, URL http ou https. Os redirecionamentos são seguidos. Não há suporte para autenticação. Os URLs são testados em ordem até que um deles tenha êxito, portanto, liste os espelhos locais primeiro. Se todos os downloads falharem, a regra falhará. Todos os URLs devem terminar em `.jar`. |