ações

Módulo que fornece funções para criar ações. Acesse este módulo usando ctx.actions.

Membros

args

Args actions.args()

Retorna um objeto Args que pode ser usado para criar linhas de comando com eficiência de memória.

declare_directory

File actions.declare_directory(filename, *, sibling=None)

Declara que a regra ou o aspecto cria um diretório com o nome especificado no pacote atual. Você precisa criar uma ação que gere o diretório. O conteúdo do diretório não pode ser acessado diretamente pelo Starlark, mas pode ser expandido em um comando de ação com o Args.add_all().

Parâmetros

Parâmetro Descrição
filename obrigatório
Se nenhum "irmão" for fornecido, será o caminho do novo diretório relativo ao pacote atual. Caso contrário, um nome de base para um arquivo ("sibling" define um diretório).
sibling File; or None; default = None
Um arquivo que fica no mesmo diretório que o diretório recém-declarado. O arquivo precisa estar no pacote atual.

declare_file

File actions.declare_file(filename, *, sibling=None)

Declara que a regra ou o aspecto cria um arquivo com o nome especificado. Se sibling não for especificado, o nome do arquivo será relativo ao diretório do pacote. Caso contrário, o arquivo estará no mesmo diretório que sibling. Não é possível criar arquivos fora do pacote atual.

Além de declarar um arquivo, você precisa criar uma ação separada que emita o arquivo. Para criar essa ação, é necessário transmitir o objeto File retornado para a função de construção da ação.

Os arquivos de saída predeclarados não precisam ser (e não podem ser) declarados usando essa função. Em vez disso, é possível acessar os objetos File em ctx.outputs. Confira um exemplo de uso.

Parâmetros

Parâmetro Descrição
filename required
Se nenhum "sibling" for fornecido, o caminho do novo arquivo, relativo ao pacote atual. Caso contrário, um nome de base para um arquivo ("sibling" determina um diretório).
sibling File; or None; padrão = nenhum
Um arquivo que reside no mesmo diretório do arquivo recém-criado. O arquivo precisa estar no pacote atual.

File actions.declare_symlink(filename, *, sibling=None)

Experimental. Esse parâmetro é experimental e pode mudar a qualquer momento. Não dependa dele. Ele pode ser ativado de forma experimental definindo --experimental_allow_unresolved_symlinks

Declara que a regra ou o aspecto cria um link simbólico com o nome especificado no pacote atual. Você precisa criar uma ação que gere esse link simbólico. O Bazel nunca vai remover a referência a esse link simbólico e vai transferi-lo literalmente para sandboxes ou executores remotos.

Parâmetros

Parâmetro Descrição
filename obrigatório
Se nenhum "sibling" for fornecido, o caminho do novo link simbólico em relação ao pacote atual. Caso contrário, um nome base para um arquivo ('irmão' define um diretório).
sibling File; or None; padrão = None
Um arquivo que reside no mesmo diretório do link simbólico recém-declarado.

do_nothing

None actions.do_nothing(mnemonic, inputs=[])

Cria uma ação vazia que não executa um comando nem produz saída, mas é útil para inserir "ações extras".

Parâmetros

Parâmetro Descrição
mnemonic obrigatório
Uma descrição de uma palavra da ação, por exemplo, CppCompile ou GoLink.
inputs sequence of Files; or depset; padrão = []
Lista dos arquivos de entrada da ação.

expand_template

None actions.expand_template(template, output, substitutions={}, is_executable=False, computed_substitutions=unbound)

Cria uma ação de expansão de modelo. Quando a ação for executada, ela vai gerar um arquivo com base em um modelo. Partes do modelo serão substituídas pelo dicionário substitutions, na ordem em que as substituições são especificadas. Sempre que uma chave do dicionário aparece no modelo (ou é o resultado de uma substituição anterior), ela é substituída pelo valor associado. Não há sintaxe especial para as chaves. Você pode, por exemplo, usar chaves para evitar conflitos (por exemplo, {KEY}). Veja um exemplo de uso.

Parâmetros

