برنامه نویسی

نحوه استفاده از ویژگی های منتشرنشده در مجموعه قوانین Bazel با git_override

گاهی اوقات، با یک ویژگی در مجموعه قوانین روبرو می شوید که قبلاً تکمیل شده است، اما نسخه جدید هنوز در دسترس نیست. دیدن آن ویژگی براق بدون استفاده در مخزن، دور از دسترس، خسته کننده است. خوشبختانه با git_override، می توانید هر هش commit را که می خواهید بررسی کنید و بدون منتظر ماندن برای نسخه جدید استفاده از آن را شروع کنید.

من اخیراً در حالی که می‌خواستم از ویژگی تولید فایل pyi منتشر نشده در مجموعه قوانین rules_proto_grpc_python استفاده کنم با این مشکل مواجه شدم.

در این پست توضیح خواهم داد که چگونه می توان ماژول های Bazel را در مخزن مجموعه قوانین کمی پیچیده با استفاده از این مثال لغو کرد.

برای استفاده از یک هش commit خاص برای این مجموعه قوانین، می توانید موارد زیر را به خود اضافه کنید MODULE.bazel فایل:

bazel_dep(name = "rules_proto_grpc", version = "5.0.1")

git_override(
    module_name = "rules_proto_grpc",
    remote = "https://github.com/rules-proto-grpc/rules_proto_grpc.git",
    commit = "d17b5b16c8b12143c6f1b78dabd6bbc228e89b58",
    strip_prefix = "modules/core",
)

bazel_dep(name = "rules_proto_grpc_python", version = "5.0.1")

git_override(
    module_name = "rules_proto_grpc_python",
    remote = "https://github.com/rules-proto-grpc/rules_proto_grpc.git",
    commit = "d17b5b16c8b12143c6f1b78dabd6bbc228e89b58",
    strip_prefix = "modules/python",
)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این مجموعه قوانین دو عارضه اصلی دارد:

  1. چندین ماژول مجموعه قوانین در زیر وجود دارد modules/ دایرکتوری مخزن
  2. rules_proto_grpc_python بستگی دارد rules_proto_grpc، که در همان مخزن زندگی می کند.

1. ماژول های متعدد در مخزن

اولین عارضه ناشی از چندین ماژول در زیر است modules/ دایرکتوری هنگام استفاده git_override، بازل باید بداند که کجا مناسب را پیدا کند MODULE.bazel برای لغو اگر نام ماژول ها مطابقت نداشته باشد، یک خطا ایجاد می کند. این بدان معناست که اگر از آن استفاده نکنید strip_prefix ویژگی، Bazel سعی می کند از ریشه MODULE.bazel (که نام یکسانی ندارد) استفاده کند و با خطای زیر مواجه خواهید شد:

ERROR: Error computing the main repository mapping: in module dependency chain  -> rules_proto_grpc_python@_: the MODULE.bazel file of rules_proto_grpc_python@_ declares a different name ()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

راه حل استفاده از strip_prefix پارامتر برای تعریف ریشه ماژول. این کار به این دلیل کار می کند که Bazel در زیر هود از قانون git_repository استفاده می کند. کمی مرموز است، اما بازل اینطور است :).

2. وابستگی در بازپرداخت

عارضه دوم این است که rules_proto_grpc_python بستگی دارد rules_proto_grpc، که در همان مخزن زندگی می کند. همچنین هر دو با هم منتشر می شوند و از یک نسخه استفاده می کنند. حتی اگر در زمان عدم استفاده نیازی به اضافه کردن این وابستگی ندارید git_override، در این مورد باید این کار را انجام دهید. اگر آن را حذف کنید، بازل خطای زیر را ایجاد می کند:

ERROR: Error computing the main repository mapping: module not found in registries: rules_proto_grpc@0.0.0.rpg.version.placeholder
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این به این دلیل اتفاق می افتد که MODULE.bazel برای مجموعه قوانین پایتون حاوی مرجعی مانند این است:

bazel_dep(name = "rules_proto_grpc", version = "0.0.0.rpg.version.placeholder")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

لغو ثبت می شود rules_proto_grpc با نسخه محل نگهدار، اجازه می دهد وابستگی به درستی حل شود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا