واژه نامه پروتکل رویداد را بسازید

هر نوع رویداد BEP معنایی خاص خود را دارد که حداقل در build_event_stream.proto مستند شده است. واژه نامه زیر هر نوع رویداد را توصیف می کند.

سقط شد

برخلاف سایر رویدادها، Aborted نوع شناسه مربوطه ندارد، زیرا رویداد Aborted جایگزین رویدادهای انواع دیگر می شود. این رویداد نشان می دهد که ساخت زودتر خاتمه یافته است و شناسه رویدادی که در آن ظاهر می شود به طور معمول تولید نشده است. Aborted حاوی توضیحاتی برای انسان دوستانه و فهرستی است تا توضیح دهد که چرا ساخت کامل نشده است.

به عنوان مثال، اگر یک بیلد زمانی که کاربر Bazel را قطع می کند، هدفی را ارزیابی می کند، BEP حاوی رویدادی مانند زیر است:

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

ActionExecuted

جزئیات مربوط به اجرای یک Action خاص در یک ساخت را ارائه می دهد. به‌طور پیش‌فرض، این رویداد فقط برای اقدامات ناموفق در BEP گنجانده شده است تا از شناسایی علت اصلی خرابی‌های ساخت پشتیبانی کند. کاربران می‌توانند پرچم --build_event_publish_all_actions را طوری تنظیم کنند که همه رویدادهای ActionExecuted را شامل شود.

ساخت به پایان رسید

یک رویداد BuildFinished پس از کامل شدن دستور ارسال می‌شود و شامل کد خروج فرمان است. این رویداد اطلاعات معتبر موفقیت/شکست را ارائه می دهد.

BuildMetadata

حاوی محتوای تجزیه شده پرچم --build_metadata است. این رویداد برای پشتیبانی از ادغام Bazel با ابزارهای دیگر توسط لوله کشی داده های خارجی (مانند شناسه ها) وجود دارد.

BuildMetrics

یک رویداد BuildMetrics در انتهای هر فرمان ارسال می‌شود و شامل شمارنده‌ها/سنج‌هایی است که برای کمی کردن رفتار ابزار ساخت در طول فرمان مفید هستند. این معیارها کار واقعی انجام شده را نشان می‌دهند و کارهای ذخیره‌شده‌ای را که مجدداً استفاده می‌شوند، حساب نمی‌کنند.

توجه داشته باشید که اگر در طول اجرای دستور جمع آوری زباله جاوا وجود نداشته باشد، 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"
    }
  }
}

ساخت شروع شد

اولین رویداد در جریان 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"
      }
    ]
  }
}

خط فرمان

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"
    }
  }
}

ConvenienceSymlinksIdentified

تجربی. اگر گزینه --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"
      }
    ]
  }
}

رفتن و آوردن

نشان می دهد که عملیات Fetch به عنوان بخشی از اجرای دستور رخ داده است. برخلاف سایر رویدادها، اگر یک نتیجه واکشی کش شده مجدداً استفاده شود، این رویداد در جریان BEP ظاهر نمی شود.

NamedSetOfFiles

رویدادهای NamedSetOfFiles را گزارش می‌کنند که با یک depset فایل‌های تولید شده در طول ارزیابی فرمان مطابقت دارد. Depset های انتقالی با NamedSetOfFilesId شناسایی می شوند.

برای اطلاعات بیشتر در مورد تفسیر رویدادهای NamedSetOfFiles یک جریان، به صفحه مثال های BEP مراجعه کنید.

OptionsParsed

یک رویداد 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": {}
  }
}

Pattern Expanded

رویدادهای 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 ممکن است رویداد 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 متمایز شوند.

Unstructured CommandLine

برخلاف CommandLine ، این رویداد پرچم‌های خط فرمان تجزیه‌نشده را به شکل رشته‌ای حمل می‌کند، همانطور که ابزار ساخت پس از گسترش همه فایل‌های .bazelrc . و در نظر گرفتن پرچم --config با آن مواجه می‌شود.

رویداد UnstructuredCommandLine ممکن است برای بازتولید دقیق اجرای دستور معین مورد اتکا قرار گیرد.

WorkspaceConfig

یک رویداد WorkspaceConfig حاوی اطلاعات پیکربندی مربوط به فضای کاری، مانند ریشه اجرا است.

وضعیت فضای کاری

یک رویداد WorkspaceStatus منفرد حاوی نتیجه فرمان وضعیت فضای کاری است .