Perguntas frequentes

Informar um problema Ver a fonte Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Confira alguns problemas e perguntas comuns sobre extensões de escrita.

Por que meu arquivo não foi produzido / minha ação nunca foi executada?

O Bazel executa apenas as ações necessárias para produzir os arquivos de saída solicitados.

  • Se o arquivo tiver um rótulo, você poderá solicitá-lo diretamente: bazel build //pkg:myfile.txt

  • Se o arquivo estiver em um grupo de saída do destino, talvez seja necessário especificar esse grupo de saída na linha de comando: bazel build //pkg:mytarget --output_groups=foo

  • Se você quiser que o arquivo seja criado automaticamente sempre que o destino for mencionado na linha de comando, adicione-o às saídas padrão da regra retornando um provedor DefaultInfo.

Consulte a página de regras para mais informações.

Por que minha função de implementação não é executada?

O Bazel analisa apenas os destinos que são solicitados para o build. É necessário nomear o destino na linha de comando ou algo que dependa dele.

Um arquivo está ausente quando minha ação ou binário é executado

Verifique se 1) o arquivo foi registrado como uma entrada para a ação ou binário e 2) se o script ou a ferramenta que está sendo executada está acessando o arquivo usando o caminho correto.

Para ações, declare as entradas transmitindo-as para a função ctx.actions.* que cria a ação. O caminho adequado para o arquivo pode ser encontrado usando File.path.

Para binários (as saídas executáveis executadas por um comando bazel run ou bazel test), declare as entradas incluindo-as nos runfiles. Em vez de usar o campo path, use File.short_path, que é o caminho do arquivo em relação ao diretório de arquivos de execução em que o binário é executado.

Como posso controlar quais arquivos são criados pelo bazel build //pkg:mytarget?

Use o provedor DefaultInfo para definir as saídas padrão.

Como posso executar um programa ou fazer a E/S de arquivos como parte do meu build?

Uma ferramenta pode ser declarada como um destino, assim como qualquer outra parte do build, e executada durante a fase de execução para ajudar a criar outros destinos. Para criar uma ação que execute uma ferramenta, use ctx.actions.run e transmita a ferramenta como o parâmetro executable.

Durante as fases de carregamento e análise, uma ferramenta não pode ser executada, nem é possível realizar entrada/saída de arquivos. Isso significa que as ferramentas e o conteúdo dos arquivos (exceto o conteúdo dos arquivos BUILD e .bzl) não podem afetar a criação dos gráficos de destino e de ação.

E se eu precisar acessar os mesmos dados estruturados antes e durante a fase de execução?

Você pode formatar os dados estruturados como um arquivo .bzl. É possível load() o arquivo para acessar durante as fases de carregamento e análise. Ele pode ser transmitido como uma entrada ou arquivo de execução para ações e executáveis que precisam dele durante a fase de execução.

Como devo documentar o código do Starlark?

Para regras e atributos de regras, é possível transmitir um literal de docstring (possivelmente com aspas triplas) para o parâmetro doc de rule ou attr.*(). Para funções auxiliares e macros, use um literal de docstring com aspas triplas seguindo o formato fornecido aqui. As funções de implementação de regras geralmente não precisam de um docstring próprio.

Usar literais de string nos lugares esperados facilita a extração de documentação por ferramentas automatizadas. Sinta-se à vontade para usar comentários padrão que não sejam de string sempre que isso possa ajudar o leitor do código.