Appearance
text
# Related Code
.github/workflows/release.yml - 语义化发布
.github/workflows/build-multi-platform.yml - 多平台构建
.github/workflows/update-homebrew.yml - Homebrew 更新
scripts/homebrew-update.sh - Homebrew 脚本CI/CD 流程
流程概览
Semantic Release
工作原理
基于 Conventional Commits 自动计算版本号:
| 提交类型 | 版本影响 | 示例 |
|---|---|---|
feat: | minor (0.X.0) | feat: add ModelScope support |
fix: | patch (0.0.X) | fix: handle network timeout |
BREAKING CHANGE | major (X.0.0) | 不适用(major_on_zero=false) |
配置
toml
# pyproject.toml
[tool.semantic_release]
version_toml = ["pyproject.toml:project.version"]
upload_to_pypi = false
upload_to_release = false # 由 build workflow 处理
hvcs = "github"
commit_message = "chore(release): v{version}"发布判断逻辑
yaml
# .github/workflows/release.yml:57-88
BEFORE_SHA=$(git rev-parse HEAD)
semantic-release version
AFTER_SHA=$(git rev-parse HEAD)
if [ "$BEFORE_SHA" != "$AFTER_SHA" ]; then
# 有新提交 = 有新版本
semantic-release publish
fi为什么用 SHA 比较?
避免重复发布。如果版本已存在,semantic-release version 不会创建新提交。
多平台构建
构建矩阵
yaml
# .github/workflows/build-multi-platform.yml
strategy:
matrix:
include:
- os: macos-latest
arch: arm64
- os: macos-13
arch: x86_64
- os: windows-latest
arch: x86_64构建流程
产物命名
| 平台 | 文件名 |
|---|---|
| macOS ARM64 | hf-model-downloader-arm64.dmg |
| macOS Intel | hf-model-downloader-x86_64.dmg |
| Windows | hf-model-downloader.exe |
Homebrew 自动更新
触发条件
仅在 release.yml 创建新版本时触发:
yaml
# .github/workflows/release.yml:90-104
trigger-build:
needs: release
if: needs.release.outputs.released == 'true'更新脚本
bash
# scripts/homebrew-update.sh
# 1. 下载 DMG
# 2. 计算 SHA256
# 3. 更新 Cask 文件
# 4. 创建 PR 到 homebrew-tap 仓库Cask 结构
ruby
# samzong/homebrew-tap/Casks/hf-model-downloader.rb
cask "hf-model-downloader" do
version "0.6.1"
on_arm do
url "https://github.com/.../hf-model-downloader-arm64.dmg"
sha256 "..."
end
on_intel do
url "https://github.com/.../hf-model-downloader-x86_64.dmg"
sha256 "..."
end
end所需 Secrets
| Secret | 用途 |
|---|---|
GH_TOKEN | 创建 Release、推送版本提交 |
GH_PAT | 触发其他 workflow、更新 Homebrew |
为什么需要两个 Token?
GH_TOKEN: 仓库内操作(创建 release)GH_PAT: 跨仓库操作(触发 workflow、更新 homebrew-tap)
故障排除
Release 未触发
检查点:
- 提交是否符合 Conventional Commits 格式
- 是否推送到 main 分支
GH_TOKEN是否有效
构建失败
bash
# 本地复现
make build
make dmgHomebrew 更新失败
检查 GH_PAT 是否有 repo 权限访问 samzong/homebrew-tap。