Bzlmod माइग्रेशन टूल

WORKSPACE से Bzlmod पर माइग्रेट करने की प्रोसेस अक्सर मुश्किल होती है. इसलिए, हमारा सुझाव है कि आप माइग्रेशन स्क्रिप्ट का इस्तेमाल करें. यह हेल्पर टूल, बाहरी डिपेंडेंसी मैनेजमेंट सिस्टम को माइग्रेट करने से जुड़े कई चरणों को अपने-आप पूरा करता है.

ध्यान दें: अगर आपको एआई की मदद से Bzlmod माइग्रेशन की सुविधा आज़मानी है, तो Bzlmod माइग्रेशन एजेंट का सेटअप देखें.

मुख्य फ़ंक्शन

स्क्रिप्ट के मुख्य काम ये हैं:

  • डिपेंडेंसी की जानकारी इकट्ठा करना: आपके प्रोजेक्ट की WORKSPACE फ़ाइल का विश्लेषण करके, यह पता लगाना कि तय किए गए बिल्ड टारगेट के लिए कौनसी बाहरी रिपॉज़िटरी इस्तेमाल की गई हैं. इसके लिए, Bazel के experimental_repository_resolved_file फ़्लैग का इस्तेमाल करके, हल की गई डिपेंडेंसी की फ़ाइल जनरेट की जाती है. इस फ़ाइल में यह जानकारी होती है.
  • सीधे तौर पर जुड़ी डिपेंडेंसी की पहचान करना: bazel query का इस्तेमाल करके यह पता लगाना कि बताई गई डिपेंडेंसी के लिए, कौनसी रिपॉज़िटरी सीधे तौर पर जुड़ी हुई हैं.
  • Bzlmod पर माइग्रेट करना: काम की WORKSPACE डिपेंडेंसी को Bzlmod के बराबर की डिपेंडेंसी में बदलना. यह दो चरणों वाली प्रोसेस है:
    1. पहचान की गई सभी डायरेक्ट डिपेंडेंसी को MODULE.bazel फ़ाइल में जोड़ें.
    2. Bzlmod चालू करके, तय किए गए टारगेट बनाएं. इसके बाद, पहचानी जा सकने वाली गड़बड़ियों की पहचान करें और उन्हें ठीक करें. इस चरण की ज़रूरत इसलिए है, क्योंकि हो सकता है कि पहले चरण में कुछ डिपेंडेंसी मौजूद न हों.
  • माइग्रेशन रिपोर्ट जनरेट करना: एक migration_info.md फ़ाइल बनाना, जिसमें माइग्रेशन की प्रोसेस के बारे में जानकारी दी गई हो. इस रिपोर्ट में, डायरेक्ट डिपेंडेंसी की सूची, जनरेट किए गए Bzlmod एलान, और माइग्रेशन पूरा करने के लिए ज़रूरी मैन्युअल चरणों की जानकारी शामिल होती है.

माइग्रेशन टूल इन सुविधाओं के साथ काम करता है:

  • Bazel Central Registry में उपलब्ध डिपेंडेंसी
  • उपयोगकर्ता की ओर से तय किए गए कस्टम रिपॉज़िटरी नियम
  • पैकेज मैनेजर की डिपेंडेंसी
    • Maven
    • ऐप पर जाएं
    • Python

अहम जानकारी:

  • माइग्रेशन टूल, सबसे बेहतर कोशिशों के आधार पर काम करता है. हमेशा यह पक्का करें कि इसके सुझाव सही हों.
  • Bazel 7 के साथ माइग्रेशन टूल का इस्तेमाल करें. यह Bazel 8 के साथ काम नहीं करता.

माइग्रेशन टूल का इस्तेमाल कैसे करें

