ইভেন্ট প্রোটোকল শব্দকোষ তৈরি করুন

প্রতিটি BEP ইভেন্ট টাইপের নিজস্ব শব্দার্থ আছে, ন্যূনতমভাবে build_event_stream.proto এ নথিভুক্ত করা হয়েছে। নিম্নলিখিত শব্দকোষ প্রতিটি ইভেন্টের ধরন বর্ণনা করে।

বাতিল করা হয়েছে

অন্যান্য ইভেন্টের বিপরীতে, Aborted এর কোনো সংশ্লিষ্ট ID টাইপ নেই, কারণ Aborted ইভেন্ট অন্যান্য ধরনের ইভেন্টকে প্রতিস্থাপন করে। এই ইভেন্টটি নির্দেশ করে যে বিল্ডটি তাড়াতাড়ি বন্ধ হয়ে গেছে এবং এটির অধীনে প্রদর্শিত ইভেন্ট আইডি সাধারণত তৈরি করা হয়নি। বিল্ডটি কেন সম্পূর্ণ হয়নি তা ব্যাখ্যা করার জন্য Aborted এ একটি enum এবং মানব-বান্ধব বর্ণনা রয়েছে।

উদাহরণস্বরূপ, ব্যবহারকারী যখন ব্যাজেলকে বাধা দেয় তখন যদি একটি বিল্ড একটি লক্ষ্য মূল্যায়ন করে, BEP নিম্নলিখিতগুলির মতো একটি ইভেন্ট ধারণ করে:

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

অ্যাকশন সম্পাদিত

একটি বিল্ডে একটি নির্দিষ্ট ক্রিয়া সম্পাদন সম্পর্কে বিশদ প্রদান করে। ডিফল্টরূপে, বিল্ড ব্যর্থতার মূল কারণ সনাক্ত করতে সহায়তা করার জন্য শুধুমাত্র ব্যর্থ কর্মের জন্য এই ইভেন্টটি BEP-তে অন্তর্ভুক্ত করা হয়। ব্যবহারকারীরা সমস্ত ActionExecuted ইভেন্ট অন্তর্ভুক্ত করতে --build_event_publish_all_actions পতাকা সেট করতে পারেন।

নির্মাণ সমাপ্ত

কমান্ড সম্পূর্ণ হওয়ার পরে একটি একক BuildFinished ইভেন্ট পাঠানো হয় এবং কমান্ডের জন্য প্রস্থান কোড অন্তর্ভুক্ত করে। এই ইভেন্টটি প্রামাণিক সাফল্য/ব্যর্থতার তথ্য প্রদান করে।

মেটাডেটা তৈরি করুন

--build_metadata পতাকার পার্স করা বিষয়বস্তু ধারণ করে। এই ইভেন্টটি প্লাম্বিং বাহ্যিক ডেটা (যেমন শনাক্তকারী) দ্বারা অন্যান্য টুলিংয়ের সাথে বেজেল একীকরণকে সমর্থন করার জন্য বিদ্যমান।

বিল্ডমেট্রিক্স

প্রতিটি কমান্ডের শেষে একটি একক 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"
      }
    ]
  }
}

কমান্ডলাইন

CommandLine তে একাধিক কমান্ড-লাইন ইভেন্ট রয়েছে যেখানে সমস্ত কমান্ড-লাইন আর্গুমেন্টের উপস্থাপনা রয়েছে (বিকল্প এবং ব্যাখ্যাহীন আর্গুমেন্ট সহ)। প্রতিটি CommandLine ইভেন্ট এর StructuredCommandLineId এ একটি লেবেল থাকে যা নির্দেশ করে যে এটি কোন প্রতিনিধিত্ব করে; এই ধরনের তিনটি ঘটনা BEP-তে উপস্থিত হয়:

  • "original" : .rc ফাইল থেকে স্টার্টআপ অপশন ছাড়াই Bazel ক্লায়েন্টের কাছ থেকে Bazel প্রাপ্ত হওয়ায় পুনর্গঠিত কমান্ডলাইন।
  • "canonical" : .rc ফাইলের সাথে কার্যকর কমান্ডলাইন প্রসারিত এবং আহ্বান নীতি প্রয়োগ করা হয়েছে।
  • "tool" : --experimental_tool_command_line বিকল্প থেকে পপুলেট। এটি BEP এর মাধ্যমে বেজেল মোড়ানো একটি টুলের কমান্ড-লাইন জানাতে কার্যকর। এটি একটি base64-এনকোডেড CommandLine বাইনারি প্রোটোকল বাফার মেসেজ হতে পারে যা সরাসরি ব্যবহার করা হয়, অথবা একটি স্ট্রিং যা পার্স করা হয় কিন্তু ব্যাখ্যা করা হয় না (যেহেতু টুলের বিকল্পগুলি Bazel এর থেকে আলাদা হতে পারে)।

কনফিগারেশন

একটি বিল্ডে শীর্ষ-স্তরের লক্ষ্যগুলিতে ব্যবহৃত প্রতিটি configuration জন্য একটি Configuration ইভেন্ট পাঠানো হয়। কমপক্ষে একটি কনফিগারেশন ইভেন্ট সর্বদা উপস্থিত থাকে। TargetConfigured করা এবং 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"
    }
  }
}

সুবিধার সিমলিংক সনাক্ত করা হয়েছে

পরীক্ষামূলক। যদি --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 সাথে মিলে যাওয়া একটি কাঠামোর প্রতিবেদন করে। ট্রানজিটিভলি অন্তর্ভুক্ত ডিপসেটগুলি 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 ইভেন্টের শিশুদের সমস্ত লক্ষ্যগুলির সাথে একটি একক ইভেন্ট উপস্থিত থাকে৷ প্যাটার্নটি যেকোনো test_suite এ প্রসারিত হলে test_suite দ্বারা অন্তর্ভুক্ত পরীক্ষার লক্ষ্যগুলির সেট। সমাধান করতে ব্যর্থ হওয়া প্রতিটি প্যাটার্নের জন্য, 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"
    }
  }
}

অগ্রগতি

অগ্রগতি ইভেন্টগুলিতে কমান্ড কার্যকর করার সময় ব্যাজেল দ্বারা উত্পাদিত স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি থাকে। লজিক্যাল "অভিভাবক" ইভেন্ট (বিশেষ করে, NamedSetOfFiles ) দ্বারা ঘোষণা করা হয়নি এমন ইভেন্টগুলি ঘোষণা করার জন্য এই ইভেন্টগুলি স্বয়ংক্রিয়ভাবে তৈরি করা হয়।

টার্গেট কমপ্লিট

প্রতিটি (target, configuration, aspect) সংমিশ্রণের জন্য যা সম্পাদন পর্ব সম্পূর্ণ করে, একটি টার্গেটকমপ্লিট ইভেন্ট TargetComplete তে অন্তর্ভুক্ত করা হয়। ইভেন্টে লক্ষ্যের সাফল্য/ব্যর্থতা এবং লক্ষ্যের অনুরোধকৃত আউটপুট গ্রুপ রয়েছে।

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

টার্গেট কনফিগার করা হয়েছে

প্রতিটি টার্গেটের জন্য যা বিশ্লেষণ ফেজ সম্পূর্ণ করে, একটি 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 ইভেন্টে কর্মক্ষেত্র সম্পর্কিত কনফিগারেশন তথ্য থাকে, যেমন এক্সিকিউশন রুট।

ওয়ার্কস্পেস স্ট্যাটাস

একটি WorkspaceStatus স্ট্যাটাস ইভেন্টে ওয়ার্কস্পেস স্ট্যাটাস কমান্ডের ফলাফল থাকে।