Bzlmod Taşıma Kılavuzu

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Mevcut programlarda WORKSPACE, Bzlmod eski WORKSPACE sistemini gelecekteki Bazel sürümlerinde değiştirebileceksiniz. Bu kılavuz size yardımcı olur projenizi Bzlmod'a taşıyıp harici öğeleri getirmek için WORKSPACE'i bırakın ve bildirmeyi konuştuk.

WORKSPACE - Bzlmod

Bazel'in WORKSPACE ve Bzlmod farklı söz dizimiyle benzer özellikler sunar. Bu Bu bölümde, belirli WORKSPACE işlevlerinden Bzlmod.

Bazel çalışma alanının kökünü tanımlama

WORKSPACE dosyası bir Bazel projesinin kaynak kökünü işaret eder. Bu sorumluluk, , Bazel'ın 6.3 ve sonraki sürümlerinde MODULE.bazel ile değiştirilir. Bazel versiyonlu 6.3'ten önceki sürümlerde, WORKSPACEWORKSPACE.bazel bazı açıklamalar ekleyerek

  • ÇALIŞMA ALANI

    # This file marks the root of the Bazel workspace.
    # See MODULE.bazel for external dependencies setup.
    

Bazelrc'inizde Bzlmod'u etkinleştirin

.bazelrc, Bazel'i her çalıştırdığınızda uygulanacak işaretler belirlemenize olanak tanır. Etkinleştirmek için Bzlmod, --enable_bzlmod işaretini kullanın ve common komutuna uygulayın. bu tüm komutlara uygulanır:

  • .bazelrc

    # Enable Bzlmod for every Bazel command
    common --enable_bzlmod
    

Çalışma alanınız için depo adını belirtin

  • ÇALIŞMA ALANI

    workspace işlevi, (çalışma alanınız için bir depo adı belirtin). Bu, belirli bir Çalışma alanında @<workspace name>//foo:bar olarak referansta bulunulacak //foo:bar. Belirtilmezse, çalışma alanı __main__.

    ## WORKSPACE
    workspace(name = "com_foo_bar")
    
  • Bzlmod

    Aynı çalışma alanındaki @<repo name> içermeyen //foo:bar söz dizimi. Ancak eski söz dizimine ihtiyacınız varsa bölümünde belirtilen modül adını kullanabilirsiniz. Depo olarak module işlevi dokunun. Modül adı gerekli depo adından farklıysa şunun repo_name özelliğini kullanabilir: module kullanabilirsiniz.

    ## MODULE.bazel
    module(
        name = "bar",
        repo_name = "com_foo_bar",
    )
    

Dış bağımlılıkları Bazel modülleri olarak getirin

Bağımlılığınız bir Bazel projesiyse, proje yöneticisi olarak Bazel modülünü kullanabilir.

  • ÇALIŞMA ALANI

    WORKSPACE ile, http_archive veya git_repository kod deposu kurallarını Bazel projesinin kaynaklarını indirin.

    ## WORKSPACE
    load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
    
    http_archive(
        name = "bazel_skylib",
        urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.2/bazel-skylib-1.4.2.tar.gz"],
        sha256 = "66ffd9315665bfaafc96b52278f57c7e2dd09f5ede279ea6d39b2be471e7e3aa",
    )
    load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
    bazel_skylib_workspace()
    
    http_archive(
        name = "rules_java",
        urls = ["https://github.com/bazelbuild/rules_java/releases/download/6.1.1/rules_java-6.1.1.tar.gz"],
        sha256 = "76402a50ae6859d50bd7aed8c1b8ef09dae5c1035bb3ca7d276f7f3ce659818a",
    )
    load("@rules_java//java:repositories.bzl", "rules_java_dependencies", "rules_java_toolchains")
    rules_java_dependencies()
    rules_java_toolchains()
    

    Gördüğünüz gibi, yükleme işlemi sırasında geçişli bağımlılıkları içeren bir makro deneyin. Hem bazel_skylib hem de rules_java, platform öğesinin tam sürümü olan platform öğesine bağlıdır bağımlılık, makroların sırasına göre belirlenir.

  • Bzlmod

    Bağımlılığınız Bazel Central'da olduğu sürece Bzlmod ile Kayıt otoritesi veya özel Bazel'iniz kayıt defteri kullanıyorsanız, bazel_dep yönergesi.

    ## MODULE.bazel
    bazel_dep(name = "bazel_skylib", version = "1.4.2")
    bazel_dep(name = "rules_java", version = "6.1.1")
    

    Bzlmod, aşağıdakileri kullanarak Bazel modülü bağımlılıklarını geçişli olarak çözer: MVS algoritması. Bu nedenle, maksimum gerekli platform sürümü otomatik olarak seçilir.