शुरू करने से पहले:

  • Bazel 7 के नए वर्शन पर अपग्रेड करें. यह WORKSPACE और Bzlmod, दोनों के लिए बेहतर तरीके से काम करता है.
  • पुष्टि करें कि आपके प्रोजेक्ट के मुख्य बिल्ड टारगेट के लिए, यह निर्देश सही तरीके से काम कर रहा है:

    bazel build --nobuild --enable_workspace --noenable_bzlmod <targets>
    

स्क्रिप्ट चलाने का निर्देश

ज़रूरी शर्तें पूरी होने के बाद, माइग्रेशन टूल का इस्तेमाल करने के लिए, यहां दिए गए निर्देश चलाएं:

# Clone the Bazel Central Registry repository
git clone https://github.com/bazelbuild/bazel-central-registry.git
cd bazel-central-registry

# Build the migration tool
bazel build //tools:migrate_to_bzlmod

# Create a convenient alias for the tool
alias migrate2bzlmod=$(realpath ./bazel-bin/tools/migrate_to_bzlmod)

# Navigate to your project's root directory and run the tool
cd 
migrate2bzlmod -t 

इस स्क्रिप्ट से जनरेट की गई फ़ाइलें

  • MODULE.bazel - यह Bzlmod के लिए सेंट्रल मेनिफ़ेस्ट फ़ाइल है. इसमें प्रोजेक्ट का मेटाडेटा और अन्य Bazel मॉड्यूल पर इसकी सीधी डिपेंडेंसी के बारे में बताया जाता है.
  • migration_info.md - यह एक ऐसी फ़ाइल है जिसमें माइग्रेशन टूल को इस्तेमाल करने के बारे में चरण-दर-चरण निर्देश दिए गए हैं. इसे इसलिए बनाया गया है, ताकि अगर ज़रूरी हो, तो माइग्रेशन की प्रोसेस को मैन्युअल तरीके से पूरा करने में मदद मिल सके.
  • resolved_deps.py - इसमें प्रोजेक्ट की बाहरी डिपेंडेंसी की पूरी सूची होती है. यह सूची, प्रोजेक्ट की WORKSPACE फ़ाइल का विश्लेषण करके जनरेट की जाती है. यह ट्रांज़िशन के दौरान रेफ़रंस के तौर पर काम करती है.
  • query_direct_deps - इसमें माइग्रेशन से जुड़ी जानकारी होती है. यह जानकारी, इस्तेमाल किए गए टारगेट के बारे में होती है. इसे प्रोजेक्ट की WORKSPACE फ़ाइल पर --output=build के साथ Bazel को शुरू करके हासिल किया जाता है. इस फ़ाइल का इस्तेमाल मुख्य रूप से माइग्रेशन स्क्रिप्ट करती है.
  • extension_for_XXX - मॉड्यूल एक्सटेंशन की परिभाषा वाली फ़ाइल. माइग्रेशन टूल, इन फ़ाइलों को उन डिपेंडेंसी के लिए जनरेट करता है जो स्टैंडर्ड Bazel मॉड्यूल नहीं हैं. हालांकि, इन्हें Bzlmod के मॉड्यूल एक्सटेंशन का इस्तेमाल करके मैनेज किया जा सकता है.

झंडे

माइग्रेशन स्क्रिप्ट में ये फ़्लैग उपलब्ध हैं:

  • --t/--target: माइग्रेट करने के लिए टारगेट. इस फ़्लैग को दोहराया जा सकता है और टारगेट इकट्ठा किए जाते हैं.
  • --i/--initial: MODULE.bazel, resolved_deps.py, और migration_info.md फ़ाइलों को मिटा देता है और शुरू से काम करता है - सीधे तौर पर निर्भरता का पता लगाता है, उन्हें MODULE.bazel में शामिल करता है, और हल की गई निर्भरताओं को फिर से जनरेट करता है.

माइग्रेशन के बाद की सफ़ाई

  • migration_info.md, resolved_deps.py, और query_direct_deps को मिटाएं.
  • MODULE.bazel फ़ाइल से उन टिप्पणियों को हटाएं जिनका इस्तेमाल माइग्रेशन के लिए किया गया था. जैसे, # -- bazel_dep definitions -- #.

