Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >将项目发布到 Homebrew 官方仓库

将项目发布到 Homebrew 官方仓库

作者头像
郭旭东
发布于 2020-12-30 02:52:34
发布于 2020-12-30 02:52:34
1.9K00
代码可运行
举报
文章被收录于专栏:云原生工具箱云原生工具箱
运行总次数:0
代码可运行

前言

Homebrew 标榜自己是 “macOS(或 Linux)缺失的软件包的管理器”,使用 macOS 作为开发终端的用户,往往绕不过 brew 这个软件包管理工具。确实在 macOS 上没有比 brew 更好用的软件包管理工具了,基本上想用的 CLI 工具,只需一行命令就可一键安装,非常的方便。记得去年博主还写过一篇 《Golang 装逼指南 Ⅱ:在 Homwebrew 上发布 Golang 项目》,当时只是介绍了如何将 Golang 开发的 CLI 工具发布到自建的 homebrew-tap 上。本文则是讲解如何将自己开发的软件,推送到官方的 homebrew-core[1] 仓库中,使用像 brew install kubecm 这样的命令即可完成安装。

Homebrew-core

homebrew-core[2] 中存储着所有官方的安装脚本,而这些安装脚本都是由软件开发者自己提交 PR 合并到仓库中的。同时 homebrew 也提供了查询页面,用户可以在网页 Homebrew Formulae[3] 上查询自己的软件总共被下载安装了多少次,如下:

kubecm

新的项目只需向这个仓库提交 PR 即可。

准备阶段

首先需要在 GitHub 上 fork homebrew-core[4] 项目。

然后在本地找到保存 homebrew-core 的目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd $(brew --repository homebrew/core)

新增 remote 地址为 fork 仓库的地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git remote add <YOUR_USERNAME> https://github.com/<YOUR_USERNAME>/homebrew-core.git

这里的 YOUR_USERNAME 是 GitHub username。

新建分支

这里的操作就和向开源项目提交 PR 一样,新建 branch 并创建安装脚本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git checkout master

更新 master 分支

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew update

从最新的 master 分支创建新 branch

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git checkout -b <YOUR_BRANCH_NAME> origin/master

编写脚本

首先需要使用 brew search <formula> 来查看上游仓库中是否有同名的项目,同时确保你的项目是稳定版且带有 tag(不能只是一个 GitHub repo)。

使用 brew create 创建一个脚本模板,命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew create https://example.com/foo-0.1.tar.gz

这里的 URL 地址,就是 GitHub Release 页面的 Source code(tar.gz) 的 URL 地址。

打开 Formula/foo.rb 可以看到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Foo < Formula  desc ""  homepage ""  url "https://example.com/foo-0.1.tar.gz"  sha256 "85cc828a96735bdafcf29eb6291ca91bac846579bcef7308536e0c875d6c81d7"  license ""  # depends_on "cmake" => :build  def install    # ENV.deparallelize    system "./configure", "--disable-debug",                          "--disable-dependency-tracking",                          "--disable-silent-rules",                          "--prefix=#{prefix}"    # system "cmake", ".", *std_cmake_args    system "make", "install"  end  test do    system "false"  endend

之后就是完善这个脚本,deschomepagelicense 都请根据项目情况填写。

如果是 Golang 项目,则需要添加 Go 依赖 depends_on "go" => :build,同时在 install 中完善安装脚本,golang 开发的项目一般都是使用 go build 来构建。

注意: 与自建 homebrew-tap 不同,向官方提交 PR,需要使用源码构建,不能只推送构建好的二进制文件!同时必须有 test 部分,否则将无法合并代码。

