CI
适用于 GitHub Actions 的 CI 友好发布流水线。
概要
描述
ci 命令提供专为 GitHub Actions 设计的完整发布流水线。它处理两种情况:有待处理的 changesets 和没有 changesets。
流水线流程
在基础分支推送时:
├── 检查 changesets
│ ├── 没有 changesets → 直接运行 publish
│ └── 有 changesets → 运行 version → 创建 release 分支 → 创建 PR
└── 发布结果
没有 Changesets 时
如果没有找到 changesets,直接调用 publish 来检查并发布所有未发布的包。
有 Changesets 时
- 运行 version:根据 changesets 提升版本
- 创建 release 分支:在 release 分支上创建带有版本更新的提交
- 强制推送 release 分支:推送 release 分支
- 创建/更新 PR:创建带有变更日志的 pull request,或更新现有 PR
环境变量
需要以下环境变量:
| 变量 |
说明 |
GITHUB_TOKEN |
GitHub 认证 token |
GITHUB_REF_NAME |
当前分支引用名称 |
GITHUB_REPOSITORY |
格式为 owner/repo 的仓库 |
GitHub Actions 设置
推荐工作流
.github/workflows/release.yml
name: Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Install Semifold
run: cargo install semifold
- name: Run Release Pipeline
run: smif ci
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
使用 semifold init
运行 smif init 时,它可以自动生成这些工作流文件:
.github/workflows/semifold-ci.yaml - 主要发布流水线
.github/workflows/semifold-status.yaml - PR 状态评论工作流
行为详情
分支检测
- 仅在配置的基础分支(默认:
main)上运行
- 跳过其他分支(release 分支、功能分支等)的执行
Git 配置
命令配置用于提交的 git 用户:
user.name = "github-actions[bot]"
user.email = "github-actions[bot]@users.noreply.github.com"
Release 分支
- 分支名称:配置的 release 分支(默认:
release)
- 提交信息:
chore(release): bump versions
- 强制推送以确保一致性
Pull Request
- 从 release 分支到基础分支创建 PR
- PR 标题:
chore(release): bump versions
- PR 正文:包含所有受影响包的变更日志
本地测试(不推荐)
GITHUB_ACTIONS=true GITHUB_TOKEN=xxx GITHUB_REF_NAME=main GITHUB_REPOSITORY=owner/repo smif ci
相关链接