菜单

发布流程

相关源文件

本文档介绍了创建和发布 Fira Code 新版本的流程。它涵盖了版本管理、构建自动化和分发到各种平台。有关构建过程本身的信息,请参阅 构建过程

概述

Fira Code 使用一种半自动化的发布流程,通过创建特定版本格式的 Git 标签来触发。该流程通过 GitHub Actions 工作流处理版本号更新、字体构建、打包和分发到多个平台。

来源:.github/workflows/build.yml1-27 script/release.py64-73

版本管理

Fira Code 使用语义化版本控制,格式为 major.minor(例如 6.2)。版本号存储在两个地方:

  1. 触发发布流程的 Git 标签
  2. 字体定义文件(FiraCode.glyphs),其中包含 versionMajorversionMinor 属性

当触发发布时,版本号会自动从 Git 标签中提取并更新到字体定义文件中。

来源:script/update_version.py1-21 script/common.py1-17

发布触发

新版本的发布通过创建匹配模式 [0-9]+.[0-9]+ 的 Git 标签来触发(例如:6.2)。

来源:.github/workflows/build.yml1-27

工作流细节

GitHub Actions 工作流定义在 .github/workflows/build.yml 中,并在以下情况下激活:

  1. 推送到任何分支(用于测试)
  2. 推送匹配模式 [0-9]+.[0-9]+ 的标签(用于发布)
  3. 修改特定文件
    • .github/workflows/**
    • FiraCode.glyphs
    • script/**

工作流在一个 Docker 容器(tonsky/firacode:latest)中运行,该容器包含所有必需的构建依赖项。

工作流步骤操作目的
1检出代码获取仓库内容
2运行 update_version.py更新 FiraCode.glyphs 中的版本(仅针对标签)
3运行 build.sh构建字体文件
4创建 hash 变量为工件命名做准备
5上传工件使构建的字体可供下载
6运行 release.py创建 GitHub 发布并分发(仅针对标签)

来源:.github/workflows/build.yml12-27

构建和打包

构建过程运行 script/build.sh,该脚本负责字体生成,分发文件存储在 distr 目录中。有关构建过程的更多详细信息,请参阅 构建过程

构建完成后,发布脚本执行以下操作:

  1. 将所有分发文件打包成一个名为 Fira_Code_vX.Y.zip 的 ZIP 存档
  2. 创建一个同名版本的 GitHub 发布
  3. 将 ZIP 文件上传到 GitHub 发布

来源:script/release.py14-73

外部分发

发布脚本包含分发到其他包管理器和平台的功能,但它们目前被标记为“跳过”。

平台状态描述
GitHub Releases激活主要分发方式
NPM已跳过JavaScript 包管理器
Homebrew已跳过macOS 包管理器
Scoop已跳过Windows 包管理器
Google Fonts已跳过Google 的网络字体存储库

对于 Google Fonts,在 googlefonts-qa/scripts/move-check.sh 中定义了一个单独的流程,该流程准备用于 Google Fonts 拉取请求的文件并运行质量检查。

来源:script/release.py47-64 googlefonts-qa/scripts/move-check.sh1-90

发布流程详解

让我们从头到尾看看完整的发布流程。

来源:.github/workflows/build.yml1-27 script/release.py14-73

创建新版本

要创建 Fira Code 的新版本,请执行以下操作:

  1. 确保所有期望的更改都已提交到主分支

  2. 创建一个带有期望版本号的新标签

    git tag 6.2  # Replace with your version
    git push origin 6.2
    
  3. GitHub Actions 工作流将自动执行以下操作:

    • 更新源文件中的版本号
    • 构建字体
    • 打包分发文件
    • 创建 GitHub 发布
    • 上传 ZIP 文件
  4. 如果需要更新包管理器(Homebrew、NPM 等),则必须手动或通过单独的自动化来处理。

Google Fonts 提交流程

对于提交到 Google Fonts,存在一个单独的流程,该流程会:

  1. 从字体中提取最新版本
  2. 在本地 Google Fonts 存储库中创建一个分支
  3. 将字体文件复制到适当的目录
  4. 创建必要的元数据
  5. 运行 Fontbakery 质量检查
  6. 提交更改并推送到 GitHub

此流程有助于为 Google Fonts 存储库准备拉取请求。

来源:googlefonts-qa/scripts/move-check.sh1-90

发布自动化内部

发布流程依赖于几个协同工作的 Python 脚本:

脚本目的
common.py提供实用函数,包括版本检测
update_version.py更新 glyphs 文件中的版本
release.py打包和分发发布

版本检测通过以下方式工作:

  1. 检查是否提供了 --version 参数
  2. 查找 GitHub 环境中的 Git 标签
  3. 如果版本无法确定,则引发异常

来源:script/common.py1-17 script/update_version.py1-21 script/release.py1-73

结论

Fira Code 的发布流程设计得简单且自动化,只需最少的手动干预。通过创建格式正确的 Git 标签,大部分发布工作都可以通过 GitHub Actions 自动完成。

对于 Fira Code 的开发者来说,理解这个发布流程对于创建新版本并确保它们能正确分发给用户至关重要。