Bağımlılığı Bazel modülü olarak geçersiz kılma

Kök modül olarak Bazel modülü bağımlılıklarını farklı yolları.

Daha fazla bilgi için lütfen geçersiz kılmalar bölümünü okuyun ekleyebilirsiniz.

Bazı örnek kullanımları örnekler depodur.

Modül uzantılarıyla harici bağımlılıkları getirin

Bağımlılığınız bir Bazel projesi değilse veya henüz herhangi bir Bazel'de yoksa veya kayıt defteri gibi, isterseniz use_repo_rule veya modül uzantıları.

  • ÇALIŞMA ALANI

    http_file kullanarak dosya indirme repository kuralı.

    ## WORKSPACE
    load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
    
    http_file(
        name = "data_file",
        url = "http://example.com/file",
        sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    )
    
  • Bzlmod

    Bzlmod ile MODULE.bazel dosyanızda use_repo_rule yönergesini kullanabilirsiniz dosyası oluşturun:

    ## MODULE.bazel
    http_file = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
    http_file(
        name = "data_file",
        url = "http://example.com/file",
        sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    )
    

    Temelde bu, bir modül uzantısı kullanılarak uygulanır. Gerekirse bir depo kuralını çağırmaktan daha karmaşık bir mantık gerçekleştirmek istiyorsanız, kendiniz uygulayabilirsiniz. Tanımı taşımanız gerekir .bzl dosyasına da alabilirsiniz. Bu aynı zamanda, WORKSPACE ve Bzlmod taşıma sürecinde kullanılabilir.

    ## repositories.bzl
    load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
    def my_data_dependency():
        http_file(
            name = "data_file",
            url = "http://example.com/file",
            sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        )
    

    Bağımlılıklar makrosunu yüklemek için bir modül uzantısı uygulayın. Anahtar kelimelerin aynı .bzl dosyasında kullanmasına, ancak eski Bazel sürümlerini ayrı bir .bzl dosyasında tanımlamak daha iyidir.

    ## extensions.bzl
    load("//:repositories.bzl", "my_data_dependency")
    def _non_module_dependencies_impl(_ctx):
        my_data_dependency()
    
    non_module_dependencies = module_extension(
        implementation = _non_module_dependencies_impl,
    )
    

    Depoyu kök projeye görünür hale getirmek için MODULE.bazel dosyasındaki modül uzantısı ve deponun kullanımları.

    ## MODULE.bazel
    non_module_dependencies = use_extension("//:extensions.bzl", "non_module_dependencies")
    use_repo(non_module_dependencies, "data_file")
    

Modül uzantısıyla çakışma harici bağımlılıkları çözün

Proje, temel alınan verilere göre harici depoları tanıtan bir makro sağlayabilir yaklaşık 10 dakika sürer. Peki, aynı görüşmede birden fazla arayan varsa bir çatışmaya neden olur mu?

foo projesinin, version öğesini kabul eden aşağıdaki makroyu sağladığını varsayalım: tartışma.

