watchingfun / Joi

一个英雄联盟助手工具
GNU General Public License v3.0
334 stars 26 forks source link

ci: 更好的缓存支持 #18

Closed AnnAngela closed 9 months ago

AnnAngela commented 9 months ago

改了以下几点来更好地使用缓存:

  1. 将缓存文件夹移动到 node_modules/.cache 里,这是个社区广泛使用的缓存目录 (ref: webpack, turborepo, AVA)
  2. 使用 AnnAngela/cached_node-modules 统一管理缓存,它会自动识别当前环境的 OS 类型(如 Window)、package-lock.json 的最新 commit 短 ID,然后决定是否重新生成缓存;
    • get-patches-commit-short 是用来获取 patches 文件夹的最新 commit 短 ID,避免更改了该文件夹后缓存不失效的问题。
watchingfun commented 9 months ago

好像不太对,发生新的提交后缓存不生效了

AnnAngela commented 9 months ago

@watchingfun 具体是什么表现

watchingfun commented 9 months ago

@AnnAngela 我新修改文件提交后,npm ci任务还是那么久

AnnAngela commented 9 months ago

@watchingfun 没有啊,1 这里花了4分多钟,2 这里只花了30秒

watchingfun commented 9 months ago

@AnnAngela 我改改再试试,还有这个是否可以通过输出是否缓存命中的变量,我想如果命中缓存,那么Build the native modules这个任务也不用每次都执行

AnnAngela commented 9 months ago

@watchingfun 这个会在AnnAngela/cached_node-modules下个版本支持

watchingfun commented 9 months ago

@AnnAngela 清空所有缓存,第一次运行8m, 未作任何修改,第二次运行5m, 修改readme.md, 提交, 第三次运行7m 31s, 这是我的测试结果

AnnAngela commented 9 months ago

看起来是这里出了问题,改了别的地方的文件导致获取到的commit变了,我再看看如何获取patches文件夹的最新commit https://github.com/watchingfun/Joi/actions/runs/7486446279/job/20376832881#step:6:9 vs https://github.com/watchingfun/Joi/actions/runs/7486377618/job/20376616662#step:6:9

watchingfun commented 9 months ago

嗯,实在获取不到patches的变更的话,就只能去掉这个commit id,然后手动清理缓存了

AnnAngela commented 9 months ago

@watchingfun 试试git log --pretty=tformat:"%h" -n1 patches/

watchingfun commented 9 months ago

@AnnAngela 我本地试了,新提交后执行该命令得到的id不变,但是在github action上运行就不对,不知道为啥

AnnAngela commented 9 months ago

@watchingfun 我看了下,可以用gha的 hashFiles('patches/**')此函数为每个匹配的文件计算单独的 SHA-256 哈希, 然后使用这些哈希来计算文件集的最终 SHA-256 哈希),就不需要我们手动计算commit了,直接用这个就行:

        with:
          customVariable: :patches@{{ hashFiles('patches/**') }}