从源码构建
3 分钟阅读
开发新功能或审阅发行版本时,可从源码构建 Barn。预编译 CLI 与 Apple Silicon 发行包内的原生应用包 Barn.app 均可直接安装,详见安装指南。
检出源码
克隆 v1.2.0 标签以复现本文档对应的发行版(开发主分支时可省略 --branch v1.2.0),并在提交构建记录时附上 git log -1 --oneline 与 git status --short:
v1.2.0 标签用于复现 Barn 1.2.0 发布说明所描述的已发布版本。开发构建不要设置 BARN_VERSION,避免将开发构建标记为正式的 1.2.0。
构建 CLI
Barn 1.2.0 在 go.mod 与 packaging/toolchain.env 中固定使用 Go 1.27.4,并依赖 Git、Make、Bash 与标准编译工具(仅编译 CLI 无需安装 QEMU 或配置宿主网络):
make build 会在 bin/.barn-releases/ 下编译配套的 barn 与 barn-hosts-helper,将 helper 的 SHA-256 摘要嵌入 CLI,并在 bin/ 下创建入口符号链接。请始终使用 make build 而非裸跑 go build ./cmd/barn;移动构建产物时请一并保留 bin/.barn-releases/ 目录与 bin/ 下的两个链接。
未指定 BARN_VERSION 时,开发构建默认将版本号标记为 dev,工作区存在未提交改动时 commit 字段会显示为 uncommitted。
执行 make cross 可在 bin/darwin_amd64、bin/darwin_arm64、bin/linux_amd64 与 bin/linux_arm64 下交叉编译四个目标平台的 Go CLI 与 helper。构建产物(bin/、dist/、.goreleaser-*/)及实验环境清单不应纳入版本控制;在工作树内生成前,请确认对应路径已被忽略。
请针对准备使用的源码运行下方贡献者检查;历次带日期的验收记录见验证历史。
工具版本以当前检出的 packaging/toolchain.env 为准;正式发行包按签名与公证流程构建。
构建 Mac 原生组件
重新编译本地 Mac 组件前,请先停止正在使用它的所有 Mac 虚拟机。
在运行 macOS 27+ 的 Apple Silicon Mac 上,确认 xcrun 已指向 Xcode 27+(提供 macOS 27 SDK 与 Swift 编译器),然后执行:
make mac-build 会在 bin/mac 下生成配套的 barn、barn-hosts-helper、独立运行器 barn-mac-runner 与原生应用包 Barn.app,同时打包生成 bin/barn-mac-darwin-arm64.tar.gz。可执行 make mac-native-test 运行原生组件测试套件,随后按 macOS 虚拟机教程创建虚拟机。
| 源码标签 | 原生应用包 | 应用标识符(Bundle ID) |
|---|---|---|
v0.9.0 |
Barn Mac.app |
io.pgsty.barn.mac-runner |
v0.9.1 及之后 |
Barn.app |
com.pgsty.barn |
当前 CLI 同时兼容 Barn.app 与旧版 Barn Mac.app,而 0.9.0 CLI 仅查找 Barn Mac.app——请始终使用 bin/mac 下同批构建出的 CLI 与应用包。
代码签名与公证
未设置签名环境变量时,make mac-build 默认使用供本机开发测试的 ad-hoc 签名。如需进行证书签名或公证分发:
- 设置
BARN_CODESIGN_IDENTITY以使用 Developer ID 证书为Barn.app签名。 - 设置
BARN_NOTARY_PROFILE与BARN_MAC_REQUIRE_NOTARIZATION=1,使构建流水线自动校验签名、提交 Apple 公证、装订票据(staple)并验证 Gatekeeper 状态。 - 设置
BARN_CODESIGN_IDENTITY后,make mac-build也会先签名 Go helper,将最终 SHA-256 嵌入 CLI,再签名 CLI。Mac 发布手册进一步说明 CLI/helper/App 联合公证及导出载荷的发行验证。
运行贡献者检查
执行完整的 make check 还需要 Python 3、jq、支持竞态检测(-race)的 C 编译器,以及 packaging/toolchain.env 中固定版本的静态检查工具:
将 GOBIN(或 $(go env GOPATH)/bin)加入 PATH 后运行:
make check 会依次验证 Go 模块、Shell 脚本语法、仓库维护检查、单元与竞态测试、go vet、staticcheck、deadcode、golangci-lint、govulncheck、四平台交叉编译、镜像流水线与安装器测试以及依赖许可证合规性。打包快照验证流程请参阅发布工程。