## repositories.bzl in foo {:#repositories.bzl-foo}
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
def data_deps(version = "1.0"):
    http_file(
        name = "data_file",
        url = "http://example.com/file-%s" % version,
        # Omitting the "sha256" attribute for simplicity
    )
  • ÇALIŞMA ALANI

    WORKSPACE ile @foo tarayıcısından makroyu yükleyip sürümü belirtebilirsiniz. tam olarak bilmek isteyebilir. Başka bir bağımlınızın @bar olduğunu varsayalım. Bu da @foo metriğine bağlıdır ancak verilerin farklı bir sürümünü gerektirir desteklenmektedir.

    ## WORKSPACE
    
    # Introduce @foo and @bar.
    ...
    
    load("@foo//:repositories.bzl", "data_deps")
    data_deps(version = "2.0")
    
    load("@bar//:repositories.bzl", "bar_deps")
    bar_deps() # -> which calls data_deps(version = "3.0")
    

    Bu durumda son kullanıcı, WORKSPACE'i seçin. Yaşadığımız en büyük zorluklardan çok mantıklı bir yol sunmadığından, WORKSPACE ile ve bunları çözmek için kullanılan bir araçtır.

  • Bzlmod

    foo projesinin yazarı, Bzlmod ile çatışmaya neden olabilir. Örneğin, her zaman için uygun olanı seçmenin tüm Bazel modülleri arasında gereken maksimum veri bağımlılığı sürümü

    ## extensions.bzl in foo
    load("//:repositories.bzl", "data_deps")
    
    data = tag_class(attrs={"version": attr.string()})
    
    def _data_deps_extension_impl(module_ctx):
        # Select the maximal required version in the dependency graph.
        version = "1.0"
        for mod in module_ctx.modules:
            for data in mod.tags.data:
                version = max(version, data.version)
        data_deps(version)
    
    data_deps_extension = module_extension(
        implementation = _data_deps_extension_impl,
        tag_classes = {"data": data},
    )
    
    ## MODULE.bazel in bar
    bazel_dep(name = "foo", version = "1.0")
    
    foo_data_deps = use_extension("@foo//:extensions.bzl", "data_deps_extension")
    foo_data_deps.data(version = "3.0")
    use_repo(foo_data_deps, "data_file")
    
    ## MODULE.bazel in root module
    bazel_dep(name = "foo", version = "1.0")
    bazel_dep(name = "bar", version = "1.0")
    
    foo_data_deps = use_extension("@foo//:extensions.bzl", "data_deps_extension")
    foo_data_deps.data(version = "2.0")
    use_repo(foo_data_deps, "data_file")
    

    Bu durumda, kök modül 2.0 veri sürümünü gerektirir. bar bağımlılığı için 3.0 gerekiyor. foo ürünündeki modül uzantısı doğru şekilde bu çakışmayı çözün ve veriler için otomatik olarak 3.0 sürümünü seçin. desteklenmektedir.

Üçüncü taraf paket yöneticisini entegre etme

Modül uzantısı önemli bilgilerin toplanması için bir yol sağladığından, grafikten alınan bilgileri kullanarak, çözmek için özel mantık bağımlılıklarını ve harici depoları tanıtmak için depo kurallarını kuralları birbirinden entegre eden kural kümelerini geliştirmeleri için paket yöneticileri için e-posta gönderebilirsiniz.

Daha fazla bilgi edinmek için lütfen modül uzantıları sayfasını okuyun. daha fazla bilgi edineceksiniz.

Bağımlılıkları getirmek için Bzlmod'u zaten kullanan kural setlerinin listesini aşağıda bulabilirsiniz bilgi almalısınız:

Sanal bir paket yöneticisini entegre eden minimal bir örnek örnekler depodur.

Ana makinedeki araç zincirlerini algılama

Bazel derleme kurallarının ana makinenizde hangi araç zincirlerinin olduğunu algılaması gerektiğinde ana makineyi incelemek ve video oluşturmak için kod deposu kurallarını araç zinciri bilgilerini harici depo olarak kullanır.

  • ÇALIŞMA ALANI

    Kabuk araç zincirini algılamak için aşağıdaki depo kuralından yararlanılır.

    ## local_config_sh.bzl
    def _sh_config_rule_impl(repository_ctx):
        sh_path = get_sh_path_from_env("SH_BIN_PATH")
    
        if not sh_path:
            sh_path = detect_sh_from_path()
    
        if not sh_path:
            sh_path = "/shell/binary/not/found"
    
        repository_ctx.file("BUILD", """
    load("@bazel_tools//tools/sh:sh_toolchain.bzl", "sh_toolchain")
    sh_toolchain(
        name = "local_sh",
        path = "{sh_path}",
        visibility = ["//visibility:public"],
    )
    toolchain(
        name = "local_sh_toolchain",
        toolchain = ":local_sh",
        toolchain_type = "@bazel_tools//tools/sh:toolchain_type",
    )
    """.format(sh_path = sh_path))
    
    sh_config_rule = repository_rule(
        environ = ["SH_BIN_PATH"],
        local = True,
        implementation = _sh_config_rule_impl,
    )
    

    Depo kuralını WORKSPACE'te yükleyebilirsiniz.

    ## WORKSPACE
    load("//:local_config_sh.bzl", "sh_config_rule")
    sh_config_rule(name = "local_config_sh")
    
  • Bzlmod

    Bzlmod ile aynı depoyu bir modül uzantısı kullanarak tanıtabilirsiniz. Bu, son dizinde @data_file deposunu sunmaya benzer. bölümüne ekleyin.

    ## local_config_sh_extension.bzl
    load("//:local_config_sh.bzl", "sh_config_rule")
    
    sh_config_extension = module_extension(
        implementation = lambda ctx: sh_config_rule(name = "local_config_sh"),
    )
    

    Ardından, MODULE.bazel dosyasındaki uzantıyı kullanın.

    ## MODULE.bazel
    sh_config_ext = use_extension("//:local_config_sh_extension.bzl", "sh_config_extension")
    use_repo(sh_config_ext, "local_config_sh")
    

