借助Bazel创建GitHub发布制品的方法咨询
Bazel 单体仓库二进制归档打包方案
1. 引入rules_pkg实现Zip打包
Bazel官方提供的rules_pkg规则集专门处理打包需求,首先在WORKSPACE中添加依赖:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "rules_pkg", urls = ["https://github.com/bazelbuild/rules_pkg/releases/download/0.10.0/rules_pkg-0.10.0.tar.gz"], sha256 = "501b4f3b1940f8e1982d5b8e3b4f4b7b7eb4a699a8066b7441ba75d7708f35ca", ) load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies") rules_pkg_dependencies()
在项目根目录的BUILD.bazel中定义打包目标,收集所有需要归档的二进制文件:
load("@rules_pkg//pkg:zip.bzl", "pkg_zip") pkg_zip( name = "release_archive", # 明确列出所有二进制目标,或用glob匹配(注意Bazel glob的匹配规则) srcs = [ "//cmd/serviceA:serviceA_binary", "//cmd/cli:cli_tool", # 示例glob:glob(["cmd/**/*_binary"], exclude=["cmd/**/test/*"]) ], # 可选:指定归档内的根目录,比如把所有二进制放到bin/下 prefix = "bin/", )
执行bazel build //:release_archive即可生成Zip包,路径为bazel-bin/release_archive.zip。
2. 关联全量构建
如果希望执行bazel build //...时自动触发打包,可以创建一个all别名目标:
alias( name = "all", actual = [ "//...", ":release_archive", ], )
之后执行bazel build //:all就会构建所有项目目标并生成归档包。
3. GitHub Actions 集成发布
结合你熟悉的GitHub Actions,在标签触发的工作流中加入以下步骤:
jobs: release: runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v4 - name: Set up Bazel uses: bazelbuild/setup-bazelisk@v2 - name: Build all targets and archive run: bazel build //:release_archive - name: Attach asset to GitHub Release uses: softprops/action-gh-release@v1 with: files: bazel-bin/release_archive.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
官方文档参考
相关内容在Bazel官方文档的Packaging章节,rules_pkg的具体规则细节可查看Bazel内置的rules_pkg文档。
内容的提问来源于stack exchange,提问作者sontags
相关产品推荐
相关产品推荐