Parâmetro Descrição
template obrigatório
O arquivo de modelo, que é um arquivo de texto codificado em UTF-8.
output obrigatório
O arquivo de saída, que é um arquivo de texto codificado em UTF-8.
substitutions padrão = {}
Substituições a serem feitas ao expandir o modelo.
is_executable default = False
Indica se o arquivo de saída precisa ser executável.
computed_substitutions TemplateDict; padrão = ilimitado
Experimental. Esse parâmetro é experimental e pode mudar a qualquer momento. Não dependa dele. Ela pode ser ativada de forma experimental definindo --+experimental_lazy_template_expansion
Experimental: substituições a serem feitas ao expandir o modelo.

run

None actions.run(outputs, inputs=[], unused_inputs_list=None, executable, tools=unbound, arguments=[], mnemonic=None, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=None)

Cria uma ação que executa um executável. Confira um exemplo de uso.

Parâmetros

Parâmetro Descrição
outputs sequence of Files; required
Lista dos arquivos de saída da ação.
inputs sequence of Files; or depset; default = []
Lista ou depset dos arquivos de entrada da ação.
unused_inputs_list File; or None; padrão = None
Arquivo contendo a lista de entradas não usadas pela ação.

O conteúdo desse arquivo (geralmente uma das saídas da ação) corresponde à lista de arquivos de entrada que não foram usados durante toda a execução da ação. As alterações nesses arquivos não podem afetar de maneira alguma os resultados da ação.

executable File; or string; or FilesToRunProvider; obrigatório
O arquivo executável que será chamado pela ação.
tools sequence; or depset; default = unbound
Lista ou depset de todas as ferramentas necessárias para a ação. As ferramentas são entradas com runfiles adicionais que são disponibilizados automaticamente para a ação. Quando uma lista é fornecida, ela pode ser uma coleção heterogênea de arquivos, instâncias do FilesToRunProvider ou depsets de arquivos. Os arquivos de execução de arquivos que estão diretamente na lista e vêm de ctx.executable são adicionados automaticamente. Quando um depset é fornecido, ele precisa conter apenas arquivos. Em ambos os casos, os arquivos em depsets não são cruzados com ctx.executable para runfiles.
arguments sequence; padrão = []
Argumentos de linha de comando da ação. Precisa ser uma lista de strings ou objetos actions.args().
mnemonic string; or None; default = None
Uma descrição de uma palavra da ação, por exemplo, CppCompile ou GoLink.
progress_message string; or None; default = None
Mensagem de progresso para mostrar ao usuário durante o build, por exemplo, "Compiling foo.cc to create foo.o". A mensagem pode conter padrões %{label}, %{input} ou %{output}, que são substituídos pelo rótulo, pela primeira entrada ou pelo caminho da saída, respectivamente. Use padrões em vez de strings estáticas, porque os primeiros são mais eficientes.
use_default_shell_env default = False
Se a ação precisa usar o ambiente shell integrado ou não.
env dict; or None; default = None
Define o dicionário de variáveis de ambiente.
execution_requirements dict; or None; default = None
Informações para programar a ação. Consulte tags para ver chaves úteis.
input_manifests sequence; or None; default = None
(Experimental) define os metadados dos arquivos de execução de entrada. Eles normalmente são gerados por resolve_command.
exec_group string; or None; default = None
Executa a ação na plataforma de execução do grupo de execução especificado. Se não houver nenhuma, será usada a plataforma de execução padrão do destino.
shadowed_action Action; default = None
Executa a ação usando as entradas e o ambiente da ação ocultada adicionados à lista de entradas e ao ambiente de entradas da ação. O ambiente de ação pode substituir qualquer uma das variáveis de ambiente da ação sombreada. Se não houver, serão usadas apenas as entradas da ação e o ambiente fornecido.
resource_set callable; or None; padrão = nenhum
Uma função de callback que retorna um dicionário de conjunto de recursos, usado para estimar o uso de recursos no tempo de execução, se essa ação for executada localmente.

A função aceita dois argumentos posicionais: uma string que representa o nome do SO (por exemplo, "osx") e um número inteiro que representa o número de entradas para a ação. O dicionário retornado pode conter as seguintes entradas, cada uma delas pode ser um float ou um int:

  • "cpu": número de CPUs; padrão 1
  • "memory": em MB; padrão 250
  • "local_test": número de testes locais; padrão 1