Araç zincirlerini kaydedin ve yürütme platformları

Son bölümün ardından, depo barındırma araç zincirini tanıttıktan sonra (ör. local_config_sh), büyük olasılıkla bu bilgileri kullanabilirsiniz.

  • ÇALIŞMA ALANI

    WORKSPACE ile araç zincirini aşağıdaki yöntemlerle kaydedebilirsiniz.

    1. .bzl dosyasına araç zincirini kaydedebilir ve makroyu WORKSPACE dosyası.

      ## local_config_sh.bzl
      def sh_configure():
          sh_config_rule(name = "local_config_sh")
          native.register_toolchains("@local_config_sh//:local_sh_toolchain")
      
      ## WORKSPACE
      load("//:local_config_sh.bzl", "sh_configure")
      sh_configure()
      
    2. Alternatif olarak, araç zincirini doğrudan WORKSPACE dosyasına kaydedin.

      ## WORKSPACE
      load("//:local_config_sh.bzl", "sh_config_rule")
      sh_config_rule(name = "local_config_sh")
      register_toolchains("@local_config_sh//:local_sh_toolchain")
      
  • Bzlmod

    Bzlmod sayesinde register_toolchains ve register_execution_platforms API'ler yalnızca MODULE.bazel dosyasında kullanılabilir. Şu numarayı arayamazsınız: Bir modül uzantısında native.register_toolchains.

    ## MODULE.bazel
    sh_config_ext = use_extension("//:local_config_sh_extension.bzl", "sh_config_extension")
    use_repo(sh_config_ext, "local_config_sh")
    register_toolchains("@local_config_sh//:local_sh_toolchain")
    

WORKSPACE bünyesinde kayıtlı araç zincirleri ve yürütme platformları, WORKSPACE.bzlmod ve her bir Bazel modülünün MODULE.bazel dosyası şu komutu izler: araç zinciri seçimi sırasında öncelik sırası (en yüksekten en düşüğe):

  1. kök modülün ana makinesinde kayıtlı araç zincirleri ve yürütme MODULE.bazel dosyası yükleyin.
  2. WORKSPACE içinde kayıtlı araç zincirleri ve yürütme platformları ya da WORKSPACE.bzlmod dosya
  3. modüller tarafından kaydedilen araç zincirleri ve yürütme platformları. (geçişli) bağımlılıklarını ifade eder.
  4. WORKSPACE.bzlmod kullanılmadığında: WORKSPACE içinde kayıtlı araç zincirleri sonek.

Yerel depolar sunun

