问题标签 [skylark]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
603 浏览

java - 如何在我的应用程序中包含 Skylark 配置解析器?

我喜欢使用受限 Python 代码配置我的 Java 应用程序的想法。这种受限的 Python 配置语言名为 Skylark。我找到了一个支持 Skylark 的 Go 库,但我需要一个 Java 库。

我可以将 bazel 项目或 buck 项目中的哪个 maven 工件添加到我的pom.xml依赖项部分以获取 Skylark 支持库?

0 投票
2 回答
12853 浏览

bazel - Bazel:输出目录的 genrule

我刚刚开始与 Bazel 合作。所以,我提前道歉,我无法弄清楚这一点。

我正在尝试运行一个命令,将一堆文件输出到一个目录并使该目录可用于后续目标。我有两种不同的尝试:

  1. 使用一般规则
  2. 写我自己的规则

我天真地希望只用genrule. 但是,您似乎不能说“我不确切知道该命令将输出什么”并将目录放在outs. 现在我正在尝试编写一个可以使用的规则,ctx.actions.declare_directory但我还没有完全正确。我似乎无法摆脱tools我的工作空间并进入我的规则。

我的一般尝试看起来像这样:

我的自定义规则尝试如下所示:

然后,为了运行我的doit规则,我的 BUILD 文件如下所示:

在我的 genrule 中,该命令运行,但它似乎不喜欢我尝试在 中使用目录outs。在我的自定义规则中,我似乎无法告诉 Bazel 我想./path/to/doit用作工作区中的工具,例如expected type 'File' for 'tools' element but got type 'list' instead...

似乎我必须缺少一些基本的东西,因为这肯定是运行命令并将一堆未知内容输出到目录的常见情况?

0 投票
1 回答
201 浏览

bazel - 在带有标签的存储库中使用 bazel 宏

我有两个存储库,客户端和库。

在客户端的 WORKSPACE 文件中,客户端将库作为 http_archive 导入,名称为“foo”。

在客户端内部,我想使用引用库中目标的库宏。我的问题是库宏不知道作为“foo”导入的,所以当宏展开时,找不到目标。

0 投票
1 回答
551 浏览

struct - 带有方法的云雀结构

这是我尝试做的事情,而且效果很好。我觉得它很有用,但感觉就像是 hack,所以我担心它将来会坏掉。

我正在将一个大型项目转换为 Bazel,我们有很多本地包装器,例如:

这需要很多load命令,这些命令很烦人,并且是重复的错误来源。如果是普通的 Python,我会简单地导入整个模块。但是 Skylark 需要一个一个的加载函数。

我可以使用结构消除对单个负载的需求。

my.bzl

在各种BUILD文件中:

正如我上面写的,一切都很好。我可以将 if 用于本地规则的包装器,以及各种其他功能。

但是我滥用语言?以后容易坏吗?

谢谢。

0 投票
1 回答
55 浏览

bazel - Bazel 对 attr.label_keyed_string_dict 的键进行隐式排序

我目前正在运行 Bazel 0.9.0。我已经定义了一个自定义 Bazel 规则。在其中一个字段中,我使用的是attr.label_keyed_string_dict。在评估阶段处理键时,键被隐式排序。是否有任何标志/选项可以禁用此功能。我检查了 0.14 版,其中的键没有隐式排序。但我想知道在 0.9.0 版本中是否有什么我们可以做的

0 投票
1 回答
387 浏览

python - 工具链没有下载工具

您好我正在尝试为 Fn 项目设置工具链。该方法是为 GitHub 中可用的每个二进制文件设置一个工具链,然后理论上在规则中使用它。

我有一个包含可用二进制文件的通用包:

下载部分如下所示:

然后我像这样设置工具链:

在我的 BUILD 文件中,我调用 setup_toolchains:

通过这个设置,我有一个如下所示的规则:

工作空间:

当我查询不同的二进制文件时,bazel query //tools/bazel_rules/fn/internal/cli:fn_cli_linux_bin它们在那里但调用bazel build //...会导致错误,抱怨:

我尝试按照文档中的工具链教程进行操作,但无法正常工作。另一个有趣的事情是我实际上使用的是 mac,所以工具链的兼容性似乎也是错误的。

我在 repo 中使用这个工具链,所以路径会有所不同,但这里是一个 repo,只包含 fn 的东西以便于阅读。

0 投票
3 回答
2603 浏览

bazel - 如何在bazel中创建目录结构

我想在 bazel 中创建以下结构。

创建一个特定的结构似乎并不简单。我希望有一个简单且可重用的规则。就像是:

我试过的:

  • 我可以用 python 脚本创建一个宏,但想要一些更干净的东西。
  • 我尝试创建一个不起作用的mkdir -p path/to/directoy类型

用例是我想使用 bazel创建一个squashfs 。

需要注意的是,Bazel 提供了一些打包功能。

创建 squashfs,该命令需要一个包含工件的目录结构。

0 投票
1 回答
863 浏览

bazel - 如何将 Starlark 脚本正确加载到另一个脚本中?

我正在尝试用Starlark做一个非常简单的实现:

问候语.bzl

测试.bzl

并执行它: java -jar Starlark_deploy.jar test.bzl

上述调用的结果是:

我的最终目标是拥有自己的 Starlark 引擎,这取决于Starlark_deploy.jar. 然后,我将利用 Bazel 规则(例如htt_archivehttp_file)的存在并定义我自己的 Starlark 超集。


我正在使用官方文档中描述的Starlark 的 Bazel java 实现。它是通过以下方式获得的:

  1. 克隆Bazel 存储库
  2. 跑步bazel build //src/main/java/com/google/devtools/starlark:Starlark_deploy.jar
  3. 上面命令的输出是Starlark_deploy.jar
0 投票
1 回答
553 浏览

bazel - 如何在 bazel 中获取工作区状态

我想使用通过 workspace_status_command 传递给 bazel 的 CI 的构建号来版本构建工件。有时我想在工件名称中包含内部版本号。

有没有办法在编写宏时如何访问ctx(正如我试图使用的那样ctx.info_file)?到目前为止,我似乎能够在创建新规则时仅在新规则中访问此类信息,在这种情况下有点尴尬。

我想拥有内部版本号或类似信息是很常见的用例,所以我想知道是否有更简单的方法来访问这些信息。

0 投票
1 回答
756 浏览

bazel - 将目录复制到 Bazel 中的新目录

基本上我想要的只是cp -r src/ dist/,但由于某种原因,我根本无法让它工作。

目前我正在尝试:

我已经浏览了至少 4 页的 google 和文档,但似乎除非我创建一个 genrule 并在规则中手动指定所有 100 个文件,否则它不会起作用?