เครื่องมือย้ายข้อมูล Bzlmod

เพื่อลดความซับซ้อนของกระบวนการย้ายข้อมูลจาก WORKSPACE ไปยัง Bzlmod ซึ่งมักจะมีความซับซ้อน เราขอแนะนำให้ใช้สคริปต์การย้ายข้อมูล เครื่องมือช่วยนี้จะทำให้ขั้นตอนต่างๆ ที่เกี่ยวข้องกับการย้ายข้อมูลระบบการจัดการการอ้างอิงภายนอกเป็นแบบอัตโนมัติ

หมายเหตุ: หากต้องการลองใช้การย้ายข้อมูล Bzlmod ที่ขับเคลื่อนด้วย AI โปรดดูการตั้งค่าตัวแทนการย้ายข้อมูล Bzlmod

ฟังก์ชันหลัก

ฟังก์ชันหลักของสคริปต์มีดังนี้

  • การรวบรวมข้อมูลการขึ้นต่อกัน: การวิเคราะห์ไฟล์ WORKSPACE ของโปรเจ็กต์เพื่อระบุที่เก็บข้อมูลภายนอกที่ใช้โดยเป้าหมายการสร้างที่ระบุ โดยใช้แฟล็ก experimental_repository_resolved_file ของ Bazel เพื่อสร้างไฟล์การอ้างอิงที่แก้ไขแล้วซึ่งมีข้อมูลนี้
  • การระบุการอ้างอิงโดยตรง: ใช้ bazel query เพื่อพิจารณาว่าที่เก็บใดเป็นการอ้างอิงโดยตรงสำหรับเป้าหมายที่ระบุ
  • การย้ายข้อมูลไปยัง Bzlmod: แปลทรัพยากร Dependency WORKSPACE ที่เกี่ยวข้องเป็น รายการที่เทียบเท่าใน Bzlmod โดยมี 2 ขั้นตอนดังนี้
    1. แนะนำทรัพยากร Dependency โดยตรงทั้งหมดที่ระบุในไฟล์ MODULE.bazel
    2. สร้างเป้าหมายที่ระบุโดยเปิดใช้ Bzlmod จากนั้น ระบุและแก้ไขข้อผิดพลาดที่รู้จักได้ทีละรายการ ขั้นตอนนี้จำเป็นเนื่องจากอาจไม่มีการระบุการอ้างอิงบางอย่างในขั้นตอนแรก
  • การสร้างรายงานการย้ายข้อมูล: การสร้างไฟล์ migration_info.md ที่ บันทึกกระบวนการย้ายข้อมูล รายงานนี้ประกอบด้วยรายการการอ้างอิงโดยตรง ประกาศ Bzlmod ที่สร้างขึ้น และขั้นตอนด้วยตนเองที่อาจต้องใช้เพื่อทำการย้ายข้อมูลให้เสร็จสมบูรณ์

เครื่องมือการย้ายข้อมูลรองรับรายการต่อไปนี้

  • การขึ้นต่อกันที่พร้อมใช้งานใน Bazel Central Registry
  • กฎที่กำหนดเองของที่เก็บที่ผู้ใช้กำหนด
  • ทรัพยากร Dependency ของเครื่องมือจัดการแพ็กเกจ
    • 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 
migrate2bzlmod -t 

ไฟล์ที่สคริปต์นี้สร้างขึ้น

  • MODULE.bazel - ไฟล์ Manifest กลางสำหรับ Bzlmod ซึ่งประกาศข้อมูลเมตาของโปรเจ็กต์และการอ้างอิงโดยตรงกับโมดูล Bazel อื่นๆ
  • migration_info.md - ไฟล์ที่ให้วิธีการแบบทีละขั้นตอนเกี่ยวกับวิธีเรียกใช้เครื่องมือย้ายข้อมูล ซึ่งออกแบบมาเพื่อช่วยในการดำเนินการกระบวนการย้ายข้อมูลให้เสร็จสมบูรณ์ด้วยตนเอง หากจำเป็น
  • resolved_deps.py - มีรายการที่ครอบคลุมของทรัพยากรภายนอกของโปรเจ็กต์ ซึ่งสร้างขึ้นโดยการวิเคราะห์ไฟล์ WORKSPACE ของโปรเจ็กต์ เพื่อใช้เป็นข้อมูลอ้างอิงในระหว่างการเปลี่ยน
  • query_direct_deps - มีข้อมูลที่เกี่ยวข้องกับการย้ายข้อมูลเกี่ยวกับเป้าหมายที่ใช้ ซึ่งได้จากการเรียกใช้ Bazel ด้วย --output=build ในไฟล์ WORKSPACE ของโปรเจ็กต์ โดยสคริปต์การย้ายข้อมูลจะใช้ไฟล์นี้เป็นหลัก
  • extension_for_XXX - ไฟล์ที่มีคำจำกัดความส่วนขยายโมดูล เครื่องมือย้ายข้อมูลจะสร้างไฟล์เหล่านี้สำหรับทรัพยากร Dependency ที่ไม่ใช่โมดูล Bazel มาตรฐาน แต่จัดการได้โดยใช้ส่วนขยายโมดูลของ Bzlmod

ธง

โดยมี Flag ที่ใช้ได้ในสคริปต์การย้ายข้อมูลนี้ดังนี้

  • --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 แฟล็ก
  • คุณควรเรียกใช้การสร้างแบบเต็ม (คำสั่งที่ระบุ) และแก้ไขข้อผิดพลาดที่อาจเกิดขึ้นด้วยตนเอง (เช่น ไม่ได้ลงทะเบียน Toolchain อย่างถูกต้อง)
  • 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

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 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 - กฎของที่เก็บ

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

เคล็ดลับที่มีประโยชน์

  • การลบล้างเวอร์ชัน - การอัปเกรดเวอร์ชันของ Dependency อาจทำให้เกิดปัญหาได้ Bzlmod อาจเปลี่ยนเวอร์ชันของ Dependency เนื่องจากอัลกอริทึม MVS หากต้องการใช้เวอร์ชันเดียวกันหรือเวอร์ชันที่คล้ายกันกับที่ใช้ใน WORKSPACE ให้ลบล้างด้วย single_version_override โปรดทราบว่าฟีเจอร์นี้มีประโยชน์สำหรับการแก้ไขข้อบกพร่องของความแตกต่างระหว่าง WORKSPACE กับ Bzlmod แต่คุณไม่ควรใช้ฟีเจอร์นี้ในระยะยาว

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

  • ใช้คำสั่ง bazel mod

    • ตรวจสอบเวอร์ชันของรีโปที่ระบุด้วย show_repo command เช่น

      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 ด้วยความช่วยเหลือจาก go.mod หาก go.mod และ go.sum ไม่พร้อมใช้งาน ระบบจะเพิ่มโมดูล Go โดยตรง ลงในไฟล์ MODULE.bazel
      • gazelle_override ใช้เพื่อเพิ่มคำสั่งที่เฉพาะเจาะจง

ความคิดเห็น

หากต้องการมีส่วนร่วม โปรดสร้างปัญหาหรือ PR ที่ bazel-central-registry