माइग्रेशन का उदाहरण

माइग्रेशन स्क्रिप्ट को काम करते हुए देखने के लिए, यहां दिया गया उदाहरण देखें. इसमें Python, Maven, और Go की डिपेंडेंसी को WORKSPACE फ़ाइल में बताया गया है.

WORKSPACE फ़ाइल देखने के लिए यहां क्लिक करें

workspace(name="example")

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load(":my_custom_macro.bzl", "my_custom_macro")

http_archive(
    name = "rules_cc",
    sha256 = "b8b918a85f9144c01f6cfe0f45e4f2838c7413961a8ff23bc0c6cdf8bb07a3b6",
    strip_prefix = "rules_cc-0.1.5",
    urls = ["https://github.com/bazelbuild/rules_cc/releases/download/0.1.5/rules_cc-0.1.5.tar.gz"],
)

# Module dependency
# -------------------
http_archive(
    name = "rules_shell",
    sha256 = "3e114424a5c7e4fd43e0133cc6ecdfe54e45ae8affa14fadd839f29901424043",
    strip_prefix = "rules_shell-0.4.0",
    url = "https://github.com/bazelbuild/rules_shell/releases/download/v0.4.0/rules_shell-v0.4.0.tar.gz",
)

# Repo rule
# -------------------
http_archive(
    name = "com_github_cockroachdb_cockroach",
    sha256 = "6c3568ef244ce6b874694eeeecb83ed4f5d5dff6cf037c952ecde76828a6c502",
    strip_prefix = "cockroach-22.1.6",
    url = "https://github.com/cockroachdb/cockroach/archive/v22.1.6.tar.gz",
)

# Module extension
# -------------------
# Macro which invokes repository_rule
my_custom_macro(
    name = "my_custom_repo",
)

# Go dependencies
# -------------------
http_archive(
    name = "io_bazel_rules_go",
    integrity = "sha256-M6zErg9wUC20uJPJ/B3Xqb+ZjCPn/yxFF3QdQEmpdvg=",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
        "https://github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
    ],
)

http_archive(
    name = "bazel_gazelle",
    integrity = "sha256-12v3pg/YsFBEQJDfooN6Tq+YKeEWVhjuNdzspcvfWNU=",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
        "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
    ],
)

load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")

go_rules_dependencies()
go_register_toolchains(version = "1.23.1")
gazelle_dependencies()

go_repository(
    name = "org_golang_x_net",
    importpath = "golang.org/x/net",
    sum = "h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=",
    version = "v0.0.0-20190311183353-d8887717615a",
    build_file_proto_mode = "disable",
    build_naming_convention = "import",
)

# Python dependencies
# -------------------
http_archive(
    name = "rules_python",
    integrity = "sha256-qDdnnxOC8mlowe5vg5x9r5B5qlMSgGmh8oFd7KpjcwQ=",
    strip_prefix = "rules_python-1.4.0",
    url = "https://github.com/bazelbuild/rules_python/releases/download/1.4.0/rules_python-1.4.0.tar.gz",
)

load("@rules_python//python:repositories.bzl", "py_repositories")
py_repositories()

load("@rules_python//python:pip.bzl", "pip_parse")
pip_parse(
   name = "my_python_deps",
   requirements_lock = "@example//:requirements_lock.txt",
)

load("@my_python_deps//:requirements.bzl", "install_deps")
install_deps()

load("@rules_python//python:repositories.bzl", "python_register_toolchains")
python_register_toolchains(
    name = "python_3_11",
    python_version = "3.11",
)

# Maven dependencies
# __________________

RULES_JVM_EXTERNAL_TAG = "4.5"
RULES_JVM_EXTERNAL_SHA = "b17d7388feb9bfa7f2fa09031b32707df529f26c91ab9e5d909eb1676badd9a6"

