نحوه استفاده از ویژگی های منتشرنشده در مجموعه قوانین 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",
)
این مجموعه قوانین دو عارضه اصلی دارد:
- چندین ماژول مجموعه قوانین در زیر وجود دارد
modules/
دایرکتوری مخزن -
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
با نسخه محل نگهدار، اجازه می دهد وابستگی به درستی حل شود.