You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
nonebot/nonebot2#795 nonebot/nonebot2#1498
始末
其实 NoneBot2(以下简称 nb)在 alpha 期间经常 Breaking(a8、a11),不过当时商店插件数量较少。
今年年初发布了相当 Breaking 的 beta2,其中 cqhttp 适配器改名 onebot.v11、State 依赖注入,以及修复了某个被当作特性使用的 Config bug,直接导致商店大批插件无法即装即用。于是我便提出了清理插件商店的想法,而 lan 佬在此之前也写了个批量测试商店插件的 Action 脚本,万事俱备。
清理插件的原则很简单,保证商店里的插件在
nb plugin install
之后nb run
不报错,依旧不对代码质量和功能是否可用作任何考量。这个原则主要是为了保障新用户的使用体验:假设你刚开始使用 NoneBot2 且对 Python 一知半解,按照官方文档从插件商店装了一个插件却运行报错,提 Issue 或在 qq 群提问却得到一个「等插件作者更新」的答复,心情别说有多糟糕。有人觉得没有必要强求依赖问题,因为一个人在安装 NoneBot2 插件的时候肯定已经安装了 NoneBot2。但如果插件没有声明 NoneBot2 依赖,以后 nb 更新了多少 Breaking 的功能,
pip install
都会照常安装这个不兼容的插件,而依赖管理就是为了防止出现这种情况。上次插件数量较少,我还有闲暇去给缺少依赖的插件挨个 PR。这回插件商店的数量翻了翻,目前一共 266 个,测试脚本都没法在 Action 的时间限制内跑完,光依赖有问题的插件就有 30 个以上,我就不去挨个 PR 了。
今后 NoneBot2 正式发版之后如果没有 Breaking,预定新增 100 左右个插件会清理一次,旧插件就不再测试了。
感谢各位插件开发者们能够忍受我们 alpha 期的频繁改动以及 beta、rc 两次 Breaking。
流程
Don’t repeat yourself
首先下载最新一次 Action 运行后生成的报告,写个脚本把 PyPI 测试没通过的插件用以下格式列出:
再来是按照顺序在 Action 日志里搜索没通过插件的报错,缺依赖的就记到后面(大概占一半),需要配置的先记个 Config 待重测,报错莫名其妙的也记下来。
把缺依赖的划到一类,接着挨个查看需要配置的插件仓库,README 里必填哪些就在 env 里填上再测试,由于有的插件还会做空字符串检测,每填一个插件就手动运行一次测试脚本。
剩下的就是疑难杂症,需要人工测试乃至实机测试,也是最耗时的一部分。以下摘取本次我遇到的几个问题:包名和 PyPI 不一致、没创建 data 文件夹却
open("data/xxx")
还算轻的,有个插件直接把在 root 目录下建文件夹写死,可能他的云服务器默认是 root 用户吧。其实疑难杂症大多是自己没有认真测试过,依赖问题我可以当作是测试时的环境自带所以没注意,这些但凡开个新文件夹都能测出来的问题我就无话可说了。
建议
如果你还在手填 setup.py,考虑用一下依赖管理软件(如 Poetry)。
打包后开个空的虚拟环境(不要提前安装 nonebot2 和 nb-cli !)测试安装插件后能不能运行以下脚本:
报错说缺什么依赖就补什么依赖,重复上述过程直到不报错为止。
如果你比较懒,可以直接发版到 PyPI,把测试脚本 clone 下来,然后
python . -p 你的插件
,最后同上。目前发布插件流程只检查有无在 PyPI 发包和项目主页能否 ping 通,再加上人工检查大部分时候都只是由 ddl 看一眼,很容易出现漏网之鱼。所以我希望各位发布插件时还是多少注意一些,减轻下我的工作量以及 ddl 的血压。
Config 问题目前视为特性睁一只眼闭一只眼,不过确实是很糟糕的代码质量问题。
其他关于代码质量的建议,有请我们的高血压 ddl 来说明。
Beta Was this translation helpful? Give feedback.
All reactions