http_archive(
    name = "rules_jvm_external",
    strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
    sha256 = RULES_JVM_EXTERNAL_SHA,
    url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG,
)

load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
rules_jvm_external_deps()
load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
rules_jvm_external_setup()

load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
    name = "px_deps",
    artifacts = [
        "org.antlr:antlr4:4.11.1",
    ],
    repositories = [
        "https://repo1.maven.org/maven2",
    ],
)

इसके अलावा, मॉड्यूल एक्सटेंशन के इस्तेमाल को दिखाने के लिए, कस्टम मैक्रो को WORKSPACE से शुरू किया जाता है और इसे my_custom_macro.bzl में तय किया जाता है.

my_custom_macro.bzl फ़ाइल देखने के लिए यहां क्लिक करें

"""Repo rule and macro used for testing"""

def _test_repo_rule_impl(repository_ctx):
    repository_ctx.file(
        "BUILD",
        content = """
genrule(
    name = "foo",
    outs = ["rule_name.out"],
    cmd = "touch $@",
    visibility = ["//visibility:public"],
)
"""
    )

_test_repo_rule = repository_rule(
    implementation = _test_repo_rule_impl,
)

def my_custom_macro(name):
    _test_repo_rule(name = name)

हमारा मुख्य मकसद, उपयोगकर्ता अनुभव पर असर डाले बिना MODULE.bazel फ़ाइल को सेव करना और WORKSPACE फ़ाइल को मिटाना है.

पहला चरण है, माइग्रेशन टूल इस्तेमाल करने का तरीका को फ़ॉलो करना. इसमें ज़्यादातर, Bazel वर्शन की जांच करना (यह Bazel 7 होना चाहिए) और माइग्रेशन स्क्रिप्ट में कोई उपनाम जोड़ना शामिल है.

इसके बाद, migrate2bzlmod -t=//... को चलाने पर ये आउटपुट मिलते हैं:

  bazel 7.6.1

  Generating ./resolved_deps.py file - It might take a while...

  RESOLVED: rules_java has been introduced as a Bazel module.
  RESOLVED: bazel_gazelle has been introduced as a Bazel module.
  RESOLVED: io_bazel_rules_go has been introduced as a Bazel module.
  RESOLVED: rules_python has been introduced as a Bazel module.
  IMPORTANT: 3.11 is used as a default python version. If you need a different version, please change it manually and then rerun the migration tool.
  RESOLVED: my_python_deps has been introduced as python extension.
  RESOLVED: org_golang_x_net has been introduced as go extension.
  RESOLVED: rules_jvm_external has been introduced as a Bazel module.
  RESOLVED: org.antlr has been introduced as maven extension.
  RESOLVED: rules_shell has been introduced as a Bazel module.

  Congratulations! All external repositories needed for building //... are available with Bzlmod!
  IMPORTANT: Fix potential build time issues by running the following command:
      bazel build --enable_bzlmod --noenable_workspace //...

  IMPORTANT: For details about the migration process, check `migration_info.md` file.

जिसमें यह ज़रूरी जानकारी दी गई है:

  • ./resolved_deps.py फ़ाइल जनरेट करता है. इसमें आपकी WORKSPACE फ़ाइल का इस्तेमाल करके, डिक्लेयर की गई और लोड की गई सभी बाहरी रिपॉज़िटरी की जानकारी होती है.
  • RESOLVED कीवर्ड, उन सभी डिपेंडेंसी के बारे में बताता है जिन्हें टूल ठीक करता है और MODULE.bazel फ़ाइल में जोड़ता है.
  • IMPORTANT कीवर्ड, ऐसी अहम जानकारी के बारे में बताता है जिस पर समय बिताया जा सकता है.
  • इस उदाहरण में, सभी डिपेंडेंसी को हल कर दिया गया है. कम से कम --nobuild फ़्लैग के साथ.
  • पूरा बिल्ड (बताई गई कमांड) चलाना ज़रूरी है.साथ ही, संभावित गड़बड़ियों को मैन्युअल तरीके से ठीक करना भी ज़रूरी है. उदाहरण के लिए, टूलचेन सही तरीके से रजिस्टर नहीं किया गया है.
  • migration_info.md फ़ाइल में माइग्रेशन के बारे में जानकारी होती है. जानकारी इस सेक्शन में देखें.

