菜单

Homebrew Cask

相关源文件

本文档描述了 Nerd Fonts 中的 Homebrew Cask 系统,该系统支持所有修补字体的 Homebrew Cask 文件的自动化生成和分发。Homebrew Cask 允许 macOS 用户通过 Homebrew 包管理器轻松安装 Nerd Fonts,只需运行 brew install font-[fontname]-nerd-font 即可。有关生成 Cask 所需的字体存档的构建信息,请参阅字体存档

1. Homebrew Cask 系统概述

Nerd Fonts 中的 Homebrew Cask 系统主要由两个组件构成:

  1. Cask 生成脚本 - 为 Homebrew 生成所需格式的每个字体的 Ruby Cask 文件
  2. GitHub 工作流 - 自动化生成 Cask 并向官方 Homebrew tap 创建拉取请求的过程

来源: bin/scripts/generate-casks.sh .github/workflows/casks.yml

2. Cask 文件结构

Homebrew Cask 是遵循特定格式的 Ruby 文件。generate-casks.sh 脚本以 Homebrew 所需的结构创建这些文件。

生成的 Cask 文件示例

来源: bin/scripts/generate-casks.sh62-71 bin/scripts/generate-casks.sh186-202

3. Cask 生成过程

generate-casks.sh 脚本执行以下操作为每个 Nerd Font 创建 Cask 文件:

过程中的关键步骤:

  1. 字体存档处理:脚本遍历 archives 目录中的所有 ZIP 存档。
  2. 元数据提取:对于每个字体,它会执行以下操作:
    • fonts.json 中提取原始字体名称和 Cask 名称
    • 计算存档的 SHA256 校验和
    • 解压存档以检查字体文件
  3. 字体家族检测:脚本使用 fc-query 来确定字体家族名称
  4. Cask 文件生成:创建一个包含以下内容的 Ruby Cask 文件:
    • Cask 名称(前缀为 font-,后缀为 -nerd-font
    • 版本、SHA256 校验和以及下载 URL
    • 字体家族名称和原始字体名称
    • 存档中每个 TTF/OTF 文件的声明

来源: bin/scripts/generate-casks.sh204-252 bin/scripts/generate-casks.sh73-193

4. 脚本中的关键函数

generate-casks.sh 脚本包含几个重要的函数:

功能目的
find_nerdish_family检测包含 "Nerd" 或 "NF" 模式的字体家族名称
find_common_stem查找字体家族名称之间的共同词干
write_header创建 Cask 文件的头部部分
write_body写入包含字体声明的主体部分
write_footer完成 Cask 文件

该脚本处理各种边缘情况:

  • 具有非扁平目录结构的字体
  • 不同目录中具有相同名称的多个字体文件
  • 具有不寻常家族名称模式的字体

来源: bin/scripts/generate-casks.sh52-202

5. GitHub 工作流自动化

Nerd Fonts 仓库使用 GitHub Actions 自动化 Cask 生成和提交过程:

该工作流包含两个作业:

  1. create-casks:

    • 获取必要的脚本文件
    • 下载最新的发布存档
    • 确定发布标签
    • 使用 generate-casks.sh 生成 Cask 文件
    • 将生成的 Cask 作为工作流产物上传
  2. commit-casks:

    • 检出 Homebrew Cask 仓库的一个分支
    • 用上游的最新更改更新分支
    • 检索生成的 Cask
    • 将它们复制到适当的位置
    • 以标准化消息提交更改

尽管该工作流已设置为可能自动向官方 Homebrew 仓库创建拉取请求,但此功能目前已被注释掉并禁用。

来源: .github/workflows/casks.yml12-88

6. 手动使用

Cask 生成脚本也可以手动运行,以创建或更新 Homebrew Cask:

先决条件

  • 字体存档必须存在于 archives/ 目录中(请先运行 ./archive-fonts.sh
  • fc-query 命令必须可用,用于字体家族检测

来源: bin/scripts/generate-casks.sh16-21 bin/scripts/generate-casks.sh33-45

7. 与发布流程的集成

Cask 生成系统与整个 Nerd Fonts 发布流程集成:

当发布新的 Nerd Fonts 版本时:

  1. 字体存档被创建并上传到 GitHub
  2. Cask 工作流可以手动触发
  3. 生成新的 Cask 文件,其中包含更新的版本和校验和
  4. 更改会提交到 Homebrew Cask 仓库的一个分支
  5. 维护人员随后可以创建拉取请求以更新官方 Homebrew Cask 仓库

这确保 Homebrew 用户可以在发布后尽快安装最新版本的 Nerd Fonts。

来源: .github/workflows/casks.yml9-11 bin/scripts/generate-casks.sh6-12