Se esse parâmetro for definido como None ou se --experimental_action_resource_set for falso, os valores padrão serão usados.

O callback precisa ser de nível superior (lambda e funções aninhadas não são permitidos).

toolchain Label; or string; or None; default = None

Tipo de cadeia de ferramentas do executável ou ferramentas usadas nesta ação. O parâmetro precisa ser definido para que a ação seja executada na plataforma de execução correta.

No momento, ele não faz nada, mas recomendamos que você o defina quando um conjunto de ferramentas for usado, porque ele será necessário nas próximas versões do Bazel.

A regra que cria essa ação precisa definir essa cadeia de ferramentas na função "rule()".

Quando os parâmetros "toolchain" e "exec_group" estiverem definidos, o "exec_group" será usado. Um erro é gerado caso o "exec_group" não especifique o mesmo.

run_shell

None actions.run_shell(outputs, inputs=[], tools=unbound, arguments=[], mnemonic=None, command, progress_message=None, use_default_shell_env=False, env=None, execution_requirements=None, input_manifests=None, exec_group=None, shadowed_action=None, resource_set=None, toolchain=None)

Cria uma ação que executa um comando do shell. Confira um exemplo de uso.

Parâmetros

Parâmetro Descrição
outputs sequence of Files; obrigatório
Lista dos arquivos de saída da ação.
inputs sequence of Files; or depset; default = []
Lista ou depset dos arquivos de entrada da ação.
tools sequence of Files; or depset; default = unbound
Lista ou depset de todas as ferramentas necessárias para a ação. As ferramentas são entradas com outros arquivos de execução disponibilizados automaticamente para a ação. A lista pode conter instâncias de Files ou FilesToRunProvider.
arguments sequence; default = []
Argumentos de linha de comando da ação. Precisa ser uma lista de strings ou objetos actions.args().

O Bazel transmite os elementos nesse atributo como argumentos para o comando.O comando pode acessar esses argumentos usando substituições de variáveis de shell, como $1, $2 etc. Como os objetos Args são achatados antes da indexação, se houver um objeto Args de tamanho desconhecido, todas as strings subsequentes vão estar em índices imprevisíveis. Pode ser útil usar $@ (para extrair todos os argumentos) em conjunto com objetos Args de tamanho indeterminado.

No caso em que command é uma lista de strings, esse parâmetro pode não ser usado.

mnemonic string; or None; default = None
Uma descrição de uma palavra da ação, por exemplo, CppCompile ou GoLink.
command string; or sequence of strings; required
Comando do shell a ser executado. Pode ser uma string (preferencial) ou uma sequência de strings (descontinuado).

Se command for uma string, ela será executada como se fosse por sh -c <command> "" <arguments>. Ou seja, os elementos em arguments são disponibilizados para o comando como $1, $2 (ou %1, %2 se estiver usando o lote do Windows) etc. Se arguments contiver objetos actions.args(), o conteúdo deles será anexado um por um à linha de comando. Assim, $i pode se referir a strings individuais em um objeto Args. Se um objeto Args de tamanho desconhecido for transmitido como parte de arguments, as strings vão estar em índices desconhecidos. Nesse caso, a substituição de shell $@ (recuperar todos os argumentos) pode ser útil.

(Descontinuado) Se command for uma sequência de strings, o primeiro item será o executável a ser executado e os demais serão os argumentos. Se esse formulário for usado, o parâmetro arguments não poderá ser fornecido. Este formulário foi descontinuado e será removido em breve. Ela é desativada com `--incompatible_run_shell_command_string`. Use essa flag para verificar se o código é compatível.

O Bazel usa o mesmo shell para executar o comando das regras gerais.

