如何实现非官方插件的CI工作流?

我邀请您分享关于可能的 CI 工作流的想法,这些工作流将在社区提供的非官方插件上运行测试。

一些社区严重依赖插件,但没有建立维护:

由于测试插件依赖于 Discourse 安装作为测试平台,我想知道社区支持的 CI 工作流可能是什么样的。

一些插件包含规范,例如 @angus 实现的 activitypub,据我所知,这使得 CI 可以进行测试。

目前,我正在考虑两种改进非官方插件测试的方法,具体取决于插件源代码中包含的规范/测试:

a) 构建一些机制,帮助站点维护者在暂存环境中运行测试
b) 提供一项服务,该服务可以分叉预定义的测试映像,以报告在插件的最后发布代码上运行的测试。

您怎么看?

我是否错过了任何已建立的工作流?

这可能很有用:

3 个赞

除了大多数 Pavilion 插件都具备的后端和前端测试 CI 外,我们还有一个插件管理器系统,CI 是其中的一部分。它的工作原理如下:

3 个赞

是的,补充一下 @angus 分享的内容,您可以在此处找到我们的每日兼容性仪表板:

https://coop.pavilion.tech/plugins?branch=tests-passed

该仪表板显示了 Pavilion 插件(有时也包括其他插件)针对 tests-passedstable 的检查状态。它每天自动更新。

这当然依赖于测试,包括冒烟测试、specs(后端)和 qunit(前端)测试。

我们的订阅插件(Custom Wizard)拥有最多的测试覆盖率,正如您所料,但我们的一些免费插件也包含一套不错的后端和前端测试(例如 Locations)。

编写测试是一种良好的实践,随着我们公司业务的成熟,Pavilion 在这方面的纪律性也越来越强。

最关键的是,测试还能记录您预期的功能,这在兼容性更新或重构期间尤为重要。

2 个赞

令人印象深刻。您能否指出实现此功能的代码?

1 个赞

这是根据 @angus 的图表设计的架构,涉及多个仓库,但这是状态服务器:

这也是一种方法:

  • 永远不要在没有检查测试的情况下实施修复,如果不存在合适的测试,请添加一个。
  • 最好先开发测试,证明它失败,然后修复问题并确认你的新测试通过。

这样你的覆盖率就会随着时间的推移而建立起来……

此外:

  • 追溯添加测试可能存在风险,因为你可能会误解代码的意图……不过总比什么都不做好……
1 个赞

所有官方插件都有可供参考的规范。discourse-plugin-Skelton 插件包含 github Actions,可在每次提交时运行测试,而且我认为是每天运行一次。

2 个赞

我理解正确吗?

a) 这可以通过 GitHub Actions 获得:具有适当规范/使用 GitHub Actions 进行测试的插件将在 GitHub 上显示徽章,如果所有测试都通过,并且 CI 操作的状态可由 API 读取。

b) 除了 discourse 官方插件和 pavilion 插件之外,管理员无法自动了解所使用的插件是否将与计划更新的版本兼容?

在搜索关于插件兼容性的元数据时,我通过 .discourse-compatibility 文件找到了 https://meta.discourse.org/t/pinning-plugin-and-theme-versions-for-older-discourse-installs/156971。

据我理解,这是解决反向问题的一种方法:discourse 太旧,无法支持插件。
如何处理另一种情况:插件太旧,无法支持 discourse?

/admin/upgrade 是否可以警告有关插件的信息,这些插件在计划的升级中测试失败?

我们最初的目标是提供一个非品牌化的插件仪表板版本,第三方作者可以在其中提交他们的插件以供包含。但这并没有获得任何关注,部分原因是第三方插件开发者的数量非常少。

第三方的 Discourse 插件开发相当小众,而提供具有良好测试覆盖率的插件的第三方更是非常小众! :sweat_smile:

这个领域中的许多自由职业者要么加入了 Pavilion,要么加入了 CDCK(或者,随着时间的推移,两者都加入了!)。

所以最后我们决定将我们的仪表板合并到我们品牌化的社区网站中。

2 个赞