Reglas
- alias
- config_setting
- grupo de archivos
- consulta de generación de demanda
- genrule
- starlark_doc_extract
- test_suite
alias
Ver el código fuente de la reglaalias(name, actual, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
La regla alias
crea otro nombre con el que se puede hacer referencia a una regla.
La asignación de alias solo funciona para “normal” objetivos. En particular, package_group
y test_suite
no pueden tener un alias.
La asignación de alias puede ser útil en repositorios grandes en los que cambiar el nombre de un objetivo requeriría cambios en muchos archivos. También puedes usar una regla de alias para almacenar un select si quieres reutilizar esa lógica para múltiples destinos.
La regla de alias tiene su propia declaración de visibilidad. En todos los demás aspectos, se comporta como la regla a la que hace referencia (p.ej., testonly en el alias se ignora; el testonly-ness de la regla a la que se hace referencia) con algunas excepciones menores:
-
Las pruebas no se ejecutan si su alias se menciona en la línea de comandos. Cómo definir un alias
que ejecute la prueba a la que se hace referencia, usa un
test_suite
. regla con un único destino en sutests
. -
Cuando se definen grupos de entornos, los alias de las reglas
environment
no son no es compatible. No se admiten en la línea de comandos de--target_environment
. la opción de protección de datos.
Ejemplos
filegroup( name = "data", srcs = ["data.txt"], ) alias( name = "other", actual = ":data", )
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
actual
|
Etiqueta; obligatorio. El objetivo al que hace referencia este alias. No necesita ser una regla, también puede ser una entrada . |
config_setting
Ver el código fuente de la reglaconfig_setting(name, constraint_values, define_values, deprecation, distribs, features, flag_values, licenses, tags, testonly, values, visibility)
Coincide con un estado de configuración esperado (expresado como marcas de compilación o restricciones de plataforma) para con el objetivo de activar atributos configurables. Consulta seleccionar para cómo consumir esta regla y Atributos configurables para obtener una descripción general de las funciones generales.
Ejemplos
La siguiente coincide con cualquier compilación que establezca --compilation_mode=opt
o
-c opt
(ya sea de forma explícita en la línea de comandos o implícitamente desde archivos .bazelrc):
config_setting( name = "simple", values = {"compilation_mode": "opt"} )
El siguiente coincide con cualquier compilación que se oriente a ARM y aplique la definición personalizada
FOO=bar
(por ejemplo, bazel build --cpu=arm --define FOO=bar ...
):
config_setting( name = "two_conditions", values = { "cpu": "arm", "define": "FOO=bar" } )
La siguiente coincide con cualquier compilación que establezca
marca definida por el usuario
--//custom_flags:foo=1
(ya sea de forma explícita en la línea de comandos o implícitamente desde
.bazelrc):
config_setting( name = "my_custom_flag_is_set", flag_values = { "//custom_flags:foo": "1" }, )
Lo siguiente coincide con cualquier compilación orientada a una plataforma con arquitectura x86_64 y glibc
versión 2.25, suponiendo la existencia de un constraint_value
con etiqueta
//example:glibc_2_25
Ten en cuenta que una plataforma coincide si define
restricciones más allá de estos dos.
config_setting( name = "64bit_glibc_2_25", constraint_values = [ "@platforms//cpu:x86_64", "//example:glibc_2_25", ] )En todos estos casos, es posible que la configuración cambie dentro de la compilación, por ejemplo, si un destino debe crearse para una plataforma distinta de la de su dependencia. Esto significa que, incluso cuando un
config_setting
no coincide con las marcas de línea de comandos de nivel superior; es posible que coincida de todas formas
algunos objetivos de compilación.
Notas
- Consulta seleccionar para saber qué sucede cuando varias
config_setting
coincide con el estado de configuración actual. - Para marcas que admiten formas abreviadas (p. ej.,
--compilation_mode
frente a-c
), las definiciones devalues
deben usar el formato completo. Estos se configuran automáticamente hacer coincidir las invocaciones con cualquiera de las dos formas. -
Si una marca toma varios valores (como
--copt=-Da --copt=-Db
o una etiqueta marca de Starlark),values = { "flag": "a" }
coincide si"a"
es presente en cualquier parte de la lista.values = { "myflag": "a,b" }
funciona de la misma manera: coincide con--myflag=a --myflag=b
,--myflag=a --myflag=b --myflag=c
--myflag=a,b
y--myflag=c,b,a
. La semántica exacta varía entre marcas. Por ejemplo,--copt
no admite varios valores en la misma instancia:--copt=a,b
produce["a,b"]
, mientras que--copt=a --copt=b
produce["a", "b"]
(por lo tanto,values = { "copt": "a,b" }
coincide con el primero, pero no con el último). Pero--ios_multi_cpus
(para las reglas de Apple) hace:-ios_multi_cpus=a,b
yios_multi_cpus=a --ios_multi_cpus=b
producen["a", "b"]
. Verifica las definiciones de las marcas y prueba condiciones con atención para verificar las expectativas exactas. - Si necesitas definir condiciones que no estén modeladas con marcas de compilación integradas, usa
Marcas definidas por Starlark. También puedes usar
--define
, pero este ofrece un valor más débil. asistencia y no se recomienda. Consulta aquí para obtener más información. - Evita repetir definiciones idénticas de
config_setting
en diferentes paquetes. En su lugar, haz referencia a unconfig_setting
común que se definió en un paquete canónico. values
,define_values
yconstraint_values
puede usarse en cualquier combinación en el mismoconfig_setting
, pero al menos uno debe se puede establecer para cualquierconfig_setting
.
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
constraint_values
|
Lista de etiquetas; no configurable; el valor predeterminado es constraint_values que debe especificar la plataforma de segmentación
para que coincidan con esta config_setting . (La plataforma de ejecución no es
considerado aquí). Se ignorará cualquier valor de restricción adicional que tenga la plataforma. Consulta
Atributos de compilación configurables para obtener más detalles.
En caso de que dos |
define_values
|
Diccionario: Cadena -> String; no configurable; el valor predeterminado es values , pero
específicamente para la marca --define .
Esto significa lo siguiente: config_setting( name = "a_and_b", values = { "define": "a=1", "define": "b=2", }) no funciona porque la misma tecla ( config_setting( name = "a_and_b", define_values = { "a": "1", "b": "2", }) coincide correctamente con
|
flag_values
|
Diccionario: label -> String; no configurable; el valor predeterminado es values , pero
para
marcas de compilación definidas por el usuario.
Este es un atributo distinto porque las marcas definidas por el usuario se referencian como etiquetas, mientras que se hace referencia a las marcas integradas como cadenas arbitrarias. |
values
|
Diccionario: Cadena -> String; no configurable; el valor predeterminado es Esta regla hereda la configuración del destino configurado que
hace referencia a él en una sentencia Para mayor comodidad, los valores de configuración se especifican como marcas de compilación (sin
el Si una marca no se establece de forma explícita en la línea de comandos, se usa su valor predeterminado.
Si una clave aparece varias veces en el diccionario, solo se usa la última instancia.
Si una clave hace referencia a una marca que se puede configurar varias veces en la línea de comandos (p.ej.,
|
grupo de archivos
Ver el código fuente de la reglafilegroup(name, srcs, data, compatible_with, deprecation, distribs, features, licenses, output_group, restricted_to, tags, target_compatible_with, testonly, visibility)
Usa filegroup
para asignar un nombre conveniente a una colección de destinos.
Luego, otras reglas pueden hacer referencia a ellas.
Se recomienda usar filegroup
en lugar de hacer referencia a directorios directamente.
Esta última opción no tiene buen sonido, ya que el sistema de compilación no tiene conocimientos completos de todos los archivos.
debajo del directorio, por lo que es posible que no se vuelva a compilar cuando cambien estos archivos. Cuando se combina con
glob, filegroup
puede garantizar que todos los archivos se
que el sistema de compilación conoce explícitamente.
Ejemplos
Para crear un filegroup
que conste de dos archivos de origen, haz lo siguiente:
filegroup( name = "mygroup", srcs = [ "a_file.txt", "some/subdirectory/another_file.txt", ], )
O bien, usa un glob
para agrupar un directorio testdata:
filegroup( name = "exported_testdata", srcs = glob([ "testdata/*.dat", "testdata/logs/**/*.log", ]), )
Para usar estas definiciones, haz referencia a filegroup
con una etiqueta de cualquier regla:
cc_library( name = "my_library", srcs = ["foo.cc"], data = [ "//my_package:exported_testdata", "//my_package:mygroup", ], )
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
srcs
|
Lista de etiquetas; el valor predeterminado es
Es común usar el resultado de una expresión glob para
el valor del atributo |
data
|
Lista de etiquetas; el valor predeterminado es
Los destinos nombrados en el atributo |
output_group
|
String; el valor predeterminado es Un "grupo de salida" es una categoría de artefactos de salida de un objetivo, especificada en ese implementación de la regla. |
consulta generativa
Ver el código fuente de la reglagenquery(name, deps, data, compatible_with, compressed_output, deprecation, distribs, exec_compatible_with, exec_properties, expression, features, licenses, opts, restricted_to, scope, strict, tags, target_compatible_with, testonly, visibility)
genquery()
ejecuta una consulta especificada en el archivo
Usa el lenguaje de consulta Blaze y vuelca el resultado.
en un archivo.
Para mantener la coherencia de la compilación, solo se permite que la consulta visite
el cierre transitivo de los objetivos especificados en el scope
. Las consultas que infrinjan esta regla fallarán durante la ejecución si
strict
no se especifica o es verdadero (si strict
es falso,
los objetivos fuera del alcance se omitirán con una advertencia). El
la forma más sencilla de asegurarse de que esto no suceda es mencionar las mismas etiquetas
en el alcance, como en la expresión de la consulta.
La única diferencia entre las consultas permitidas aquí y en el comando
es que las consultas que contienen especificaciones de destino comodín (p.ej.,
//pkg:*
o //pkg:all
) no se permiten aquí.
Esto se debe a dos aspectos: en primer lugar, porque genquery
tiene
para especificar un alcance para evitar objetivos fuera del cierre transitivo del
para influir en su resultado; y, en segundo lugar, porque archivos BUILD
No admiten dependencias de comodín (p. ej., deps=["//a/..."]
).
no se permite).
El resultado de genquery está ordenado de manera lexicográfica para aplicar un resultado determinista.
con la excepción de --output=graph|minrank|maxrank
o cuando somepath
se usa como la función de nivel superior.
El nombre del archivo de salida es el nombre de la regla.
Ejemplos
En este ejemplo, se escribe la lista de etiquetas en el cierre transitivo de la un destino especificado a un archivo.
genquery( name = "kiwi-deps", expression = "deps(//kiwi:kiwi_lib)", scope = ["//kiwi:kiwi_lib"], )
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
compressed_output
|
Booleano; el valor predeterminado es True , el resultado de la consulta se escribe en formato de archivo GZIP. Puedes usar este parámetro de configuración
para evitar los aumentos repentinos en el uso de memoria de Bazel cuando se espera que el resultado de la consulta sea grande. Bazel
ya comprime internamente los resultados de las consultas de más de 220 bytes, sin importar la
el valor de este parámetro de configuración, por lo que establecerlo en True quizás no reduzca la cantidad de
el montón. Sin embargo, permite que Bazel omita la descompresión cuando escribe el archivo de salida.
lo que puede consumir mucha memoria.
|
expression
|
String; obligatorio. La consulta que se ejecutará. A diferencia de la línea de comandos y otros lugares en los archivos BUILD, aquí las etiquetas se resuelven en relación con el directorio raíz del lugar de trabajo. Por ejemplo, el la etiqueta:b en este atributo en el archivo a/BUILD hará referencia al elemento
objetivo //:b .
|
opts
|
Lista de cadenas; el valor predeterminado es bazel query . Algunas opciones de consulta no están permitidas
aquí: --keep_going , --query_file , --universe_scope ,
--order_results y --order_output . Opciones no especificadas aquí
tendrá sus valores predeterminados, al igual que en la línea de comandos de bazel query .
|
scope
|
Lista de etiquetas; obligatorio. El alcance de la consulta. La consulta no tiene permitido el toque de objetivos táctiles fuera de la interfaz transitiva el cierre de estos objetivos. |
strict
|
Booleano; el valor predeterminado es |
genrule
Ver el código fuente de la reglagenrule(name, srcs, outs, cmd, cmd_bash, cmd_bat, cmd_ps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, executable, features, licenses, local, message, output_licenses, output_to_bindir, restricted_to, tags, target_compatible_with, testonly, toolchains, tools, visibility)
Una genrule
genera uno o más archivos con un comando Bash definido por el usuario.
Las genrules son reglas de compilación genéricas que puedes usar si no hay una regla específica para la tarea.
Por ejemplo, puedes ejecutar un mensaje de una sola línea en Bash. Sin embargo, si necesitas compilar archivos C++,
a las reglas existentes de cc_*
porque ya se hizo todo el trabajo pesado
por ti.
Ten en cuenta que genrule requiere una shell para interpretar el argumento del comando. También es fácil hacer referencia a programas arbitrarios disponibles en PATH, sin embargo, esto hace que el comando no es hermético y es posible que no se pueda reproducir. Si solo necesitas ejecutar una herramienta, considera usar run_binary en su lugar.
No uses una genrule para ejecutar pruebas. Existen dispensaciones especiales para pruebas
resultados, incluidas las políticas de almacenamiento en caché y las variables de entorno. Por lo general, las pruebas deben ejecutarse
después de que se completa la compilación y en la arquitectura de destino, mientras que las genrules se ejecutan durante
en la compilación y en la arquitectura exec (es posible que ambos sean diferentes). Si necesitas un perfil
regla de prueba, usa sh_test
.
Consideraciones sobre la compilación cruzada
Consulta el manual del usuario para obtener más información sobre compilación cruzada.
Si bien las genrules se ejecutan durante una compilación, sus resultados suelen usarse después de la compilación, para la implementación o y pruebas. Considera el ejemplo de compilación de código C para un microcontrolador: el compilador acepta C y genera código que se ejecuta en un microcontrolador. Obviamente, el código generado no se puede ejecutar en la CPU que se usó para compilarla, pero el compilador C (si se compiló desde el código fuente) debe hacerlo.
El sistema de compilación usa la configuración de ejecución para describir las máquinas en las que se ejecuta la compilación y la configuración de destino para describir las máquinas en las que se encuentra el resultado de la compilación que se suponía que debía ejecutarse. Proporciona opciones para configurar cada uno de ellos y segrega en directorios separados para evitar conflictos.
En el caso de las genrules, el sistema de compilación garantiza que las dependencias se compilen de forma correcta:
Se compilan srcs
(si es necesario) para la configuración de destino.
Los tools
se compilan para la configuración exec y se considera que el resultado
para la configuración de destino. También proporciona
"Marca" variables que los comandos de genrule pueden pasar a las herramientas correspondientes.
Genrule no define ningún atributo deps
de forma intencional; se usan otras reglas integradas
metainformación dependiente del idioma que se pasa entre las reglas para determinar automáticamente cómo
manejan reglas dependientes, pero este nivel de automatización no es posible para las genrules. Funcionan las reglas generales
solo a nivel de archivo y runfiles.
Casos especiales
Compilación Exec-exec: En algunos casos, el sistema de compilación debe ejecutar genrules para que la
El resultado final también se puede ejecutar durante la compilación. Si, por ejemplo, una genrule compila algún compilador personalizado
que luego usa otra genrule, la primera debe producir su salida para el
exec, ya que allí es donde se ejecutará el compilador en la otra genrule. En este caso,
el sistema de compilación hace lo correcto automáticamente: compila el srcs
y
outs
de la primera genrule para la configuración de ejecución en lugar del destino
configuración. Consulta el manual del usuario para obtener más información
información.
JDK y Herramientas de C++: Para usar una herramienta del JDK o el conjunto del compilador C++, el sistema de compilación proporciona un conjunto de variables para usar. Ver "Marca" variable para más detalles.
Entorno de Genrule
Una shell Bash configurada para fallar cuando se ejecuta un comando
o si falla una canalización, a través de set -e -o pipefail
.
La herramienta de compilación ejecuta el comando Bash en un entorno de procesos depurado que
define solo variables principales, como PATH
, PWD
,
TMPDIR
y algunos más.
Para garantizar que las compilaciones sean reproducibles, la mayoría de las variables definidas en la shell del usuario
no se pasan al comando de genrule. Sin embargo, Bazel (pero no
Blaze) pasa el valor de la variable de entorno PATH
del usuario.
Cualquier cambio en el valor de PATH
hará que Bazel vuelva a ejecutar el comando.
en la próxima compilación.
Un comando genrule no debe acceder a la red, excepto para conectar procesos que se elementos secundarios del comando, aunque actualmente esto no se aplica de manera forzosa.
El sistema de compilación borra automáticamente los archivos de salida existentes, pero crea los archivos superiores necesarios directorios antes de que ejecute una genrule. También quita todos los archivos de salida en caso de falla.
Consejos generales
- Asegúrate de que las herramientas ejecutadas por una genrule sean deterministas y herméticas. No deben escribir marcas de tiempo en su salida, y deben usar un orden estable para conjuntos y mapas, así como solo escribe rutas de acceso de archivo relativas al resultado, no rutas absolutas. Si no se sigue esta regla, genera un comportamiento de compilación inesperado (Bazel no vuelve a compilar una genrule que pensabas que podría tener) y degradar el rendimiento de la caché.
- Usa
$(location)
ampliamente para resultados, herramientas y fuentes. Debido a la de archivos de salida para diferentes configuraciones, genrules no puede depender de un código y/o rutas absolutas. - Escribe una macro de Starlark común en caso de que se usen genrules iguales o muy similares en varios lugares. Si la genrule es compleja, considera implementarla en una secuencia de comandos o como Regla de Estelaria. Esto mejora la legibilidad y la capacidad de prueba.
- Asegúrate de que el código de salida indique correctamente el éxito o el fracaso de la genrule.
- No escribas mensajes informativos en stdout ni stderr. Si bien es útil para la depuración, convertirse fácilmente en ruido; para que una genrule sea exitosa debe ser silenciosa. Por otro lado, una genrule con fallas debería emitir buenos mensajes de error.
$$
evaluates to a$
, a literal dollar-sign, so in order to invoke a shell command containing dollar-signs such asls $(dirname $x)
, one must escape it thus:ls $$(dirname $$x)
.- Evita crear symlinks y directorios. Bazel no copia el directorio o symlink. La estructura creada por genrules y su verificación de dependencias de directorios no son sólidas.
- Cuando hagas referencia a la genrule en otras reglas, podrás usar su etiqueta
las etiquetas de los archivos de salida individuales. A veces, el único enfoque es más legible
Otro: hacer referencia a los resultados por nombre en el
srcs
de una regla de consumo evitará Tomar involuntariamente otros resultados de la regla generativa, pero puede ser tedioso si esta produce muchas salidas.
Ejemplos
En este ejemplo, se genera foo.h
. No hay fuentes, porque el comando no toma
cualquier entrada. El "binario" que ejecuta el comando es una secuencia de comandos de Perl en el mismo paquete que genrule.
genrule( name = "foo", srcs = [], outs = ["foo.h"], cmd = "./$(location create_foo.pl) > \"$@\"", tools = ["create_foo.pl"], )
En el siguiente ejemplo, se muestra cómo usar un filegroup
y las salidas de otro genrule
. Ten en cuenta que usar $(SRCS)
en su lugar
de directivas $(location)
explícitas también funcionaría; este ejemplo usa el último para
el solo fin de la demostración.
genrule( name = "concat_all_files", srcs = [ "//some:files", # a filegroup with multiple files in it ==> $(locations) "//other:gen", # a genrule with a single output ==> $(location) ], outs = ["concatenated.txt"], cmd = "cat $(locations //some:files) $(location //other:gen) > $@", )
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. Puedes hacer referencia a esta regla por su nombre en la Sección srcs o deps de otros BUILD
las reglas de firewall. Si la regla genera archivos de origen, debes usar el
atributo srcs .
|
srcs
|
Lista de etiquetas; el valor predeterminado es
Estos atributos no son adecuados para enumerar las herramientas que ejecuta
El sistema de compilación garantiza que se compilen estos requisitos previos antes de ejecutar la regla general
comando; se compilan con la misma configuración que la solicitud de compilación original. El
los nombres de los archivos de estos requisitos están disponibles para el comando como
lista separada por espacios en |
outs
|
Lista de nombres de archivo; no configurable; obligatorio. Una lista de los archivos que genera esta regla.Los archivos de salida no deben cruzar los límites del paquete. Los nombres de los archivos de salida se interpretan como relativos al paquete.
Si se configura la marca
Se espera que el comando genrule cree cada archivo de salida en una ubicación predeterminada.
La ubicación está disponible en |
cmd
|
String; el valor predeterminado es $(location)
y "Marca" de variables.
cmd_bash , cmd_ps y cmd_bat .
si no corresponde ninguna de ellas.
Si la longitud de la línea de comandos supera el límite de la plataforma (64 K en Linux/macOS, 8K en Windows),
Luego, genrule escribirá el comando en una secuencia de comandos y la ejecutará para solucionar el problema. Esta
Se aplica a todos los atributos cmd ( |
cmd_bash
|
String; el valor predeterminado es Este atributo tiene mayor prioridad que |
cmd_bat
|
String; el valor predeterminado es Este atributo tiene mayor prioridad que
|
cmd_ps
|
String; el valor predeterminado es Este atributo tiene mayor prioridad que
Para que PowerShell sea más fácil de usar y menos propenso a errores, ejecutamos el siguiente comando: para configurar el entorno antes de ejecutar el comando de PowerShell en genrule.
|
executable
|
Booleano; no configurable; el valor predeterminado es
Si estableces esta marca como verdadera, el resultado es un archivo ejecutable y se podrá ejecutar mediante el
Comando No se admite la declaración de dependencias de datos para el ejecutable generado. |
local
|
Booleano; el valor predeterminado es
Si se establece como verdadera, esta opción obliga a que este
Esto equivale a proporcionar valores "locales" como etiqueta ( |
message
|
String; el valor predeterminado es
Un mensaje de progreso que se imprimirá a medida que se ejecute este paso de compilación. De forma predeterminada, el
el mensaje es “Generando un resultado” (o algo igualmente insólito), pero puedes proporcionar una
una más específica. Usar este atributo en lugar de |
output_licenses
|
Tipo de licencia; el valor predeterminado es common attributes
.
|
output_to_bindir
|
Booleano; no configurable; el valor predeterminado es
Si se establece como verdadera, esta opción hace que los archivos de salida se escriban en |
tools
|
Lista de etiquetas; el valor predeterminado es
El sistema de compilación garantiza que estos requisitos se compilen antes de ejecutar el comando genrule.
se compilan con el comando exec
configuración, ya que estas herramientas se ejecutan como parte de la compilación. La ruta de un
el objetivo individual de
Cualquier |
starlark_doc_extract
Ver el código fuente de la reglastarlark_doc_extract(name, deps, src, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, render_main_repo_name, restricted_to, symbol_names, tags, target_compatible_with, testonly, visibility)
starlark_doc_extract()
extrae la documentación de las reglas, las funciones (incluidas las
macros), aspectos y proveedores definidos o reexportados en una determinada .bzl
o
Archivo .scl
. El resultado de esta regla es un proto binario ModuleInfo
, como se define
en
stardoc_output.proto
en el árbol de fuentes de Bazel.
Destinos de salida implícitos
name.binaryproto
(el resultado predeterminado): A Archivo proto binarioModuleInfo
.name.textproto
(solo se compila si se solicita de manera explícita): Es el texto. versión proto dename.binaryproto
.
Advertencia: No se garantiza que el formato de salida de esta regla sea estable. Está destinado principalmente a uso interno por Stardoc.
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
deps
|
Lista de etiquetas; el valor predeterminado es load()
src En condiciones de uso normal, estos objetivos deben
bzl_library
destinos, pero la regla starlark_doc_extract no lo aplica y acepta
cualquier destino que proporcione archivos de Starlark en su DefaultInfo .
Ten en cuenta que los archivos de Starlark unidos deben estar en el árbol de fuentes. Bazel no puede
|
src
|
Etiqueta; obligatorio. Un archivo de Starlark del que se extrae la documentación.Ten en cuenta que debe ser un archivo en el árbol de fuentes. Bazel no puede |
render_main_repo_name
|
Booleano; el valor predeterminado es //foo:bar.bzl se emitirá como
@main_repo_name//foo:bar.bzl ).
El nombre que se usará para el repositorio principal se obtiene de Este atributo se debe establecer en |
symbol_names
|
Lista de cadenas; el valor predeterminado es
|
test_suite
Ver el código fuente de la reglatest_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, tests, visibility)
Un test_suite
define un conjunto de pruebas que se consideran "útiles" a los humanos. Esta
permite que los proyectos definan conjuntos de pruebas, como “pruebas que debes ejecutar antes del registro”, “nuestro
pruebas de esfuerzo del proyecto" o "todas las pruebas pequeñas". El comando blaze test
respeta este orden.
de la organización: para una invocación como blaze test //some/test:suite
, Blaze primero
enumera todos los objetivos de prueba incluidos transitivamente en el objetivo //some/test:suite
(se
denominada "expansión del paquete de prueba"), luego Blaze compila y prueba esos objetivos.
Ejemplos
Un conjunto de pruebas para ejecutar todas las pruebas de nivel inferior en el paquete actual.
test_suite( name = "small_tests", tags = ["small"], )
Un paquete de pruebas que ejecuta un conjunto específico de pruebas:
test_suite( name = "smoke_tests", tests = [ "system_unittest", "public_api_unittest", ], )
Un conjunto de pruebas para ejecutar todas las pruebas que no sean inestables en el paquete actual.
test_suite( name = "non_flaky_test", tags = ["-flaky"], )
Argumentos
Atributos | |
---|---|
name |
Nombre: obligatorio. Un nombre único para este destino. |
tags
|
Lista de cadenas; no configurable; el valor predeterminado es Etiquetas que comienzan con “-” se consideran etiquetas negativas. El "-" anterior carácter no se considera parte de la etiqueta, por lo que una etiqueta de paquete de “-small” coincide con el valor “pequeño” de una prueba de tamaño del ensamble. Todas las demás etiquetas se consideran con etiquetas positivas. De manera opcional, para que las etiquetas positivas sean más explícitas, las etiquetas también pueden comenzar con el "+" que no se evaluará como parte del texto de la etiqueta. Integra solo hace que la distinción entre positiva y negativa sea más fácil de leer. Probar solo las reglas que coincidan con todas las etiquetas positivas y ninguna de las negativas las etiquetas se incluirán en el paquete de pruebas. Ten en cuenta que esto no significa que la comprobación de errores en el caso de las dependencias de pruebas filtradas; las dependencias Las pruebas también deben ser legales (p.ej., no deben estar bloqueadas por restricciones de visibilidad).
La palabra clave de la etiqueta
Ten en cuenta que el
Si necesitas un |
tests
|
Lista de etiquetas; no configurable; el valor predeterminado es
Aquí se acepta cualquier
Si no se especifica el atributo |