ट्रांसफ़ॉर्मेशन

इस सेक्शन में, WORKSPACE फ़ाइल से MODULE.bazel में कोड माइग्रेट करने के बारे में बताया गया है.

WORKSPACE - Bazel Module

http_archive(
    name = "rules_shell",
    sha256 = "3e114424a5c7e4fd43e0133cc6ecdfe54e45ae8affa14fadd839f29901424043",
    strip_prefix = "rules_shell-0.4.0",
    url = "https://github.com/bazelbuild/rules_shell/releases/download/v0.4.0/rules_shell-v0.4.0.tar.gz",
)

MODULE.bazel - Bazel Module

bazel_dep(name = "rules_shell", version = "0.6.1")

WORKSPACE - Go Extension

http_archive(
    name = "io_bazel_rules_go",
    integrity = "sha256-M6zErg9wUC20uJPJ/B3Xqb+ZjCPn/yxFF3QdQEmpdvg=",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
        "https://github.com/bazelbuild/rules_go/releases/download/v0.48.0/rules_go-v0.48.0.zip",
    ],
)
http_archive(
    name = "bazel_gazelle",
    integrity = "sha256-12v3pg/YsFBEQJDfooN6Tq+YKeEWVhjuNdzspcvfWNU=",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
        "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz",
    ],
)

load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")

go_rules_dependencies()
go_register_toolchains(version = "1.23.1")
gazelle_dependencies()

go_repository(
    name = "org_golang_x_net",
    importpath = "golang.org/x/net",
    sum = "h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=",
    version = "v0.0.0-20190311183353-d8887717615a",
    build_file_proto_mode = "disable",
    build_naming_convention = "import",
)

MODULE.bazel - Go Extension

go_deps = use_extension("@bazel_gazelle//:extensions.bzl", "go_deps")
go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk")

go_deps.from_file(go_mod = "//:go.mod")
use_repo(go_deps, "org_golang_x_net")
go_sdk.from_file(go_mod = "//:go.mod")

go_deps.gazelle_override(
    path = "golang.org/x/net",
    directives = [
        "gazelle:proto disable",
         "gazelle:go_naming_convention import",
    ],
)

WORKSPACE - Python Extension

http_archive(
    name = "rules_python",
    integrity = "sha256-qDdnnxOC8mlowe5vg5x9r5B5qlMSgGmh8oFd7KpjcwQ=",
    strip_prefix = "rules_python-1.4.0",
    url = "https://github.com/bazelbuild/rules_python/releases/download/1.4.0/rules_python-1.4.0.tar.gz",
)

load("@rules_python//python:repositories.bzl", "py_repositories")
py_repositories()

load("@rules_python//python:pip.bzl", "pip_parse")
pip_parse(
   name = "my_python_deps",
   requirements_lock = "@example//:requirements_lock.txt",
)

load("@my_python_deps//:requirements.bzl", "install_deps")
install_deps()

load("@rules_python//python:repositories.bzl", "python_register_toolchains")
python_register_toolchains(
    name = "python_3_11",
    python_version = "3.11",
)

MODULE.bazel - Python Extension

pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
pip.parse(
    hub_name = "my_python_deps",
    python_version = "3.11",
    requirements_lock = "//:requirements_lock.txt",
)
use_repo(pip, "my_python_deps")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.defaults(python_version = "3.11")
python.toolchain(python_version = "3.11")