这里附上一份 kind[5] 的脚本供大家参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Kind < Formula  desc "Run local Kubernetes cluster in Docker"  homepage "https://kind.sigs.k8s.io/"  url "https://github.com/kubernetes-sigs/kind/archive/v0.9.0.tar.gz"  sha256 "c154289659a7ef30b301a0787ecfa2e08edaada6059bf5acefe9f3be1e026381"  license "Apache-2.0"  head "https://github.com/kubernetes-sigs/kind.git"  bottle do    cellar :any_skip_relocation    rebuild 1    sha256 "e40a2343bf999585fa4fcb1a1e9b801427e921c098fc3f7e3026c071a0e72520" => :big_sur    sha256 "e5ba99b5f14711e0dcb121a992d74c5ee6c6b0468b27e5200bf796d4987e13c0" => :catalina    sha256 "d52a780ad6af93a2a7c480a41c5178a461b9966ddc1adb66adde8ff3bce15238" => :mojave    sha256 "423ea750ae8589d1a199847f746d8e9b5b1f1d81ceff3a9dab2d63f161532588" => :high_sierra  end  depends_on "go" => :build  def install    system "go", "build", "-o", bin/"kind"    prefix.install_metafiles    # Install bash completion    output = Utils.safe_popen_read("#{bin}/kind", "completion", "bash")    (bash_completion/"kind").write output    # Install zsh completion    output = Utils.safe_popen_read("#{bin}/kind", "completion", "zsh")    (zsh_completion/"_kind").write output    # Install fish completion    output = Utils.safe_popen_read("#{bin}/kind", "completion", "fish")    (fish_completion/"kind.fish").write output  end  test do    # Should error out as creating a kind cluster requires root    status_output = shell_output("#{bin}/kind get kubeconfig --name homebrew 2>&1", 1)    assert_match "failed to list clusters", status_output  endend

更多内容见官方文档[6]。

检测脚本

在脚本完成后,请先进行如下测试,确保测试通过且无任何报错。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew tests$ brew install --build-from-source <CHANGED_FORMULA>$ brew test <CHANGED_FORMULA>$ brew audit --strict <CHANGED_FORMULA>

提交代码

在通过所有测试后,就可以提交代码了,需要对每个更改单独提交 PR,且 commit 有格式要求,一般为 <FORMULA_NAME> <NEW_VERSION>kbecm 0.10.3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git add Formula/foo.rb$ git commit -m 'foo 0.0.1'$ git push --set-upstream <YOUR_USERNAME> <YOUR_BRANCH_NAME>

在这里提交后,代码就会 push 到之前 fork 的 homebrew/core 项目。

提交 PR

之后就可以在 GitHub 页面操作提交 PR 了。项目维护者的响应还是很及时的,在 PR 通过所有 CI test 后,就会有维护者进行 review 并指出需要修改的地方,根据要求修复即可。

提交 PR

提交新版本

PR 合并成功后,如果要发布新版本,这里推荐两种方式提交新版本。

CLI

brew 提供了十分简单的方式自动创建 PR,命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew bump-formula-pr --url https://example.com/foo-0.1.tar.gz

更多的信息可以通过 brew bump-formula-pr --help 查看。

GitHub action

这一步也可以在 GitHub action 中自动完成,使用 homebrew-bump-formula[7] 插件。原理其实也是使用了 brew bump-formula-pr,但是这样就无需手动触发,可以集成到 Release 的 CI 中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name: Bump Homebrew kubecm formulaon:  push:    tags: 'v*'jobs:  homebrew:    runs-on: ubuntu-latest    steps:      - name: Update Homebrew formula        uses: dawidd6/action-homebrew-bump-formula@v3        with:          # GitHub token, required, not the default one          token: ${{secrets.TOKEN}}          # Optional, defaults to homebrew/core          tap: USER/REPO          # Formula name, required          formula: FORMULA          # Optional, will be determined automatically          tag: ${{github.ref}}          # Optional, will be determined automatically          revision: ${{github.sha}}          # Optional, if don't want to check for already open PRs          force: false # true

注意: 这里的 TOKEN 需要在 Personal Access Token[8] 上申请,并手动添加到 repo 的 setting 中。

设置 TOKEN

结语

总的来说,这一套流程都比较简单,笔者也只是在 GitHub action 的 TOKEN 上浪费了一些时间。使用 brew 不但简化了安装步骤,提升了用户体验,还可以把诸如 completion 命令生成的自动补全脚本在安装时就注入到系统中,无需在装好后再进行其他操作,体验极佳。

引用链接

