Spotube 插件测试、分发与上架 GitHub / Codeberg
测试策略
Spotube 插件的测试分两层:Spotube 端真实环境测试 + Kotlin 单元测试。
Spotube 端测试(必做)
插件是为 Spotube 写的,最终运行环境就是 Spotube 的 Zipline runtime。单元测试覆盖不到:
- 插件和 Spotube 宿主 Bridge 的交互
- 真实的 Track / Playlist 数据模型
- Spotube UI 对 SearchResult 的期望格式
- Bridge 能力的实际限制(比如 HttpClient 的请求速率、FileStorage 的可用空间)
怎么测:构建 .smplug → 手动拷贝到插件目录 → 启动 Spotube → 搜索/播放/歌词/scrobble 一条龙测。这是插件开发的主要测试手段。
Kotlin 单元测试(推荐)
纯逻辑部分(比如搜索结果排序、Track 转换、API 返回值解析)可以用 JVM 单元测试:
// src/jvmTest/kotlin/myplugin/SearchTest.kt
class SearchTest {
@Test
fun `search should filter out remixes`() {
// 测试插件内部的搜索过滤逻辑
}
}
Zipline 官方提供了一个 test runtime 可以在 JVM 里模拟宿主 Bridge,测试插件注册和接口实现。适合复杂的多接口插件。
常见测试场景
| 场景 | 测试什么 |
|---|---|
| 搜索空结果 | 插件返回空列表时 Spotube 会不会崩溃或卡 UI |
| 网络不可用 | 插件 HTTP 请求失败时优雅降级(返回空 + 错误提示) |
| 大量结果 | 搜索 "a" 返回 1000 条 → Spotube 列表渲染性能 |
| 并发搜索 | 多个 MetadataSearchAPI 插件同时搜 → 会不会相互干扰 |
| 长时间运行 | Spotube 开一天 → 插件 Bridge 连接有没有泄漏 |
分发方式
GitHub Release(推荐)
Spotube 从 GitHub Release 自动索引插件。你的仓库需要:
README.md里写清楚插件做什么、支持哪些接口、数据来源是什么(比如 "本插件从 X 服务拉元数据")- Release 附件里上传
.smplug文件(命名建议<plugin-id>-<version>.smplug) - Release body 里写 changelog
- 仓库打 tag 版本(对应 plugin.json 里的 version)
Spotube 会自动扫描 GitHub Release,把 .smplug 文件列在"可用插件"里,用户可以直接一键下载。
Codeberg Release
Codeberg 是 GitHub 的开源替代(德国)。Spotube 同样会索引 Codeberg Release。对不想被 GitHub 锁定的插件作者来说是好选择。
手动分发(Discord / 论坛)
还没准备好上 GitHub Release 的测试版,可以直接在 Spotube Discord 的 #plugin-dev 频道分享 .smplug 文件。用户下载后用"本地上传"按钮安装。
版本兼容声明
Spotube 主版本和 plugin_interfaces 版本号对应:
| plugin_interfaces 版本 | 兼容的 Spotube 版本 |
|---|---|
| 5.0.x | v5.0.x |
| 5.1.x | v5.1.x |
⚠️ Spotube 可能在 minor 版本里添加新接口或调整现有接口——v5.1 新增了 AudioAPI 的 FLAC 支持、abilities 徽章。插件作者需要:
- 在 Release 里写明"需要 Spotube ≥ X.Y.Z"
- 用 Spotube 最新 stable + nightly 都测一遍
- 接口废弃(deprecated)不要立即删除,给用户几个版本的缓冲
被 Spotube 官方收录
Spotube Team 会主动发现优秀的社区插件,在 Discord 和官方博客上推荐。要让你的插件被注意到:
- 实现完整——至少一个接口做扎实(不要只做一个 stub 返回空)
- 有 README 和截图——展示插件效果
- 通过安全审计——Spotube Team 会看源码确认没有可疑 HTTP 请求
- 在 Discord 发帖——#plugin-dev 频道说一下,维护者会看
被收录后,你的插件会被标记 Community 标签(官方插件是 Official,但 Community 插件同样可信)。
版本发布节奏
建议:
- patch 版本(x.x.1):Bug 修复、小优化
- minor 版本(x.1.0):新接口实现、重要功能新增
- major 版本(x.0.0):破坏性变更(接口签名变了、数据源换了)
Spotube 不强制自动更新插件——用户需要手动到插件页点 "Update"(如果 Spotube 检测到新版本)。
安全提醒(给插件作者)
你也有责任:
- 不要在插件里偷偷做用户没授权的事(比如上传用户的播放历史到你自己的服务器)
- HTTP 请求全部在 Bridge HttpClient 里发起,留好代码可审计
- 在 README 里清晰写出插件网络行为("会访问 X 服务的 API"、"会连接 Y 域名")
- 不要收集用户的 Spotify / Last.fm token 做二次转发