5.1 KiB
5.1 KiB
插件发布工作流
本文档描述了发布插件更新的工作流程。
概述
发布工作流包含以下组件:
- CHANGELOG.md - 记录所有重要更改
- 版本提取脚本 - 自动提取插件版本信息
- GitHub Actions 工作流 - 自动化发布流程
自动发布流程 ⭐
当插件更新的 PR 合并到 main 分支时,会自动触发发布流程:
PR 合并要求
修改插件文件的 PR 必须满足以下条件才能合并:
- ✅ 版本号必须更新 - 插件的
version字段必须有变化 - ✅ PR 描述必须包含更新说明 - 至少 20 个字符的描述
如果不满足这些条件,PR 检查会失败,无法合并。
自动发布内容
合并成功后,系统会自动:
- 🔍 检测版本变化(与上次 release 对比)
- 📝 生成发布说明(包含更新内容和提交记录)
- 📦 创建 GitHub Release(包含可下载的插件文件)
- 🏷️ 自动生成版本号(格式:
vYYYY.MM.DD-运行号)
Release 包含内容
- plugins_release.zip - 本次更新的所有插件文件打包
- plugin_versions.json - 所有插件版本信息 (JSON 格式)
- 发布说明 - 包含:
- 新增/更新的插件列表
- 相关提交记录
- 所有插件版本表
- 安装说明
发布流程
第 1 步:更新插件版本
当您对插件进行更改时,必须更新插件文档字符串中的版本号:
"""
title: 我的插件
author: Fu-Jie
version: 0.2.0 # <- 必须更新这里!
...
"""
第 2 步:创建 PR 并添加更新说明
在 PR 描述中说明更新内容(至少 20 个字符):
## 更新内容
- 新增 XXX 功能
- 修复 YYY 问题
- 优化 ZZZ 性能
第 3 步:合并 PR
满足检查条件后,合并 PR 到 main 分支,系统会自动创建 Release。
手动发布(可选)
除了自动发布,您也可以手动触发发布:
方式 A:手动触发
- 前往 GitHub Actions → "Plugin Release / 插件发布"
- 点击 "Run workflow"
- 填写详细信息:
- version: 例如
v1.0.0(留空则自动生成) - release_title: 例如 "智能思维导图重大更新"
- release_notes: Markdown 格式的附加说明
- prerelease: 如果是预发布版本则勾选
- version: 例如
方式 B:基于标签的发布
# 创建并推送版本标签
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0
版本编号
我们遵循语义化版本:
- 主版本 (MAJOR): 不兼容的 API 变更
- 次版本 (MINOR): 向后兼容的新功能
- 补丁版本 (PATCH): 向后兼容的 Bug 修复
示例
| 变更类型 | 版本变化 |
|---|---|
| Bug 修复 | 0.1.0 → 0.1.1 |
| 新功能 | 0.1.1 → 0.2.0 |
| 不兼容变更 | 0.2.0 → 1.0.0 |
GitHub Actions 工作流
release.yml
触发条件:
- ⭐ 推送到
main分支且修改了plugins/**/*.py(自动发布) - 手动触发 (workflow_dispatch)
- 推送版本标签 (
v*)
动作:
- 检测与上次 Release 的版本变化
- 收集更新的插件文件
- 生成发布说明(含提交记录)
- 创建 GitHub Release(含可下载附件)
plugin-version-check.yml
触发条件:
- 修改
plugins/**/*.py的 Pull Request
动作:
- 比较基础分支和 PR 的插件版本
- 检查是否有版本更新
- 检查 PR 描述是否足够详细
- ❌ 如果没有版本更新,检查失败
- ⚠️ 如果 PR 描述过短,检查失败
脚本使用
extract_plugin_versions.py
# 输出到控制台
python scripts/extract_plugin_versions.py
# 输出为 JSON
python scripts/extract_plugin_versions.py --json
# 输出为 Markdown 表格
python scripts/extract_plugin_versions.py --markdown
# 与之前版本比较
python scripts/extract_plugin_versions.py --compare old_versions.json
# 保存到文件
python scripts/extract_plugin_versions.py --json --output versions.json
最佳实践
- 始终更新版本号 - 对插件进行功能性更改时(必需)
- 编写清晰的 PR 描述 - 描述更改内容和原因(必需)
- 本地测试 - 在创建 PR 之前
- 使用预发布 - 测试新功能
- 引用 issue - 在 PR 描述中
批量安装所有插件到你的实例
在发布之后,你可以快速将所有插件安装到 OpenWebUI 实例:
# 克隆仓库
git clone https://github.com/Fu-Jie/openwebui-extensions.git
cd openwebui-extensions
# 配置 API 密钥和实例地址
echo "api_key=sk-your-api-key-here" > scripts/.env
echo "url=http://localhost:3000" >> scripts/.env
# 如果是远程实例,需要设置相应的 baseURL:
# echo "url=http://192.168.1.10:3000" >> scripts/.env
# echo "url=https://openwebui.example.com" >> scripts/.env
# 一次性安装所有插件
python scripts/install_all_plugins.py
详细说明请参考 部署指南。
作者
Fu-Jie
GitHub: Fu-Jie/openwebui-extensions