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 के सेंट्रल रजिस्ट्री में उपलब्ध डिपेंडेंसी
  • उपयोगकर्ता की ओर से तय किए गए, डेटाबेस के कस्टम नियम
  • पैकेज मैनेजर डिपेंडेंसी
    • Maven
    • Go
    • 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 <your project root>
migrate2bzlmod -t <targets>

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

  • 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 -- #.

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

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

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 मॉड्यूल

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 मॉड्यूल

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

WORKSPACE - Go एक्सटेंशन

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 एक्सटेंशन

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 एक्सटेंशन

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 एक्सटेंशन

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 एक्सटेंशन

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 एक्सटेंशन

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 नियम

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 नियम

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 - मॉड्यूल एक्सटेंशन

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

my_custom_macro(
    name = "my_custom_repo",
)

MODULE.bazel - मॉड्यूल एक्सटेंशन

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 पर माइग्रेट करने के दौरान आने वाली समस्याओं को डीबग करने में मदद करने के लिए, काम के कमांड और जानकारी दी गई है.

काम की सलाह

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

माइग्रेशन स्क्रिप्ट को हर बार चलाने पर, यह फ़ाइल अपडेट होती है. अगर यह पहली बार चलाई जा रही है या --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 मॉड्यूल के तौर पर शामिल किया गया है. अगर go.mod और go.sum उपलब्ध नहीं हैं, तो Go मॉड्यूल को सीधे MODULE.bazel फ़ाइल में जोड़ा जाता है.
      • खास निर्देश जोड़ने के लिए, gazelle_override का इस्तेमाल किया जाता है.

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

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