WORKSPACE - Maven Extension

RULES_JVM_EXTERNAL_TAG = "4.5"
RULES_JVM_EXTERNAL_SHA = "b17d7388feb9bfa7f2fa09031b32707df529f26c91ab9e5d909eb1676badd9a6"

http_archive(
    name = "rules_jvm_external",
    strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
    sha256 = RULES_JVM_EXTERNAL_SHA,
    url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG,
)

load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
rules_jvm_external_deps()
load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
rules_jvm_external_setup()

load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
    name = "px_deps",
    artifacts = [
        "org.antlr:antlr4:4.11.1",
    ],
    repositories = [
        "https://repo1.maven.org/maven2",
    ],
)

MODULE.bazel - Maven Extension

bazel_dep(name = "rules_jvm_external", version = "6.8")

maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
use_repo(maven, "px_deps")

maven.artifact(
    name = "px_deps",
    group = "org.antlr",
    artifact = "antlr4",
    version = "4.11.1"
)

WORKSPACE - Repo rule

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "com_github_cockroachdb_cockroach",
    sha256 = "6c3568ef244ce6b874694eeeecb83ed4f5d5dff6cf037c952ecde76828a6c502",
    strip_prefix = "cockroach-22.1.6",
    url = "https://github.com/cockroachdb/cockroach/archive/v22.1.6.tar.gz",
)

MODULE.bazel - Repo rule

http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_github_cockroachdb_cockroach",
  url = "https://github.com/cockroachdb/cockroach/archive/v22.1.6.tar.gz",
  sha256 = "6c3568ef244ce6b874694eeeecb83ed4f5d5dff6cf037c952ecde76828a6c502",
  strip_prefix = "cockroach-22.1.6",
)

WORKSPACE - Module extension

load(":my_custom_macro.bzl", "my_custom_macro")

my_custom_macro(
    name = "my_custom_repo",
)

MODULE.bazel - Module extension

extension_for_my_custom_macro = use_extension("//:extension_for_my_custom_macro.bzl", "extension_for_my_custom_macro")
use_repo(extension_for_my_custom_macro, "my_custom_repo")

extension_for_my_custom_macro.bzl

load("//:my_custom_macro.bzl", "my_custom_macro")

def _extension_for_my_custom_macro_impl(ctx):
  my_custom_macro(
    name = "my_custom_repo",
  )

extension_for_my_custom_macro = module_extension(implementation = _extension_for_my_custom_macro_impl)

डीबग करने से जुड़ी सलाह

इस सेक्शन में, Bzlmod माइग्रेशन के दौरान आने वाली समस्याओं को डीबग करने में मदद करने वाली काम की कमांड और जानकारी दी गई है.

काम की सलाह

  • वर्शन को बदलें - ऐसा अक्सर होता है कि किसी डिपेंडेंसी के वर्शन को अपग्रेड करने से समस्याएं आती हैं. एमवीएस एल्गोरिदम की वजह से, Bzlmod डिपेंडेंसी का वर्शन बदल सकता है. WORKSPACE में इस्तेमाल किए गए वर्शन या उससे मिलते-जुलते वर्शन का इस्तेमाल करने के लिए, single_version_override का इस्तेमाल करके इसे बदलें. ध्यान दें कि यह सुविधा, WORKSPACE और Bzlmod के बीच के अंतर को डीबग करने के लिए काम की है. हालांकि, आपको लंबे समय तक इस सुविधा पर भरोसा नहीं करना चाहिए.

    single_version_override(module_name = "{dep_name}", version = "{version}")

  • bazel mod कमांड का इस्तेमाल करें.

    • show_repo कमांड की मदद से, किसी रिपॉज़िटरी का वर्शन देखें. उदाहरण के लिए:

      bazel mod show_repo @rules_python

    • show_extension कमांड की मदद से, मॉड्यूल एक्सटेंशन के बारे में जानकारी देखें. उदाहरण के लिए:

      bazel mod show_extension @rules_python//python/extensions:pip.bzl%pip

  • अगर आपको किसी रेपो के सोर्स को मॉनिटर या कंट्रोल करना है, तो वेंडर मोड का इस्तेमाल करके, रेपो की स्थानीय कॉपी बनाएं. उदाहरण के लिए:

    bazel vendor --enable_bzlmod --vendor_dir=vendor_src --repo=@protobuf

