如何配置Homebrew formula从SSO保护的私有GitHub下载安装包
无需自定义下载器的解决方法
你遇到的SHA256不匹配是因为Homebrew的默认请求未通过SSO认证,被重定向到了登录页面,返回的HTML内容和预期的压缩包哈希不一致,最简单的解决方法不需要修改下载器,直接利用Homebrew原生的GitHub认证能力:
- 第一步:所有使用该Formula的用户在企业GitHub实例创建拥有
repo读取权限的个人访问令牌(PAT) - 第二步:配置Homebrew识别企业GitHub实例的认证信息,执行以下命令(或者加入shell配置文件持久化):
# 配置企业GitHub的PAT git config --global github.my.company.token <你的企业GitHub PAT> # 配置Homebrew的GitHub API地址为企业实例 export HOMEBREW_GITHUB_API_HOST=github.my.company # 也可以直接把PAT写入Homebrew环境变量 export HOMEBREW_GITHUB_API_TOKEN=<你的企业GitHub PAT>
配置完成后重新执行brew install即可,Homebrew会自动在请求企业GitHub资源时携带认证信息,不会被重定向到登录页。
另外你提供的Formula代码存在两处语法问题需要先修正:
- ARM架构的
if Hardware::CPU.arm?代码块没有闭合 - ARM架构的下载地址错误填写了x86架构的包路径
自定义下载器实现示例
如果上面的原生认证方案不满足你的场景,可以通过自定义Curl下载策略的方式注入SSO认证逻辑,修改后的Formula代码如下:
# 自定义下载策略,自动携带GitHub PAT认证头 class EnterpriseGithubDownloadStrategy < CurlDownloadStrategy def _fetch(*) # 从环境变量或者git配置读取企业GitHub PAT pat = ENV["HOMEBREW_ENTERPRISE_GITHUB_TOKEN"] || `git config --global github.my.company.token`.chomp raise "请设置HOMEBREW_ENTERPRISE_GITHUB_TOKEN环境变量或者配置git config github.my.company.token为你的企业GitHub PAT" if pat.empty? # 注入Authorization头 @headers["Authorization"] = "token #{pat}" super end end class MyMvn < Formula desc "CLI tool to do maven operations" homepage "https://github.my.company/myorg/my-mvn" version "1.2.6" # 指定使用自定义下载策略 download_strategy EnterpriseGithubDownloadStrategy on_macos do if Hardware::CPU.arm? url "https://github.my.company/myorg/my-mvn/releases/download/v1.2.6/my-mvn_1.2.6_Darwin_arm64.tar.gz" sha256 "这里替换为arm64包的实际SHA256值" end if Hardware::CPU.intel? url "https://github.my.company/myorg/my-mvn/releases/download/v1.2.6/my-mvn_1.2.6_Darwin_x86_64.tar.gz" sha256 "d23869c3248d35d51d0b7eded53c93ebb16b9c213fa1cf9b8f736e851f8985dd" end end def install bin.install "my-mvn" end depends_on "maven" test do system "#{bin}/my-mvn help" end end
使用该Formula时,用户只需要提前配置好企业GitHub的PAT即可正常下载安装。
内容的提问来源于stack exchange,提问作者Kumar Gaurav
相关产品推荐
相关产品推荐

