Cada tipo de evento BEP tiene su propia semántica, que se documenta mínimamente en build_event_stream.proto. En el siguiente glosario, se describe cada tipo de evento.
Anulado
A diferencia de otros eventos, Aborted no tiene un tipo de ID correspondiente, ya que
el evento Aborted reemplaza eventos de otros tipos. Este evento indica que
la compilación finalizó antes de tiempo y que el ID de evento en el que aparece no se produjo
de forma normal. Aborted contiene una enumeración y una descripción fácil de usar para explicar
por qué no se completó la compilación.
Por ejemplo, si una compilación evalúa un destino cuando el usuario interrumpe Bazel, BEP contiene un evento como el siguiente:
{
"id": {
"targetCompleted": {
"label": "//:foo",
"configuration": {
"id": "544e39a7f0abdb3efdd29d675a48bc6a"
}
}
},
"aborted": {
"reason": "USER_INTERRUPTED"
}
}
ActionExecuted
Proporciona detalles sobre la ejecución de una acción específica
Acción en una compilación. De forma predeterminada, este evento se
incluye en el BEP solo para las acciones fallidas, para ayudar a identificar la causa raíz
de las fallas de compilación. Los usuarios pueden establecer la marca --build_event_publish_all_actions
para incluir todos los ActionExecuted eventos.
BuildFinished
Se envía un solo evento BuildFinished después de que se completa el comando y
se incluye el código de salida del comando. Este evento proporciona información autorizada sobre el éxito o el fracaso.
BuildMetadata
Contiene el contenido analizado de la marca --build_metadata. Este evento existe
para admitir la integración de Bazel con otras herramientas mediante la canalización de datos externos (como
identificadores).
BuildMetrics
Se envía un solo evento BuildMetrics al final de cada comando y se incluyen
contadores o indicadores útiles para cuantificar el comportamiento de la herramienta de compilación durante el
comando. Estas métricas indican el trabajo realizado y no cuentan el trabajo almacenado en caché
que se reutiliza.
Ten en cuenta que es posible que memory_metrics no se propague si no hubo recolección de elementos no utilizados de Java durante la ejecución del comando. Los usuarios pueden establecer la opción
--memory_profile=/dev/null, que obliga al recolector de elementos no utilizados a ejecutarse al final del comando para propagar memory_metrics.
{
"id": {
"buildMetrics": {}
},
"buildMetrics": {
"actionSummary": {
"actionsExecuted": "1"
},
"memoryMetrics": {},
"targetMetrics": {
"targetsLoaded": "9",
"targetsConfigured": "19"
},
"packageMetrics": {
"packagesLoaded": "5"
},
"timingMetrics": {
"cpuTimeInMs": "1590",
"wallTimeInMs": "359"
}
}
}
BuildStarted
El primer evento en una transmisión BEP, BuildStarted incluye metadatos que describen el
comando antes de que comience cualquier trabajo significativo.
BuildToolLogs
Se envía un solo evento BuildToolLogs al final de un comando, incluidos los URIs
de los archivos generados por la herramienta de compilación que pueden ayudar a comprender o depurar
el comportamiento de la herramienta de compilación. Es posible que se incluya información intercalada.
{
"id": {
"buildToolLogs": {}
},
"lastMessage": true,
"buildToolLogs": {
"log": [
{
"name": "elapsed time",
"contents": "MC4xMjEwMDA="
},
{
"name": "process stats",
"contents": "MSBwcm9jZXNzOiAxIGludGVybmFsLg=="
},
{
"name": "command.profile.gz",
"uri": "file:///tmp/.cache/bazel/_bazel_foo/cde87985ad0bfef34eacae575224b8d1/command.profile.gz"
}
]
}
}
CommandLine
El BEP contiene varios eventos CommandLine que contienen representaciones de todos los argumentos de la línea de comandos (incluidas las opciones y los argumentos no interpretados).
Cada evento CommandLine tiene una etiqueta en su StructuredCommandLineId que
indica qué representación transmite; tres de esos eventos aparecen en el BEP:
"original": Línea de comandos reconstruida cuando Bazel la recibió del cliente de Bazel, sin opciones de inicio provenientes de archivos .rc."canonical": La línea de comandos efectiva con archivos .rc expandidos y la política de invocación aplicada."tool": Se propaga desde la opción--experimental_tool_command_line. Esto es útil para transmitir la línea de comandos de una herramienta que une Bazel a través del BEP. Podría ser un mensaje de búfer de protocolo binarioCommandLinecodificado en base64 que se usa directamente o una cadena que se analiza, pero no se interpreta (ya que las opciones de la herramienta pueden diferir de las de Bazel).
Configuration
Se envía un evento Configuration para cada configuration
que se usa en los destinos de nivel superior en una compilación. Al menos un evento de configuración siempre estará presente. El id se reutiliza en los IDs de evento TargetConfigured y
TargetComplete y es necesario para desambiguar esos eventos en
compilaciones de varias configuraciones.
{
"id": {
"configuration": {
"id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
}
},
"configuration": {
"mnemonic": "k8-fastbuild",
"platformName": "k8",
"cpu": "k8",
"makeVariable": {
"COMPILATION_MODE": "fastbuild",
"TARGET_CPU": "k8",
"GENDIR": "bazel-out/k8-fastbuild/bin",
"BINDIR": "bazel-out/k8-fastbuild/bin"
}
}
}
ConvenienceSymlinksIdentified
Experimental. Si se establece la --experimental_convenience_symlinks_bep_event
opción, los comandos
build producen un solo evento ConvenienceSymlinksIdentified para indicar cómo se deben administrar los vínculos simbólicos en el espacio de trabajo.
Esto permite crear herramientas que invocan Bazel de forma remota y, luego, organizan el
espacio de trabajo local como si Bazel se hubiera ejecutado de forma local.
{
"id": {
"convenienceSymlinksIdentified":{}
},
"convenienceSymlinksIdentified": {
"convenienceSymlinks": [
{
"path": "bazel-bin",
"action": "CREATE",
"target": "execroot/google3/bazel-out/k8-fastbuild/bin"
},
{
"path": "bazel-genfiles",
"action": "CREATE",
"target": "execroot/google3/bazel-out/k8-fastbuild/genfiles"
},
{
"path": "bazel-out",
"action": "CREATE",
"target": "execroot/google3/bazel-out"
}
]
}
}
Recuperar
Indica que se produjo una operación de recuperación como parte de la ejecución del comando. A diferencia de otros eventos, si se vuelve a usar un resultado de recuperación almacenado en caché, este evento no aparece en la transmisión BEP.
NamedSetOfFiles
Los eventos NamedSetOfFiles informan una estructura que coincide con un
depset de archivos producidos durante la evaluación del comando.
Los depsets incluidos de forma transitiva se identifican con NamedSetOfFilesId.
Para obtener más información sobre la interpretación de los eventos NamedSetOfFiles de una transmisión, consulta la
página de ejemplos de BEP.
OptionsParsed
Un solo evento OptionsParsed enumera todas las opciones aplicadas al comando,
separando las opciones de inicio de las opciones de comando. También incluye la
InvocationPolicy, si corresponde.
{
"id": {
"optionsParsed": {}
},
"optionsParsed": {
"startupOptions": [
"--max_idle_secs=10800",
"--noshutdown_on_low_sys_mem",
"--connect_timeout_secs=30",
"--output_user_root=/tmp/.cache/bazel/_bazel_foo",
"--output_base=/tmp/.cache/bazel/_bazel_foo/a61fd0fbee3f9d6c1e30d54b68655d35",
"--deep_execroot",
"--idle_server_tasks",
"--write_command_log",
"--nowatchfs",
"--nofatal_event_bus_exceptions",
"--nowindows_enable_symlinks",
"--noclient_debug",
],
"cmdLine": [
"--enable_platform_specific_config",
"--build_event_json_file=/tmp/bep.json"
],
"explicitCmdLine": [
"--build_event_json_file=/tmp/bep.json"
],
"invocationPolicy": {}
}
}
PatternExpanded
Los eventos PatternExpanded indican el conjunto de todos los destinos que coinciden con los patrones
proporcionados en la línea de comandos. Para los comandos exitosos, hay un solo evento
con todos los patrones en el PatternExpandedId y todos los destinos en el
PatternExpanded evento's elementos secundarios. Si el patrón se expande a cualquier
test_suites el conjunto de destinos de prueba incluidos por el test_suite. Para cada
patrón que no se resuelve, BEP contiene un Aborted
evento adicional con un PatternExpandedId que identifica el patrón.
{
"id": {
"pattern": {
"pattern":["//base:all"]
}
},
"children": [
{"targetConfigured":{"label":"//base:foo"}},
{"targetConfigured":{"label":"//base:foobar"}}
],
"expanded": {
"testSuiteExpansions": {
"suiteLabel": "//base:suite",
"testLabels": "//base:foo_test"
}
}
}
Progreso
Los eventos de progreso contienen la salida estándar y el error estándar que produce Bazel durante la ejecución del comando. Estos eventos también se generan automáticamente según sea necesario para anunciar eventos que no se anunciaron con un evento "superior" lógico (en particular, NamedSetOfFiles).
TargetComplete
Para cada combinación (target, configuration, aspect) que completa la
fase de ejecución, se incluye un evento TargetComplete en BEP. El evento contiene
el éxito o el fracaso del destino y los grupos de resultados solicitados del destino.
{
"id": {
"targetCompleted": {
"label": "//examples/py:bep",
"configuration": {
"id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
}
}
},
"completed": {
"success": true,
"outputGroup": [
{
"name": "default",
"fileSets": [
{
"id": "0"
}
]
}
]
}
}
TargetConfigured
Para cada destino que completa la fase de análisis, se incluye un evento TargetConfigured en BEP. Esta es la fuente autorizada para el atributo "tipo de regla"
de un destino. Las configuraciones aplicadas al destino aparecen en los elementos secundarios anunciados
del evento.
Por ejemplo, la compilación con las opciones --experimental_multi_cpu puede producir
el siguiente evento TargetConfigured para un solo destino con dos
configuraciones:
{
"id": {
"targetConfigured": {
"label": "//starlark_configurations/multi_arch_binary:foo"
}
},
"children": [
{
"targetCompleted": {
"label": "//starlark_configurations/multi_arch_binary:foo",
"configuration": {
"id": "c62b30c8ab7b9fc51a05848af9276529842a11a7655c71327ade26d7c894c818"
}
}
},
{
"targetCompleted": {
"label": "//starlark_configurations/multi_arch_binary:foo",
"configuration": {
"id": "eae0379b65abce68d54e0924c0ebcbf3d3df26c6e84ef7b2be51e8dc5b513c99"
}
}
}
],
"configured": {
"targetKind": "foo_binary rule"
}
}
TargetSummary
Para cada par (target, configuration) que se ejecuta, se incluye un evento TargetSummary
con un resultado de éxito agregado que abarca la ejecución del destino configurado
y todos los aspectos aplicados a ese destino configurado.
TestResult
Si se solicita la prueba, se envía un evento TestResult para cada intento de prueba,
fragmento y ejecución por prueba. Esto permite que los consumidores de BEP identifiquen con precisión qué
acciones de prueba fallaron en sus pruebas y los resultados de la prueba (como registros,
archivos test.xml) para cada acción de prueba.
TestSummary
Si se solicita la prueba, se envía un evento TestSummary para cada prueba (target,
configuration), que contiene la información necesaria para interpretar los resultados de la prueba. Se incluye la cantidad de intentos, fragmentos y ejecuciones por prueba para permitir que los consumidores de BEP diferencien los artefactos en estas dimensiones. Se consideran los intentos
y las ejecuciones por prueba mientras se produce el TestStatus para
diferenciar las pruebas FLAKY de las pruebas FAILED.
UnstructuredCommandLine
A diferencia de CommandLine, este evento incluye las marcas de línea de comandos no analizadas en forma de cadena, tal como las encontró la herramienta de compilación después de expandir todos los archivos .bazelrc y considerar la marca --config.
Se puede confiar en el evento UnstructuredCommandLine para reproducir con precisión una
ejecución de comando determinada.
WorkspaceConfig
Un solo evento WorkspaceConfig contiene información de configuración sobre el
espacio de trabajo, como la raíz de ejecución.
WorkspaceStatus
Un solo evento WorkspaceStatus contiene el resultado del comando estado del espacio de trabajo.