माइग्रेशन रिपोर्ट जनरेट करना

माइग्रेशन स्क्रिप्ट के हर रन के साथ यह फ़ाइल अपडेट होती है. अगर यह पहला रन है या --i फ़्लैग का इस्तेमाल किया गया है, तो इसे नए सिरे से जनरेट किया जाता है. रिपोर्ट में यह जानकारी शामिल होती है:

  • लोकल टेस्टिंग के लिए कमांड.
  • सीधे तौर पर इस्तेमाल की जाने वाली डिपेंडेंसी की सूची. कम से कम वे डिपेंडेंसी जो प्रोजेक्ट में सीधे तौर पर इस्तेमाल की जाती हैं.
  • हर डिपेंडेंसी के लिए, एक ड्रॉप-डाउन मेन्यू होता है. इससे यह देखा जा सकता है कि WORKSPACE फ़ाइल में रिपॉज़िटरी कहां डिक्लेयर की गई थी. यह डीबग करने के लिए खास तौर पर उपयोगी होता है. इसे इस तरह देखा जा सकता है:

    > Click here to see where and how the repo was declared in the WORKSPACE
    file
  • हर डिपेंडेंसी के लिए, MODULE.bazel फ़ाइल में उसे कैसे लागू किया गया. पिछले माइग्रेशन के उदाहरण में, यह इस तरह दिखेगा:

    1. Bazel मॉड्यूल की डिपेंडेंसी - Migration of rules_python

      Found perfect name match in BCR: rules_python
      Found partially name matches in BCR: rules_python_gazelle_plugin
      
      It has been introduced as a Bazel module:
          `bazel_dep(name = "rules_python", version = "1.6.1")`
      • अगर स्क्रिप्ट को perfect name match मिल जाता है, तो वह अपने-आप इसका इस्तेमाल करेगी. अगर कोई गड़बड़ी होती है, तो दोबारा जांच करें कि नाम सही तरीके से जोड़ा गया है या नहीं.
    2. Python एक्सटेंशन - Migration of my_python_deps

      pip.parse(
          hub_name = "my_python_deps",
          requirements_lock = "//:requirements_lock.txt",
          python_version = "3.11",
      )
      use_repo(pip, "my_python_deps")
    3. Maven एक्सटेंशन - Migration of org.antlr (px_deps):

      maven.artifact(
          name = "px_deps",
          group = "org.antlr",
          artifact = "antlr4",
          version = "4.11.1"
      )
    4. Go एक्सटेंशन - Migration of org_golang_x_net

      go_deps.from_file(go_mod = "//:go.mod")
      go_sdk.from_file(go_mod = "//:go.mod")
      
      go_deps.gazelle_override(
          path = "golang.org/x/net",
          directives = [
              "gazelle:proto disable",
              "gazelle:go_naming_convention import",
          ],
      )
      • इसे go.mod की मदद से, गो मॉड्यूल के तौर पर लॉन्च किया गया है. अगर go.mod और go.sum उपलब्ध नहीं हैं, तो go मॉड्यूल को सीधे MODULE.bazel फ़ाइल में जोड़ दिया जाता है.
      • gazelle_override का इस्तेमाल, खास निर्देश जोड़ने के लिए किया जाता है.

सुझाव/राय दें या शिकायत करें

अगर आपको योगदान देना है, तो bazel-central-registry पर जाकर कोई समस्या या पीआर बनाएं.