Regras de repositório HTTP

As seguintes funções podem ser carregadas de @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 acabarão substituindo 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 Bazel como um arquivo compactado, descompacta e disponibiliza os destinos para vinculação.

Ele oferece suporte às 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. Ela 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 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 para `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 de host de um URL estiver presente nesse dicionário, 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 aceita dois tokens: <login> e <password>, que são substituídos pelo valor equivalente no arquivo netrc para o mesmo nome de host. Após a formatação, o resultado é definido como o valor para o campo Authorization da solicitação HTTP. Exemplo de atributo e netrc para um download HTTP para uma API ativada por oauth2 usando um token do portador:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
A 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 build_file_content pode ser especificado, mas não ambos.

build_file_content String; opcional

O conteúdo do arquivo BUILD para esse repositório. O build_file ou build_file_content pode ser especificado, mas não ambos.

canonical_id String; opcional

Um código canônico do arquivo transferido por download. Se especificado e não estiver vazio, o Bazel não vai extrair o arquivo do cache, a menos que tenha sido adicionado ao cache por uma solicitação com o mesmo ID canônico.

integrity String; opcional

Soma de verificação esperada no formato Integridade do sub-recurso 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, a omissão desse campo fará com que o build não seja hermético. É opcional para facilitar o desenvolvimento, mas esse atributo ou "sha256" precisam ser definidos antes do envio.

netrc String; opcional

Local do arquivo .netrc a ser usado para autenticação

patch_args Lista de strings; opcional

Os argumentos fornecidos para a ferramenta de patch. O padrão é -p0, mas geralmente é necessário usar -p1 para patches gerados pelo git. Se vários argumentos -p forem especificados, o último vai entrar em vigor.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 recorrer à 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 depois que os patches forem aplicados.

patch_cmds_win Lista de strings; opcional

Sequência de comandos do PowerShell a serem aplicados no Windows depois da aplicação dos patches. Se o atributo não for definido, patch_cmds serão executados 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, 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 depois da extração do arquivo e antes da aplicação de arquivos de patch do atributo "patches". Ele usa a implementação de patch nativo do Bazel. Você pode especificar o número da faixa de 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 das dependências do espaço de trabalho para as dependências desse repositório.

Por exemplo, uma entrada"@foo": "@bar"` declara que, sempre que este repositório depende de `@foo`, como uma dependência de `@foo//some:target`, ele precisa resolver essa dependência em `@bar`, declarada globalmente, como `@bar//some:target`.

sha256 String; opcional

O SHA-256 esperado para o arquivo transferido por download. Ele precisa corresponder ao SHA-256 do arquivo transferido por download. _É um risco de segurança omitir o SHA-256, já que os arquivos remotos podem ser alterados._ Na melhor das hipóteses, omitir esse campo fará com que o build não seja hermético. Ele é opcional para facilitar o desenvolvimento, mas esse atributo ou "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 em "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 diretório `foo-lib-1.2.3` como seu 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, você poderá especificar explicitamente uma das seguintes opções: "zip"`, "jar"`, ", "war"`, "aar"`, tar" , tar. gz ",

url String; opcional

Um URL para um arquivo que vai ser disponibilizado para o Bazel. Precisa ser um arquivo, http ou https. As rotas são seguidas. A autenticação não é aceita. O parâmetro "urls" permite especificar mais URLs em que a busca deve ser feita.

urls Lista de strings; opcional

Uma lista de URLs para um arquivo que vai ser disponibilizado para o Bazel. Cada entrada precisa ser um arquivo, URL http ou https. As rotas são seguidas. A autenticação não é aceita. 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 vai falhar.

workspace_file Rótulo (opcional)

O arquivo a ser usado como o arquivo "WORKSPACE" neste 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 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 ESPAÇO DE TRABALHO:

  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 de host de um URL estiver presente nesse dicionário, 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 aceita dois tokens: <login> e <password>, que são substituídos pelo valor equivalente no arquivo netrc para o mesmo nome de host. Após a formatação, o resultado é definido como o valor para o campo Authorization da solicitação HTTP. Exemplo de atributo e netrc para um download HTTP para uma API ativada por oauth2 usando um token do portador:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
A solicitação HTTP final teria o seguinte cabeçalho:
Authorization: Bearer RANDOM-TOKEN

canonical_id String; opcional