progress_message string; or None; default = None
Mensagem de progresso para mostrar ao usuário durante o build, por exemplo, "Compiling foo.cc to create foo.o". A mensagem pode conter padrões %{label}, %{input} ou %{output}, que são substituídos pelo rótulo, pela primeira entrada ou pelo caminho da saída, respectivamente. Prefira usar padrões em vez de strings estáticas, porque as primeiras são mais eficientes.
use_default_shell_env default = False
Se a ação precisa usar o ambiente shell integrado ou não.
env dict; or None; default = None
Define o dicionário de variáveis de ambiente.
execution_requirements dict; or None; padrão = None
Informações para programar a ação. Consulte tags para conferir chaves úteis.
input_manifests sequence; or None; default = None
(Experimental) define os metadados de arquivos de execução de entrada. Eles geralmente são gerados por resolve_command.
exec_group string; or None; default = None
Executa a ação na plataforma de execução do grupo de execução especificado. Se não houver nenhuma, será usada a plataforma de execução padrão do destino.
shadowed_action Action; default = None
Executa a ação usando as entradas descobertas da ação sombreada adicionadas à lista de entradas da ação. Se nenhuma, usa apenas as entradas da ação.
resource_set callable; or None; default = None
Uma função de callback para estimar o uso de recursos se for executado localmente. Consulte ctx.actions.run().
toolchain Label; or string; or None; default = None

Tipo de cadeia de ferramentas do executável ou ferramentas usadas nesta ação. O parâmetro precisa ser definido para que a ação seja executada na plataforma de execução correta.

No momento, ele não faz nada, mas recomendamos que você o defina quando um conjunto de ferramentas for usado, porque ele será necessário nas próximas versões do Bazel.

A regra que cria essa ação precisa definir essa cadeia de ferramentas na função "rule()".

Quando os parâmetros "toolchain" e "exec_group" estiverem definidos, o "exec_group" será usado. Um erro é gerado caso o "exec_group" não especifique o mesmo conjunto de ferramentas.

None actions.symlink(output, target_file=None, target_path=None, is_executable=False, progress_message=None)

Cria uma ação que grava um link simbólico no sistema de arquivos.

Essa função precisa ser chamada com target_file ou target_path especificados.

Ao usar target_file, declare output com declare_file() ou declare_directory() e corresponda ao tipo de target_file. Isso faz com que o link simbólico aponte para target_file. O Bazel invalida a saída dessa ação sempre que o destino do link simbólico ou o conteúdo dele muda.

Caso contrário, quando você usar target_path, declare output com declare_symlink(). Nesse caso, o link simbólico aponta para target_path. O Bazel nunca resolve o link simbólico, e a saída dessa ação é invalidada apenas quando o conteúdo de texto do link simbólico (ou seja, o valor de readlink()) muda. Em particular, isso pode ser usado para criar um link simbólico pendente.

Parâmetros

Parâmetro Descrição
output required
O resultado dessa ação.
target_file File; or None; default = None
O arquivo para o qual o link simbólico de saída vai apontar.
target_path string; or None; default = None
(Experimental) O caminho exato para o qual o link simbólico de saída vai apontar. Nenhuma normalização ou outro processamento é aplicado. O acesso a esse recurso requer a configuração --experimental_allow_unresolved_symlinks.
is_executable default = False
Só pode ser usado com target_file, não target_path. Se verdadeiro, quando a ação for executada, o caminho do target_file será verificado para confirmar se ele é executável. Caso contrário, um erro será informado. Definir is_executable como "False" não significa que o destino não é executável, apenas que nenhuma verificação é feita.

Esse recurso não faz sentido para target_path porque links simbólicos soltos podem não existir no momento da criação.

progress_message string; or None; default = None
Mensagem de progresso a ser mostrada ao usuário durante o build.

template_dict

TemplateDict actions.template_dict()

Experimental. Essa API é experimental e pode mudar a qualquer momento. Não dependa disso. Ele pode ser ativado de forma experimental definindo --+experimental_lazy_template_expansion
Experimental: retorna um objeto TemplateDict para expansão de modelo com eficiência de memória.

gravação

None actions.write(output, content, is_executable=False)

Cria uma ação de gravação de arquivo. Quando a ação é executada, ela grava o conteúdo em um arquivo. Ele é usado para gerar arquivos com base nas informações disponíveis na fase de análise. Se o arquivo for grande e tiver muito conteúdo estático, use expand_template.

Parâmetros

Parâmetro Descrição
output obrigatório
O arquivo de saída.
content string; or Args; obrigatório
o conteúdo do arquivo. Pode ser uma string ou um objeto actions.args().
is_executable default = False
Define se o arquivo de saída precisa ser executável.