各 BEP イベントタイプには独自のセマンティクスがあり、build_event_stream.proto に最小限の記述があります。次の用語集では、各イベントタイプについて説明します。
中止
Aborted
イベントは他のタイプのイベントを置き換えるため、他のイベントとは異なり、対応する ID タイプがありません。このイベントは、ビルドが早期に終了し、その下に表示されるイベント ID が正常に生成されなかったことを示します。Aborted
には、ビルドが完了していない理由を説明する列挙型と、わかりやすい説明が含まれています。
たとえば、ユーザーが Bazel を中断したときにビルドがターゲットを評価している場合、BEP には次のようなイベントが含まれます。
{
"id": {
"targetCompleted": {
"label": "//:foo",
"configuration": {
"id": "544e39a7f0abdb3efdd29d675a48bc6a"
}
}
},
"aborted": {
"reason": "USER_INTERRUPTED"
}
}
ActionExecuted
ビルド内の特定のアクションの実行に関する詳細を提供します。デフォルトでは、このイベントは、ビルド失敗の根本原因の特定をサポートするために、失敗したアクションの場合にのみ BEP に含まれます。ユーザーは --build_event_publish_all_actions
フラグを設定してすべての ActionExecuted
イベントを含めることができます。
BuildFinished
コマンドが完了すると、単一の BuildFinished
イベントが送信され、コマンドの終了コードが含まれます。このイベントは、信頼できる成功/失敗情報を提供します。
BuildMetadata
--build_metadata
フラグの解析済みコンテンツが含まれます。このイベントは、外部データ(識別子など)をプルーニングして、Bazel と他のツールとの統合をサポートするために存在します。
BuildMetrics
各コマンドの最後に単一の BuildMetrics
イベントが送信されます。このイベントには、コマンド中のビルドツールの動作を定量化する際に有用なカウンタ/ゲージが含まれます。これらの指標は、実際に行われた作業を示します。キャッシュに保存された作業が再利用された場合、その作業はカウントされません。
コマンドの実行中に Java ガベージ コレクションが発生しなかった場合は、memory_metrics
にデータが入力されないことがあります。--memory_profile=/dev/null
オプションを設定すると、コマンドの最後にガベージ コレクタが強制的に実行され、memory_metrics
にデータを入力できます。
{
"id": {
"buildMetrics": {}
},
"buildMetrics": {
"actionSummary": {
"actionsExecuted": "1"
},
"memoryMetrics": {},
"targetMetrics": {
"targetsLoaded": "9",
"targetsConfigured": "19"
},
"packageMetrics": {
"packagesLoaded": "5"
},
"timingMetrics": {
"cpuTimeInMs": "1590",
"wallTimeInMs": "359"
}
}
}
BuildStarted
BEP ストリームの最初のイベントである BuildStarted
には、意味のある処理が開始される前にコマンドを記述するメタデータが含まれます。
BuildToolLogs
コマンドの最後に単一の BuildToolLogs
イベントが送信されます。これにはビルドツールによって生成されたファイルの URI が含まれます。これはビルドツールの動作の理解やデバッグに役立ちます。一部の情報はインラインで挿入できます。
{
"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
BEP には、すべてのコマンドライン引数(オプションと未解釈引数を含む)の表現を含む複数の CommandLine
イベントが含まれています。各 CommandLine
イベントの StructuredCommandLineId
には、どの表現を伝えるかを示すラベルがあります。BEP には、次のような 3 つのイベントが表示されます。
"original"
: Bazel が Bazel クライアントから受け取ったコマンドラインを再構築したもので、.rc ファイルから取得された起動オプションは含まれていません。"canonical"
: .rc ファイルが展開され、呼び出しポリシーが適用された有効なコマンドライン。"tool"
:--experimental_tool_command_line
オプションから入力されます。これは、BEP を介して Bazel をラップするツールのコマンドラインを伝達する場合に便利です。これは、直接使用される Base64 エンコードのCommandLine
バイナリ プロトコル バッファ メッセージ、または解析されるが解釈されない文字列(ツールのオプションが Bazel のオプションと異なる可能性があるため)のいずれかです。
構成
Configuration
イベントは、ビルドのトップレベル ターゲットで使用される configuration
ごとに送信されます。少なくとも 1 つの構成イベントが常に存在します。id
は TargetConfigured
イベント ID と TargetComplete
イベント ID で再利用され、マルチ構成ビルドでこれらのイベントのあいまいさを排除するために必要です。
{
"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_convenience_symlinks_bep_event
オプションが設定されている場合、build
コマンドによって単一の ConvenienceSymlinksIdentified
イベントが生成され、ワークスペース内のシンボリック リンクの管理方法が示されます。これにより、Bazel をリモートで呼び出し、Bazel をローカルで実行しているかのようにローカル ワークスペースを配置するツールのビルドが可能になります。
{
"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"
}
]
}
}
フェッチ
コマンド実行の一環として取得オペレーションが発生したことを示します。他のイベントとは異なり、キャッシュに保存された取得結果が再利用された場合、このイベントは BEP ストリームに表示されません。
NamedSetOfFiles
NamedSetOfFiles
イベントは、コマンドの評価中に生成されたファイルの depset
に一致する構造を報告します。循環的に含まれる depset は NamedSetOfFilesId
で識別されます。
ストリームの NamedSetOfFiles
イベントの解釈の詳細については、BEP の例のページをご覧ください。
OptionsParsed
1 つの OptionsParsed
イベントには、コマンドに適用されるすべてのオプションが一覧表示されます。起動オプションとコマンド オプションは区別されます。また、InvocationPolicy がある場合はこれも含まれます。
{
"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",
"--expand_configs_in_place",
"--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
PatternExpanded
イベントは、コマンドラインで指定されたパターンに一致するすべてのターゲットのセットを示します。コマンドが成功すると、PatternExpandedId
内のすべてのパターンと PatternExpanded
イベントの子のすべてのターゲットを含む 1 つのイベントが表示されます。パターンが任意の test_suite
に展開されると、test_suite
に含まれるテスト ターゲットのセットになります。解決できなかったパターンごとに、BEP にはパターンを識別する PatternExpandedId
を含む Aborted
イベントが追加されます。
{
"id": {
"pattern": {
"pattern":["//base:all"]
}
},
"children": [
{"targetConfigured":{"label":"//base:foo"}},
{"targetConfigured":{"label":"//base:foobar"}}
],
"expanded": {
"testSuiteExpansions": {
"suiteLabel": "//base:suite",
"testLabels": "//base:foo_test"
}
}
}
進行状況
進行状況イベントには、コマンドの実行中に Bazel によって生成された標準出力と標準エラーが含まれます。これらのイベントは、論理的な「親」イベント(特に NamedSetOfFiles)によって通知されなかったイベントを通知するために、必要に応じて自動生成されます。
TargetComplete
実行フェーズを完了する (target, configuration, aspect)
の組み合わせごとに、BEP に TargetComplete
イベントが含まれます。このイベントには、ターゲットの成功 / 失敗と、ターゲットがリクエストした出力グループが含まれます。
{
"id": {
"targetCompleted": {
"label": "//examples/py:bep",
"configuration": {
"id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
}
}
},
"completed": {
"success": true,
"outputGroup": [
{
"name": "default",
"fileSets": [
{
"id": "0"
}
]
}
]
}
}
TargetConfigured
分析フェーズを完了したターゲットごとに、BEP に TargetConfigured
イベントが含まれます。これは、ターゲットの「ルールの種類」属性の信頼できるソースです。ターゲットに適用された設定は、イベントの宣言された子に表示されます。
たとえば、--experimental_multi_cpu
オプションを使用してビルドすると、2 つの構成を持つ単一のターゲットに対して次の TargetConfigured
イベントが生成される場合があります。
{
"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
実行される (target, configuration)
ペアごとに、TargetSummary
イベントが含まれ、構成されたターゲットの実行と、その構成されたターゲットに適用されるすべての側面を含む成功結果の集計が含まれます。
TestResult
テストがリクエストされると、テストの試行ごとに TestResult
イベントが送信され、テストごとにシャードされ、実行されます。これにより、BEP コンシューマは、どのテストアクションがテストで失敗したかを正確に特定し、各テストアクションのテスト出力(ログ、test.xml ファイルなど)を特定できます。
TestSummary
テストがリクエストされた場合、テスト (target,
configuration)
ごとに TestSummary
イベントが送信されます。このイベントには、テスト結果の解釈に必要な情報が含まれます。BEP コンシューマーがこれらのディメンション間でアーティファクトを区別できるように、テストあたりの試行回数、シャード数、実行回数が含まれています。FLAKY
テストと FAILED
テストを区別するために集計 TestStatus
を生成する際に、テストごとの試行と実行が考慮されます。
UnstructuredCommandLine
CommandLine とは異なり、このイベントは、すべての .bazelrc
ファイルを展開し、--config
フラグを考慮した後、ビルドツールで検出された未解析のコマンドライン フラグを文字列形式で伝播します。
UnstructuredCommandLine
イベントを使用すると、特定のコマンド実行を正確に再現できます。
WorkspaceConfig
1 つの WorkspaceConfig
イベントには、ワークスペースに関する構成情報(実行ルートなど)が含まれます。
WorkspaceStatus
1 つの WorkspaceStatus
イベントには、ワークスペース ステータス コマンドの結果が含まれます。