Um código canônico do arquivo transferido por download. Se especificado e não estiver vazio, o Bazel não vai extrair o arquivo do cache, a menos que tenha sido adicionado ao cache por uma solicitação com o mesmo ID canônico.

downloaded_file_path String; opcional

Caminho atribuído ao arquivo transferido por download

executable Booleano; opcional

Se o arquivo baixado deve ser transformado em executável.

integrity String; opcional

Soma de verificação esperada no formato Integridade do sub-recurso 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, a omissão desse campo fará com que o build não seja hermético. É opcional para facilitar o desenvolvimento, mas esse atributo ou "sha256" precisam ser definidos antes do envio.

netrc String; opcional

Local do arquivo .netrc a 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 das dependências do espaço de trabalho para as dependências desse repositório.

Por exemplo, uma entrada"@foo": "@bar"` declara que, sempre que este repositório depende de `@foo`, como uma dependência de `@foo//some:target`, ele precisa resolver essa dependência em `@bar`, declarada globalmente, como `@bar//some:target`.

sha256 String; opcional

O SHA-256 esperado para o arquivo transferido por download. Ele precisa corresponder ao SHA-256 do arquivo transferido por download. _É um risco de segurança omitir o SHA-256, já que os arquivos remotos podem ser alterados._ Na melhor das hipóteses, omitir esse campo fará com que o build não seja hermético. Ele é opcional para facilitar o desenvolvimento, mas precisa ser definido antes do envio.

url String; opcional

Um URL para um arquivo que vai ser disponibilizado para o Bazel. Precisa ser um arquivo, http ou https. As rotas são seguidas. A autenticação não é aceita. O parâmetro "urls" permite especificar mais URLs em que a busca deve ser feita.

urls Lista de strings; opcional

Uma lista de URLs para um arquivo que vai ser disponibilizado para o Bazel. Cada entrada precisa ser um arquivo, URL http ou https. As rotas são seguidas. A autenticação não é aceita. 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 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. Ela 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. No Windows, use o arquivo "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 do 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 de host de um URL estiver presente nesse dicionário, 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 aceita dois tokens: <login> e <password>, que são substituídos pelo valor equivalente no arquivo netrc para o mesmo nome de host. Após a formatação, o resultado é definido como o valor para o campo Authorization da solicitação HTTP. Exemplo de atributo e netrc para um download HTTP para uma API ativada por oauth2 usando um token do portador:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
A solicitação HTTP final teria o seguinte cabeçalho:
Authorization: Bearer RANDOM-TOKEN

canonical_id String; opcional

Um código canônico do arquivo transferido por download. Se especificado e não estiver vazio, o Bazel não vai extrair o arquivo do cache, a menos que tenha sido adicionado ao cache por uma solicitação com o mesmo ID canônico.

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 do sub-recurso 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, a omissão desse campo fará com que o build não seja hermético. É opcional para facilitar o desenvolvimento, mas esse atributo ou "sha256" precisam ser definidos antes do envio.

netrc String; opcional

Local do arquivo .netrc a 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 das dependências do espaço de trabalho para as dependências desse repositório.

Por exemplo, uma entrada"@foo": "@bar"` declara que, sempre que este repositório depende de `@foo`, como uma dependência de `@foo//some:target`, ele precisa resolver essa dependência em `@bar`, declarada globalmente, como `@bar//some:target`.

sha256 String; opcional

O SHA-256 esperado para o arquivo transferido por download. Ele precisa corresponder ao SHA-256 do arquivo transferido por download. _É um risco de segurança omitir o SHA-256, já que os arquivos remotos podem ser alterados._ Na melhor das hipóteses, omitir esse campo fará com que o build não seja hermético. Ele é opcional para facilitar o desenvolvimento, mas esse atributo ou "integridade" precisam ser definidos antes do envio.

url String; opcional

Um URL para um arquivo que vai ser disponibilizado para o Bazel. Precisa ser um arquivo, http ou https. As rotas são seguidas. A autenticação não é aceita. O parâmetro "urls" permite especificar mais URLs em que a busca deve ser feita. O URL precisa terminar com ".jar".

urls Lista de strings; opcional

Uma lista de URLs para um arquivo que vai ser disponibilizado para o Bazel. Cada entrada precisa ser um arquivo, URL http ou https. As rotas são seguidas. A autenticação não é aceita. 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 vai falhar. Todos os URLs precisam terminar em `.jar`.