Holix 发布技能(「сделай релиз」) 是做什么的?
当用户说出 сделай релиз(或等同指令)时,自始至终执行此流水线。不要在 PR 后停止。不要跳过 CI。不要在合并前打标签。
规范包规则:RULES.md §8。本技能即是操作循环。
前置条件
- 仓库:
javded-itres/Holix。默认分支:main。 - 认证:
gh auth status必须已登录。 - 先拉取:
git fetch origin --tags。 - 下个版本 = 最新 GitHub 发布 + 补丁版本(
1.0.7→1.0.8),除非用户要求次版本或主版本。 - 打标签前确认版本一致:
pyproject.toml[project].versioncli/__init__.py__version__- 最新
gh release list/git tag
- 不要 rsync/scp/hotfix 生产环境。在
main上打标签即足够:GHA 的GitHub Release+Publish to PyPI将从vX.Y.Z运行。 - 每次推送前运行
./scripts/lint.sh(或--fix)。
1)包含变更的 PR
将 代码 + 版本提升 + 变更日志 放在同一个 PR 中,以便一次合并,然后打标签。
- 如果已有开放的 PR 涵盖了这项工作,则复用它,并在其中添加上版本提升(如果缺失)。
- 否则从最新的
origin/main创建分支:release/X.Y.Z(示例:release/1.0.8)。 - 提交用户未提交/未合并的工作(不包含秘密、
node_modules/、本地.env)。 - 使用
scripts/versioning.py提升版本(或编辑两个文件):pyproject.tomlcli/__init__.py
- 更新
docs/CHANGELOG.md:- 将
## Unreleased下的笔记移至## X.Y.Z — YYYY-MM-DD - 留下一个新的空
## Unreleased - 根据实际差异编写 Added/Fixed/Tests
- 将
- 推送并创建 PR →
main:
gh pr create --base main --title "Holix X.Y.Z" --body "$(cat <<'EOF'
## 摘要
发布 Holix X.Y.Z。
## 检查清单
- [ ] pyproject.toml 和 cli/__init__.py 中的版本一致
- [ ] docs/CHANGELOG.md 包含 X.Y.Z 部分
- [ ] CI 绿色(ruff + pytest 矩阵)
合并后:打标签 `vX.Y.Z`(创建 GitHub Release + PyPI)。
EOF
)"
2)GitHub 测试直至绿色
监视 PR 上的 GitHub Actions,而不仅仅是本地 pytest。
gh pr checks <n> --watch
# 或
gh run watch <run-id>
若失败:
gh run view <id> --log-failed(或作业日志)。- 修复代码/测试/ruff。
- 本地:
./scripts/lint.sh然后针对性的 pytest。 - 提交、推送、重新监视。
重复直到 每个 必需检查都变绿。不要合并红色 CI。 如果失败需要产品决策,请停下来询问——不要掩盖。
3)合并到 main
用户已授权合并作为此命令的一部分。
gh pr merge <n> --merge --delete-branch
仅当用户要求时才使用 --squash。等待 PR 状态为 MERGED。
然后 git checkout main && git pull origin main。
验证 main 现在拥有版本 X.Y.Z。
4)下一个编号的 GitHub 发布
标签 必须 与 pyproject.toml 匹配。如果标签工作流可以完成,请不要手动创建 GitHub 发布。
git checkout main
git pull origin main
python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])"
git tag vX.Y.Z
git push origin vX.Y.Z
监视:
GitHub Release→ https://github.com/javded-itres/Holix/releases/tag/vX.Y.ZPublish to PyPI
gh run list --branch vX.Y.Z --limit 5
gh release view vX.Y.Z
如果标签工作流因 CHANGELOG 没有 ## X.Y.Z 部分而失败,请在一个后续 PR 中修复,仅在使用 --force-with-lease 并事先说明后才删除/重新推送标签。更倾向于一个新的补丁版本而不是重写已发布的标签。
报告结果
完成后,回复:
- PR 链接和合并的 SHA
- 版本
X.Y.Z/ 标签vX.Y.Z - 发布链接
- CI + PyPI 工作流状态