Yeni bir dosyaya ihtiyacınız olduğunda yerel depo olarak bir bağımlılığı veya hata ayıklama için bağımlılığın yerel sürümünü içeren bir dizinini harici depo olarak kullanır.

  • ÇALIŞMA ALANI

    WORKSPACE ile bu işlem iki yerel depo kuralıyla gerçekleştirilir: local_repository ve new_local_repository.

    ## WORKSPACE
    local_repository(
        name = "rules_java",
        path = "/Users/bazel_user/workspace/rules_java",
    )
    
  • Bzlmod

    Bzlmod ile, local_path_override - Bir modülü yerel yolla geçersiz kılın.

    ## MODULE.bazel
    bazel_dep(name = "rules_java")
    local_path_override(
        module_name = "rules_java",
        path = "/Users/bazel_user/workspace/rules_java",
    )
    

    Modül uzantısına sahip yerel bir depo sunmak da mümkündür. Ancak modül uzantısında native.local_repository çağıramazsınız. tüm yerel depo kurallarını daha da belirginleştirmek için sürekli olarak çalışıyoruz ( İlerleme durumunu görmek için #18285) girin. Daha sonra modüldeki ilgili yıldızı local_repository çağırabilirsiniz. uzantısına sahip olur. Projenizin özel bir sürümünü uygulamak da Bu, sizin için engelleyen bir sorunsa local_repository depo kuralını uygulayın.

Hedefleri bağla

WORKSPACE'teki bind kuralı kullanımdan kaldırıldı ve Bzlmod'da desteklenmez. Bir hedefe Google Ads'de özel //external paketi. Buna bağlı olarak tüm kullanıcılar taşınmalıdır.

Örneğin, abone sayınız

## WORKSPACE
bind(
    name = "openssl",
    actual = "@my-ssl//src:openssl-lib",
)

Bu, diğer hedeflerin //external:openssl bağımlılığına bağlı olmasına izin verir. Şunları taşıyabilirsiniz şu şekilde uzaklaştırırsınız:

  • Tüm //external:openssl kullanımlarını şununla değiştir: @my-ssl//src:openssl-lib.

  • İsterseniz alias derleme kuralını da kullanabilirsiniz

    • Aşağıdaki hedefi bir pakette tanımlayın (ör. //third_party)

      ## third_party/BUILD
      alias(
          name = "openssl,
          actual = "@my-ssl//src:openssl-lib",
      )
      
    • Tüm //external:openssl kullanımlarını şununla değiştir: //third_party:openssl-lib.

Taşıma

Bu bölümde, Bzlmod taşıma işleminizle ilgili faydalı bilgiler ve yol gösterici bilgiler sunulmaktadır bahsedeceğim.

WORKSPACE'teki bağımlılıklarınızı öğrenin

Taşımanın ilk adımı, sahip olduğunuz bağımlılıkları anlamaktır. Google modelde tam olarak hangi bağımlılıkların ortaya çıktığını Geçişli bağımlılıklar genellikle *_deps ile yüklendiğinden WORKSPACE dosyası makrolarında da yer alır.

Çalışma alanı çözümlenen dosyayla harici bağımlılığı inceleyin

Neyse ki bayrağı --experimental_repository_resolved_file yardımcı olabilir. Bu işaret temel olarak bir "kilit dosyası" oluşturur /tüm harici kullanıcılar bağımlılıklarını görebilirsiniz. Daha fazla bilgiyi bu blog'da bulabilirsiniz. yayın.

İki şekilde kullanılabilir:

  1. Belirli hedefleri oluştururken gereken dış bağımlılıklarla ilgili bilgileri getirmek.

    bazel clean --expunge
    bazel build --nobuild --experimental_repository_resolved_file=resolved.bzl //foo:bar
    
  2. WORKSPACE dosyasında tanımlanan tüm harici bağımlılıkların bilgilerini getirmek için.

    bazel clean --expunge
    bazel sync --experimental_repository_resolved_file=resolved.bzl
    

    bazel sync komutunu kullanarak, WORKSPACE dosyası, şunları içerir:

    • bind kullanım
    • register_toolchains ve register_execution_platforms kullanım

    Ancak, projeniz platformlar arasıysa bazel senkronizasyonu bazı cihazlarda bozulabilir belirli depo kuralları yalnızca desteklenen platformlarda doğru şekilde çalışabileceğinden, platformlar.

Komutu çalıştırdıktan sonra harici bağımlılıklarını resolved.bzl dosyasına koyabilirsiniz.

bazel query ile harici bağımlılığı inceleyin

Ayrıca bazel query hizmetinin depo kurallarını incelemek için kullanılabileceğini

bazel query --output=build //external:<repo name>

Daha kullanışlı ve hızlı olsa da bazel sorgusu harici bağımlılık sürümü, Bu nedenle kullanırken dikkatli olun! Harici sorguları sorgulama ve denetleme Bzlmod ile olan bağımlılıkları yeni bir alt komut'u ekleyin.

Yerleşik varsayılan bağımlılıklar

--experimental_repository_resolved_file tarafından oluşturulan dosyayı kontrol ederseniz WORKSPACE'inizde tanımlanmamış birçok bağımlılık bulacaksınız. Bunun nedeni, Bazel'in kullanıcının WORKSPACE öğesine önek ve sonek eklemesidir bazı varsayılan bağımlılıkları yerleştirmek için dosya içeriğini kullanarak yerel kurallar (ör. @bazel_tools, @platforms ve @remote_java_tools). Entegre Bu bağımlılıklar yerleşik bir modülle tanıtılıyor. bazel_tools , diğer tüm öğeler için varsayılan bir bağımlılıktır Bazel modülü.

Kademeli taşıma için karma mod

Bzlmod ve WORKSPACE yan yana çalışarak bağımlılıkların taşınmasına olanak tanır dosyasını Bzlmod'a taşımayı öğreteceğim.

WORKSPACE.bzlmod

Taşıma sırasında Bazel kullanıcılarının ve Bzlmod etkin değilse. WORKSPACE.bzlmod desteği daha akıcı bir süreç.

WORKSPACE.bzlmod, WORKSPACE ile tam olarak aynı söz dizimine sahiptir. Bzlmod etkinleştirildiğinde Çalışma alanı kökünde bir WORKSPACE.bzlmod dosyası da varsa:

  • WORKSPACE.bzlmod geçerlilik kazanır ve WORKSPACE içeriği yoksayılır.
  • Hiçbir önek veya sonek WORKSPACE.bzlmod dosyasına eklendi.

WORKSPACE.bzlmod dosyasını kullanmak taşıma işlemini kolaylaştırabilir, çünkü:

  • Bzlmod devre dışı bırakıldığında, orijinal WORKSPACE dosyası.
  • Bzlmod etkinleştirildiğinde, geriye kalan bağımlılıkları daha iyi takip edebilirsiniz. WORKSPACE.bzlmod ile taşıyın.

Depo görünürlüğü

Bzlmod, belirli bir veri deposundan başka hangi depoların görülebileceğini Depo adlarını ve katı kurallı kod deposunu deps inceleyin.

Burada, farklı türlerdeki depo görünürlüklerinin depolarını da içerir.

Ana depodan Bazel modül depolarından Modül uzantı depolarından WORKSPACE depolarından
Ana depo Gösteriliyor Kök modül doğrudan bağımlılıksa Kök modül, modül uzantısını barındıran modülün doğrudan bağımlılığıysa Gösteriliyor
Bazel modülü depoları Doğrudan satış Doğrudan satış Modül uzantısını barındıran modülün doğrudan açıklamaları Kök modülün doğrudan açıklamaları
Modül uzantısı depoları Doğrudan satış Doğrudan satış Modül uzantısını barındıran modülün doğrudan açıklamaları + aynı modül uzantısı tarafından oluşturulan tüm depolar Kök modülün doğrudan açıklamaları
WORKSPACE Kod Depoları Tümü görünür durumda Görünmez Görünmez Tümü görünür durumda

Taşıma süreci

Tipik bir Bzlmod taşıma işlemi aşağıdaki gibi görünebilir:

  1. WORKSPACE'te hangi bağımlılıklarınızın olduğunu anlayın.
  2. Proje kökünüze boş bir MODULE.bazel dosyası ekleyin.
  3. WORKSPACE dosya içeriğini geçersiz kılmak için boş bir WORKSPACE.bzlmod dosyası ekleyin.
  4. Bzlmod etkin olacak şekilde hedeflerinizi oluşturun ve hangi deponun eksik.
  5. Çözülmüş bağımlılıktaki eksik deponun tanımını kontrol etme dosyası olarak kaydedebilirsiniz.
  6. Eksik bağımlılığı bir modül aracılığıyla Bazel modülü olarak tanıtma uzantısını kullanabilir veya daha sonra taşımak için WORKSPACE.bzlmod içinde bırakabilirsiniz.
  7. 4'e geri dönün ve tüm bağımlılıklar mevcut olana kadar tekrarlayın.

Taşıma aracı

Size, Google Etiket Yöneticisi'ni kullanabileceğiniz etkileşimli bir Bzlmod taşıma yardımcı komut dosyası size yardımcı olabilir.

Komut dosyası şunları yapar:

  • WORKSPACE çözümlenen dosyayı oluşturun ve ayrıştırın.
  • Çözümlenen dosyadaki depo bilgilerini insanlar tarafından okunabilecek şekilde yazdırın.
  • Bazel derleme komutunu çalıştırın, tanınan hata mesajlarını algılayın ve kolay bir yoludur.
  • BCR'de halihazırda bir bağımlılık olup olmadığını kontrol edin.
  • MODULE.bazel dosyasına bağımlılık ekleyin.
  • Modül uzantısı aracılığıyla bağımlılık ekleyin.
  • WORKSPACE.bzlmod dosyasına bir bağımlılık ekleyin.

Bu aracı kullanmak için en son Bazel sürümünün yüklü olduğundan emin olun ve şu komutu kullanın:

git clone https://github.com/bazelbuild/bazel-central-registry.git
cd <your workspace root>
<BCR repo root>/tools/migrate_to_bzlmod.py -t <your build targets>

Bazel modüllerini yayınlayın

Bazel projeniz başka projelere bağımlıysa projesinin Bazel Central Registry'de bulunması gerekiyor.

BCR'de projenizi kontrol edebilmek için şu kaynak arşiv URL'sine ihtiyacınız vardır: gösterir. Kaynak arşivi oluştururken dikkate almanız gereken birkaç nokta vardır:

  • Arşivin belirli bir sürümü işaret ettiğinden emin olun.

    Bzlmod'un şunları yapması gerektiğinden, BCR yalnızca sürümü belirlenmiş kaynak arşivleri kabul edebilir ve bağımlılık çözümü sırasında sürüm karşılaştırması yapmalısınız.

  • Arşiv URL'sinin sabit olduğundan emin olun.

    Bazel, arşivin içeriğini karma değeriyle doğrular. Bu nedenle, indirilen dosyanın sağlama toplamının hiçbir zaman değişmediğinden emin olun. URL lütfen sürüm sayfasında bir sürüm arşivi oluşturup yükleyin. GitHub, gösteriyoruz. Kısaca, https://github.com/<org>/<repo>/releases/download/... kararlı olarak kabul edilir https://github.com/<org>/<repo>/archive/... ise değil. GitHub'ı kontrol edin Arşiv Denetimi Kesinti inceleyebilirsiniz.

  • Kaynak ağacın, orijinal deponun düzenine uyduğundan emin olun.

    Deponuz çok büyükse ve bir dağıtım oluşturmak istiyorsanız gereksiz kaynakları çıkararak küçültülmüş bir arşiv oluşturun. çıkarılmış kaynak ağacın, orijinal kaynak ağacının bir alt kümesi olduğundan emin olmaktır. Bu son kullanıcıların modülü sürüm dışı bir sürüme geçirmesini kolaylaştırır sürümü archive_override tarafından ve git_override.

  • En yaygın API'ler.

    Test modülü, kendine ait WORKSPACE ve MODULE.bazel'e sahip bir Bazel projesidir. kaynak arşivin bir alt dizininde bulunan ve üzerinde değişiklik yapılmayacaktır. Belge, görsel senaryoda entegrasyon testlerinden yararlanabilirsiniz. Kontrol et test modülünü inceleyin.

Kaynak arşiv URL'niz hazır olduğunda BCR katkısını izleyin yönergeleri izleyerek modülünüzü bir GitHub ile BCR'ye Çekme İsteği.

Şuralarda yayınla: Sizin için BCR GitHub Uygulaması kod deposunu kullanmanızı öneririz.

En iyi uygulamalar

Bu bölümde, performansınızı iyileştirmek için izlemeniz gereken birkaç en iyi uygulama ve dış bağımlılıklarınızı yönetmenize yardımcı olur.

Gereksiz bağımlılıkları getirmekten kaçınmak için hedefleri farklı paketlere bölün.

#12835'e bakın, dev burada bir derleme çalışması için test bağımlılığının gereksiz yere getirilmeye bir hedef belirleyebilirsiniz. Bu, aslında Bzlmod'a özgü değildir, ancak bu uygulamaların izlenmesi, geliştirici bağımlılıklarını doğru şekilde belirlemeyi kolaylaştırır.

Geliştirici bağımlılıklarını belirleme

Şu değerler için dev_dependency özelliğini doğru olarak ayarlayabilirsiniz: bazel_dep ve use_extension yönergelerini kullanarak bağımlı projelere uygulanmazlar. Kök modül olarak, Hedeflerinizin olup olmadığını doğrulamak için --ignore_dev_dependency işaretini kullanın geliştirici bağımlıları olmadan derlemeye devam edebilir.

Topluluk taşıma işleminin ilerleme durumu

Search Console'da bulunan Bazel Central Registry kullanıp kullanmadığınızı kontrol edin. İsterseniz programa katılabilirsiniz. GitHub tartışması: taşımanızı engelleyen bağımlılıkları olumlu oylayın veya yayınlayın.

Sorun bildirme

Bilinen Bzlmod için lütfen Bazel GitHub sorun listesini kontrol edin sorunları. Engellemeyi kaldırmanıza yardımcı olabilecek yeni sorunları veya özellik isteğinde bulunabilirsiniz taşımayı unutmayın!