这是 WinApps-share 维护的 Homebrew 自定义软件源(tap),可同时存放命令行工具的 Formula 和 macOS 应用的 Cask。
使用完整名称时不需要预先添加 tap,Homebrew 会自动拉取软件源。Homebrew 6 及以上也只会信任本次安装的软件,而不是整个 tap。
# Formula
brew install WinApps-share/tap/<formula-name>
# Cask
brew install --cask WinApps-share/tap/<cask-name>例如:
brew install --cask WinApps-share/tap/neat-download-managerbrew tap WinApps-share/tap为避免名称冲突,也为了兼容 Homebrew 6 的 tap 信任机制,添加 tap 后仍建议使用完整名称:
brew install WinApps-share/tap/<formula-name>
brew install --cask WinApps-share/tap/<cask-name>如果希望使用短名称,需要先信任具体软件:
brew trust --formula WinApps-share/tap/<formula-name>
brew trust --cask WinApps-share/tap/<cask-name>
brew install <formula-name>
brew install --cask <cask-name>只有在信任本 tap 中所有当前和未来的软件时,才应信任整个 tap:
brew trust --tap WinApps-share/tap# 拉取 tap 更新,并升级已安装软件
brew update
brew upgrade --cask WinApps-share/tap/neat-download-manager
# 卸载软件(--zap 会同时清理 cask 中声明的用户配置)
brew uninstall --cask neat-download-manager
brew uninstall --zap --cask neat-download-manager
# 不再使用此软件源时移除 tap
brew untap WinApps-share/tap.
├── Formula/ # Formula:通常从源码构建的命令行工具
├── Casks/ # Cask:预编译的 macOS 应用或安装包
└── .github/workflows/
├── audit.yml # push/PR 时检查本次变更的清单
└── auto-update.yml # 每 12 小时检查并提交上游版本更新
仓库提供了一个维护脚本,把检查更新、本地更新和提交前校验统一到同一入口:
# 检查整个 tap,或只检查指定软件
script/tap check
script/tap check obs wetype
# 探测新版本并在本地改写 version / sha256(不会提交或推送)
script/tap update
script/tap update obs
# 默认只校验相对 origin/main 有变化、未提交或新建的清单
script/tap validate
# 校验全部清单;或只做 Ruby 语法和 brew style 的快速校验
script/tap validate --all
script/tap validate --quickupdate 在任何待更新清单已有本地修改时会先退出,避免覆盖手工编辑;完成后可查看 diff,再运行 script/tap validate。validate 的完整模式与 CI 一致,会执行严格在线审计,因此需要网络;--quick 不执行在线审计。校验遇到错误时会继续检查剩余清单,最后汇总失败数量并返回非零状态。
脚本需要 Homebrew 通过 WinApps-share/tap 加载当前工作区。可以直接在 Homebrew 管理的 tap 仓库中工作,也可以按下文把其他位置的克隆链接过去。
Homebrew 的审计命令按 tap 名称加载软件,因此最省事的开发方式是直接在 Homebrew 管理的 tap 仓库中修改:
brew tap WinApps-share/tap
brew trust --tap WinApps-share/tap
cd "$(brew --repository WinApps-share/tap)"如果已经在其他目录克隆了本仓库,并希望直接测试未提交改动,可把当前工作区链接到 Homebrew 的 tap 目录:
# 若已添加远程 tap,先移除 Homebrew 管理的那份副本
brew untap WinApps-share/tap
tap_parent="$(brew --repository)/Library/Taps/winapps-share"
mkdir -p "$tap_parent"
ln -s "$PWD" "$tap_parent/homebrew-tap"
brew trust --tap WinApps-share/tap测试结束后运行 brew untap WinApps-share/tap 即可移除链接,不会删除原工作区。不要只把 .rb 文件路径传给 brew audit,新版 Homebrew 已禁用这种用法。
# Ruby 语法(快速、离线)
ruby -c Casks/neat-download-manager.rb
# 整个 tap 的格式与严格在线审计
brew style WinApps-share/tap
brew audit --strict --online --tap=WinApps-share/tap新增软件时可对单个条目执行更严格的 --new 审计:
brew audit --new WinApps-share/tap/<formula-name>
brew audit --new --cask WinApps-share/tap/<cask-name># 检查 livecheck 是否能识别上游版本
brew livecheck --verbose WinApps-share/tap/neat-download-manager
# 只下载并验证 cask 的 SHA256,不安装
brew fetch --cask WinApps-share/tap/neat-download-manager也可以手动核对下载文件的 SHA256:
curl -L <download-url> | shasum -a 256# Formula:强制从源码构建,然后运行 formula 的 test do 测试
brew install --build-from-source WinApps-share/tap/<formula-name>
brew test WinApps-share/tap/<formula-name>
# Cask:先检查安装参数,再实际安装并查看信息
brew install --cask --dry-run WinApps-share/tap/<cask-name>
brew install --cask WinApps-share/tap/<cask-name>
brew info --cask WinApps-share/tap/<cask-name>测试完成后可卸载:
brew uninstall <formula-name>
brew uninstall --cask <cask-name>先确保 tap 已添加,然后让 Homebrew 生成骨架:
brew create https://example.com/foo-1.0.0.tar.gz \
--tap WinApps-share/tap \
--set-name winapps-foo随后补全依赖、安装逻辑和 test do,再运行上面的语法、审计和安装测试。文件应位于 Formula/<name>.rb。
brew create --cask https://example.com/MyApp-1.0.0.dmg \
--tap WinApps-share/tap \
--set-name winapps-my-app文件应位于 Casks/<token>.rb。Cask token 必须全局唯一,建议使用 winapps- 前缀避免与官方或其他 tap 冲突。对于固定下载地址,应添加可靠的 livecheck,否则自动更新无法发现新版本。
每次向 main push 或提交 pull request 时,只对本次变更且仍然存在的 Formula/Cask 运行:
brew audit --strict --online <formula-or-cask>brew style <formula-or-cask>
删除清单或仅修改文档时不会执行全量审计。
建议在 GitHub 分支保护中把该任务设为合并前必需检查;仅有工作流文件并不会自动阻止失败的 PR 合并。
每 12 小时以及手动触发时执行:
brew livecheck找出落后于上游的 Formula/Cask;- 将探测到的新版本显式传给
brew bump-cask-pr --write-only或brew bump-formula-pr --write-only; - 自动计算并写入新 SHA256;
- 每个软件单独提交,最后推送到
main。
该工作流将仓库内置的 GITHUB_TOKEN 传给 setup-homebrew 作为 Git push 凭据,仓库的 Actions 设置必须允许该 token 写入 contents。如果 main 禁止 GitHub Actions 直接推送,需要为机器人配置相应的分支规则例外,或将流程改为创建 PR。
自动更新会执行 Homebrew 自带的审计,但它不能替代真实安装测试。上游若改变 DMG 内的应用名称、安装结构或系统要求,仍需人工修改 Cask。
- 找不到 Cask:确认文件位于
Casks/(复数)且扩展名为.rb。 - 找不到 Formula:确认文件位于
Formula/且扩展名为.rb。 brew audit提示不能使用路径:先添加并信任 tap,然后使用完整软件名或--tap=WinApps-share/tap。- SHA256 不匹配:上游可能替换了固定 URL 对应的文件;重新下载核对,同时确认版本号确实变化。
- tap 没有更新:先运行
brew update;仍异常时再执行brew untap WinApps-share/tap && brew tap WinApps-share/tap。 - 名称与官方包冲突:优先使用完整名称,新增软件时使用唯一 token;Formula 必要时可改名或设置
keg_only。