如何将二进制可执行文件发布为 MacOS 和 Linux 的自制 Tap?

如何将二进制可执行文件发布为 MacOS 和 Linux 的自制 Tap?

我有一个用 Rust 编写的 CLI 工具,我已经成功编译并上传到 GitHub 上,作为我自己的 Homebrew “tap”https://github.com/RandomStudio/homebrew-tether

安装非常简单,只需brew tap randomstudio/tether按照 即可brew install tether,太棒了!

该 repo 仅包含公式文件和发布版本,它们是.tar.gz针对 MacOS(Apple Silicon / AARCH64)编译的单个二进制文件的档案。

我希望该可执行文件也能在 Linux 系统上运行 - x86_64 和 ARM(Raspberry Pi),可通过 homebrew 安装(除了 MacOS 之外,它在过去几年还支持 Linux)。

我已经搜索过文档并在谷歌上进行了大量搜索,但我无法弄清楚如何发布跨平台的“tap”(或“bottle”,因为我只想发布二进制文件?)。

你应该...吗

  • 将针对不同架构的一堆不同二进制文件存档在同一个.tar.gz文件中?
  • 或者多个档案?
  • 该公式应该是什么样.rb的,以及它如何区分目标架构所需的可执行文件?

我在任何地方都找不到这个信息。

作为参考,目前的情况./Formula/tether.rb非常简单:

# Documentation: https://docs.brew.sh/Formula-Cookbook
#                https://rubydoc.brew.sh/Formula
class Tether < Formula
  desc "Tether CLI utilities"
  homepage "https://github.com/RandomStudio/homebrew-tether"
  url "https://github.com/RandomStudio/homebrew-tether/releases/download/v0.2.0/tether.tar.gz"
  sha256 "639a351e33a285ea8a4feb1abfba21499361f00c93eecc573cbf366bbea2d23a"
  version "0.2.0"

  def install
    bin.install "tether"
  end
end

答案1

您的项目似乎是开源的。Homebrew 旨在编译正在安装的公式。您的公式下载的文件应该包含源代码。您的公式应该编译程序并安装它。如果您的公式只需要用于构建的依赖项,请将它们标记为仅构建依赖项。

要构建瓶子,您需要安装配方brew install --build-bottle tether并在正确的目录中创建一个瓶子,brew bottle tether它还将输出一个 dsl 以插入到您的配方中。使用您想要支持的目标操作系统执行此操作。

在将输出的 dsl 插入到公式之前,您需要对其进行修改。

例如,如果您的 dsl 是这样的:

bottle do
  sha256 "4921af80137af9cc3d38fd17c9120da882448a090b0a8a3a19af3199b415bfca" => :yosemite
  sha256 "c71db15326ee9196cd98602e38d0b7fb2b818cdd48eede4ee8eb827d809e09ba" => :mavericks
  sha256 "85cc828a96735bdafcf29eb6291ca91bac846579bcef7308536e0c875d6c81d7" => :mountain_lion
end

您需要将其更改为:

bottle do
  root_url *INSERT BASE URL WHERE BOTTLES STORED HERE*
  sha256 "4921af80137af9cc3d38fd17c9120da882448a090b0a8a3a19af3199b415bfca" => :yosemite
  sha256 "c71db15326ee9196cd98602e38d0b7fb2b818cdd48eede4ee8eb827d809e09ba" => :mavericks
  sha256 "85cc828a96735bdafcf29eb6291ca91bac846579bcef7308536e0c875d6c81d7" => :mountain_lion
end

然后将其插入到你的公式中。

我建议阅读https://docs.brew.sh/Bottles了解更多信息。

相关内容