在我的skylark(bazel)规则实现中,我有一个depset of,从中提取一个depset of
在公共属性中,我发现所有skylark规则都可能有一个属性,在这个属性中我可以给出一个自由字符串列表
我有没有办法拿到原始规则的标签
(我的最终目标是从原始depset中提取源于带有标记“X”的规则的文件。)规则通过向下游传播信息(根据它们向规则传播)。提供者是规则可以返回或不返回的信息(结构)。我发现将提供者视为规则可以选择实现的接口很有用。例如,返回 CX提供者的SkyLyk规则可以看作
我试着用
超时=中等,
在我的一个cc_测试构建规则中,但当我运行测试时,我得到:
错误:/home/miennaco/peloton技术代码/车辆/tda2/更新程序/构建:66:15:回溯(最近一次呼叫最后一次):
文件“/home/miennaco/peloton技术代码/vehicle/tda2/updater/BUILD”,第64行
cc_测试(name=“som_updater_lib_test”,tim…,)
文件“/home/miennaco/peloton技术代码/vehicl
正如bazel测试百科全书所说,UTC是bazel时区。我想知道有没有办法让bazel使用system zone,即Local 您可以使用--action\u env传递环境值,例如
bazel test --test_output=all --action_env=TZ=Local :tz_test
INFO: From Testing //:tz_test:
==================== Test output for //:tz_test:
timezone: Local
==
为了提高(增量)加载性能,我想将生成的巨大BUILD.bazel文件拆分成更小的.bzl文件
在每个.bzl中,我计划创建一个宏foo,其中包含实际的规则调用:
def foo():
foorule("a")
foorule("b")
...
在BUILD.bazel中,我会有(很多)负载,比如:
load("foo.bzl", foo_0 = "foo")
load("other/foo.bzl", foo_1 = "foo")
...
然后通过以下方式触发BUIL
外部工具是否有可靠的方法引用Bazel生成的文件?更具体地说:如何将目标路径转换为bazel bin(或更多)路径
我可以确定目标的输出:
$bazel query'labels(out,//bababot:bababot\u server\u kube\u dev\u deployment\u json)'
//bababot:bababot_server_kube_dev_deployment.json
//bababot:bababot\u server\u kube\u dev\u d
我们正在考虑从Make迁移到Bazel。为了简化转换,我希望让bazel test(无标志/选项)运行当前目录的测试(如果有)
因此,我的bazel-test将查找当前目录的构建文件,而不是*\u-test规则并运行它们。您可以使用all目标模式匹配当前包中的所有目标:bazel-test:all
您可以在此处阅读更多信息:
但是请注意,如果当前包中没有测试目标,bazel将给出一个错误:“错误:没有找到测试目标,但请求了测试。”。在这种情况下,bazel将给出一个退出代码4:我建议创建一个名为
是否有方法标记某些--test_env值以不影响测试结果的可缓存性
我有一个场景,其中存在一个固定的n测试资源池。我使用--local\u test\u jobs=n将测试并行化的级别设置为不超过这个池的大小。资源由一个小守护进程管理,该守护进程在调用bazel test之前启动。使用--test\u env传入此守护程序的端口。除非我们希望使用固定端口号,否则每次传入不同的端口号时,bazel test将拒绝使用缓存的测试结果,因为操作环境已更改
这可能吗?如果没有,是否有其他机制可以提供类似
我想比较两个规则,看看它们是否相同(特别是,我想能够在提交之前和之后测试bazel目标,看看它是否已更改)
是否有一种方法可以实现这一点,可能是使用bazel query?您可以尝试使用--output=build使用bazel query在更改前后打印规则,并对结果进行比较。有关更多信息,请参见。您可以尝试使用--output=build进行bazel查询,让bazel打印规则,并在更改前后展开所有内容(例如,计算宏、展开全局、计算表达式等),然后比较结果。有关更多信息,请参阅
我的库支持Bazel构建,并且依赖于Maven Central。我的图书馆的用户。如何做到这一点
gRPC 1.17取决于番石榴26。然而,Guava 27增加了对com.google.Guava:failureaccess的依赖。通常,使用gRPC的应用程序只需使用新版本创建自己的native.maven_jar(),并禁用gRPC对native.maven_jar()的调用。然后,这将“升级”gRPC和应用程序使用的@com\u google\u guava\u guava存储库
但是@co
我正在使用巴泽尔与戈朗,但问题是没有去具体。我有一个通用的go目录结构:
cmd/
├── mycommand/
│ ├── BUILD.bazel
│ ├── main.go
│ └── somefolder
│ └── other.go
├── othercommand/
│ ├── BUILD.bazel
│ └── main.go
pkg/
└── mypackage/
├── BUILD.bazel
└── init.go
BUILD.b
我想在动态模式下构建我的cc_binary目标linkstatic=False,但不修改目标定义。
我的用例:我希望在CI中构建静态二进制文件,但出于开发目的,我希望使用动态链接来加速增量构建。可能bazel构建/测试调用中的某个标志是最好的检查该标志
我有一个外部库ace.so
cc_library(
name='ace',
hdrs=glob(['path/to/ace/**']),
srcs=['path/to/ace.so'],
)
我如何使用bazel链接到该库?我知道何时直接调用gcc/g++,但我不确定如何从bazel获得相同的行为
我尝试将-l:ace.so(也是-Wl,-l:ace.so)添加到copts,但bazel似乎没有将其传递到gcc或添加到用于链接器参数的@文件中
我尝试了nocopts=
我正在构建的bazel二进制文件在分析阶段未成功完成。我可以使用哪些标志和工具来调试分析期间失败的原因
当前,清理构建返回以下输出
ERROR: build interrupted
INFO: Elapsed time: 57.819 s
FAILED: Build did NOT complete successfully (133 packages loaded)
ERROR: build interrupted
INFO: Elapsed time: 55.514 s
FAILED: B
我有一个创建文件夹的规则(untars a tar.gz),我想直接使用这个文件夹作为cc_二进制文件的数据。我能找到的唯一方法是创建一个中间文件组,将创建的文件夹作为源
虽然它可以工作,但需要规则的用户创建一个中间文件组,并引入一些命名问题,因为文件组的名称不能与创建的文件夹名称相同
这就是我所拥有的
# rules.bzl
def _untar_impl(ctx):
tree = ctx.actions.declare_directory(ctx.attr.out)
ctx.
我们经常需要每个技术堆栈的通用规则组合。
这目前浪费了工作空间中的大量空间,它们应该在多个repo上保持同步。它在buildifier之后有50多行,包含太多的URL、版本和哈希
现在,假设我有一个“技术堆栈”回购协议,并做类似的事情
load("@techstack_repo//mylang.bzl", "load_rules")
load_rules()
如果load_rules将加载并初始化固定版本的规则,例如rules_go、bazel gazelle、rules_docker、rul
我想使用pkg_tar()创建一个二进制文件和它所依赖的所有库的tarball。我可以使用
deps = native.existing_rule('my_binary')['deps']
但是,列表中的项目缺少在cc\u binary()规则中指定的@repo\u name/前缀。例如,@system/:ace变为:ace;当我尝试在:ace上操作时,bazel正确地告诉我没有这样的目标
我已经查看了native.existing_rule返回的整个字典,没有找到丢失信息的方法。是否无法使用
我试图在Spark中运行“hello world”服务器,并使用Bazel构建它,但我遇到以下错误:
$ bazel run //:app
INFO: Analysed target //:app (0 packages loaded).
INFO: Found 1 target...
Target //:app up-to-date:
bazel-bin/app.jar
bazel-bin/app
INFO: Elapsed time: 0.201s, Critical Path: 0
我添加了一个注释处理器作为java_插件,并将其添加到java_库规则的插件部分。我想知道在注释处理器代码和javac编译器代码中分步执行bazel选项是什么?一种方法是使用--子命令运行bazel build。然后,Bazel将打印出它在构建期间执行的所有命令。然后,您可以找到感兴趣的javac调用,复制命令行(包括cd部分,以便位于正确的目录中),修改命令行以包含调试选项,然后手动运行它。然后您可以像调试任何java程序一样调试它
需要注意的一点是,bazel将只打印它在该构建中实际运行的命
我找不到任何关于如何使用Bazel创建iOS框架的示例。有一个ios\u框架规则,但是作为构建系统的新手,我不确定如何使用它
这有可能创建一个框架吗?如果有,我将如何进行 这对你有用吗?为了让事情变得更简单,我取消了所有选项:
建造:
ios_framework(
name = "framework",
binary = ":framework_binary",
)
ios_framework_binary(
name = "framework_binary",
我正在尝试为其中一个包在bazel BUILD中编写genrule。其目的是规则必须在包源上应用一个修补程序。我写的如下-
genrule(
name = "patching_rule",
srcs = ["Package"],
outs = ["test_output.txt"],
cmd = "cd $(location Package); patch -p0 < /tmp/mypatch.patch",
)
genrule(
name=“修补规则”,
当使用distinct\u host\u configuration=true构建时,我希望能够在skylark规则实现中检测我是构建主机还是目标变量
具体来说,如果我正在构建一个主机工具,我想关闭go规则的种族检测功能,因为它可能非常昂贵,而且您不希望为用于执行构建步骤的工具打开它。原则解决方案是创建两个工具链,一个关闭了种族检测,另一个打开了种族检测,第一个用于主机,第二个用于目标。关闭围棋规则的某些功能到底意味着什么?这是否意味着规则将创建不同的操作?规则已经构建了所有操作,我们有多个输出
我有一个库,它依赖于由shell脚本生成的图形文件
我希望库在编译时使用shell脚本生成图形文件,这些文件应该像“data”语句一样进行复制,但是每当我试图使库依赖于genrule时,我都会得到
cc\U库规则//图形\U资源的deps属性中
genrule规则“//图形\u资源:资源\u gen\u规则”在此处放错位置
(应为cc_inc_库、cc_库、objc_库或
cc_原型库)
#这是正确的格式。
#在这里,我们希望通过程序运行所有shader.glsl文件
#归档工具(我们也在别处
我有一个项目,在一个相当复杂的构建系统中,在一个工作区中涉及多个构建文件。简而言之,我的目标是:对于某些特定的目标,我希望它的所有递归依赖项都使用一组额外的属性(copts/defines)来构建,而不是以任何其他方式构建这些依赖项目标。我还没有找到一个干净的方法
例如,目标G通常使用copts=[]构建。如果目标P依赖于目标G,并且我运行bazel build:P,那么我希望两个目标都使用copts=[“-DMY\u DEFINE”]以及目标G的所有依赖项来构建,等等
该参数以相反的方向传播:
标签: Bazel
opensusegoogle-coral
我尝试构建libedgetpuvonaopenSUSE-LEap 15.2。我已下载源代码并启动了使CPU=k8 libedgetpu,但失败:
ERROR: /root/.cache/bazel/_bazel_root/24b4ccf868afbcf3a4d007a13f6e3a01/external/flatbuffers/src/BUILD:40:1: undeclared inclusion(s) in rule '@flatbuffers//src:flatc':
this r
有没有办法在select或一些等效的动态机制中使用Xcode版本值
这样做的动机是,我们必须在管道和开发人员桌面上支持Xcode的多个修订版。当使用相同的构建基础结构支持多个Xcode修订时,最好以编程方式修改用于CFLAGS的命令行参数,例如指定不同的优化、调试和警告标志。例如,我们只想为Xcode 8.3或更高版本指定某些标志
我看到有xcode\u工具链和xcode\u版本的配置片段,但我不相信我可以选择这些。我们不希望通过命令行配置规范或动态生成BUILD文件(如果可能的话)告诉baze
我想对我克隆的一个使用bazel的项目进行修改。
该项目对另一个基于bazel的项目具有native.git_存储库依赖关系,该项目位于github。我还需要在依赖项项目中进行更改。
根据更新的项目更改bazel文件的最佳方法是什么?我尝试使用native.local_存储库并指向我的本地克隆存储库,但bazel失败:
错误:加载包“”时出错:读取扩展文件“bazel/repositories.bzl”时遇到错误:没有此类包“@xxxxxxxx//bazel”:/build/tmp/_-baze
如果我有一个使用bazel的monorepo,那么如何获得当前提交(与上一次提交相比)需要重建的目标列表
理想情况下,有一种方法可以从已更改的源文件返回到需要它们的直接和可传递的目标
如果我知道哪些目标需要重建,我就会知道哪些组件需要重新部署。不幸的是,目前还没有现成的解决方案。请参见对类似问题的讨论:
我可以在文档中看到,--javabase允许您参考特定的jdk二进制安装。
但是,为什么没有一种方法可以将JDK版本指定为散列键的一部分,并允许使用标记有该版本的任何JDK安装
java的moto在过去是一次编写,在任何地方运行,java的主目录是硬编码的,这个选项是很久以前添加的,以支持不同的JDK
我不知道为什么会这样做,但必须有一种方法来引用一个确切的JDK,即使它不在路径中,而且我们还需要区分不同的供应商
(如openjdk或Oracle)
我正在使用Bazel19,我想迁移到最新版本26。看起来很多事情都发生了变化,很难从发行说明中找出所有的变化。是否有任何文档/工具可以帮助从旧版本迁移到新版本在我看来,最简单的方法是从19到20,从20到21,等等进行增量更新
如果使用,版本切换很容易:
USE_BAZEL_VERSION=0.19.0 bazelisk测试//…
修复破损
增量版本和测试:USE_BAZEL_version=0.20.0 bazelisk test/…
回到2
提供一个--strict和--migrate标志,
我试图做的是构建一个SQL Server数据库的docker,并在其中恢复一个特定的数据库。并用它创建一个图像,以便稍后用于测试目的
我写了一个shell脚本来实现这一点
但我没能找到一个方法来做到这一点
container_image(
name = "mssql_crm_db",
base = "@docker_mssql//image",
env = {
"ACCEPT_EULA": "Y",
"SA_PASSWORD": "Test
我试图在编译时根据用户是运行bazel测试还是运行bazel构建来提供一些预处理器定义
具体来说,我希望有一个cc_library.deps的条件依赖项和一个cc_library.defines中的条件定义
我发现select是一种方法,但我不知道如何知道用户运行的操作。我不知道使用select检测当前命令build vs test的任何方法,但我认为您可以实现类似的功能
您可以定义如下所示的配置设置块:
建筑
配置设置
名称=自定义,
值={
定义:enable_my_flag=true
}
我正在尝试分析和修复一个通常是绿色的不稳定测试。
我的问题是,一旦测试通过,Bazel就不会重新运行它,直到任何输入发生变化。
我看到你可以要求Bazel重新运行一个目标,但直到它第一次变成绿色(即,减轻一个不稳定的测试,而不是解决它)
有没有办法让Bazel运行测试,即使测试通过了?
我想要类似于bazel测试的东西--强制尝试=50//我的包:我的目标
如果此选项设置为“自动”(默认值),则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作为构建和测试系统的回购协议。本回购协议包含python和golang。有两种类型的测试,单元测试和集成测试。我想在CI中的两个单独的测试步骤中运行它们。我想在添加新测试时自动在repo中发现新测试。我们目前正在使用bazel测试…。但这无助于我拆分单元测试和集成测试。是否有任何规则或现有方法可以做到这一点?谢谢。Bazel实际上没有单元与集成测试的直接概念,但它确实有测试“大小”的概念,或者测试有多“重”。概述了测试规则的size属性,同时给出了一个很好的概述
当测试大小
我正在为Python库编写一个集成测试(py_测试)。现在,只有当一组其他的py_测试单元测试成功完成时,才有必要运行这个测试
我还没有找到在Bazel中添加这种测试依赖项的方法。很抱歉,这是不可能的
操作不能声明对测试操作的依赖关系
也许您可以通过只执行一个测试或添加标记(阶段1、阶段2)来解决此问题:
对不起,这是不可能的
操作不能声明对测试操作的依赖关系
也许您可以通过只执行一个测试或添加标记(阶段1、阶段2)来解决此问题:
不过,这已经走了多远?目前,Bazel在构建阶段(编译阶段和执行
给定工作区中源文件的路径,如何导出Bazel用于引用该文件的标签。这似乎取决于存在什么包。例如,如果我有以下结构:
.
├── BUILD
├── WORKSPACE
└── src
└── bar
└── foo.go
.
├── BUILD
├── WORKSPACE
└── src
├── BUILD
└── bar
├── BUILD
└── foo.go
然后,src/bar/foo.go的标签是//src/b
我最近将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中为我的genrule创建一个工具链。我创建了一个名为toolchain.bzl的文件,该文件的源代码如下:
BarInfo = provider(
fields = {
"bar": "path to bar executable",
},
doc = "Defines a Bar toolchain based on an SDK",
)
def _bar_toolchain_impl(ctx):
bar_info = ctx
我试图bazel运行//foo,而不获取构建步骤中输出的所有信息行。跟踪此功能请求,但尚未实现。为了实现这一点并使其独立于平台,我一直在尝试找到一个bazel query/aquery/cquery命令,该命令告诉我bazel目标生成的可执行文件(基本上是bazel run//foo应该运行的任何东西)
我的工作是编写一个bash脚本,调用buildout=$(bazel build//$target--color=yes 2>&1),然后在build命令成功退出时直接运行可执行文件。我已经对各
我的项目依赖于一些外部库,我必须自己管理这些库。因此,我的工作区:
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
我不清楚DefaultInfo运行文件的可传递_文件和PyInfo可传递_源之间有什么区别。它们是多余的还是有重要区别
例如,我有一个自定义的starlark规则,我想将其作为PyInfo提供程序来遵循,但我想添加一个额外的提供程序,因此我不能使用本机py_库规则
transitive_sources = [dep[PyInfo].transitive_sources for dep in ctx.attr.deps]
return struct(providers = [
我有一个小型Java项目:一个依赖于GoogleTruth、GoogleGuava、JSR305注释和单元测试的TestNG的包。我和Bazel一起运行测试时遇到了一些问题。我可以创建一个java_测试规则并使用bazel test运行它,但是bazel的XML输出为整个测试套件提供了一个单一的通过/失败,没有关于单个失败的信息。TestNG中的XML将与沙箱一起清理
为了解决这个问题,我为TestNG的XML创建了一个genrule,但是文档明确地说“不要使用genrules进行测试”,所以我
我有一个java测试,我正在尝试沙箱,它有点复杂的下载逻辑。
我正在考虑编写一个存储库规则,它将使用repository\u ctx启动一个java应用程序。执行来运行这个逻辑,而不是在skylark中复制它
我应该如何获取此通话的内容?
我可以向java应用程序传递一个路径/文件名,以便将文件下载到其中,但我不确定该给它什么路径。我可以让它将字节打印到stdout,并通过exec_结果收集它们(听起来很可怕)。您可以使用返回a来获取相对于生成的工作区的路径,然后使用路径。realpath您可以
我们使用一个外部依赖项
新的\u http\u存档
有一种情况是外部下载失败,导致一个预提交失败。似乎没有办法重新尝试使用新的\u http\u归档
这将是有益的,重新尝试,以减少与外部连接打嗝,这确实发生了我们所看到的搅动
你知道怎么解释吗?如果外部URL下载失败,有没有办法告诉bazel再试一次
非常感谢您的帮助您可以在调用bazel build之前,使用命令bazel fetch预取依赖项。如果fetch返回非零错误代码,您可以在尝试外部URL下载时多次重新运行bazel fetch。重试
当我调用Bazel命令时,如果出现分析错误,它只显示其中一个错误。例如:
ERROR: /Users/oliver/src/github.com/monzo/wearedev/service.transaction-enrichment/handler/BUILD.bazel:3:1: target '//service.personal-account-signup/domain:go_default_library' is not visible from target '//service
我有一个共享对象(libname.so)的cc_library(),它需要一个数据文件data.xml,该文件与它自身位于同一目录中
Bazel*.runfiles/将数据文件放置在与软件存储库中相同的相对路径中,但我希望它如上所述。谢谢大家!
我试过:
cc_library(
name = "libname",
srcs = ["libname.so"],
data = ["data.xml"],
)
我希望data.xml和
您好,我想在.bzl文件中读取本地文件的内容
print(onefile.basename)
#content = ctx.read
#content=ctx.file.onefile
#print(onefile.content)
.bzl代码无法读取文件,也无法根据文件内容做出决策
您必须创建操作(例如,ctx.actions.run),将文件作为操作输入,并让操作读取文件
.bzl代码可以加载其他.bzl文件,但您可能会发现这很有用。.bzl代码无法读取文
我有一个新的\u git\u存储库包含:
new\u git\u存储库(
name=“hyperscan”,
build_file=“//外部deps/hyperscan:build”,
commit=“[commit_HASH]”,
远程=”https://github.com/intel/hyperscan.git",
自=“2018-07-09”,
)
在建造时,它说:
DEBUG: Rule 'hyperscan' indicated that a canonical reproduc
我知道bazel没有强加任何特定的文件结构,但使用bazel的产品遵循一些文件夹命名约定,其中一些(例如“第三方”)确实有特殊处理(需要指定许可证)
所以我不太明白工具和第三方之间的区别。例如,如果我想放一个“ruby工具链”,它是一个工具,因为它是语言解释器,但它也是第三方,因为它是由一个社区开发的。它应该去哪里
那么bazel规则呢?应该按照惯用的方式将文件放在哪里?我是Bazel开发人员,我同意,这里的用法可能会有点混乱
通常,我们建议将第三方代码用于您要导入以在项目中使用的任何外部代码。
标签: Bazel
bazel-rulesstarlark
我想通过Bazel处理使用测试覆盖率数据生成HTML报告的整个过程
组件
为了实现我的目标,我理解以下组件是必要的:
:提供有关
在运行特定测试用例时,程序的哪些部分实际被执行(即“覆盖”)。我可以通过运行/bazelw query“attr(name,.*test_main',//…)”| xargs./bazelw coverage--combined_report=lcov(我的所有测试目标都被命名为test\u main,这就是我如何在所有目标中执行coverage命令,并将结果与--
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 14 页