插件如何独立构建以实现 CI/CD?

我看了 工作区开发 | Koishi 文档,插件只能从 koishi-app 目录下使用 yarn build [...name] 构建,自身是没有构建脚本的。

但是我想结合 Github Action,使用 google-github-actions/release-please-action@v3 和 npm-build-publish 组成 CI/CD,就不需要手动构建和手动更改版本号了。

但是我不知道如何独立构建插件,我尝试了 yarn add yakumo yakumo-esbuild yakumo-tsc -D 然后 yarn yakumo build 但是报错 unknown command: build :cry:

或者有其他的方法实现 CI/CD 吗?

1 个赞

方法还挺多的,普通人会用到的就至少有下面这两种:

方法一:使用 Yakumo

如果你的项目为 工作区 形式,那么使用 Yakumo 是最快捷的方法。

如果你的 repo 有这些特点,那么你的项目就是一个工作区:

  1. 顶层有 koishi.ymlyakumo.yml
  2. 顶层有 packages 文件夹

需要注意,如果你的顶层有 external 文件夹 但没有 packages 文件夹,那么的当前的项目是一个 机器人(整合包) 而不是一个插件。你的项目里已经有了完整的构建你的机器人的脚本,你无需进行任何操作。

在 CI 中,你只需要做这些事情:

  1. checkout(下载你的项目
  2. setup-node(安装 Node
  3. 运行 yarn && yarn build
  4. 对所有生成的插件运行 yarn pack,例如直接运行 yarn workspaces foreach -Ap pack
  5. 你的所有插件已经打包完成,收集这些包即可

方法二

如果你的项目不是工作区,那么你只需要运行 tsc -b 即可构建插件。在此之前,确保插件 devDep 了 typescript 和 koishi。可以用 yarn add -D typescript koishi 快速确保。

  1. checkout(下载你的项目
  2. setup-node(安装 Node
  3. 运行 yarn && yarn tsc -b && yarn pack
  4. 你的插件已经打包完成,收集即可

除此之外,其他方法不推荐普通人使用,但遇到有需要的情况下可以使用:

方法三

3 个赞

你可以参考一些具有自动构建和发版能力的组织内项目,例如 wordle 和 booru。

不过据我所知目前确实没有单一插件自动更新版本号的仓库(只是没有,并不是无法实现)。

如果你对此有建议或者疑问,可以在开发群中联系名为 Shigma 的管理员(也就是我)。

3 个赞

同样有这个需求
我晚点康康然后发个 action 好了

  1. 主分支(GitHub 现在默认是 main)有 push 时触发执行
  2. CI:自动编译(构建)dist
  3. CD:自动发布到 npm 仓库(需要在仓库的 secret 里填好自己的 NPM_TOKEN

达成效果:push 代码,半小时后,插件就已经自动更新到插件商店了

问题是我不知道该写个什么插件好
为了醋包饺子是吧

补充:楼主的设想是“只用 release 触发”,想法很好;这种做法很正确,很规范,但真没必要
代码是人写的,代码管理是人做的,你要考虑到管理的心智成本
release 发版,除非另写脚本搞自动化,手动发版也够麻烦的
大项目还差不多,没多少人用的小众项目(koishi 插件)实在没必要搞这么严谨
敏捷开发(快速迭代),发版由 push 触发就够了
你觉得不安全可以新建 dev 分支在上面开发,把 main 分支保护起来不允许直接 push(只能从 dev 分支 merge)

再补充:话说只发 ESM 可以吗,还是必须 CJS / ESM 都要

明白了

3 个赞
  1. 因为我已经用习惯了这个模式

  2. 如果仅有 push 就触发构建,那么很小的改动比如文档更新、代码格式化都会编译并构建且发布,虽然似乎也没什么问题。

    如果使用 dev 分支再 merge 的话跟使用 google-github-actions/release-please-action@v3 差不多,都需要一定程度的手动管理。

    release-please 还多了自动生成 Changlog 的功能,最重要的是只需要注意一下 git commit message 就可以获得全部功能,心智负担很小。

    我对比过几种不同的 CI/CD 方案,觉得这样是比较合理且舒服的。(谁用谁知道,用一次我就再也不想手动构建发布了 :sunglasses:

3 个赞

我还没看,不过昨晚我睡觉时想到可以每次要构建时都 yarn create koishi 然后 yarn setup [name] 然后 clone 仓库替换插件文件夹然后 yarn build [...name] 然后发布。

之后有空再研究下你提到的那两个仓库。

你不是叫 梦梦 吗? :face_with_monocle:
Shigma 没有 梦梦 可爱 :smiling_face_with_three_hearts:

2 个赞

建议写 天王盖地虎 插件,Koishi 界的 Hello World,插件名直接叫 ”Hello Koishi“ 吧

:yum:

2 个赞

已解决。

使用 yakumo build 需要满足三个条件:

  1. src 文件夹要位于 /packages/core 之下

  2. devDependencies 需要同时具有 yakumo yakumo-tsc yml-register

  3. 项目根目录需具有 yakumo.yml,其内容为

    pipeline:
      build:
        - tsc
    
    

参考项目: LinLin00000000/learnertracker (github.com)

2 个赞