-
Notifications
You must be signed in to change notification settings - Fork 0
Skills Release
licco edited this page Aug 2, 2026
·
1 revision
这个技能帮助你完成 ssh-licco 项目的完整发布流程。这是一个高度自动化的流水线,一次 tag push 即可触发全链路。
当你需要:
- ✅ 修复 bug 后发布新版本
- ✅ 添加新功能后发布
- ✅ 定期维护更新
- ✅ 紧急安全补丁
git tag -a vX.Y.Z -m "message"
git push github vX.Y.Z
↓
auto-release.yml 检测到 tag push
↓
自动创建 GitHub Release
↓
release:published 事件触发
↙ ↘
pypi.yml mcp-registry.yml
(发布 PyPI) (注册 MCP Registry)
git status # 确保无未提交改动
git push github master # 推送到 GitHub版本号规则(语义化版本 x.y.z):
| 变更类型 | 修改位置 | 示例 |
|---|---|---|
| z - 小改动、bugfix | 递增 z |
1.1.9 → 1.1.10
|
| y - 新功能 | 递增 y,z 归零 |
1.1.x → 1.2.0
|
| x - 大改动、重构 | 递增 x,y/z 归零 |
1.x.x → 2.0.0
|
编辑以下文件:
pyproject.toml:
[project]
version = "1.1.10" # 根据变更类型选择 x.y.zssh_mcp/__init__.py:
__version__ = "1.1.0" # 同步更新- README.md: 版本历史表格新增一行
- USAGE.md: 如有工具变动则更新
git add -A
git commit -m "chore: release v1.1.0
Features:
- MCP 工具从 15 个精简为 7 个
- 自动连接、智能后台检测
Docs:
- 更新 README 和 USAGE"
git push github masterpip install -e . --force-reinstall --no-depsssh-licco --version
# 输出: ssh-licco 1.1.0确认工具数量和名称正确:
from ssh_mcp.server import SSHMCPServer
import asyncio
s = SSHMCPServer()
tools = asyncio.run(s.server._tool_manager.list_tools())
print([t.name for t in tools])
print(f"Total: {len(tools)}")# CLI 连通性测试
ssh-licco --version
ssh-licco list-hosts
ssh-licco exec "echo OK" # 需要配置环境变量关键规则:只 push tag,不要 push
--tags(会推送所有历史 tag)。
git tag -a v1.1.0 -m "v1.1.0: MCP 工具精简为 7 个"
git push github v1.1.0推完 tag 后,GitHub Actions 自动完成:
| 步骤 | Workflow | 说明 |
|---|---|---|
| ① 创建 Release | auto-release.yml |
gh release create 自动生成 Release Notes |
| ② 发布 PyPI | pypi.yml |
python -m build + PyPI publish |
| ③ 注册 MCP | mcp-registry.yml |
更新 MCP Registry |
⚠️ 注意:如果 tag 已存在但 Release 没创建(如之前手动打 tag 漏建了 Release), 可以直接去 GitHub Releases 页面手动创建,不需要重新打 tag。
访问:https://github.com/Echoqili/ssh-licco/actions
确认三个 workflow 全部绿 ✅
访问:https://pypi.org/project/ssh-licco/
确认新版本已上线
访问:https://github.com/Echoqili/ssh-licco/releases
确认 Release Notes 正确生成
访问:https://registry.modelcontextprotocol.io/servers/io.github.Echoqili/ssh-licco
- 代码已提交并推送
- 本地测试通过
- 版本号已更新(pyproject.toml + init.py)
- README 版本历史已更新
- 文档已同步更新
-
git tag -a vX.Y.Z -m "..."已创建 -
git push github vX.Y.Z已推送 - 确认 Actions 已触发
- auto-release ✅(Release 创建成功)
- pypi.yml ✅(PyPI 发布成功)
- mcp-registry.yml ✅(MCP Registry 更新成功)
- 全新安装测试通过
name: Auto Release on Tag
on:
push:
tags:
- 'v*' # v 开头 tag 的 push 触发
jobs:
create-release:
runs-on: ubuntu-latest
permissions:
contents: write # 必须有 write 权限才能创建 Release
steps:
- uses: actions/checkout@v4
- name: Create Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG_NAME=${GITHUB_REF#refs/tags/}
gh release create "$TAG_NAME" --title "$TAG_NAME" --generate-noteson:
release:
types: [published] # Release 创建后触发
workflow_dispatch: # 也支持手动触发on:
release:
types: [published]
workflow_dispatch:| 做法 | 说明 |
|---|---|
git push github vX.Y.Z |
只 push 指定 tag,不会意外推送历史 tag |
| 先 push master 再 push tag | 确保 tag 指向最新 commit |
| tag 前做本地冒烟测试 |
ssh-licco --version + list-hosts
|
| 版本号双更新 | pyproject.toml + init.py 同步改 |
| 做法 | 问题 |
|---|---|
git push github --tags |
会把所有历史 tag 全推上去,包括旧的/废弃的 |
| 只打 tag 不 push | tag 只在本地的,GitHub Actions 触发不了 |
| 手动去网页建 Release | 现在有 auto-release.yml,不需要了 |
requires-python = ">=3.10,<3.14" |
上限 <3.14 会阻止未来 Python 版本安装,用 >=3.10
|
# 危险 - 会把所有本地 tag 推上去
git push github --tags
# 安全 - 只推送指定的那一个
git push github v1.1.0如果你本地有旧的、没清理的 tag(如 test-tag、v0.1-dev),--tags 会全部推上去,可能触发意外的 Release。
| 版本 | 日期 | 主要变更 |
|---|---|---|
| v1.1.0 | 2026-06-01 | 🔥 精简重构:15 → 7 工具,自动连接,智能后台检测 |
| v1.0.0 | 2026-05-31 | 🎉 首个主要版本,CLI 增强,402 测试用例 |
祝你发布顺利! 🎉