如何让Bazel重新运行缓存测试?

我正在尝试分析和修复一个通常是绿色的不稳定测试。 我的问题是,一旦测试通过,Bazel就不会重新运行它,直到任何输入发生变化。 我看到你可以要求Bazel重新运行一个目标,但直到它第一次变成绿色(即,减轻一个不稳定的测试,而不是解决它) 有没有办法让Bazel运行测试,即使测试通过了? 我想要类似于bazel测试的东西--强制尝试=50//我的包:我的目标 如果此选项设置为“自动”(默认值),则Bazel仅在以下任何条件适用时才会重新运行测试: Bazel检测测试或其依赖项中的更改 测试标记为

bazel中的输出类型是什么?

在Bazel中,您可以定义属性类型,可以是int或string。。。或输出 将属性类型作为“输出”是什么意思 下面是一个例子: def _something(ctx): print("The username is: ", ctx.attr.username) print("boolean value is", ctx.attr.boolean) print("my age is:", ctx.attr.age

使用“bazel测试”时如何选择要运行的测试`

我有一个使用bazel作为构建和测试系统的回购协议。本回购协议包含python和golang。有两种类型的测试,单元测试和集成测试。我想在CI中的两个单独的测试步骤中运行它们。我想在添加新测试时自动在repo中发现新测试。我们目前正在使用bazel测试…。但这无助于我拆分单元测试和集成测试。是否有任何规则或现有方法可以做到这一点?谢谢。Bazel实际上没有单元与集成测试的直接概念,但它确实有测试“大小”的概念,或者测试有多“重”。概述了测试规则的size属性,同时给出了一个很好的概述 当测试大小

Bazel在宏中组合多个规则

我的项目结构中有多个子模块,这些基本上是文件夹,它们本身也是项目 对于给定的python项目,每个项目都有子项目。我希望能够编写一个宏,可以创建一组对给定子项目采取的操作 基本上,在工作区内,有以下内容: load("@io_bazel_rules_python//:python/pip.bzl", "pip_import" ) pip_import( name = "foo", requirements = "@subprojectname//:requirements.t

Bazel:不同构建选项的单独输出目录

Bazel为不同的编译模式(fastbuild、opt、dbg)提供了不同的输出目录,这允许它在您以调试模式编译应用程序后保持发布版本缓存的完整性。这很好 是否可以对不同的编译选项执行相同的操作

Bazel 将外部依赖项保存到项目存储库

“(新建)git_repository”和“(新建)http_archive”工作区规则处理外部项目的方式是,在构建或预取时,将任何外部依赖项复制到链接到工作区的临时目录,如${workspace}/bazel workspace/external/${external_DEP_NAME} 我想在我的repo中本地保存外部依赖项,所以如果远程存储库消失,我甚至可以在一台新机器上保存依赖项的副本,因为它没有被缓存 我是否可以在不编写自定义工作区规则的情况下以某种方式更改默认行为?我可能错了,但听起

在使用bazel时,如何在intellij中解析protobuf方法?

我遇到了一个问题,我有一个使用protobuf并使用bazel构建的工作java程序,但是intellij无法识别toByteArray方法。 我使用本地机器,将工作区导入intellij并构建。然后,我添加了以下java主类: package src; import demo.PersonOuterClass; public class Main { public static void main(String argv[]) { byte[] ba = PersonOut

如何在bazel中配置sh_测试依赖项?

我有一个test1,它是一个sh_测试,还有一个test2sh_测试,它依赖于test1,但我似乎不能将test1作为依赖项添加到test2中。如果test1完成并成功,是否有办法只运行test2?将test1分成两部分: “构建”部分:生成test2需要使用的输出的构建规则 “断言”部分:测试所做的任何断言 测试规则(test1和test2)可以依赖于genrule并测试输出的正确性。将test1分为两部分: “构建”部分:生成test2需要使用的输出的构建规则 “断言”部分:测试所做的

bazel build//my_folder/my_subfolder:node_模块中//(双正斜杠)和:(冒号)的含义是什么?

我不理解以下语法: bazel build //<my_dir>/<my_subdir>:node_modules bazel构建//:节点模块 我相信/是指定相对于工作区的路线,但:的含义我不清楚 类似地,您可以使用bazel build…,这似乎可以在一个工作空间中构建所有子文件夹 这些奇怪的符号是什么?文件记录在哪里?相关文件如下: 此处记录了与外部依赖项相关的其他语法: 像…这样的东西被称为目标模式,并记录在这里: 我相信/是指定相对于工作区的路线 正确

Bazel是如何如此快速地跟踪文件的?

我找不到任何关于Bazel如何跟踪文件的信息。文档没有提到他们是否使用facebook的watchman之类的东西 它显然需要某种散列并进行比较,但它究竟是如何做到的呢?因为它知道如果事情没有立即改变,它将无法在这么短的时间内读取所有这些文件 另外,如果你正在观看许多文件,那么像谷歌这样的mono repo会占用很多空间吗?我知道这是扩展git的问题之一,因为除非使用一些智能缓存,否则“git状态”将变慢。Bazel使用操作系统文件系统监视API,如Linux上的inotify和Mac OS上的

Bazel android二进制文件中.so文件的名称冲突

我正在将一个cc_库链接到一个android_二进制文件,并得到一个命名问题。有人能告诉我怎么解决吗 cc\u库: cc_library( name = "native_library", srcs = glob(["libs/**/*.so"]) ) libs目录的内容: libs ├── armeabi │   ├── libSound.so │   ├── libSec.so │   ├── libWatch.so │   └── libTec.so ├── armeab

Bazel-如何递归地全局删除_包以忽略maven输出?

我有一个mutli模块项目,我正在从Maven迁移到Bazel。在这个迁移过程中,人们需要能够在两个构建系统上工作 在mvn干净安装之后Maven将一些BUILD文件复制到target文件夹中。 当我稍后尝试运行bazel build/…时,它认为各种目标文件夹下的构建文件是有效的包,并且由于某些不匹配而失败 我已经看到已删除的\u软件包,但如果需要,我将指定要“删除”的文件夹列表,而对于200多个模块,我无法这样做。 我正在寻找能够说bazel build/--已删除的\u包=**/targe

如何在bazel规则中获取工作区目录

我要使用诸如clang format、clang tidy之类的clang工具或生成类似工具,我需要知道.bzl文件中的工作区目录。我怎样才能得到它?考虑下面的示例,在这里我只想打印工作区中所有SRC文件的完整路径: #简单_示例。bzl def _impl(ctx): workspace_dir = // ---> what comes here? <--- command = "\n".join([echo %s/%s" % (workspace_dir, f.short

Bazel 我可以根据不同的cc_二进制文件在cc_库中设置不同的宏值吗?

有一个名为“L”的cc_库目标,cc_二进制目标“a”、“B”、“C”依赖于它 库L实现了一个事务框架,包含一个长度为100的纯字符数组,数组上有很多复杂的逻辑 现在,目标B需要更大的数据大小,但目标a和C需要更小的数据大小以同时容纳更多事务 使用makefile时,一种可行的方法是在L中使用ifdef/else为长度设置不同的宏值。然后循环A、B、C,用不同的-D=A、-D=B和-D=C构建它们。因此,lib L在三个不同的二进制文件中具有不同的数组长度 有没有更好的方法来实施它? 我可以在b

Bazel 如何不在每次调用时重建工件

我想在工作区内下载并构建ruby。我一直试图通过模仿规则来实现这一点。我让那部分工作。我遇到的问题是,每次调用ruby\u download\u sdk时,它都会重建openssl和ruby工件。在下面的代码中,下载工件被缓存,但openssl和ruby的构建总是被执行 def ruby_download_sdk(名称,版本=None): #TODO检测操作系统和arch 操作系统,arch=“osx”,“x86_64” _ruby_下载_sdk( name=name, 版本=版本, ) _注册

何时在Bazel中为生成文件(*.BUILD)添加前缀 在C++单元测试教程中,Bazel建议将根级 GTest.Bug < /Co>文件添加到工作区根目录中,以便正确地将谷歌测试集成到测试项目中。

为什么要创建一个新的构建文件并向其添加gtest前缀,而不是向工作区中的现有构建文件添加一个新的构建规则?这只是一个次要的样式首选项吗?因为如果您在工作区的某个地方(例如在//第三方/gtest/BUILD下)添加了一个构建文件,那么该文件将在那里创建一个包 然后,如果在该构建文件中声明了目标,那么它们的文件会存在于//third_party/gtest下,还是存在于http_archive下载的zip文件中?如果是前者,则不需要http_归档,因为文件已经在源树中;如果是后者,则生成文件引用其

链展开_模板并在一个bazel规则中运行

我试图编写一个自定义规则,在那里我首先从模板生成文件,然后将这个文件传递给脚本,生成一些C++标题,这些标题是我的规则的输出。< /P> def\u msg\u library\u impl(ctx): #对于deps中的每个目标,打印其标签和文件。 对于枚举中的源(ctx.attr.srcs): 打印(“文件=”+str(源)) out\u header=ctx.actions.declare\u文件(“some\u header.hpp”) out\u arguments=ctx.actio

如何使用bazel方面向下传播数据构建链

假设我有一个简单的java程序,包括两个类: 示例,示例2 以及另一个使用这两个类的类: examplesage 我有相应的bazel java_库类构建目标: example,example2,examples\u用法 因此,在构建示例使用之前,需要编译example和example2 我想使用bazel aspects传播技术从所有三个目标累积信息,我该如何做?下面是一个累积此构建链中源文件数量的示例: def _counter_aspect_impl(target, ctx): sou

获取给定bazel目标的特定属性的值

我相信这是有据可查的,但在任何地方都找不到答案 如果我有: ```bazel_rule( name = "foo", srcs = ["foo.cpp"], attr_bar = "bar" )``` 如果在Starlark(.bzl)文件中引用了此规则(//src:foo),如何查询目标以获取特定属性的值。e、 g.get\u属性(“//src:foo”,“attr\u bar”)在本例中应返回“bar”。这取决于您是尝试从a、a还是a读取属性 简短答覆: 宏无法读取

bazel缺少stddef.h和其他Ubuntu 18.04的依赖项声明

我试图建立一个现有的项目使用bazel,但得到的形式投诉 ERROR: .../BUILD:115:1: Couldn't build file xxx.o: undeclared inclusion(s) in rule '@yyy: this rule is missing dependency declarations for the following files included by zzz.c': '/usr/lib/gcc/x86_64-linux-gnu/7/include/s

Bazel 如何使用Stardoc为多个文件生成文档?

我无法使用Stardoc 0.3.0和bazel 0.24.1在单独的文件中为多个bazel规则生成文档 这是我的设置。在单独的文件中有三条bazel规则 BUILD bzl\u库( name=“bzl”, srcs=[“antlr2.bzl”、“antl3.bzl”、“antl4.bzl”], deps=[ “@bazel_skylib/:bzl_库”, ], ) stardoc( name=“单个单据”, input=“antlr2.bzl”, out=“antlr2_single.md”,

如何使bazel目标依赖于另一个构建文件中的所有目标

我有一个用例,对于一个目标的DEP,我需要依赖于另一个构建文件的所有目标。该生成文件有大约100个目标,因此我不可能写下所有目标,有没有更快的方法来指定依赖项?您可以创建一个宏,该宏遍历生成文件中的所有现有规则,并为其创建一个文件组。另一个生成文件将依赖于此文件组 我们有一个存根示例,可以找到所有cc_库规则并将它们聚合在一起。现在是404。食谱似乎已经不存在了。是否有其他链接?关键可能是native.existing_rules函数。

将Bazel目标限制到特定平台

我有一个只能为Linux构建的目标(在本例中,因为它依赖于仅在Linux上可用的系统调用,并且不希望尝试实现这种跨平台)。如何在我的BUILD文件中表达这一点 我可以从中看到Linux平台定义为@bazel_tools//platforms:Linux,但我不清楚如何利用它来限制目标。尝试在与兼容的中指定此项会导致如下错误: (13:27:09) ERROR: /foo/BUILD:4:1: in compatible_with attribute of go_library rule //fo

减少bazel内存使用

我在一台内存为4GB的计算机上使用bazel(用于编译tensorflow项目)。但是,Bazel没有考虑我拥有的内存量,产生了太多的作业,导致我的机器交换,导致构建时间更长 我已经在我的~/.bazelrc build --ram_utilization_factor 30 test --ram_utilization_factor 30 但这没有帮助。如何理解这些因素?我是否应该随机试用一些其他标志?一些其他标志可能会有所帮助: --host_jvm_args可以通过设置-Xms和/或-

Bazel 如何确定用户是否正在从Skylark生成调试

Skylark中的ctx变量是否有办法确定用户是否使用调试模式(-c dbg)进行构建。我想在Skylark中做出与此相关的决策。print(ctx.var[“编译模式]) 值将是“快速构建”、“dbg”或“opt”。print(ctx.var[“编译模式”) 值将为“快速构建”、“dbg”或“opt”

如何使用Bazel包含已构建的静态库(.a文件)?

我试图使用Bazel包含一个小的静态库,但是无论我尝试了什么方法,我似乎都遇到了一个错误 静态库由我创建,非常简单。在另一个.cc文件中,我只调用这个库中的三个函数。虽然我能够使用Makefile构建一个可执行文件,但我无法使用bazel获得相同的输出 我的生成文件: cc_library( name="mylib", srcs = ["lib/mylib.a"], ) cc_binary( name="main", srcs = ["main.cc", "include/add.h", "i

Bazel在使用maven_jar规则时无法构建项目

我进行了一些重构,以便从我的工作区文件中调用此设置函数: load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kotlin_repositories", "kt_register_toolchains") load("@build_bazel_rules_swift//swift:repositories.bzl", "swift_rules_dependencies") load("@build_bazel_rules_apple//apple

Bazel适用于带有“a”的包装;引导->;配置->;制造;建造?

我正在尝试在Bazel构建中使用和扩展。这些库的构建过程似乎是: ./bootstrap mkdir build cd build ../configure make 在更经典的configure&&make工作流中,这是一个我以前从未见过的细微变化 有没有人能在Bazel的领导下建立这样一个图书馆? 有谁有我可以借鉴的公开例子吗? 我发现最接近于支持这一点的是,它似乎没有引导步骤的概念。即使是黑客攻击,它似乎也不起作用,因为引导程序脚本最终失败: mkdir: cannot creat

在不修改项目/工作空间的情况下配置bazel工具链

我有一个Bazel项目(新的tcmalloc),我正试图集成到一个典型的GNU Make项目中,该项目使用自己的编译器/libc++构建。我们的目标是不让上游项目分岔 如果我正确地把所有C++选项传递给BAZEL(一组代码是“代码> -NoSTDIMC++-I ”),Bazel是UpHyth包含路径(/home /vLoVix/MyPosi/DePS/TooScLoCyB++/Buto/IsCype)引用执行根外的路径。< /C>(TCMOLLC是Git子模块兄弟[@代码> DEPS/TCMal

保存文件时,如何使用Bazel自动构建和测试?

我正在使用它来构建我的项目。今天,我必须通过命令行运行bazel build,以触发我的构建。 有没有一种方法可以在源文件更改时自动触发此操作?是一种用于在源文件更改时构建Bazel目标的工具 安装后,使用ibazel而不是bazel(示例:ibazel build//path/to/my:target),它将监视您的文件,并在更改文件时重建目标 Bazel watcher支持构建,测试,以及运行

使用Bazel使用gflags支持编译glog失败

当我尝试使用Bazel编译带有gflags支持的glog时,我失败了。再现此问题并显示编译错误消息的github repo如下所示: 我怀疑出现问题是因为glog正在查找并使用gflags发布的“config.h”文件。但是,我不理解为什么会发生这种情况,以及为什么构建文件的当前结构会导致此类错误。我发现的一个解决方案是为gflags提供我自己的构建文件,其中配置位于单独的依赖项中(在我的示例中,glog就是这样做的) 如果您能帮助我理解本例中的问题,我将不胜感激。问题在于gflag的构建文件包

Bazel 为什么不建议使用ram\u利用率\u因子

我想知道为什么不建议(从文档中)增加——ram\u利用率\u系数: 此选项采用整数参数,指定系统RAM Bazel应尝试用于其子流程的百分比。此选项影响Bazel将尝试并行运行的进程数。默认值为67。如果并行运行多个Bazel构建,则为该选项使用较低的值可以避免抖动,从而提高总体吞吐量。不建议使用高于默认值的值。请注意,Bazel的估计非常粗略,因此实际RAM使用可能比指定的要高得多或低得多。还要注意,此选项不会影响Bazel服务器本身将使用的内存量 由于Bazel无法知道一个操作/工作人员使用

Bazel:testng宏

我试图在Bazel中创建一个宏来包装java_test以运行testng,但是我在传递testng文件名时遇到了麻烦 到目前为止我有 加载(“@bazel_skylib/:lib.bzl”,“路径”) def java_testng(文件,deps=[],**kwargs): native.java_测试( name=path.split_扩展名(文件)[0], srcs=[file], 使用_testrunner=False, main_class='org.testng.testng', d

Bazel 使用标签路径检查文件位置是否存在

是否有一种简单的方法来获取路径对象,以便检查给定的标签路径是否存在。例如,假设path.exists(“@external\u project\u name/:filethatthaghtexist.txt”):。我可以看到存储库上下文中有这样的内容。但我需要有一个包装库规则。是否可以改为在宏或Skylark本机调用中执行此操作?即使使用存储库规则,我在这方面也遇到了很多问题,因为您已经指出: 如果使用不存在的路径创建标签,将导致生成失败 但如果您愿意执行存储库规则,这里有一个可能的解决方案 在

如何在Bazel v0.19+;中使用JAR工具;?

从Bazel v0.19开始,如果您有Starlark(以前称为“Skylark”)代码引用@Bazel_tools//tools/jdk:jar,则在构建时会看到如下消息: WARNING: <trimmed-path>/external/bazel_tools/tools/jdk/BUILD:79:1: in alias rule @bazel_tools//tools/jdk:jar: target '@bazel_tools//tools/jdk:jar' depends o

Bazel 将py_图像规则的输出加载到Docker

我已在我的BUILD文件中定义了一个基本py_图像规则: load("@io_bazel_rules_docker//python3:image.bzl", "py3_image") py3_image( name = "app_image", base = ":base_image", srcs = ["serve.py"], deps = [ "@mi_proto//:proto", ] ) 如何使此规则的结果在Docker中可用?我想

构建文件中的Bazel选项

每次为特定目标调用bazel时,我都需要设置一些。例如,bazel build-collect_code_coverage//:target。如何避免在命令行中显式地提供构建选项,以便bazel build/:target隐式地应用构建选项-collect\u code\u coverage 我找到的最接近的解决方案是使用,但它不允许我在目标级别配置生成选项。在没有\u标志的情况下运行bazel build//:target//:target\u时,您希望发生什么?@BrianSilverman

使用多个编译器进行Bazel编译

我有一个非常简单的测试用例,具有以下结构: project | |-- app | | | |-- BUILD | |-- *.cpp *.h | |-- lib | | | |-- BUILD | |-- *.cpp *.h | |-- WORKSPACE app包含一条cc_binary规则,而lib--仅cc_库,它被编译到共享库中并链接到可执行文件 我遇到的问题是,我需要使用gc

Bazel py_测试的测试执行依赖关系

我正在为Python库编写一个集成测试(py_测试)。现在,只有当一组其他的py_测试单元测试成功完成时,才有必要运行这个测试 我还没有找到在Bazel中添加这种测试依赖项的方法。很抱歉,这是不可能的 操作不能声明对测试操作的依赖关系 也许您可以通过只执行一个测试或添加标记(阶段1、阶段2)来解决此问题: 对不起,这是不可能的 操作不能声明对测试操作的依赖关系 也许您可以通过只执行一个测试或添加标记(阶段1、阶段2)来解决此问题: 不过,这已经走了多远?目前,Bazel在构建阶段(编译阶段和执行

从源文件路径派生Bazel标签

给定工作区中源文件的路径,如何导出Bazel用于引用该文件的标签。这似乎取决于存在什么包。例如,如果我有以下结构: . ├── BUILD ├── WORKSPACE └── src └── bar └── foo.go . ├── BUILD ├── WORKSPACE └── src ├── BUILD └── bar ├── BUILD └── foo.go 然后,src/bar/foo.go的标签是//src/b

bazel升级后的构建中断

我最近将bazel升级到0.25.2。(忘记了哪个版本,但处于低0.20) 但由于升级buchgr/bazel remote的bazel版本失败,出现以下错误: ERROR: /Users/<user>/Workspace/bazel-remote-cache/WORKSPACE:1:1: name 'http_archive' is not defined ERROR: /Users/<user>/Workspace/bazel-remote-cache/WORKSPA

如何查找bazel目标生成的可执行文件

我试图bazel运行//foo,而不获取构建步骤中输出的所有信息行。跟踪此功能请求,但尚未实现。为了实现这一点并使其独立于平台,我一直在尝试找到一个bazel query/aquery/cquery命令,该命令告诉我bazel目标生成的可执行文件(基本上是bazel run//foo应该运行的任何东西) 我的工作是编写一个bash脚本,调用buildout=$(bazel build//$target--color=yes 2>&1),然后在build命令成功退出时直接运行可执行文件。我已经对各

Bazel:在多个http_归档构建文件之间共享宏

我的项目依赖于一些外部库,我必须自己管理这些库。因此,我的工作区: http\u存档( name=“外部库组件1”, build_file=“//第三方:外部_lib_组件1.build”, sha256=“xxx”, URL=[”https://example.org/external_lib_component1.tar.gz"], ) http\u档案( name=“外部库组件2”, build_file=“//第三方:外部_lib_组件2.build”, sha256=“yyy”, UR

Bazel DefaultInfo和PyInfo之间的关系是什么

我不清楚DefaultInfo运行文件的可传递_文件和PyInfo可传递_源之间有什么区别。它们是多余的还是有重要区别 例如,我有一个自定义的starlark规则,我想将其作为PyInfo提供程序来遵循,但我想添加一个额外的提供程序,因此我不能使用本机py_库规则 transitive_sources = [dep[PyInfo].transitive_sources for dep in ctx.attr.deps] return struct(providers = [

Bazel查询除源文件外的所有类型,即反向类型搜索

我运行了一个bazeldeps查询,其输出配置为--output label\u kind,发现大量源文件点击。是否有从结果中排除源文件的机制,某种反向搜索保留除源类型以外的所有类型?我在想象可能是这样的 bazel query "kind( ! source , deps(...))" 我在一个应用程序中使用的标签上做了一个快速值计数表,发现大部分DEP只是源文件 > bazel query "deps(//my_package/my_subpackage:my_target_app)

  1    2   3   4   5  ... 下一页 共 5 页