As seguintes funções podem ser carregadas do
@bazel_tools//tools/build_defs/repo:http.bzl
.
Regras para fazer o download de arquivos por HTTP.
Configuração
Para usar essas regras, carregue-as no seu 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 vão substituir 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_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, descompacta e disponibiliza os destinos para vinculação.
Ela é 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,
com acesso root no diretório ~/chat-app
. Ele precisa depender de uma biblioteca SSL, disponível em http://example.com/openssl.zip. Esse 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
poderão depender desse destino se as
seguintes linhas forem 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 vai ser descompactado nesse diretório depois de aplicar "strip_prefix" (se houver) aos caminhos do arquivo. Por exemplo, o 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 nesse dict, o valor será usado como padrão ao
gerar o cabeçalho de autorização para a solicitação HTTP. Isso permite o uso de esquemas de autorização personalizados usados em muitos provedores comuns de armazenamento em nuvem.
Atualmente, o padrão é compatível com 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 este repositório.Esse atributo é um rótulo absoluto (use "@//" para o repositório principal). O arquivo não precisa ter o nome BUILD, mas pode ser (algo como BUILD.new-repo-name pode funcionar bem para distingui-lo dos arquivos BUILD reais do repositório. O build_file ou o build_file_content pode ser especificado, mas não ambos. |
build_file_content |
String; opcional
O conteúdo do arquivo BUILD para este repositório. O build_file ou o build_file_content pode ser especificado, 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 vai retirar o arquivo do cache, a menos que ele tenha sido adicionado por uma solicitação com o mesmo ID canônico. Se não for especificado ou estiver vazio, o Bazel, por padrão, vai usar os URLs do arquivo como ID canônico. Isso ajuda a detectar o erro comum de atualizar os URLs sem atualizar o hash, resultando em builds que são bem-sucedidos localmente, mas falham em 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 Integridade de sub-recursos do arquivo transferido por download. Ela precisa corresponder à soma de verificação do arquivo transferido por download. _É um risco de segurança omitir a soma de verificação, já que os arquivos remotos podem mudar._ Na melhor das hipóteses, omitir esse campo fará com que sua compilação não seja hermética. É opcional facilitar o desenvolvimento, mas esse atributo ou "sha256" precisam ser definidos antes do envio. |
netrc |
String; opcional
Local do arquivo .netrc que será usado para autenticação. |
patch_args |
Lista de strings (opcional)
Os argumentos fornecidos à ferramenta de patch. O padrão é -p0, mas geralmente será necessário -p1 para patches gerados pelo git. Se vários argumentos -p forem especificados, o último terá efeito.Se argumentos diferentes de -p forem especificados, o Bazel vai voltar a usar a ferramenta de linha de comando de patch em vez da implementação de patch nativa do Bazel. Ao voltar para a ferramenta de linha de comando patch e o 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 a serem 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 dele. |
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, ele usa a implementação de patch nativo do Bazel, que não é compatível com correspondência de fuzz e patch binário, mas o Bazel volta a usar a ferramenta de linha de comando de patch se o atributo "patch_tool" é especificado ou se há argumentos diferentes de "-p" no atributo "patch_args". |
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 dele. Ele é aplicado após a extração do arquivo e antes da aplicação dos arquivos de patch do atributo "patches". Ele usa a implementação de patch nativo do Bazel. É possível especificar o número da faixa do patch com "remote_patch_strip" |
repo_mapping |
Dicionário: String -> String; obrigatório
Dicionário do nome do repositório local para o nome do repositório global. Isso permite controles sobre a resolução de dependências do espaço de trabalho para dependências desse repositório. Por exemplo, uma entrada `"@foo": "@bar"" declara que, a qualquer momento, este repositório depende de "@foo" (como uma dependência de "@foo//some:target`, ele precisa resolver essa dependência em "@bar" globalmente declarada (`@bar//some:target`). |
sha256 |
String; opcional
O SHA-256 esperado do arquivo transferido por download. Ele precisa corresponder ao SHA-256 do arquivo transferido por download. _É um risco de segurança omitir o SHA-256 porque os arquivos remotos podem mudar._ Na melhor das hipóteses, omitir esse campo fará com que sua compilação não seja hermética. É opcional facilitar o desenvolvimento, mas esse atributo ou a "integridade" precisam ser definidos antes do envio. |
strip_prefix |
String; opcional
Um prefixo de diretório para remover dos arquivos extraídos. Muitos arquivos contêm um diretório de nível superior que contém todos os arquivos úteis. Em vez de precisar especificar esse prefixo várias vezes no "build_file", esse 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 diretório "foo-lib-1.2.3/" em que há um arquivo "WORKSPACE" e são 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 descartados e ficarão inacessíveis (por exemplo, um arquivo de licença de nível superior). Isso inclui arquivos/diretórios que começam com o prefixo, mas 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 de arquivo do arquivo transferido por download. Por padrão, o tipo de arquivo é determinado pela extensão de arquivo do URL. Se o arquivo não tiver extensão, especifique explicitamente uma das opções a seguir: `"zip"`, `"jar"`, `"war"`, `"aar"`, `"tar"`, `"tar.gz"`, `"tgz"`, `"tar.xz"`, `"txz"`, `"tar.z`tar`, `"tzst"`","" |
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. O parâmetro "urls" permite especificar URLs alternativos em que é possível buscar mais flexibilidade. |
urls |
Lista de strings (opcional)
Uma lista de URLs para um arquivo que será disponibilizado para o Bazel. Cada entrada precisa ser um arquivo de 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 funcione. Por isso, liste os espelhos locais primeiro. Se todos os downloads falharem, a regra também vai falhar. |
workspace_file |
Rótulo; opcional
O arquivo a ser usado como o "Espaço de trabalho" para este repositório. É possível especificar "workspace_file" ou "workspace_file_content". Você não pode especificar ambos os valores. |
workspace_file_content |
String; opcional
O conteúdo do arquivo WORKSPACE deste repositório. É possível especificar "workspace_file" ou "workspace_file_content". Você não pode especificar ambos os valores. |
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 de um URL e o disponibiliza para uso como um grupo de arquivos.
Exemplos: suponha que você precise ter um pacote Debian para suas regras personalizadas. Esse pacote está disponível em http://example.com/package.deb. Em seguida, adicione ao 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 nesse dict, o valor será usado como padrão ao
gerar o cabeçalho de autorização para a solicitação HTTP. Isso permite o uso de esquemas de autorização personalizados usados em muitos provedores comuns de armazenamento em nuvem.
Atualmente, o padrão é compatível com 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 vai retirar o arquivo do cache, a menos que ele tenha sido adicionado por uma solicitação com o mesmo ID canônico. Se não for especificado ou estiver vazio, o Bazel, por padrão, vai usar os URLs do arquivo como ID canônico. Isso ajuda a detectar o erro comum de atualizar os URLs sem atualizar o hash, resultando em builds que são bem-sucedidos localmente, mas falham em 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 transferido por download |
executable |
Booleano; opcional
Se o arquivo baixado deve se tornar executável. |
integrity |
String; opcional
Soma de verificação esperada no formato Integridade de sub-recursos do arquivo transferido por download. Ela precisa corresponder à soma de verificação do arquivo transferido por download. _É um risco de segurança omitir a soma de verificação, já que os arquivos remotos podem mudar._ Na melhor das hipóteses, omitir esse campo fará com que sua compilação não seja hermética. É opcional facilitar o desenvolvimento, mas esse atributo ou "sha256" precisam ser definidos antes do envio. |
netrc |
String; opcional
Local do arquivo .netrc que será usado para autenticação. |
repo_mapping |
Dicionário: String -> String; obrigatório
Dicionário do nome do repositório local para o nome do repositório global. Isso permite controles sobre a resolução de dependências do espaço de trabalho para dependências desse repositório. Por exemplo, uma entrada `"@foo": "@bar"" declara que, a qualquer momento, este repositório depende de "@foo" (como uma dependência de "@foo//some:target`, ele precisa resolver essa dependência em "@bar" globalmente declarada (`@bar//some:target`). |
sha256 |
String; opcional
O SHA-256 esperado do arquivo transferido por download. Ele precisa corresponder ao SHA-256 do arquivo transferido por download. _É um risco de segurança omitir o SHA-256 porque os arquivos remotos podem mudar._ Na melhor das hipóteses, omitir esse campo fará com que sua compilação não seja hermética. Ele é opcional para facilitar o desenvolvimento, mas precisa 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. O parâmetro "urls" permite especificar URLs alternativos em que é possível buscar mais flexibilidade. |
urls |
Lista de strings (opcional)
Uma lista de URLs para um arquivo que será disponibilizado para o Bazel. Cada entrada precisa ser um arquivo de 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 funcione. Por isso, liste os espelhos locais primeiro. Se todos os downloads falharem, a regra também vai 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 de um URL e o disponibiliza como java_import.
Os arquivos transferidos por download precisam ter uma extensão .jar.
Exemplos:
suponha que o repositório atual contenha o código-fonte de um programa de chat com acesso root no
diretório ~/chat-app
. Ele precisa depender de uma biblioteca SSL disponível em
http://example.com/openssl-0.2.jar
.
Os destinos no repositório ~/chat-app
poderão depender desse destino se as seguintes linhas forem
adicionadas 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.
Também é possível referenciar arquivos no sistema atual (localhost) usando "file:///path/to/file"
se você estiver em sistemas baseados em Unix. Se você estiver no Windows, use "file:///c:/path/to/file". Nos dois exemplos, observe as três barras (/
), as duas primeiras pertencem a file://
e a terceira 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 nesse dict, o valor será usado como padrão ao
gerar o cabeçalho de autorização para a solicitação HTTP. Isso permite o uso de esquemas de autorização personalizados usados em muitos provedores comuns de armazenamento em nuvem.
Atualmente, o padrão é compatível com 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 vai retirar o arquivo do cache, a menos que ele tenha sido adicionado por uma solicitação com o mesmo ID canônico. Se não for especificado ou estiver vazio, o Bazel, por padrão, vai usar os URLs do arquivo como ID canônico. Isso ajuda a detectar o erro comum de atualizar os URLs sem atualizar o hash, resultando em builds que são bem-sucedidos localmente, mas falham em 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 do arquivo atribuído ao jar transferido por download |
integrity |
String; opcional
Soma de verificação esperada no formato Integridade de sub-recursos do arquivo transferido por download. Ela precisa corresponder à soma de verificação do arquivo transferido por download. _É um risco de segurança omitir a soma de verificação, já que os arquivos remotos podem mudar._ Na melhor das hipóteses, omitir esse campo fará com que sua compilação não seja hermética. É opcional facilitar o desenvolvimento, mas esse atributo ou "sha256" precisam ser definidos antes do envio. |
netrc |
String; opcional
Local do arquivo .netrc que será usado para autenticação. |
repo_mapping |
Dicionário: String -> String; obrigatório
Dicionário do nome do repositório local para o nome do repositório global. Isso permite controles sobre a resolução de dependências do espaço de trabalho para dependências desse repositório. Por exemplo, uma entrada `"@foo": "@bar"" declara que, a qualquer momento, este repositório depende de "@foo" (como uma dependência de "@foo//some:target`, ele precisa resolver essa dependência em "@bar" globalmente declarada (`@bar//some:target`). |
sha256 |
String; opcional
O SHA-256 esperado do arquivo transferido por download. Ele precisa corresponder ao SHA-256 do arquivo transferido por download. _É um risco de segurança omitir o SHA-256 porque os arquivos remotos podem mudar._ Na melhor das hipóteses, omitir esse campo fará com que sua compilação não seja hermética. É opcional facilitar o desenvolvimento, mas esse atributo ou a "integridade" precisam ser definidos 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. O parâmetro "urls" permite especificar URLs alternativos em que é possível buscar mais flexibilidade. 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 de 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 funcione. Por isso, liste os espelhos locais primeiro. Se todos os downloads falharem, a regra também vai falhar. Todos os URLs precisam terminar em ".jar". |