Release Guide
本文档说明如何通过推送 Git tag,自动触发 GitHub Actions 构建 mindstudio-agent,并发布到 GitHub Release 和 PyPI。
当前仓库相关文件:
.github/workflows/publish-release.yml.github/workflows/build-wheel.ymlpyproject.tomlscripts/build_whl.sh
当前发布流程
当你向远端推送符合 v* 规则的 tag,例如 v0.1.1 时,会自动触发 Publish Release workflow。
这个 workflow 会按顺序执行:
校验 tag 是否与
pyproject.toml中的project.version一致。执行单元测试。
构建 wheel。
在 Ubuntu、macOS、Windows 上做安装 smoke test。
构建 sdist。
发布 GitHub Release。
发布到 PyPI。
1. 前置条件
1.1 GitHub Release
仓库需要开启 GitHub Actions,并且你有权限向远端推送 tag。
1.2 PyPI 发布
当前仓库的 tag 发布流程默认会执行 PyPI 发布,不是可选步骤。
publish-pypi job 使用的是 PyPI Trusted Publishing,所以需要提前在 PyPI 项目后台配置 Trusted Publisher。
当前仓库建议填写:
Owner:
kali20gakkiRepository name:
msAgentWorkflow name:
publish-release.ymlEnvironment name:
pypi
如果这里没有提前配置好,tag 推送后 publish-pypi 会失败。
2. 修改版本号并同步 lockfile
发版前,先修改 pyproject.toml 中的版本号:
[project]
version = "0.1.0"
例如准备发布 0.1.1,就改为:
[project]
version = "0.1.1"
注意:
tag 必须与版本号严格对应
如果版本号是
0.1.1,tag 就必须是v0.1.1只要你改了
pyproject.toml,无论是project.version、dependencies还是dependency-groups,都要立刻同步uv.lock
修改完 pyproject.toml 后,先执行:
uv lock
git diff -- pyproject.toml uv.lock
说明:
当前仓库的
scripts/build_whl.sh和.github/workflows/publish-release.yml都会执行uv lock --check如果你只改了
pyproject.toml没有提交新的uv.lock,本地构建和 CI 都会直接失败即使只是把版本号从
0.1.0改成0.1.1,也需要同步uv.lock,因为 lockfile 里记录了根包mindstudio-agent的版本信息
3. 本地自检
建议在打 tag 前,先本地执行一次最小自检:
uv sync --dev
uv run pytest -q
uv lock --check
bash scripts/build_whl.sh
python -m build --sdist --outdir dist
如果你在 Windows 且没有 bash 环境,可以至少确认:
测试可以通过
wheel 能正常构建
仓库根目录
skills/内容完整且非空
4. 提交版本变更
版本号修改完成后,先提交并推送代码:
git add pyproject.toml uv.lock
git commit -m "chore: release v0.1.1"
git push origin main
建议先推代码,再打 tag,这样发布点会更清晰。
5. 创建并推送 tag
确认 main 已经是你要发布的 commit 后,创建并推送 tag:
git tag -a v0.1.1 -m "Release v0.1.1"
git push origin v0.1.1
推送完成后,GitHub 会自动触发 .github/workflows/publish-release.yml。
6. 自动发布流程说明
6.1 validate-tag
读取 pyproject.toml 中的版本号,并校验:
GITHUB_REF_NAME == "v" + project.version
如果不一致,workflow 会直接失败。
6.2 build-wheel
复用 .github/workflows/build-wheel.yml,主要包括:
uv sync --devuv run pytest -qbash scripts/build_whl.sh上传 wheel artifact
三个平台安装 smoke test
6.3 build-sdist
构建源码包,并校验关键文件和 skills 资源是否被正确打包。
6.4 publish-github-release
下载 wheel 和 sdist,自动创建或更新 GitHub Release,并上传构建产物。
如果 tag 名里包含连字符,例如 v0.1.1-rc1,GitHub Release 会被标记为 prerelease。
6.5 publish-pypi
下载 wheel 和 sdist,通过 pypa/gh-action-pypi-publish@release/v1 发布到 PyPI。
7. 手动触发 wheel 构建
如果你只是想先验证构建,而不是正式发版,可以手动运行 Build Wheel workflow。
这个 workflow 支持 workflow_dispatch,会执行:
单元测试
wheel 构建
跨平台安装 smoke test
但它不会创建 GitHub Release,也不会发布到 PyPI。
8. 发布完成后的结果
发布成功后,你应该能看到:
GitHub Actions 中
Publish Release全部 job 成功。GitHub Releases 页面出现对应版本,例如
v0.1.1。PyPI 上出现对应版本,例如
mindstudio-agent 0.1.1。
你也可以本地验证:
pip install -U mindstudio-agent==0.1.1
msagent --version
9. 常见失败原因
9.1 uv.lock 未同步
典型报错:
The lockfile at `uv.lock` needs to be updated, but `--check` was provided.
这通常说明你已经改了 pyproject.toml,但还没有重新生成并提交 uv.lock。
常见触发场景:
修改了
project.version增删或升级了
dependencies修改了
dependency-groups.dev
处理方式:
uv lock
git add pyproject.toml uv.lock
bash scripts/build_whl.sh
如果本地自检已经通过,再继续提交和打 tag。
9.2 tag 和版本号不一致
例如:
pyproject.toml里还是0.1.0但推了
v0.1.1
这种情况会在 validate-tag 阶段直接失败。
9.3 PyPI Trusted Publisher 未配置
这种情况通常会在 publish-pypi 阶段失败。
9.4 同版本已经发布过
PyPI 不允许覆盖上传同一个版本号,遇到这种情况需要递增版本号后重新发版。
9.5 子模块内容缺失
当前打包流程要求仓库根目录 skills/ 有有效内容。
如果缺失,请先补齐仓库根目录 skills/ 目录内容,再执行打包。