[1] homebrew-core: https://github.com/Homebrew/homebrew-core [3] Homebrew Formulae: https://formulae.brew.sh/ [4] homebrew-core: https://github.com/Homebrew/homebrew-core [5] kind: https://github.com/kubernetes-sigs/kind [6] 官方文档: https://docs.brew.sh/Formula-Cookbook [7] homebrew-bump-formula: https://github.com/marketplace/actions/homebrew-bump-formula [8] Personal Access Token: https://github.com/settings/tokens/new?scopes=public_repo

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
幻兽帕鲁调整工人数、基地数与导入Mod
如果你没有使用游戏镜像来搭建或使用其他云厂商的服务器,那么可先备份存档后,重装系统为游戏镜像或前往活动页新购服务器,即可使用本教程来配置。
小宇-xiaoyu
2024/02/12
5.1K3
幻兽帕鲁调整工人数、基地数与导入Mod
轻松与朋友组队!《幻兽帕鲁》新手小白服务器搭建攻略!(持续更新)
《幻兽帕鲁》大火啦!这游戏上线才几天,卖了 500 万份,Steam 在线人数还创历史第五!比起《赛博朋克 2077》,简直是超级巨星!
用户1340495
2024/01/26
1.5K5
轻松与朋友组队!《幻兽帕鲁》新手小白服务器搭建攻略!(持续更新)
【玩转幻兽帕鲁】一键存档游戏迁移
1、原本将幻兽帕鲁部署在自己本地的 Windows 电脑里,但自己只要一关机,帕鲁就会说拜拜,现在你想要把幻兽帕鲁搬到云上,让帕鲁24小时为自己打工;
嘉钰
2024/01/27
15.9K30
【玩转幻兽帕鲁】一键存档游戏迁移
【玩转幻兽帕鲁】游戏存档备份
及时对游戏存档进行备份,可以避免由于各种意外导致的游戏进度丢失,毕竟你也不想找不到自己的帕鲁吧。本节内容将为大家提供如何对游戏存档进行备份与恢复。 如果您还
嘉钰
2024/01/26
11.3K6
【玩转幻兽帕鲁】游戏存档备份
幻兽帕鲁自建多人游戏专属服务器喂饭教程
最近被誉为“医术高明”、“缝合圣手”的一款游戏火出圈了,早晨一觉醒来群里和朋友圈都是讨论这个游戏的,这个游戏想必大家都耳熟能详了,没错,就是幻兽帕鲁。
星橙
2024/01/23
2.1K3
幻兽帕鲁 云服务器之间切换存档教程
Steam/steamapps/common/PalServer/Pal/Saved/SaveGames
CnJingx
2024/01/26
2.8K3
【汇集帕鲁问题】幻兽帕鲁部署配置更新存档迁移保姆级教程(持续更新)
考虑到有些小白较多,不清楚如何登录自己服务器,教程如下(除厂商控制台提供VNC此类工具外)
凯撒
2024/01/27
5.5K3
【汇集帕鲁问题】幻兽帕鲁部署配置更新存档迁移保姆级教程(持续更新)
搭建《幻兽帕鲁》私有服务
已成为当下最热门的话题之一,它在 1 月 19 日于 Steam 上线抢先体验版本,24 小时之内销量就超过了 200 万份,几天之内就突破了 600 万。
程序员小榆
2024/02/23
5570
搭建《幻兽帕鲁》私有服务
用轻量云搭建幻兽帕鲁服务器
最近一款《幻兽帕鲁》的游戏十分流行Steam玩家已破135万。今天来教大家怎么搭建自己的幻兽帕鲁服务器,首先需要有一台性价比高的服务器。为了确保游戏的稳定体验,使用腾讯云轻量应用服务器作为服务器不仅有BGP加成!下面来看看怎么搭建幻兽帕鲁服务器吧~
奈月希
2024/01/23
1.7K0
用轻量云搭建幻兽帕鲁服务器
幻兽帕鲁Palworld服务器搭建教学
幻兽帕鲁最近在社区呈现了爆火的趋势,在线人数已突破百万级别,官方服务器也开始出现不稳定,卡人闪退的情况。对于有一定财力的小伙伴,搭建一个私人服务器是一个最稳定而
黄杨峻
2024/01/22
45.9K58
幻兽帕鲁Palworld服务器搭建教学
【玩转幻兽帕鲁】手动配置游戏参数
幻兽帕鲁部署完成之后,如果您想要按照自己的喜好来对游戏世界进行DIY,打造个性化的,那么就需要通过配置游戏参数来完成。最近一段时间,这一步可谓是让众多玩家
嘉钰
2024/01/31
2K0
【玩转幻兽帕鲁】手动配置游戏参数
幻兽帕鲁Palworld服务端 超简单 搭建教程
此教程现已落后,请移步 https://cloud.tencent.com/developer/article/2383539 (点击即可),使用我改写的基于docker的幻兽帕鲁Palworld服务端一键管理,功能较为全面,包括了存档导入导出功能。 此教程现已落后,请移步 https://cloud.tencent.com/developer/article/2383539 (点击即可),使用我改写的基于docker的幻兽帕鲁Palworld服务端一键管理,功能较为全面,包括了存档导入导出功能。
猫猫摸大鱼
2024/01/22
8.8K7
幻兽帕鲁Palworld服务端 超简单 搭建教程
【玩转幻兽帕鲁】已部署幻兽帕鲁,如何拥有游戏配置面板?
【相关推荐】 🌟🌟🌟【3秒极速开服】幻兽帕鲁全自动部署极简教程(新手推荐) 🌟🌟🌟【玩转幻兽帕鲁】一键配置幻兽帕鲁游戏参数 我们在1月31日发布
嘉钰
2024/02/02
4.6K5
【玩转幻兽帕鲁】已部署幻兽帕鲁,如何拥有游戏配置面板?
【玩转云服务器CVM】幻兽帕鲁服务器部署保姆级教程(持续更新)
想要部署属于自己的幻兽帕鲁服务器(Dedicated Server),您首先需要拥有一台服务器,服务器是幻兽帕鲁运行的基础。部署完成后,您和您的朋友便可以登入专属的游戏服进行体验。使用云服务器搭建幻兽帕鲁服务器,便可以让您与您的朋友在一个相对独立且私密的空间中进行游戏,确保获得更加畅快的游戏体验。
宠物
2024/01/23
6.5K2
【玩转云服务器CVM】幻兽帕鲁服务器部署保姆级教程(持续更新)
配置幻兽帕鲁游戏参数(Windows)
1、登录腾讯云轻量应用服务器控制台,获取服务器登录密码。如您忘记密码,可以在控制台重置密码:
D妹
2024/01/30
5.3K5
配置幻兽帕鲁游戏参数(Windows)
游戏服专区攻略:《饥荒》mod安装
大多数mod为第三方社区玩家提供的模组,可以丰富游戏性,但可能存在不确定风险:包括但不限于影响游戏稳定性、兼容性、以及版本更新后不可用等情况;为确保您的游戏能稳定、安全运行,我们建议您谨慎安装 mod。
嘉钰
2025/03/14
9762
游戏服专区攻略:《饥荒》mod安装
【3分钟开服】幻兽帕鲁服务器一键部署保姆教程(持续更新)
本文将为您提供极简部署幻兽帕鲁服务器的指引,「仅需轻点三次鼠标,即可完成开服」,和自己的朋友一起开心“抓帕鲁”。
wayn
2024/01/31
1.7K0
【3分钟开服】幻兽帕鲁服务器一键部署保姆教程(持续更新)
【玩转幻兽帕鲁】保护你的帕鲁(设置密码、游戏端口)
诚邀各位玩家前往轻量云·游戏服专区体验幻兽帕鲁、夜族崛起、饥荒、我的世界等十余款游戏的一键开服!
嘉钰
2024/01/27
6.6K10
【玩转幻兽帕鲁】保护你的帕鲁(设置密码、游戏端口)
【轻量云游戏服专区】一键开设《幻兽帕鲁》游戏服务器
🔔本文将为你提供通过轻量云游戏服专区一键开设《幻兽帕鲁》专属服务器的指引。【🌟一键秒开服,随时联机玩🌟】,和朋友们一起挑战成为“帕鲁训练大师”。
嘉钰
2024/06/25
2.1K2
【轻量云游戏服专区】一键开设《幻兽帕鲁》游戏服务器
幻兽帕鲁服务器修改帕鲁配置文件教程
帕鲁搭建好后,可以根据想法来修改配置文件达到想要的效果,帕鲁配置文件参数和修改方法分享给你们,希望可以帮助到你~
服务器大本营
2024/02/29
1.4K0
幻兽帕鲁服务器修改帕鲁配置文件教程
推荐阅读
相关推荐
幻兽帕鲁调整工人数、基地数与导入Mod
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验