首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Bazel中为git_repository指定多个Git remotes

在Bazel中为git_repository指定多个Git remotes
EN

Stack Overflow用户
提问于 2020-05-22 11:50:23
回答 1查看 383关注 0票数 1

我们的Bazel项目从托管在GitHub上的私有Git存储库中提取代码。

在某些环境中(碰巧所有环境都是macOS),我们希望使用SSH身份验证来访问存储库。因此,对于这些环境,我们可以在new_git_repository规则中指定remote = git@github.com:orgname/reponame.git

在其他环境(碰巧都是Linux)中,我们希望使用令牌身份验证通过HTTPS访问存储库。对于这些环境,我们可以使用remote = https://github.com/orgname/reponame.git

如何创建在两个环境中都能工作的工作区文件?我尝试像这样使用select调用:

代码语言:javascript
复制
new_git_repository(
   ...
   remote = select({
       "@bazel_tools//src/conditions:linux": "https://github.com/orgname/reponame.git",
       "@bazel_tools//src/conditions:darwin": "git@github.com:orgname/reponame.git",
   }),
)

但是我得到了一个错误

代码语言:javascript
复制
ERROR: An error occurred during the fetch of repository 'myrepo':
   got value of type 'select' for attribute 'remote' of new_git_repository rule 'myrepo'; select may not be used in repository rules

如果new_git_repository有一个接受列表的remotes选项(类似于http_archiveurls选项),那就好了,但它没有。

EN

回答 1

Stack Overflow用户

发布于 2020-05-24 17:54:19

select()可以与构建规则(用于可配置属性)一起使用,但不能与存储库规则一起使用。我不认为有一个完全微不足道的方法来完成你所描述的。

我真的会尝试统一身份验证方法,以及如何跨主机寻址和访问存储库。

如果由于某些原因无法实现,您可以定义“两者”依赖关系:

代码语言:javascript
复制
new_git_repository(
   name = "some_repo_mac",
   remote = "git@github.com:orgname/reponame.git",
   ...
)

new_git_repository(
   name = "some_repo_linux",
   remote = "https://github.com/orgname/reponame.git",
   ...
)

并在稍后阶段执行select (解析):

代码语言:javascript
复制
alias(
    name = "some_ext_lib",
    actual = select({
       "@bazel_tools//src/conditions:linux_x86_64": "@some_repo_linux//:lib",
       "@bazel_tools//src/conditions:darwin_x86_64": "@some_repo_mac//:lib",
    }),
    visibility = ["//visibility:public"],
)

它将污染您的依赖关系图,但实际上不会检索到不需要的外部依赖关系。

您还需要别名实际的目标(每个目标一个),而不是可能通过外部设备提供和访问的多个目标。

您可以通过一个宏和一个小的自定义规则自动执行该过程,以生成基于alias的选择器……

或者,您可以继续编写一个自定义的git抓取规则,将其绑定到repository_ctx.os中。至少在构建的这个阶段,我没有立即意识到另一种访问主机操作系统信息的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61947566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档