ビルド イベント プロトコルに関する用語集

各 BEP イベントタイプには独自のセマンティクスがあり、 build_event_stream.protoに最小限のドキュメントが記載されています。 次の用語集では、各イベントタイプについて説明します。

中止

他のイベントとは異なり、Aborted には対応する ID タイプがありません。これは、 Aborted イベントが他のタイプのイベントを 置き換えるためです。このイベントは、 ビルドが途中で終了し、表示されているイベント ID が正常に生成されなかったことを示します。 Aborted には、ビルドが完了しなかった理由を説明する列挙型とわかりやすい説明が含まれています。

たとえば、ユーザーが Bazel を中断したときにビルドがターゲットを評価している場合、 BEP には次のようなイベントが含まれます。

{
  "id": {
    "targetCompleted": {
      "label": "//:foo",
      "configuration": {
        "id": "544e39a7f0abdb3efdd29d675a48bc6a"
      }
    }
  },
  "aborted": {
    "reason": "USER_INTERRUPTED"
  }
}

ActionExecuted

ビルド内の特定の アクションの実行に関する詳細を提供します。デフォルトでは、このイベントは ビルドの失敗の根本原因 を特定できるように、失敗したアクションに対してのみ BEP に含まれます。ユーザーは --build_event_publish_all_actions フラグ を設定して、すべての ActionExecuted イベントを含めることができます。

BuildFinished

コマンドが完了すると、1 つの BuildFinished イベントが送信され、 コマンドの終了コードが含まれます。このイベントは、信頼できる 成功/失敗に関する情報を提供します。

BuildMetadata

--build_metadata フラグの解析済みコンテンツが含まれます。このイベントは、外部データ( 識別子など)をパイプライン処理することで、Bazel と他のツールとの統合をサポートするために存在します。

BuildMetrics

すべてのコマンドの最後に 1 つの 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

コマンドの最後に 1 つの 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 オプションから入力されます。これは、Bazel をラップするツールのコマンドラインを BEP を介して伝達するのに役立ちます。これは、直接使用される base64 エンコードされた CommandLine バイナリ プロトコル バッファ メッセージ 、または解析されるが解釈されない文字列(ツールのオプションが Bazel のオプションと異なる場合があるため)です。

構成

ビルドの最上位ターゲットで使用される configuration ごとに Configuration イベントが送信されます。少なくとも 1 つの構成イベントが 常に存在します。idTargetConfiguredTargetComplete イベント 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 オプションが設定されている場合、1 つのConvenienceSymlinksIdentified イベントが build コマンドによって生成され、ワークスペース内のシンボリック リンクの管理方法が示されます。 これにより、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"
      }
    ]
  }
}

フェッチ

コマンド実行の一部として Fetch オペレーションが発生したことを示します。 他のイベントとは異なり、キャッシュに保存されたフェッチ結果が再利用された場合、このイベントは BEP ストリームに 表示されません。

NamedSetOfFiles

NamedSetOfFiles イベントは、コマンド評価中に生成されたファイルの depsetに一致する構造を報告します。 推移的に含まれる depsets は 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",
      "--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 イベントの にすべてのターゲットが含まれる単一のイベントが存在します。パターンが test_suite に展開される場合は、test_suite に含まれるテスト ターゲットのセット。解決に失敗した パターンごとに、BEP にはパターンを識別する Aborted イベントと PatternExpandedId が含まれます。

{
  "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) の組み合わせごとに、TargetComplete イベントが BEP に含まれます。このイベントには、 ターゲットの成功/失敗と、ターゲットのリクエストされた出力グループが含まれます。

{
  "id": {
    "targetCompleted": {
      "label": "//examples/py:bep",
      "configuration": {
        "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
      }
    }
  },
  "completed": {
    "success": true,
    "outputGroup": [
      {
        "name": "default",
        "fileSets": [
          {
            "id": "0"
          }
        ]
      }
    ]
  }
}

TargetConfigured

分析フェーズを完了するターゲットごとに、TargetConfigured イベントが BEP に含まれます。これは、ターゲットの「ルールの種類」 属性の信頼できるソースです。ターゲットに適用される構成は、イベントのアナウンスされた に表示されます。

たとえば、--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 コンシューマーはこれらのディメンション間でアーティファクトを区別できます。集計 TestStatus を生成する際に、テストごとの試行回数 と実行回数が考慮され、 FLAKY テストと FAILED テストが区別されます。

UnstructuredCommandLine

CommandLine とは異なり、このイベントは、すべての .bazelrc ファイルを展開し、 --config フラグを考慮した後、ビルドツールによって検出された解析されていないコマンドライン フラグを文字列形式で伝達します。

UnstructuredCommandLine イベントを使用すると、a 特定のコマンド実行を正確に再現できます。

WorkspaceConfig

1 つの WorkspaceConfig イベントには、 ワークスペースに関する構成情報が含まれます。

WorkspaceStatus

1 つの WorkspaceStatus イベントには、ワークスペース ステータス コマンドの結果が含まれます。