لكل نوع من أحداث BEP دلالات خاصة به، على أن يتم توثيقها إلى حدٍ أدنى في build_event_stream.proto. يصف مسرد المصطلحات التالي كل نوع حدث.
تم الإلغاء
على عكس الأحداث الأخرى، لا يتوفّر نوع معرّف مقابل Aborted
لأنّ الفعالية Aborted
تحل محل أنواع أخرى. يشير هذا الحدث إلى أنّ
الإصدار قد تم إنهاؤه في وقت مبكر وأنّ معرّف الحدث الذي يظهر ضمنه لم يتم إنتاجه بشكل طبيعي. يتضمن Aborted
وصفًا تعداديًا ومناسبًا للبشر لتوضيح سبب عدم اكتمال الإصدار.
على سبيل المثال، إذا كان الإصدار يقيّم هدفًا عندما يقاطع المستخدم Bazel، يتضمن محتوى BEP حدثًا مثل ما يلي:
{
"id": {
"targetCompleted": {
"label": "//:foo",
"configuration": {
"id": "544e39a7f0abdb3efdd29d675a48bc6a"
}
}
},
"aborted": {
"reason": "USER_INTERRUPTED"
}
}
تم تنفيذ الإجراء
تقدّم تفاصيل حول تنفيذ إجراء معيّن في مبنى. يتم تضمين هذا الحدث تلقائيًا في
BEP فقط للإجراءات التي تعذّر تنفيذها، وذلك للمساعدة في تحديد السبب الأساسي
لتعذُّر الإصدار. يمكن للمستخدمين ضبط العلامة --build_event_publish_all_actions
لتضمين جميع أحداث ActionExecuted
.
تم الانتهاء من الإصدار
يتم إرسال حدث BuildFinished
واحد بعد اكتمال الأمر
ويشمل رمز الخروج للأمر. توفّر هذه الفعالية معلومات موثوقة
عن نجاح/تعذّر اجتياز الاختبار.
البيانات الوصفية للإصدار
تحتوي على محتوى تم تحليله للعلامة --build_metadata
. يهدف هذا الحدث إلى دعم دمج Bazel مع الأدوات الأخرى من خلال تشغيل البيانات الخارجية (مثل المعرّفات).
مقاييس الإصدار
يتم إرسال حدث BuildMetrics
واحد في نهاية كل أمر ويتضمّن
عدّادات/مقاييس مفيدة لقياس سلوك أداة الإصدار أثناء تنفيذ الأمر. تشير هذه المقاييس إلى العمل الذي تم تنفيذه فعليًا ولا تحتسب العمل المُخزَّن مؤقتًا الذي تمت إعادة استخدامه.
وتجدر الإشارة إلى أنّه قد لا تتم تعبئة memory_metrics
في حال عدم توفّر أي تجميع للبيانات غير المرغوب فيها في Java أثناء تنفيذ الأمر. يمكن للمستخدمين ضبط الخيار --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"
}
}
}
تم بدء التصميم
يتضمن الحدث الأول في بث BEP، BuildStarted
بيانات وصفية تصف
الأمر قبل بدء أي عمل مفيد.
سجلات LogTool
يتم إرسال حدث 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"
}
]
}
}
سطر الأوامر
يحتوي BEP على أحداث CommandLine
متعددة تحتوي على تمثيلات لجميع وسيطات سطر الأوامر (بما في ذلك الخيارات والوسيطات غير التفسيرية).
يحتوي كل حدث CommandLine
على تصنيف في StructuredCommandLineId
يوضّح التمثيل الذي يعبّر عنه، وتظهر ثلاثة أحداث من هذا النوع في تقرير BEP:
"original"
: تمت إعادة إنشاء سطر الأوامر بالطريقة التي استلم بها Bazel من برنامج Bazel، بدون خيارات بدء التشغيل من ملفات .rc."canonical"
: تم توسيع سطر الأوامر الفعّال باستخدام ملفات .rc، كما تم تطبيق سياسة الاستدعاء."tool"
: تتم التعبئة من الخيار--experimental_tool_command_line
يعدّ ذلك مفيدًا لتوضيح سطر الأوامر في أداة تغطي Bazel من خلال أداة BEP. يمكن أن تكون هذه الرسالة عبارة عن رسالة مؤقتة ببروتوكولCommandLine
مشفّرة بنظام Base64 ويتم استخدامها مباشرةً، أو سلسلة يتم تحليلها ولكن لا يتم تفسيرها (لأن خيارات الأداة قد تختلف عن Bazel').
عملية الإعداد
يتم إرسال الحدث Configuration
لكل configuration
مستخدَم في الأهداف ذات المستوى الأعلى في مبنى. هناك حدث إعداد واحد على الأقل
دائمًا. ويُعاد استخدام id
من خلال رقمَي تعريف الحدثَين TargetConfigured
وTargetComplete
، ويُعدّ ذلك ضروريًا للتفريق بين هذه الأحداث من خلال إصدارات متعدّدة الإعدادات.
{
"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"
}
}
}
معرّف المتاجر
تجريبية. إذا تم ضبط الخيار --experimental_convenience_symlinks_bep_event
يتم إنشاء حدث 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"
}
]
}
}
استدعاء
تشير إلى أنّ عملية جلب البيانات حدثت كجزء من تنفيذ الأمر. على عكس الأحداث الأخرى، إذا تمت إعادة استخدام نتيجة جلب مخزّنة مؤقتًا، لن يظهر هذا الحدث في ساحة مشاركات BEP.
NamedSetOfFiles
تسجّل أحداث NamedSetOfFiles
بنية تتطابق مع
depset
من الملفات التي يتم إنشاؤها أثناء تقييم الأمر.
يتم تحديد المجموعات الفرعية التي تم تضمينها بشكل مؤقت من قِبل NamedSetOfFilesId
.
لمزيد من المعلومات حول تفسير أحداث البث المباشر في NamedSetOfFiles
، يُرجى الاطّلاع على
صفحة أمثلة BEP.
خيارات تم تحليلها
يعرض حدث OptionsParsed
واحد جميع الخيارات المطبَّقة على الأمر، مع الفصل بين خيارات بدء التشغيل من خيارات الأوامر. ويتضمّن أيضًا
سياسة الاستدعاء، إن توفّرت.
{
"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
مجموعة كل الاستهدافات التي تتطابق مع الأنماط المتوفّرة في سطر الأوامر. بالنسبة إلى الأوامر الناجحة، يتم عرض حدث واحد
بجميع الأنماط في PatternExpandedId
وجميع الأهداف في
PatternExpanded
event's children. إذا تم توسيع النمط إلى أي
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 أثناء تنفيذ الأوامر. ويتم أيضًا إنشاء هذه الأحداث تلقائيًا حسب الحاجة للإعلان عن الأحداث التي لم يتم الإعلان عنها من خلال الحدث المنطقي "parent". (خصوصًا، NamedSetOfFiles.)
مكتملة
بالنسبة إلى كل تركيبة من (target, configuration, aspect)
تُكمل مرحلة التنفيذ، يتم تضمين حدث TargetComplete
في BEP. يحتوي الحدث على
مدى النجاح/التعذُّر على مستوى الهدف&39، ومجموعات الاستهداف المطلوبة.
{
"id": {
"targetCompleted": {
"label": "//examples/py:bep",
"configuration": {
"id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
}
}
},
"completed": {
"success": true,
"outputGroup": [
{
"name": "default",
"fileSets": [
{
"id": "0"
}
]
}
]
}
}
Targetconfig:
بالنسبة إلى كل هدف يُكمل مرحلة التحليل، يتم تضمين حدث TargetConfigured
في BEP. وهذا هو المصدر الموثوق للسمة target's "rule;"
. تظهر الإعدادات التي تم تطبيقها على الهدف في الأطفال المُعلنين عن الفعالية.
على سبيل المثال، قد يؤدي إنشاء الخيارات --experimental_multi_cpu
إلى إنشاء
حدث 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"
}
}
ملخّص الاستهداف
بالنسبة إلى كل زوج (target, configuration)
يتم تنفيذه، يتم تضمين
حدث TargetSummary
مع نتيجة نجاح مجمّعة تشمل تنفيذ الاستهداف المستهدف، بالإضافة إلى جميع الجوانب المطبّقة على هذا الهدف الذي تم ضبطه.
نتيجة الاختبار
إذا كان الاختبار مطلوبًا، يتم إرسال حدث TestResult
لكل محاولة اختبار وتقسيمه وتنفيذه لكل اختبار. يتيح ذلك لمستهلكي BEP تحديد إجراءات الاختبار التي تعذّر إجراؤها بدقة وتحديد مخرجات الاختبار (مثل السجلات، وملفات test.xml) لكل إجراء اختبار.
ملخّص الاختبار
وفي حال طلب إجراء اختبار، يتم إرسال حدث TestSummary
لكل (target,
configuration)
اختبار يحتوي على المعلومات اللازمة لتفسير نتائج الاختبار. تم تضمين عدد المحاولات والأجزاء وعمليات التشغيل لكل اختبار
لتمكين مستهلكي BEP من التمييز بين العناصر في كل أبعاد. ويتم أخذ المحاولات والعمليات لكل اختبار في الاعتبار أثناء إنتاج TestStatus
المجمّع للتمييز بين اختبارات FLAKY
واختبارَين (FAILED
).
سطر الأوامر غير المنظَّم
على عكس CommandLine، يحمل هذا الحدث علامات سطر الأوامر التي لم يتم تحليلها في نموذج السلسلة كما تظهر بواسطة أداة الإصدار بعد توسيع جميع ملفات .bazelrc
ومراعاة العلامة --config
.
قد يتم الاعتماد على الحدث UnstructuredCommandLine
لإعادة إنتاج تنفيذ الأمر المحدّد بدقة.
ضبط Workspace
يحتوي حدث WorkspaceConfig
واحد على معلومات الضبط حول مساحة العمل، مثل جذر التنفيذ.
حالة Workspace
يحتوي حدث WorkspaceStatus
واحد على نتيجة أمر حالة مساحة العمل.